aboutsummaryrefslogtreecommitdiff
path: root/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'documentation')
-rw-r--r--documentation/content/de/books/developers-handbook/x86/_index.adoc2
-rw-r--r--documentation/content/en/articles/pgpkeys/_index.adoc9
-rw-r--r--documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/en/books/handbook/audit/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/en/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/cutting-edge/_index.adoc24
-rw-r--r--documentation/content/en/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/en/books/handbook/dtrace/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/eresources/_index.adoc6
-rw-r--r--documentation/content/en/books/handbook/filesystems/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/firewalls/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/geom/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/jails/_index.adoc106
-rw-r--r--documentation/content/en/books/handbook/kernelconfig/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/l10n/_index.adoc5
-rw-r--r--documentation/content/en/books/handbook/linuxemu/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/mac/_index.adoc4
-rw-r--r--documentation/content/en/books/handbook/ports/_index.adoc6
-rw-r--r--documentation/content/en/books/handbook/wayland/_index.adoc10
-rw-r--r--documentation/content/en/books/handbook/x11/_index.adoc18
-rw-r--r--documentation/content/en/books/porters-handbook/makefiles/_index.adoc12
-rw-r--r--documentation/content/en/books/porters-handbook/upgrading/_index.adoc18
-rw-r--r--documentation/content/en/books/porters-handbook/uses/_index.adoc4
-rw-r--r--documentation/content/ru/articles/bsdl-gpl/_index.adoc205
-rw-r--r--documentation/content/ru/articles/bsdl-gpl/_index.po1163
-rw-r--r--documentation/content/ru/articles/building-products/_index.adoc333
-rw-r--r--documentation/content/ru/articles/building-products/_index.po1595
-rw-r--r--documentation/content/ru/articles/committers-guide/_index.adoc3488
-rw-r--r--documentation/content/ru/articles/committers-guide/_index.po12213
-rw-r--r--documentation/content/ru/articles/contributing/_index.adoc461
-rw-r--r--documentation/content/ru/articles/contributing/_index.po2259
-rw-r--r--documentation/content/ru/articles/contributors/_index.adoc283
-rw-r--r--documentation/content/ru/articles/contributors/_index.po655
-rw-r--r--documentation/content/ru/articles/contributors/contrib-develinmemoriam.adoc181
-rw-r--r--documentation/content/ru/articles/contributors/contrib-develinmemoriam.po515
-rw-r--r--documentation/content/ru/articles/cups/_index.adoc23
-rw-r--r--documentation/content/ru/articles/cups/_index.po695
-rw-r--r--documentation/content/ru/articles/explaining-bsd/_index.adoc37
-rw-r--r--documentation/content/ru/articles/explaining-bsd/_index.po970
-rw-r--r--documentation/content/ru/articles/filtering-bridges/_index.adoc235
-rw-r--r--documentation/content/ru/articles/filtering-bridges/_index.po824
-rw-r--r--documentation/content/ru/articles/fonts/_index.adoc103
-rw-r--r--documentation/content/ru/articles/fonts/_index.po1592
-rw-r--r--documentation/content/ru/articles/freebsd-questions/_index.adoc102
-rw-r--r--documentation/content/ru/articles/freebsd-questions/_index.po940
-rw-r--r--documentation/content/ru/articles/freebsd-releng/_index.adoc952
-rw-r--r--documentation/content/ru/articles/freebsd-releng/_index.po2163
-rw-r--r--documentation/content/ru/articles/freebsd-src-lsp/_index.adoc268
-rw-r--r--documentation/content/ru/articles/freebsd-src-lsp/_index.po677
-rw-r--r--documentation/content/ru/articles/freebsd-status-report-process/_index.adoc368
-rw-r--r--documentation/content/ru/articles/freebsd-status-report-process/_index.po1023
-rw-r--r--documentation/content/ru/articles/freebsd-update-server/_index.adoc610
-rw-r--r--documentation/content/ru/articles/freebsd-update-server/_index.po1482
-rw-r--r--documentation/content/ru/articles/geom-class/_index.adoc43
-rw-r--r--documentation/content/ru/articles/geom-class/_index.po1388
-rw-r--r--documentation/content/ru/articles/gjournal-desktop/_index.adoc88
-rw-r--r--documentation/content/ru/articles/gjournal-desktop/_index.po1345
-rw-r--r--documentation/content/ru/articles/hubs/_index.adoc111
-rw-r--r--documentation/content/ru/articles/hubs/_index.po1212
-rw-r--r--documentation/content/ru/articles/ipsec-must/_index.adoc33
-rw-r--r--documentation/content/ru/articles/ipsec-must/_index.po757
-rw-r--r--documentation/content/ru/articles/ldap-auth/_index.adoc703
-rw-r--r--documentation/content/ru/articles/ldap-auth/_index.po1887
-rw-r--r--documentation/content/ru/articles/leap-seconds/_index.adoc131
-rw-r--r--documentation/content/ru/articles/leap-seconds/_index.po256
-rw-r--r--documentation/content/ru/articles/license-guide/_index.adoc480
-rw-r--r--documentation/content/ru/articles/license-guide/_index.po1068
-rw-r--r--documentation/content/ru/articles/linux-users/_index.adoc446
-rw-r--r--documentation/content/ru/articles/linux-users/_index.po989
-rw-r--r--documentation/content/ru/articles/mailing-list-faq/_index.adoc68
-rw-r--r--documentation/content/ru/articles/mailing-list-faq/_index.po750
-rw-r--r--documentation/content/ru/articles/nanobsd/_index.adoc424
-rw-r--r--documentation/content/ru/articles/nanobsd/_index.po1550
-rw-r--r--documentation/content/ru/articles/new-users/_index.adoc56
-rw-r--r--documentation/content/ru/articles/new-users/_index.po1440
-rw-r--r--documentation/content/ru/articles/pam/_index.adoc167
-rw-r--r--documentation/content/ru/articles/pam/_index.po2155
-rw-r--r--documentation/content/ru/articles/pgpkeys/_index.adoc1548
-rw-r--r--documentation/content/ru/articles/pgpkeys/_index.po3003
-rw-r--r--documentation/content/ru/articles/port-mentor-guidelines/_index.adoc118
-rw-r--r--documentation/content/ru/articles/port-mentor-guidelines/_index.po408
-rw-r--r--documentation/content/ru/articles/pr-guidelines/_index.adoc372
-rw-r--r--documentation/content/ru/articles/pr-guidelines/_index.po1595
-rw-r--r--documentation/content/ru/articles/problem-reports/_index.adoc248
-rw-r--r--documentation/content/ru/articles/problem-reports/_index.po1433
-rw-r--r--documentation/content/ru/articles/releng/_index.adoc357
-rw-r--r--documentation/content/ru/articles/releng/_index.po1596
-rw-r--r--documentation/content/ru/articles/remote-install/_index.adoc347
-rw-r--r--documentation/content/ru/articles/remote-install/_index.po1007
-rw-r--r--documentation/content/ru/articles/serial-uart/_index.adoc1034
-rw-r--r--documentation/content/ru/articles/serial-uart/_index.po3864
-rw-r--r--documentation/content/ru/articles/solid-state/_index.adoc91
-rw-r--r--documentation/content/ru/articles/solid-state/_index.po895
-rw-r--r--documentation/content/ru/articles/vpn-ipsec/_index.adoc308
-rw-r--r--documentation/content/ru/articles/vpn-ipsec/_index.po838
-rw-r--r--documentation/content/ru/books/design-44bsd/_index.adoc235
-rw-r--r--documentation/content/ru/books/design-44bsd/_index.po3677
-rw-r--r--documentation/content/ru/books/dev-model/_index.adoc903
-rw-r--r--documentation/content/ru/books/dev-model/_index.po3865
-rw-r--r--documentation/content/ru/books/faq/_index.adoc2993
-rw-r--r--documentation/content/ru/books/faq/_index.po1811
-rw-r--r--documentation/content/ru/books/fdp-primer/_index.adoc59
-rw-r--r--documentation/content/ru/books/fdp-primer/_index.po68
-rw-r--r--documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.adoc338
-rw-r--r--documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.po795
-rw-r--r--documentation/content/ru/books/fdp-primer/book.adoc102
-rw-r--r--documentation/content/ru/books/fdp-primer/book.po68
-rw-r--r--documentation/content/ru/books/fdp-primer/doc-build/_index.adoc662
-rw-r--r--documentation/content/ru/books/fdp-primer/doc-build/_index.po1562
-rw-r--r--documentation/content/ru/books/fdp-primer/editor-config/_index.adoc323
-rw-r--r--documentation/content/ru/books/fdp-primer/editor-config/_index.po697
-rw-r--r--documentation/content/ru/books/fdp-primer/examples/_index.adoc139
-rw-r--r--documentation/content/ru/books/fdp-primer/examples/_index.po261
-rw-r--r--documentation/content/ru/books/fdp-primer/manual-pages/_index.adoc531
-rw-r--r--documentation/content/ru/books/fdp-primer/manual-pages/_index.po1454
-rw-r--r--documentation/content/ru/books/fdp-primer/overview/_index.adoc321
-rw-r--r--documentation/content/ru/books/fdp-primer/overview/_index.po721
-rw-r--r--documentation/content/ru/books/fdp-primer/po-translations/_index.adoc365
-rw-r--r--documentation/content/ru/books/fdp-primer/po-translations/_index.po1041
-rw-r--r--documentation/content/ru/books/fdp-primer/preface/_index.adoc155
-rw-r--r--documentation/content/ru/books/fdp-primer/preface/_index.po319
-rw-r--r--documentation/content/ru/books/fdp-primer/rosetta/_index.adoc321
-rw-r--r--documentation/content/ru/books/fdp-primer/rosetta/_index.po793
-rw-r--r--documentation/content/ru/books/fdp-primer/see-also/_index.adoc77
-rw-r--r--documentation/content/ru/books/fdp-primer/see-also/_index.po127
-rw-r--r--documentation/content/ru/books/fdp-primer/structure/_index.adoc386
-rw-r--r--documentation/content/ru/books/fdp-primer/structure/_index.po1340
-rw-r--r--documentation/content/ru/books/fdp-primer/tools/_index.adoc70
-rw-r--r--documentation/content/ru/books/fdp-primer/tools/_index.po113
-rw-r--r--documentation/content/ru/books/fdp-primer/trademarks/_index.adoc95
-rw-r--r--documentation/content/ru/books/fdp-primer/trademarks/_index.po197
-rw-r--r--documentation/content/ru/books/fdp-primer/translations/_index.adoc227
-rw-r--r--documentation/content/ru/books/fdp-primer/translations/_index.po683
-rw-r--r--documentation/content/ru/books/fdp-primer/weblate/_index.adoc456
-rw-r--r--documentation/content/ru/books/fdp-primer/weblate/_index.po1259
-rw-r--r--documentation/content/ru/books/fdp-primer/working-copy/_index.adoc140
-rw-r--r--documentation/content/ru/books/fdp-primer/working-copy/_index.po336
-rw-r--r--documentation/content/ru/books/fdp-primer/writing-style/_index.adoc326
-rw-r--r--documentation/content/ru/books/fdp-primer/writing-style/_index.po1035
-rw-r--r--documentation/content/ru/books/porters-handbook/_index.adoc20
-rw-r--r--documentation/content/ru/books/porters-handbook/_index.po37
-rw-r--r--documentation/content/ru/books/porters-handbook/book.adoc17
-rw-r--r--documentation/content/ru/books/porters-handbook/book.po37
-rw-r--r--documentation/content/ru/books/porters-handbook/flavors/_index.adoc359
-rw-r--r--documentation/content/ru/books/porters-handbook/flavors/_index.po801
-rw-r--r--documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc39
-rw-r--r--documentation/content/ru/books/porters-handbook/keeping-up/_index.po270
-rw-r--r--documentation/content/ru/books/porters-handbook/makefiles/_index.adoc4265
-rw-r--r--documentation/content/ru/books/porters-handbook/makefiles/_index.po14066
-rw-r--r--documentation/content/ru/books/porters-handbook/new-port/_index.adoc14
-rw-r--r--documentation/content/ru/books/porters-handbook/new-port/_index.po101
-rw-r--r--documentation/content/ru/books/porters-handbook/order/_index.adoc260
-rw-r--r--documentation/content/ru/books/porters-handbook/order/_index.po780
-rw-r--r--documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc228
-rw-r--r--documentation/content/ru/books/porters-handbook/pkg-files/_index.po873
-rw-r--r--documentation/content/ru/books/porters-handbook/plist/_index.adoc548
-rw-r--r--documentation/content/ru/books/porters-handbook/plist/_index.po1731
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc214
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-dads/_index.po1473
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc138
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-samplem/_index.po412
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-why/_index.adoc10
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-why/_index.po61
-rw-r--r--documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc166
-rw-r--r--documentation/content/ru/books/porters-handbook/quick-porting/_index.po767
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.adoc158
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.po858
-rw-r--r--documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc173
-rw-r--r--documentation/content/ru/books/porters-handbook/slow-porting/_index.po1017
-rw-r--r--documentation/content/ru/books/porters-handbook/special/_index.adoc4192
-rw-r--r--documentation/content/ru/books/porters-handbook/special/_index.po14978
-rw-r--r--documentation/content/ru/books/porters-handbook/testing/_index.adoc460
-rw-r--r--documentation/content/ru/books/porters-handbook/testing/_index.po1685
-rw-r--r--documentation/content/ru/books/porters-handbook/upgrading/_index.adoc181
-rw-r--r--documentation/content/ru/books/porters-handbook/upgrading/_index.po688
-rw-r--r--documentation/content/ru/books/porters-handbook/uses/_index.adoc2185
-rw-r--r--documentation/content/ru/books/porters-handbook/uses/_index.po9971
-rw-r--r--documentation/content/ru/books/porters-handbook/versions/_index.adoc6184
-rw-r--r--documentation/content/ru/books/porters-handbook/versions/_index.po33861
-rw-r--r--documentation/static/pgpkeys/adamw.key87
-rw-r--r--documentation/static/pgpkeys/andy.key54
-rw-r--r--documentation/static/pgpkeys/imp.key154
-rw-r--r--documentation/static/pgpkeys/jaeyoon.key44
-rw-r--r--documentation/static/pgpkeys/tiga.key94
-rw-r--r--documentation/static/pgpkeys/vladlen.key62
187 files changed, 198849 insertions, 10660 deletions
diff --git a/documentation/content/de/books/developers-handbook/x86/_index.adoc b/documentation/content/de/books/developers-handbook/x86/_index.adoc
index 34d4cd494a..f84a8c7881 100644
--- a/documentation/content/de/books/developers-handbook/x86/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/x86/_index.adoc
@@ -2406,7 +2406,7 @@ Dies könnte passieren:
. Der Bildeditor wird unseren Filter laden mittels der C-Funktion `popen()`.
. Er wird die erste Zeile von Pixeln laden aus einer Bitmap oder Pixmap.
. Er wird die erste Zeile von Pixeln geschrieben in die _Pipe_, welche zur Variable `fd.in` unseres Filters führt.
-. Unser Filter wird jeden Pixel auslesen von der Eingabe, in in seinen negativen Wert umkehren und ihn in den Ausgabepuffer schreiben.
+. Unser Filter wird jeden Pixel von der Eingabe auslesen, diesen in seinen negativen Wert umkehren und ihn in den Ausgabepuffer schreiben.
. Unser Filter wird die Funktion `getchar` aufrufen, um das nächste Pixel abzurufen.
. Die Funktion `getchar` wird einen leeren Eingabepuffer vorfinden und daher die Funktion `read` aufrufen.
. `read` wird den Systemaufruf `SYS_read` starten.
diff --git a/documentation/content/en/articles/pgpkeys/_index.adoc b/documentation/content/en/articles/pgpkeys/_index.adoc
index c082f7feba..8fd6cd8eff 100644
--- a/documentation/content/en/articles/pgpkeys/_index.adoc
+++ b/documentation/content/en/articles/pgpkeys/_index.adoc
@@ -474,6 +474,9 @@ include::{include-path}kgalazka.key[]
=== `{avg}`
include::{include-path}avg.key[]
+=== `{tiga}`
+include::{include-path}tiga.key[]
+
=== `{beat}`
include::{include-path}beat.key[]
@@ -1080,6 +1083,9 @@ include::{include-path}jdp.key[]
=== `{krion}`
include::{include-path}krion.key[]
+=== `{vladlen}`
+include::{include-path}vladlen.key[]
+
=== `{sepotvin}`
include::{include-path}sepotvin.key[]
@@ -1464,6 +1470,9 @@ include::{include-path}emax.key[]
=== `{oshogbo}`
include::{include-path}oshogbo.key[]
+=== `{andy}`
+include::{include-path}andy.key[]
+
=== `{riggs}`
include::{include-path}riggs.key[]
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 ac4afa350c..cdd9147acb 100644
--- a/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc
@@ -309,13 +309,9 @@ We are going to use as an example the header of the extref:{freebsd-releng}[Free
:images-path: articles/freebsd-releng/ <1>
-ifdef::env-beastie[]
-ifdef::backend-html5[]
-
[...]
:imagesdir: ../../../images/{images-path} <2>
-endif::[]
[...]
diff --git a/documentation/content/en/books/handbook/advanced-networking/_index.adoc b/documentation/content/en/books/handbook/advanced-networking/_index.adoc
index b82226bb9f..42125e86d7 100644
--- a/documentation/content/en/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/en/books/handbook/advanced-networking/_index.adoc
@@ -877,7 +877,7 @@ The Bluetooth stack in FreeBSD is implemented using the man:netgraph[4] framewor
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].
+Serial and UART based Bluetooth devices are supported by man:ng_h4[4] and man:hcseriald[8].
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:
diff --git a/documentation/content/en/books/handbook/audit/_index.adoc b/documentation/content/en/books/handbook/audit/_index.adoc
index 0c25670f22..e76b9b6b36 100644
--- a/documentation/content/en/books/handbook/audit/_index.adoc
+++ b/documentation/content/en/books/handbook/audit/_index.adoc
@@ -60,13 +60,13 @@ FreeBSD implements Sun(TM)'s published Basic Security Module (BSM) Application P
This chapter focuses on the installation and configuration of event auditing.
It explains audit policies and provides an example audit configuration.
-After reading this chapter, you will know:
+Read this chapter to learn:
* What event auditing is and how it works.
* How to configure event auditing on FreeBSD for users and processes.
* How to review the audit trail using the audit reduction and review tools.
-Before reading this chapter, you should:
+Before reading this chapter:
* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
* Be familiar with the basics of kernel configuration/compilation (crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]).
diff --git a/documentation/content/en/books/handbook/boot/_index.adoc b/documentation/content/en/books/handbook/boot/_index.adoc
index 92a300d167..b8fe0c7e7c 100644
--- a/documentation/content/en/books/handbook/boot/_index.adoc
+++ b/documentation/content/en/books/handbook/boot/_index.adoc
@@ -59,7 +59,7 @@ 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.
-After reading this chapter, you will recognize:
+Read this chapter to learn:
* The components of the FreeBSD bootstrap system and how they interact.
* The options that can be passed to the components in the FreeBSD bootstrap in order to control the boot process.
diff --git a/documentation/content/en/books/handbook/config/_index.adoc b/documentation/content/en/books/handbook/config/_index.adoc
index 7675b13762..6089cf402d 100644
--- a/documentation/content/en/books/handbook/config/_index.adoc
+++ b/documentation/content/en/books/handbook/config/_index.adoc
@@ -55,11 +55,11 @@ 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:
+Before reading this chapter:
* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
-After reading this chapter, you will know:
+Read this chapter to learn:
* 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.
diff --git a/documentation/content/en/books/handbook/cutting-edge/_index.adoc b/documentation/content/en/books/handbook/cutting-edge/_index.adoc
index 59e38e2bc9..04f7e9d37d 100644
--- a/documentation/content/en/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/en/books/handbook/cutting-edge/_index.adoc
@@ -58,7 +58,7 @@ However, even official releases are often updated with security and other critic
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.
-After reading this chapter, you will know:
+Read this chapter to learn:
* How to keep a FreeBSD system up-to-date with freebsd-update or Git.
* How to compare the state of an installed system against a known pristine copy.
@@ -66,7 +66,7 @@ After reading this chapter, you will know:
* The difference between the two development branches: FreeBSD-STABLE and FreeBSD-CURRENT.
* How to rebuild and reinstall the entire base system.
-Before reading this chapter, you should:
+Before reading this chapter:
* Properly set up the network connection (crossref:advanced-networking[advanced-networking,Advanced Networking]).
* Know how to install additional third-party software (crossref:ports[ports,Installing Applications: Packages and Ports]).
@@ -269,7 +269,7 @@ For example:
* 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:
+So, with any minor or major OS upgrade, if the package requirements include any kernel module:
* *be prepared to build the module from source*.
@@ -687,8 +687,8 @@ For example:
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.
+Security advisories and errata notices will also note an n-number, which can be directly compared against the system.
+When shallow Git clones are used, n-numbers cannot be compared reliably, as the git rev-list command counts all revisions in the repository, which a shallow clone omits.
[[makeworld]]
== Updating FreeBSD from Source
@@ -1235,7 +1235,7 @@ To create a new boot environment using the man:bectl[8] tool run:
Use this boot environment to start the system as it was before the update if something goes wrong.
-Save a list of your non-base packages in case you need that later:
+Save a list of the non-base packages in case they are needed later:
[source,shell]
....
@@ -1255,22 +1255,22 @@ FreeBSD-base {
}
....
-The next step will upgrade your system to the specified version.
+The next step will upgrade the system to the specified version.
[WARNING]
====
-This step might remove non-base packages, which could include your running desktop environment.
+This step might remove non-base packages, which could include the running desktop environment.
Be careful.
====
-Set the environment variable ABI to upgrade the major version (replace amd64 with your architecture and 15 with your targeted version).
+Set the environment variable ABI to upgrade the major version (replace amd64 with the architecture and 15 with the targeted version).
[source,shell]
....
# env ABI=FreeBSD:15:amd64 pkg-static upgrade -r FreeBSD-base
....
-There will be a prompt to ask if you want to ignore the version mismatch looking like this:
+There will be a prompt to ask about ignoring the version mismatch looking like this:
[source,shell]
....
@@ -1303,12 +1303,12 @@ If something broke, go back and activate the backup boot environment created bef
....
Reboot, and the system will be back to the state before upgrading.
-If you haven't created a boot environment, you might want to consider getting help from link:https://www.freebsd.org/support/[FreeBSD Support].
+If no boot environment was created before, consider getting help from link:https://www.freebsd.org/support/[FreeBSD Support].
[[build-pkgbase-packages-locally]]
=== Manually building pkgbase and publishing it to the local network
-If you want to start building your own pkgbase packages clone the FreeBSD source tree:
+When building custom pkgbase packages clone the FreeBSD source tree:
[source,shell]
....
diff --git a/documentation/content/en/books/handbook/desktop/_index.adoc b/documentation/content/en/books/handbook/desktop/_index.adoc
index 829a63d77c..fd6e26e695 100644
--- a/documentation/content/en/books/handbook/desktop/_index.adoc
+++ b/documentation/content/en/books/handbook/desktop/_index.adoc
@@ -813,7 +813,7 @@ 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;
+* static code checking and style hints when typing;
* context sensitive help;
* visual debugger;
* integrated GUI layout and forms designer.
diff --git a/documentation/content/en/books/handbook/dtrace/_index.adoc b/documentation/content/en/books/handbook/dtrace/_index.adoc
index 755a21404e..b2a8fb93b1 100644
--- a/documentation/content/en/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/en/books/handbook/dtrace/_index.adoc
@@ -65,13 +65,13 @@ Some ports, such as package:databases/postgresql12-server[] and package:lang/php
The official guide to DTrace is maintained by the illumos project at https://illumos.org/books/dtrace/bookinfo.html[illumos Dynamic Tracing Guide].
-After reading this chapter, you will know:
+Read this chapter to learn:
* 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.
-Before reading this chapter, you should:
+Before reading this chapter:
* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
* Have some familiarity with security and how it pertains to FreeBSD (crossref:security[security,Security]).
diff --git a/documentation/content/en/books/handbook/eresources/_index.adoc b/documentation/content/en/books/handbook/eresources/_index.adoc
index d237a62b71..b63222c1af 100644
--- a/documentation/content/en/books/handbook/eresources/_index.adoc
+++ b/documentation/content/en/books/handbook/eresources/_index.adoc
@@ -96,10 +96,10 @@ When in doubt about what list to post a question to, see extref:{freebsd-questio
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
-* search the archives, to tell whether someone else has already posted what you intend to post.
+* search the archives, to tell whether someone else has already posted the same.
+
+Archive search interfaces include:
-Archive search interfaces include:
-
- https://lists.freebsd.org/search[] (FreeBSD, experimental)
- https://www.freebsd.org/search/[] (DuckDuckGo)
diff --git a/documentation/content/en/books/handbook/filesystems/_index.adoc b/documentation/content/en/books/handbook/filesystems/_index.adoc
index 5e15895838..85652391bc 100644
--- a/documentation/content/en/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/en/books/handbook/filesystems/_index.adoc
@@ -63,13 +63,13 @@ See crossref:zfs[zfs,The Z File System (ZFS)] for more details.
In addition to its native file systems, FreeBSD supports a broad range of file systems from other operating systems.
Support for these file systems varies, some require loading kernel modules, while others need additional userland tools.
-Before reading this chapter, you should:
+Before reading this chapter:
* Be familiar with UNIX(R) concepts and crossref:basics[basics,FreeBSD basics].
* Feel comfortable crossref:ports[ports,installing software] in FreeBSD.
* Have some understanding of crossref:disks[disks,disks], storage devices, and FreeBSD's naming conventions for devices.
-After reading this chapter, you will:
+Read this chapter to:
* Understand the differences between native and supported file systems.
* Know which file systems are supported by FreeBSD and the level of support available.
diff --git a/documentation/content/en/books/handbook/firewalls/_index.adoc b/documentation/content/en/books/handbook/firewalls/_index.adoc
index 00e7f7688d..399eb35317 100644
--- a/documentation/content/en/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/en/books/handbook/firewalls/_index.adoc
@@ -71,7 +71,7 @@ Each firewall uses rules to control the access of packets to and from a FreeBSD
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.
-After reading this chapter, you will know:
+Read this chapter to learn:
* How to define packet filtering rules.
* The differences between the firewalls built into FreeBSD.
@@ -79,7 +79,7 @@ After reading this chapter, you will know:
* How to use and configure the IPFW firewall.
* How to use and configure the IPFILTER firewall.
-Before reading this chapter, you should:
+Before reading this chapter:
* Understand basic FreeBSD and Internet concepts.
diff --git a/documentation/content/en/books/handbook/geom/_index.adoc b/documentation/content/en/books/handbook/geom/_index.adoc
index a13b1d626c..47fc93b6e4 100644
--- a/documentation/content/en/books/handbook/geom/_index.adoc
+++ b/documentation/content/en/books/handbook/geom/_index.adoc
@@ -59,14 +59,14 @@ 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.
-After reading this chapter, you will know:
+Read this chapter to learn:
* What type of RAID support is available through GEOM.
* How to use the base utilities to configure, maintain, and manipulate the various RAID levels.
* How to mirror, stripe, encrypt, and remotely connect disk devices through GEOM.
* How to troubleshoot disks attached to the GEOM framework.
-Before reading this chapter, you should:
+Before reading this chapter:
* Understand how FreeBSD treats disk devices (crossref:disks[disks,Storage]).
* Know how to configure and install a new kernel (crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]).
diff --git a/documentation/content/en/books/handbook/jails/_index.adoc b/documentation/content/en/books/handbook/jails/_index.adoc
index fd652694cc..ecc10a1a79 100644
--- a/documentation/content/en/books/handbook/jails/_index.adoc
+++ b/documentation/content/en/books/handbook/jails/_index.adoc
@@ -361,19 +361,19 @@ The userland for the jail can be obtained from the official FreeBSD download ser
Execute the following command to download the userland:
-[source,shell]
+[source,shell,subs=attributes]
....
-# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/14.2-RELEASE/base.txz -o /usr/local/jails/media/14.2-RELEASE-base.txz
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/{betarel-current}-RELEASE/base.txz -o /usr/local/jails/media/{betarel-current}-RELEASE-base.txz
....
Once the download is complete, it will be necessary to extract the contents into the jail directory.
Execute the following commands to extract the userland into the jail's directory:
-[source,shell]
+[source,shell,subs=attributes]
....
# mkdir -p /usr/local/jails/containers/classic
-# tar -xf /usr/local/jails/media/14.2-RELEASE-base.txz -C /usr/local/jails/containers/classic --unlink
+# tar -xf /usr/local/jails/media/{betarel-current}-RELEASE-base.txz -C /usr/local/jails/containers/classic --unlink
....
With the userland extracted in the jail directory, it will be necessary to copy the timezone and DNS server files:
@@ -449,56 +449,56 @@ For this reason they are created in "read-only" mode so that jails are created w
To create the dataset for the template, execute the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# zfs create -p zroot/jails/templates/14.2-RELEASE
+# zfs create -p zroot/jails/templates/{betarel-current}-RELEASE
....
Then execute the following command to download the userland:
-[source,shell]
+[source,shell,subs=attributes]
....
-# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/14.2-RELEASE/base.txz -o /usr/local/jails/media/14.2-RELEASE-base.txz
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/{betarel-current}-RELEASE/base.txz -o /usr/local/jails/media/{betarel-current}-RELEASE-base.txz
....
Once the download is complete, it will be necessary to extract the contents in the template directory by executing the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# tar -xf /usr/local/jails/media/14.2-RELEASE-base.txz -C /usr/local/jails/templates/14.2-RELEASE --unlink
+# tar -xf /usr/local/jails/media/{betarel-current}-RELEASE-base.txz -C /usr/local/jails/templates/{betarel-current}-RELEASE --unlink
....
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]
+[source,shell,subs=attributes]
....
-# cp /etc/resolv.conf /usr/local/jails/templates/14.2-RELEASE/etc/resolv.conf
-# cp /etc/localtime /usr/local/jails/templates/14.2-RELEASE/etc/localtime
+# cp /etc/resolv.conf /usr/local/jails/templates/{betarel-current}-RELEASE/etc/resolv.conf
+# cp /etc/localtime /usr/local/jails/templates/{betarel-current}-RELEASE/etc/localtime
....
The next thing to do is update to the latest patch level by executing the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# freebsd-update -b /usr/local/jails/templates/14.2-RELEASE/ fetch install
+# freebsd-update -b /usr/local/jails/templates/{betarel-current}-RELEASE/ fetch install
....
Once the update is finished, the template is ready.
To create an OpenZFS Snapshot from the template, execute the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# zfs snapshot zroot/jails/templates/14.2-RELEASE@base
+# zfs snapshot zroot/jails/templates/{betarel-current}-RELEASE@base
....
Once the OpenZFS Snapshot has been created, infinite jails can be created using the OpenZFS clone function.
To create a Thin Jail named `thinjail`, execute the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# zfs clone zroot/jails/templates/14.2-RELEASE@base zroot/jails/containers/thinjail
+# zfs clone zroot/jails/templates/{betarel-current}-RELEASE@base zroot/jails/containers/thinjail
....
The last step is to configure the jail.
@@ -546,45 +546,45 @@ A jail can be created with reduced duplication of system files by using the Thin
The first step is to create the dataset to save the template, execute the following command if using OpenZFS:
-[source,shell]
+[source,shell,subs=attributes]
....
-# zfs create -p zroot/jails/templates/14.2-RELEASE-base
+# zfs create -p zroot/jails/templates/{betarel-current}-RELEASE-base
....
Or this one if using UFS:
-[source,shell]
+[source,shell,subs=attributes]
....
-# mkdir /usr/local/jails/templates/14.2-RELEASE-base
+# mkdir /usr/local/jails/templates/{betarel-current}-RELEASE-base
....
Then execute the following command to download the userland:
-[source,shell]
+[source,shell,subs=attributes]
....
-# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/14.2-RELEASE/base.txz -o /usr/local/jails/media/14.2-RELEASE-base.txz
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/{betarel-current}-RELEASE/base.txz -o /usr/local/jails/media/{betarel-current}-RELEASE-base.txz
....
Once the download is complete, it will be necessary to extract the contents in the template directory by executing the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# tar -xf /usr/local/jails/media/14.2-RELEASE-base.txz -C /usr/local/jails/templates/14.2-RELEASE-base --unlink
+# tar -xf /usr/local/jails/media/{betarel-current}-RELEASE-base.txz -C /usr/local/jails/templates/{betarel-current}-RELEASE-base --unlink
....
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]
+[source,shell,subs=attributes]
....
-# cp /etc/resolv.conf /usr/local/jails/templates/14.2-RELEASE-base/etc/resolv.conf
-# cp /etc/localtime /usr/local/jails/templates/14.2-RELEASE-base/etc/localtime
+# cp /etc/resolv.conf /usr/local/jails/templates/{betarel-current}-RELEASE-base/etc/resolv.conf
+# cp /etc/localtime /usr/local/jails/templates/{betarel-current}-RELEASE-base/etc/localtime
....
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]
+[source,shell,subs=attributes]
....
-# freebsd-update -b /usr/local/jails/templates/14.2-RELEASE-base/ fetch install
+# freebsd-update -b /usr/local/jails/templates/{betarel-current}-RELEASE-base/ fetch install
....
In addition to the base template, it is also necessary to create a directory where the `skeleton` will be located.
@@ -592,16 +592,16 @@ 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]
+[source,shell,subs=attributes]
....
-# zfs create -p zroot/jails/templates/14.2-RELEASE-skeleton
+# zfs create -p zroot/jails/templates/{betarel-current}-RELEASE-skeleton
....
Or this one in case of using UFS:
-[source,shell]
+[source,shell,subs=attributes]
....
-# mkdir /usr/local/jails/templates/14.2-RELEASE-skeleton
+# mkdir /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton
....
Then create the `skeleton` directories.
@@ -609,22 +609,22 @@ The `skeleton` directories will hold the local directories of the jails.
Execute the following commands to create the directories:
-[source,shell]
+[source,shell,subs=attributes]
....
-# mkdir -p /usr/local/jails/templates/14.2-RELEASE-skeleton/home
-# mkdir -p /usr/local/jails/templates/14.2-RELEASE-skeleton/usr
-# mv /usr/local/jails/templates/14.2-RELEASE-base/etc /usr/local/jails/templates/14.2-RELEASE-skeleton/etc
-# mv /usr/local/jails/templates/14.2-RELEASE-base/usr/local /usr/local/jails/templates/14.2-RELEASE-skeleton/usr/local
-# mv /usr/local/jails/templates/14.2-RELEASE-base/tmp /usr/local/jails/templates/14.2-RELEASE-skeleton/tmp
-# mv /usr/local/jails/templates/14.2-RELEASE-base/var /usr/local/jails/templates/14.2-RELEASE-skeleton/var
-# mv /usr/local/jails/templates/14.2-RELEASE-base/root /usr/local/jails/templates/14.2-RELEASE-skeleton/root
+# mkdir -p /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/home
+# mkdir -p /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/usr
+# mv /usr/local/jails/templates/{betarel-current}-RELEASE-base/etc /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/etc
+# mv /usr/local/jails/templates/{betarel-current}-RELEASE-base/usr/local /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/usr/local
+# mv /usr/local/jails/templates/{betarel-current}-RELEASE-base/tmp /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/tmp
+# mv /usr/local/jails/templates/{betarel-current}-RELEASE-base/var /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/var
+# mv /usr/local/jails/templates/{betarel-current}-RELEASE-base/root /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton/root
....
The next step is to create the symlinks to the `skeleton` by executing the following commands:
-[source,shell]
+[source,shell,subs=attributes]
....
-# cd /usr/local/jails/templates/14.2-RELEASE-base/
+# cd /usr/local/jails/templates/{betarel-current}-RELEASE-base/
# mkdir skeleton
# ln -s skeleton/etc etc
# ln -s skeleton/home home
@@ -638,17 +638,17 @@ With the `skeleton` ready, it will be necessary to copy the data to the jail dir
In case of using OpenZFS, OpenZFS snapshots can be used to easily create as many jails as necessary by executing the following commands:
-[source,shell]
+[source,shell,subs=attributes]
....
-# zfs snapshot zroot/jails/templates/14.2-RELEASE-skeleton@base
-# zfs clone zroot/jails/templates/14.2-RELEASE-skeleton@base zroot/jails/containers/thinjail
+# zfs snapshot zroot/jails/templates/{betarel-current}-RELEASE-skeleton@base
+# zfs clone zroot/jails/templates/{betarel-current}-RELEASE-skeleton@base zroot/jails/containers/thinjail
....
In case of using UFS the man:cp[1] program can be used by executing the following command:
-[source,shell]
+[source,shell,subs=attributes]
....
-# cp -R /usr/local/jails/templates/14.2-RELEASE-skeleton /usr/local/jails/containers/thinjail
+# cp -R /usr/local/jails/templates/{betarel-current}-RELEASE-skeleton /usr/local/jails/containers/thinjail
....
Then create the directory in which the base template and the skeleton will be mounted:
@@ -688,9 +688,9 @@ thinjail {
Then the create the [.filename]#/usr/local/jails/thinjail-nullfs-base.fstab# file as follows:
-[.programlisting]
+[.programlisting,subs=attributes]
....
-/usr/local/jails/templates/14.2-RELEASE-base /usr/local/jails/thinjail-nullfs-base/ nullfs ro 0 0
+/usr/local/jails/templates/{betarel-current}-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
....
diff --git a/documentation/content/en/books/handbook/kernelconfig/_index.adoc b/documentation/content/en/books/handbook/kernelconfig/_index.adoc
index 5e035105b6..9769a57018 100644
--- a/documentation/content/en/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/en/books/handbook/kernelconfig/_index.adoc
@@ -56,7 +56,7 @@ 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, some users may wish to configure and compile a custom kernel.
-After reading this chapter, you will know:
+Read this chapter to learn:
* When to build a custom kernel.
* How to take a hardware inventory.
@@ -204,7 +204,7 @@ 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.
+Do not add or remove a `+#+` for any line that is not understand.
[WARNING]
====
diff --git a/documentation/content/en/books/handbook/l10n/_index.adoc b/documentation/content/en/books/handbook/l10n/_index.adoc
index 83ce371621..73d5f3cd99 100644
--- a/documentation/content/en/books/handbook/l10n/_index.adoc
+++ b/documentation/content/en/books/handbook/l10n/_index.adoc
@@ -61,7 +61,8 @@ L10n uses the same naming scheme, but from `localization`.
The i18n/L10n methods, protocols, and applications allow users to use languages of their choice.
This chapter discusses the internationalization and localization features of FreeBSD.
-After reading this chapter, you will know:
+
+Read this chapter to learn:
* How locale names are constructed.
* How to set the locale for a login shell.
@@ -70,7 +71,7 @@ After reading this chapter, you will know:
* How to find i18n-compliant applications.
* Where to find more information for configuring specific languages.
-Before reading this chapter, you should:
+Before reading this chapter:
* Know how to crossref:ports[ports,install additional third-party applications].
diff --git a/documentation/content/en/books/handbook/linuxemu/_index.adoc b/documentation/content/en/books/handbook/linuxemu/_index.adoc
index 1f0c07c540..292af09e70 100644
--- a/documentation/content/en/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/en/books/handbook/linuxemu/_index.adoc
@@ -56,11 +56,11 @@ FreeBSD provides *optional* binary compatibility with Linux(R), commonly referre
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:
+Before reading this chapter:
* Know how to install crossref:ports[ports,additional third-party software].
-After reading this chapter, you will know:
+Read this chapter to learn:
* How to enable Linux binary compatibility on a FreeBSD system.
* How to install additional Linux shared libraries.
diff --git a/documentation/content/en/books/handbook/mac/_index.adoc b/documentation/content/en/books/handbook/mac/_index.adoc
index 8a99185537..79745411de 100644
--- a/documentation/content/en/books/handbook/mac/_index.adoc
+++ b/documentation/content/en/books/handbook/mac/_index.adoc
@@ -62,7 +62,7 @@ This is in contrast to the default security mechanism of Discretionary Access Co
This chapter focuses on the MAC framework and the set of pluggable security policy modules FreeBSD provides for enabling various security mechanisms.
-After reading this chapter, you will know:
+Read this chapter to learn:
* The terminology associated with the MAC framework.
* The capabilities of MAC security policy modules as well as the difference between a labeled and non-labeled policy.
@@ -71,7 +71,7 @@ After reading this chapter, you will know:
* How to implement a more secure environment using the MAC framework.
* How to test the MAC configuration to ensure the framework has been properly implemented.
-Before reading this chapter, you should:
+Before reading this chapter:
* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
* Have some familiarity with security and how it pertains to FreeBSD (crossref:security[security,Security]).
diff --git a/documentation/content/en/books/handbook/ports/_index.adoc b/documentation/content/en/books/handbook/ports/_index.adoc
index a6e68a7137..0aea47b7b5 100644
--- a/documentation/content/en/books/handbook/ports/_index.adoc
+++ b/documentation/content/en/books/handbook/ports/_index.adoc
@@ -201,7 +201,7 @@ To switch man:pkg[8] from Quarterly to Latest run the following commands:
[source,shell]
....
# mkdir -p /usr/local/etc/pkg/repos
-# echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
+# echo 'FreeBSD: { url: "pkg+https://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
....
Then run this command to update the local package repositories catalogues for the Latest branch:
@@ -1303,13 +1303,13 @@ 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: `/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`,
+If the URL to the package repository is: `https://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",
+ url: "https://pkg.example.com/13amd64",
enabled: yes,
}
....
diff --git a/documentation/content/en/books/handbook/wayland/_index.adoc b/documentation/content/en/books/handbook/wayland/_index.adoc
index aa402971ff..4d57d605c7 100644
--- a/documentation/content/en/books/handbook/wayland/_index.adoc
+++ b/documentation/content/en/books/handbook/wayland/_index.adoc
@@ -55,13 +55,13 @@ endif::[]
An installation of FreeBSD using bsdinstall does not automatically install a graphical user interface.
This chapter describes how to select, install, and configure a Wayland compositor, which provides a graphical environment.
-Before reading this chapter, you should:
+Before reading this chapter:
* Know how to install crossref:ports[ports,additional third-party software].
-* How to identify and configure crossref:x11[x-graphic-card-drivers,drivers for your graphics hardware].
+* Know how to identify and configure crossref:x11[x-graphic-card-drivers,drivers for the graphics hardware].
-After reading this chapter, you will know:
+Read this chapter to learn:
* How to configure FreeBSD to host a Wayland graphical environment.
@@ -376,7 +376,7 @@ The Sway compositor is a tiling compositor that attempts to replace the i3 windo
It should work with the user's current i3 configuration; however, new features may require some additional setup.
Before starting the Sway installation, ensure that a graphics card (GPU) is installed and configured correctly.
-Refer to the section crossref:x11[x-graphic-card-drivers,drivers for your graphics hardware] for guidance.
+Refer to the section crossref:x11[x-graphic-card-drivers,drivers for the graphics hardware] for guidance.
This step is essential for the Sway compositor to function properly.
In the forthcoming examples, a fresh installation without migrating any i3 configuration will be assumed.
@@ -403,7 +403,7 @@ Several important changes should be made like the following:
# Logo key. Use Mod1 for Alt.
input * xkb_rules evdev
set $mod Mod4
-# Your preferred terminal emulator
+# The preferred terminal emulator
set $term alacritty
set $lock swaylock -f -c 000000
output "My Workstation" mode 1366x768@60Hz position 1366 0
diff --git a/documentation/content/en/books/handbook/x11/_index.adoc b/documentation/content/en/books/handbook/x11/_index.adoc
index 0cefe7bbcd..46d9c3caad 100644
--- a/documentation/content/en/books/handbook/x11/_index.adoc
+++ b/documentation/content/en/books/handbook/x11/_index.adoc
@@ -59,14 +59,14 @@ This chapter describes how to install and configure
the man:Xorg[1] server, which provides the open source X Window System
(colloquially X11) used to provide a graphical environment.
-Before reading this chapter, you should:
+Before reading this chapter:
* 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:
+Read this chapter to learn:
-* How to select and install drivers for your graphics processor (GPU).
+* How to select and install drivers for the graphics processor (GPU).
* The various components of the X Window System,
and how they interoperate.
* How to install and configure the X.org server.
@@ -75,7 +75,7 @@ and how they interoperate.
[[x-graphic-card-drivers]]
== Graphics Drivers
-_**abstract**: Identify your GPU, the port providing a driver for it,
+_**abstract**: Identify the GPU, the port providing a driver for it,
install it, then enable it to run at subsequent boot with man:sysrc[8]._
Before FreeBSD can render a graphical environment,
@@ -403,7 +403,7 @@ Some applications require these additional components to function.
[[x-config]]
== X.org Configuration
-_**abstract**: If the defaults for your monitor or input devices,
+_**abstract**: If the defaults for the monitor or input devices,
are not satisfactory,
crossref:desktop[desktop-synopsis,desktops]
include GUIs for configuring them, or they can be configured manually._
@@ -701,7 +701,7 @@ library, a cross-platform effort to support all touch, pointing,
and keyboard devices under a unified library.
Unless specified otherwise, this is loaded automatically.
-Individual device settings for man:libinput[4] can be tuned in your
+Individual device settings for man:libinput[4] can be tuned in the
crossref:desktop[desktop-synopsis,desktop's] GUI,
or manually with package:x11/xinput[xinput]
and package:x11/setxkbmap[setxkbmap].
@@ -716,7 +716,7 @@ Both are described in this subsection.
==== Using Atomic Input Configuration
Devices supported by man:libinput[4] can be configured
-with graphical utilities included with your
+with graphical utilities included with the
crossref:desktop[desktop-synopsis,desktop] of choice,
or manually and atomically at runtime with package:x11/xinput[]
and package:x11/setxkbmap[].
@@ -751,9 +751,9 @@ All settings supported by these devices are provided as properties,
which can be listed and set atomically.
Pointing devices have many configurable properties, keyboards usually need none.
-To customize your keyboard, take a look at man:setxkbmap[1].
+To customize the keyboard, take a look at man:setxkbmap[1].
-Once satisfied with your configuration, simply add the lines to your
+Once satisfied with the configuration, simply add the lines to the
X initialization script such as [.filename]#~/.Xsession# or [.filename]#~/.xinitrc#.
[[x-config-input-file]]
diff --git a/documentation/content/en/books/porters-handbook/makefiles/_index.adoc b/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
index e98d2ff336..bf37987160 100644
--- a/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
@@ -1073,7 +1073,11 @@ In addition, proposed category changes just naturally seem to attract controvers
Here is the procedure:
[.procedure]
-. 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.
+. 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.) Indicating that the updater is also the maintainer or submitter may be helpful to the case.
. Participate in the discussion.
. 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:
@@ -1121,7 +1125,7 @@ If `DISTVERSION` does not derive a correct `PORTVERSION`, do not use `DISTVERSIO
====
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.
+Set `PORTVERSION` to the computed version based on the created variable and set `DISTNAME` accordingly.
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.
@@ -2202,7 +2206,7 @@ This is a very interesting feature which can decrease that endless search for th
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!
-Now that you have the idea, just imagine more `DISTFILES` and more `MASTER_SITES`.
+Once the concept is clear, just imagine more `DISTFILES` and more `MASTER_SITES`.
Surely our "distfiles survey meister" would appreciate the relief to network strain that this would bring.
In the next sections, information will follow on the FreeBSD implementation of this idea.
@@ -2527,7 +2531,7 @@ This does not affect `MASTER_SITES` defined in the [.filename]#Makefile#.
[[makefile-maintainer]]
== `MAINTAINER`
-Set your mail-address here. Please. _:-)_
+Set the mail-address here. Please. _:-)_
Only a single address without the comment part is allowed as a `MAINTAINER` value.
The format used is `user@hostname.domain`.
diff --git a/documentation/content/en/books/porters-handbook/upgrading/_index.adoc b/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
index e61a88dbaf..3da3d330c5 100644
--- a/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
@@ -64,7 +64,7 @@ If there is no pending PR, the next step is to send an email to the port's maint
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.
-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.
+If the maintainer requests 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.
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:
@@ -88,7 +88,7 @@ To simplify common operations with patch files, use `make makepatch` as describe
Other tools exists, like [.filename]#/usr/ports/Tools/scripts/patchtool.py#.
Before using it, please read [.filename]#/usr/ports/Tools/scripts/README.patchtool#.
-If the port is unmaintained, and you are actively using it, please consider volunteering to become its maintainer.
+If the port is unmaintained, and it is actively being used, 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].)
@@ -125,8 +125,8 @@ 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.
+Finally, the git patch generated by man:git-format-patch[1] includes the author information and commit messages.
+These will be recorded in the log of the repository and this is the recommended way to submit the changes.
[source,shell]
....
@@ -154,7 +154,7 @@ 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.
+If any of the files failed to rebase, it means that the upstream files changed while local changes happened in the same file, and the conflicts need to be resolved manually.
[source,shell]
....
@@ -182,7 +182,7 @@ To generate a patch with man:git-format-patch[1]:
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
+and it is also easier when making a series of changes that
are not meant to be squashed together.
Alternatively, to generate an unified diff with man:git-diff[1]:
@@ -193,13 +193,13 @@ Alternatively, to generate an unified diff with man:git-diff[1]:
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.
-After patch has been created, you can switch to the main branch for starting other developments.
+After patch has been created, switch to the main branch for starting other developments.
[source,shell]
....
% git checkout main
....
-Once the patch is accepted and merged, you can delete the local development branch if you want:
+Once the patch is accepted and merged, delete the local development branch if desired:
[source,shell]
....
% git branch -D my_branch
@@ -227,7 +227,7 @@ The format of an entry in this file is:
....
YYYYMMDD:
AFFECTS: users of portcategory/portname
- AUTHOR: Your name <Your email address>
+ AUTHOR: the name <the email address>
Special instructions
....
diff --git a/documentation/content/en/books/porters-handbook/uses/_index.adoc b/documentation/content/en/books/porters-handbook/uses/_index.adoc
index fbdb346372..84c6123b80 100644
--- a/documentation/content/en/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/uses/_index.adoc
@@ -1331,7 +1331,7 @@ The framework provides the following variables to be set by the port:
`JAVA_VERSION`::
List of space-separated suitable java versions for the port. An optional `\+`
-allows you to specify a range of versions. (allowed values `8[+]`, `11[\+]`,
+allows specifying a range of versions. (allowed values `8[+]`, `11[\+]`,
`17[+]`, `18[\+]`, `19[+]`, `20[\+]`, `21[+]`, `22[\+]`, `22[+]`)
`JAVA_OS`::
@@ -1984,7 +1984,7 @@ If the `findplist` argument is provided then contents of the `findlib` target di
If the `ldconfig` argument is provided then OCaml's [.filename]#ld.conf# file
will be automatically processed. When `dune` is used Dune may install stublibs
in site-lib package directory(ies) or in a single directory below `DUNE_LIBDIR` site-lib directory.
-Set if your port installs shared libraries into ocaml
+Set if the port installs shared libraries into ocaml
If the `run` argument is provided add ocamlc to `RUN_DEPENDS`.
diff --git a/documentation/content/ru/articles/bsdl-gpl/_index.adoc b/documentation/content/ru/articles/bsdl-gpl/_index.adoc
new file mode 100644
index 0000000000..d35e047328
--- /dev/null
+++ b/documentation/content/ru/articles/bsdl-gpl/_index.adoc
@@ -0,0 +1,205 @@
+---
+authors:
+ -
+ author: 'Bruce Montague'
+ email: brucem@alumni.cse.ucsc.edu
+description: 'Почему вы должны использовать лицензию в стиле BSD для вашего Open Source проекта'
+tags: ["bsdl", "gpl", "FreeBSD License"]
+title: 'Почему вы должны использовать лицензию в стиле BSD для вашего Open Source проекта'
+trademarks: ["freebsd", "intel", "general"]
+---
+
+= Почему вы должны использовать лицензию в стиле BSD для вашего Open Source проекта
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/bsdl-gpl/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+'''
+
+toc::[]
+
+[[intro]]
+== Введение
+
+Этот документ обосновывает использование лицензии в стиле BSD для программного обеспечения и данных; в частности, он рекомендует применять лицензию в стиле BSD вместо GPL. Его также можно рассматривать как введение и краткое сравнение открытых лицензий BSD и GPL.
+
+[[history]]
+== Очень краткая история открытого исходного кода
+
+Долгое время до того, как термин "Открытое программное обеспечение" вошел в употребление, программное обеспечение разрабатывалось свободными объединениями программистов и свободно обменивалось. Начиная с ранних 1950-х годов, организации, такие как http://www.share.org[SHARE] и http://www.decus.org[DECUS], разрабатывали большую часть программного обеспечения, которое компании-производители аппаратного обеспечения поставляли вместе со своими продуктами. В то время компьютерные компании занимались аппаратным обеспечением; все, что снижало стоимость программного обеспечения и делало больше программ доступными, повышало конкурентоспособность производителей аппаратного обеспечения.
+
+Эта модель изменилась в 1960-х годах. В 1965 году ADR разработала первый лицензированный программный продукт, независимый от компании-производителя оборудования. ADR конкурировала с бесплатным пакетом IBM, изначально разработанным клиентами IBM. ADR запатентовала своё программное обеспечение в 1968 году. Чтобы предотвратить распространение своей программы, они предоставляли её по договору аренды оборудования, где оплата распределялась на весь срок службы продукта. Таким образом, ADR сохраняла право собственности и могла контролировать перепродажу и повторное использование.
+
+В 1969 году Министерство юстиции США обвинило IBM в уничтожении бизнесов путем объединения бесплатного программного обеспечения с аппаратным обеспечением IBM. В результате этого иска IBM прекратила практику объединения; то есть, программное обеспечение стало независимым продуктом, отдельным от аппаратного обеспечения.
+
+В 1968 году компания Informatics представила приложение — первый коммерческий хит продукт, и быстро утвердила концепцию программного продукта, программной компании и очень высоких норм прибыли. Informatics разработала бессрочную лицензию, которая теперь является стандартом во всей компьютерной отрасли, при которой право собственности никогда не передается клиенту.
+
+[[unix-license]]
+== Unix с точки зрения лицензирования BSD
+
+AT&T, владевшая оригинальной реализацией Unix, была регулируемой государством монополией, связанной антимонопольными судебными разбирательствами; юридически она не могла продавать продукт на рынке программного обеспечения. Однако она имела возможность предоставлять его учебным заведениям по цене носителя.
+
+Университеты быстро приняли Unix после того, как конференция по операционным системам объявила о его доступности. Крайне полезным было то, что Unix работал на PDP-11 — очень доступном 16-битном компьютере — и был написан на языке высокого уровня, который явно подходил для системного программирования. У DEC PDP-11, по сути, был открытый аппаратный интерфейс, разработанный для того, чтобы клиентам было легко писать свою собственную ОС, что было обычной практикой. Как знаменито заявил основатель DEC Кен Олсен: «программное обеспечение приходит с небес, когда у тебя хорошее железо».
+
+Автор Unix Кен Томпсон вернулся в свой альма-матер, Калифорнийский университет в Беркли (UCB), в 1975 году и преподавал, построчно рассказывая, как работает ядро. В итоге это привело к созданию развивающейся системы, известной как BSD (Berkeley Standard Distribution). UCB перевел Unix на 32-битную архитектуру, добавил виртуальную память и реализовал версию стека TCP/IP, на котором, по сути, был построен Интернет. UCB сделал BSD доступным за стоимость носителя по условиям лицензии, которая стала известна как "лицензия BSD". Клиент покупал Unix у AT&T, а затем заказывал ленту BSD у UCB.
+
+В середине 1980-х годов антимонопольный иск правительства против AT&T завершился разделом компании. AT&T по-прежнему владела Unix и теперь могла продавать его. AT&T начала агрессивную кампанию по лицензированию, и большинство коммерческих Unix того времени стали производными от AT&T.
+
+В начале 1990-х годов AT&T подала в суд на UCB за нарушения лицензий, связанных с BSD. UCB обнаружила, что AT&T включила в свои продукты множество улучшений, сделанных в BSD, без указания авторства или оплаты, и последовало длительное судебное разбирательство, в основном между AT&T и UCB. В этот период некоторые программисты UCB начали проект по переписыванию любого кода AT&T, связанного с BSD. В результате этого проекта появилась система под названием BSD 4.4-lite (lite, потому что это была не полная система; в ней отсутствовали 6 ключевых файлов AT&T).
+
+Длинная серия статей, опубликованных чуть позже в журнале Dr. Dobbs, описывала версию Unix для ПК на базе 386, производную от BSD, с файлами-заменителями под лицензией BSD для 6 отсутствующих файлов из 4.4 lite. Эта система, названная 386BSD, была создана бывшим программистом из UCB Уильямом Джолитцем. Она стала первоосновой всех современных PC BSD.
+
+В середине 1990-х годов Novell приобрела права на Unix у AT&T, и было достигнуто (тогда секретное) соглашение о прекращении судебного разбирательства. Вскоре UCB прекратила поддержку BSD.
+
+[[current-bsdl]]
+== Текущее состояние FreeBSD и лицензий BSD
+
+Так называемая http://www.opensource.org/licenses/bsd-license.php[новая лицензия BSD], применяемая к FreeBSD в последние годы, по сути, означает, что вы можете делать что угодно с программой или её исходным кодом, но не получаете никаких гарантий, и ни один из авторов не несёт ответственности (по сути, вы не можете ни на кого подать в суд). Эта новая лицензия BSD призвана стимулировать коммерциализацию продукта. Любой код BSD может быть продан или включён в проприетарные продукты без каких-либо ограничений на доступность вашего кода или ваше будущее поведение.
+
+Не путайте новую лицензию BSD с "общественным достоянием" (лицензия Public Domain). Хотя объект в общественном достоянии также свободен для использования всеми, у него нет владельца.
+
+[[origins-gpl]]
+== Истоки GPL
+
+Пока будущее Unix оставалось неясным в конце 1980-х и начале 1990-х годов, GPL, ещё одна разработка с важными лицензионными аспектами, достигла зрелости.
+
+Ричард Столлман, разработчик Emacs, был сотрудником MIT, когда его лаборатория перешла с собственных разработок на проприетарные системы. Столлман был расстроен, обнаружив, что не может законно вносить даже незначительные улучшения в систему. (Многие его коллеги ушли, чтобы основать две компании, основанные на программном обеспечении, разработанном в MIT и лицензированном MIT; по-видимому, возникли разногласия по поводу доступа к исходному коду этого программного обеспечения). Столлман разработал альтернативу коммерческой лицензии на программное обеспечение и назвал её GPL, или «Универсальная общественная лицензия GNU» (GNU Public License). Он также основал некоммерческую организацию — http://www.fsf.org[Фонд свободного программного обеспечения] (FSF), целью которой была разработка целой операционной системы, включая все сопутствующие программы, которая не подчинялась бы проприетарным лицензиям. Эта система была названа GNU, что означает «GNU is Not Unix» (GNU — не Unix).
+
+GPL была создана как антитеза стандартной проприетарной лицензии. Для этого любые изменения, внесённые в программу под GPL, должны были возвращаться сообществу GPL (путем требования, чтобы исходный код программы был доступен пользователю), и любая программа, использующая или связывающаяся с кодом под GPL, должна была распространяться под GPL. Лицензия GPL предназначена для предотвращения перехода программного обеспечения в проприетарное состояние. Как сказано в последнем абзаце GPL:
+
+"This General Public License does not permit incorporating your program into proprietary programs (Стандартная Общественная Лицензия GNU не разрешает включать вашу программу в программы, использование которых ограничено их правообладателями)."<<one>>
+
+http://www.opensource.org/licenses/gpl-license.php[GPL] — это сложная лицензия, поэтому вот несколько эмпирических правил при использовании GPL:
+
+* вы можете брать сколько угодно за распространение, поддержку или документацию к программному обеспечению, но вы не можете продавать само программное обеспечение.
+* эмпирическое правило гласит, что если для компиляции программы требуется исходный код под GPL, то программа должна распространяться под лицензией GPL. Статическая линковка с библиотекой под GPL требует, чтобы программа также была под GPL.
+* В соответствии с GPL, любые патенты, связанные с ПО под лицензией GPL, должны быть лицензированы для свободного использования всеми.
+* простое объединение программного обеспечения, например, размещение нескольких программ на одном диске, не считается включением программ под лицензией GPL в программы, не подпадающие под GPL.
+* вывод программы не считается производным произведением. Это позволяет использовать компилятор gcc в коммерческих средах без юридических проблем.
+* поскольку ядро Linux распространяется под лицензией GPL, любой код, статически связанный с ядром Linux, должен быть лицензирован под GPL. Это требование можно обойти, используя динамическую загрузку модулей ядра. Это позволяет компаниям распространять двоичные драйверы, но часто имеет недостаток в том, что они будут работать только с определёнными версиями ядра Linux.
+
+Из-за своей сложности во многих частях мира сегодня юридические аспекты GPL игнорируются в отношении Linux и связанного с ним программного обеспечения. Долгосрочные последствия этого неясны.
+
+[[origins-lgpl]]
+== Истоки Linux и LGPL
+
+Пока бушевали коммерческие войны Unix, ядро Linux разрабатывалось как клон Unix для ПК. Линус Торвальдс признает, что существование компилятора GNU C и связанных с ним инструментов GNU стало основой для появления Linux. Он выпустил ядро Linux под лицензией GPL.
+
+Помните, что лицензия GPL требует, чтобы любой код, статически связанный с кодом под GPL, также распространялся под GPL. Исходный код такой программы должен быть предоставлен пользователю. Однако динамическая линковка не считается нарушением GPL. Давление с целью размещения проприетарных приложений в Linux стало слишком сильным. Такие приложения часто должны быть связаны с системными библиотеками. Это привело к созданию модифицированной версии GPL под названием http://www.opensource.org/licenses/lgpl-license.php[LGPL] ("Library", позже переименована в "Lesser" GPL). LGPL разрешает проприетарному коду быть связанным с библиотекой GNU C, glibc. Вам не нужно раскрывать исходный код, который был динамически связан с библиотекой под LGPL.
+
+Если вы статически связываете приложение с glibc, как это часто требуется во встроенных системах, вы не можете сохранить ваше приложение проприетарным, то есть исходный код должен быть опубликован. И GPL, и LGPL требуют, чтобы любые изменения кода, подпадающего под лицензию, были выпущены.
+
+[[orphaning]]
+== Открытые лицензии и проблема заброшенности проектов
+
+Одной из серьёзных проблем, связанных с проприетарным программным обеспечением, является так называемое "осиротение". Это происходит, когда единичный сбой в бизнесе или изменение стратегии продукта приводит к краху огромной пирамиды зависимых систем и компаний по причинам, не зависящим от них. Десятилетия опыта показали, что текущий размер или успех поставщика программного обеспечения не гарантирует, что их ПО останется доступным, поскольку рыночные условия и стратегии могут быстро меняться.
+
+Лицензия GPL пытается предотвратить потерю поддержки, разрывая связь с проприетарной интеллектуальной собственностью.
+
+Лицензия BSD предоставляет небольшой компании эквивалент программного обеспечения на условном депонировании без каких-либо юридических сложностей или затрат. Если программа под лицензией BSD становится заброшенной, компания может просто взять её под свой контроль в проприетарном режиме, если она от неё зависит. Ещё лучше, когда кодовая база BSD поддерживается небольшим неформальным консорциумом, поскольку процесс разработки не зависит от выживания отдельной компании или линейки продуктов. Выживаемость команды разработчиков, когда они находятся в режиме продуктивной работы, гораздо важнее простой физической доступности исходного кода.
+
+[[license-cannot]]
+== Что лицензия не может сделать
+
+Ни одна лицензия не может гарантировать доступность программного обеспечения в будущем. Хотя владелец авторских прав традиционно может изменять условия авторского права в любое время, в сообществе BSD принято считать, что такая попытка просто приведёт к ответвлению исходного кода.
+
+Лицензия GPL явно запрещает отзыв лицензии. Однако случалось, что компания (Mattel) приобрела авторские права на продукт под GPL (cphack), отозвала все авторские права, обратилась в суд и выиграла дело <<two>>. То есть они легально отозвали всё распространение и все производные работы, основанные на этих авторских правах. Остаётся открытым вопрос, может ли подобное произойти с более крупным и распределённым проектом; также есть некоторая путаница относительно того, действительно ли данное ПО распространялось под лицензией GPL.
+
+В другом примере, Red Hat приобрела Cygnus, инженерную компанию, которая взяла на себя разработку инструментов компилятора FSF. Cygnus смогла это сделать, потому что разработала бизнес-модель, в которой они продавали поддержку для программного обеспечения GNU. Это позволило им нанять около 50 инженеров и направлять развитие программ, внося основную часть изменений в код программы. Как отмечает Дональд Розенберг: «проекты, использующие лицензии вроде GPL... живут под постоянной угрозой, что кто-то перехватит проект, создав лучшую версию кода и сделав это быстрее, чем оригинальные владельцы.» <<three>>
+
+[[gpl-advantages]]
+== Преимущества и недостатки GPL
+
+Распространённая причина использовать GPL — это модификация или расширение компилятора gcc. Это особенно актуально при работе с уникальными специализированными процессорами в средах, где все затраты на программное обеспечение, скорее всего, считаются накладными расходами, с минимальными ожиданиями того, что другие будут использовать получившийся компилятор.
+
+Лицензия GPL также привлекательна для небольших компаний, продающих CD в условиях, где принцип «купи-дешево, продай-дорого» может по-прежнему обеспечить конечному пользователю очень недорогой продукт. Она также привлекательна для компаний, которые рассчитывают выжить за счет предоставления различных форм технической поддержки, включая документацию, для мира интеллектуальной собственности под GPL.
+
+Менее известное и непреднамеренное использование GPL заключается в том, что она очень выгодна крупным компаниям, которые хотят подорвать позиции компаний-разработчиков программного обеспечения. Другими словами, GPL хорошо подходит для использования в качестве маркетингового оружия, потенциально снижая общую экономическую выгоду и способствуя монополистическому поведению.
+
+Лицензия GPL может представлять реальную проблему для тех, кто хочет коммерциализировать программное обеспечение и получать от него прибыль. Например, GPL усложняет задачу выпускника, который хочет создать компанию для коммерциализации результатов своих исследований, или затрудняет ситуацию для студента, который планирует присоединиться к компании в расчете на коммерциализацию перспективного исследовательского проекта.
+
+Для тех, кто должен работать со статически связанными реализациями множества программных стандартов, GPL часто является неудобной лицензией, поскольку она исключает использование проприетарных реализаций этих стандартов. Таким образом, GPL минимизирует количество программ, которые могут быть созданы с использованием стандарта под лицензией GPL. Лицензия GPL задумывалась так, чтобы не предоставлять механизм для разработки стандарта, на основе которого создаются проприетарные продукты. (Это не относится к приложениям для Linux, поскольку они не используют статическую линковку, а вместо этого применяют API на основе трапов/ловушек.)
+
+Лицензия GPL пытается заставить программистов вносить вклад в развивающийся набор программ, а затем конкурировать в распространении и поддержке этого набора. Такая ситуация нереалистична для многих необходимых стандартов ядра системы, которые могут применяться в самых разных средах, требующих коммерческой настройки или интеграции с унаследованными стандартами под существующими (не-GPL) лицензиями. Системы реального времени часто статически связываются, поэтому GPL и LGPL определенно рассматриваются многими компаниями, работающими с встраиваемыми системами, как потенциальные проблемы.
+
+GPL - это попытка удержать усилия, независимо от спроса, на этапах исследований и разработки. Это максимизирует выгоды для исследователей и разработчиков, при неизвестных затратах для тех, кто мог бы получить выгоду от более широкого распространения.
+
+GPL была разработана для предотвращения перехода результатов исследований в проприетарные продукты. Этот шаг часто считается последним этапом в традиционном процессе передачи технологий, и он обычно достаточно сложен даже в самых благоприятных условиях; GPL была призвана сделать это невозможным.
+
+[[bsd-advantages]]
+== Преимущества BSD
+
+Лицензия в стиле BSD — это хороший выбор для долгосрочных исследований или других проектов, которым требуется среда разработки, обладающая следующими характеристиками:
+
+* имеет почти нулевую стоимость
+* будет развиваться в течение длительного времени
+* позволяет любому сохранить возможность коммерциализации конечных результатов с минимальными юридическими проблемами.
+
+Это последнее соображение часто может быть решающим, как это было, когда проект Apache выбирал свою лицензию:
+
+"Этот тип лицензии идеально подходит для продвижения использования эталонного кода, реализующего протокол для общего сервиса. Это ещё одна причина, по которой мы выбрали его для группы Apache - многие из нас хотели, чтобы HTTP выжил и стал по-настоящему многосторонним стандартом, и мы нисколько не возражали бы, если бы Microsoft или Netscape решили включить наш HTTP-движок или любой другой компонент нашего кода в свои продукты, если бы это способствовало достижению цели сохранения HTTP общим... Всё это означает, что, стратегически говоря, проект должен сохранять достаточную динамику, а участники должны осознавать большую ценность внесения своего кода в проект, даже того кода, который мог бы иметь ценность, оставаясь проприетарным."
+
+Разработчики часто находят лицензию BSD привлекательной, так как она минимизирует юридические сложности и позволяет им делать с кодом всё, что угодно. В отличие от этого, те, кто в первую очередь планирует использовать систему, а не программировать её, или ожидает, что другие будут развивать код, или не рассчитывает зарабатывать на жизнь работой, связанной с системой (например, государственные служащие), находят GPL привлекательной, потому что она обязывает других разработчиков предоставлять им код и не позволяет их работодателю сохранять авторские права, что потенциально может привести к «забвению» или потере поддержки программного обеспечения. Если вы хотите заставить своих конкурентов помогать вам, GPL привлекательна.
+
+Лицензия BSD — это не просто подарок. Вопрос «почему мы должны помогать нашим конкурентам или позволять им красть нашу работу?» часто возникает в связи с лицензией BSD. Под лицензией BSD, если одна компания начинает доминировать в нише продукта, который другие считают стратегическим, остальные компании могут с минимальными усилиями создать мини-консорциум, направленный на восстановление паритета путем внесения вклада в конкурирующий вариант BSD, что увеличивает конкуренцию и справедливость на рынке. Это позволяет каждой компании верить, что она сможет извлечь прибыль из какого-либо преимущества, которое она может предоставить, одновременно способствуя экономической гибкости и эффективности. Чем быстрее и проще сотрудничающие участники смогут это сделать, тем успешнее они будут. Лицензия BSD по сути является минимально сложной лицензией, которая делает такое поведение возможным.
+
+Ключевой эффект GPL, делающий полную и конкурентоспособную систему с открытым исходным кодом широко доступной по стоимости носителя, является разумной целью. Лицензия в стиле BSD, в сочетании с ad-hoc-консорциумами индивидуумов, может достичь этой цели без разрушения экономических предположений, заложенных в развертывающем конце трубопровода передачи технологий.
+
+[[recommendations]]
+== Конкретные рекомендации по использованию лицензии BSD
+
+* Лицензия BSD предпочтительна для передачи результатов исследований таким образом, чтобы они широко внедрялись и приносили максимальную пользу экономике. Таким образом, агентства, финансирующие исследования, такие как NSF, ONR и DARPA, должны на самых ранних этапах финансируемых исследовательских проектов поощрять принятие лицензий в стиле BSD для программного обеспечения, данных, результатов и открытого аппаратного обеспечения. Они также должны поощрять создание стандартов на основе реализованных систем с открытым исходным кодом и текущих проектов с открытым исходным кодом.
+* Политика правительства должна минимизировать затраты и сложности перехода от исследований к внедрению. По возможности, гранты должны требовать, чтобы результаты были доступны под дружественной к коммерциализации лицензией в стиле BSD.
+* Во многих случаях долгосрочные результаты лицензии в стиле BSD более точно отражают цели, провозглашенные в исследовательском уставе университетов, чем когда результаты защищены авторским правом или запатентованы и подлежат проприетарному лицензированию университета. Существуют неподтвержденные данные, что в долгосрочной перспективе университеты получают больше финансовых выгод, публикуя результаты исследований и затем обращаясь за пожертвованиями к коммерчески успешным выпускникам.
+* Компании давно осознают, что создание де-факто стандартов является ключевым маркетинговым приемом. Лицензия BSD хорошо подходит для этой роли, если компания действительно обладает уникальным преимуществом в развитии системы. Лицензия юридически привлекательна для широкой аудитории, в то время как экспертиза компании гарантирует их контроль. Бывают случаи, когда GPL может быть подходящим инструментом для попытки создать такой стандарт, особенно при попытке подорвать или кооптировать другие. Однако GPL наказывает за эволюцию этого стандарта, потому что она продвигает набор инструментов, а не коммерчески применимый стандарт. Использование такого набора постоянно поднимает вопросы коммерциализации и юридические проблемы. Может оказаться невозможным совмещать стандарты, если некоторые из них под GPL, а другие — нет. Настоящий технический стандарт не должен требовать исключения других стандартов по нетехническим причинам.
+* Компании, заинтересованные в продвижении развивающегося стандарта, который может стать основой коммерческих продуктов других компаний, должны остерегаться GPL. Независимо от используемой лицензии, итоговое программное обеспечение обычно переходит к тем, кто фактически вносит большинство инженерных изменений и лучше всего понимает состояние системы. GPL просто добавляет больше юридических сложностей к результату.
+* Крупные компании, занимающиеся разработкой открытого исходного кода, должны понимать, что программисты ценят Open Source, потому что это позволяет сохранить доступ к программному обеспечению при смене работодателя. Некоторые компании поощряют такое поведение как дополнительное преимущество работы, особенно когда задействованное ПО не имеет прямого стратегического значения. По сути, это предварительно предоставленная пенсионная льгота с потенциальными упущенными возможностями, но без прямых затрат. Поощрение сотрудников к работе на признание коллег вне компании — это недорогое и переносимое преимущество, которое компания иногда может предоставить практически без негативных последствий.
+* Небольшие компании с программными проектами, уязвимыми к заброшенности, должны по возможности использовать лицензию BSD. Компании любого размера должны рассмотреть возможность создания подобных проектов с открытым исходным кодом, когда это взаимовыгодно для поддержания минимальных юридических и организационных накладных расходов, связанных с настоящим проектом в стиле BSD с открытым исходным кодом.
+* Некоммерческие организации должны по возможности участвовать в проектах с открытым исходным кодом. Чтобы минимизировать проблемы в разработке программного обеспечения, такие как смешивание кода под разными лицензиями, следует поощрять лицензии в стиле BSD. Осторожность в отношении GPL особенно важна для некоммерческих организаций, взаимодействующих с развивающимися странами. В некоторых регионах, где применение закона становится дорогостоящим процессом, простота новой лицензии BSD по сравнению с GPL может быть значительным преимуществом.
+
+[[conclusion]]
+== Заключение
+
+В отличие от лицензии GPL, которая предназначена для предотвращения коммерциализации открытого исходного кода в проприетарных целях, лицензия BSD накладывает минимальные ограничения на дальнейшие действия. Это позволяет коду BSD оставаться открытым или быть интегрированным в коммерческие решения, в зависимости от изменяющихся потребностей проекта или компании. Другими словами, лицензия BSD не превращается в юридическую "бомбу замедленного действия" на каком-либо этапе процесса разработки.
+
+Помимо этого, поскольку лицензия BSD не обладает юридической сложностью лицензий GPL или LGPL, она позволяет разработчикам и компаниям тратить время на создание и продвижение качественного кода, вместо того чтобы беспокоиться о возможном нарушении лицензирования.
+
+[[addenda]]
+[bibliography]
+== Библиографические ссылки
+
+* [[[one,1]]] http://www.gnu.org/licenses/gpl.html
+
+* [[[two,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".
+
+* [[[four,4]]] В разделе "What License to Use?" книги http://www.oreilly.com/catalog/opensources/book/brian.html
+
+Этот технический документ представляет собой сжатое изложение оригинальной работы, доступной по адресу http://alumni.cse.ucsc.edu/~brucem/open_source_license.htm
diff --git a/documentation/content/ru/articles/bsdl-gpl/_index.po b/documentation/content/ru/articles/bsdl-gpl/_index.po
new file mode 100644
index 0000000000..74b273029a
--- /dev/null
+++ b/documentation/content/ru/articles/bsdl-gpl/_index.po
@@ -0,0 +1,1163 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Edson Brandi <ebrandi@freebsd.org>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2025-07-27 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesbsdl-gpl/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\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 для вашего Open Source "
+"проекта"
+
+#. 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 для "
+"программного обеспечения и данных; в частности, он рекомендует применять "
+"лицензию в стиле BSD вместо GPL. Его также можно рассматривать как введение "
+"и краткое сравнение открытых лицензий 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 прекратила практику "
+"объединения; то есть, программное обеспечение стало независимым продуктом, "
+"отдельным от аппаратного обеспечения."
+
+#. 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 представила приложение — первый "
+"коммерческий хит продукт, и быстро утвердила концепцию программного "
+"продукта, программной компании и очень высоких норм прибыли. Informatics "
+"разработала бессрочную лицензию, которая теперь является стандартом во всей "
+"компьютерной отрасли, при которой право собственности никогда не передается "
+"клиенту."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:77
+#, no-wrap
+msgid "Unix from a BSD Licensing Perspective"
+msgstr "Unix с точки зрения лицензирования 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, владевшая оригинальной реализацией Unix, была регулируемой "
+"государством монополией, связанной антимонопольными судебными "
+"разбирательствами; юридически она не могла продавать продукт на рынке "
+"программного обеспечения. Однако она имела возможность предоставлять его "
+"учебным заведениям по цене носителя."
+
+#. 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 ""
+"Университеты быстро приняли Unix после того, как конференция по операционным "
+"системам объявила о его доступности. Крайне полезным было то, что Unix "
+"работал на PDP-11 — очень доступном 16-битном компьютере — и был написан на "
+"языке высокого уровня, который явно подходил для системного "
+"программирования. У DEC PDP-11, по сути, был открытый аппаратный интерфейс, "
+"разработанный для того, чтобы клиентам было легко писать свою собственную "
+"ОС, что было обычной практикой. Как знаменито заявил основатель DEC Кен "
+"Олсен: «программное обеспечение приходит с небес, когда у тебя хорошее "
+"железо»."
+
+#. 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 ""
+"Автор Unix Кен Томпсон вернулся в свой альма-матер, Калифорнийский "
+"университет в Беркли (UCB), в 1975 году и преподавал, построчно рассказывая, "
+"как работает ядро. В итоге это привело к созданию развивающейся системы, "
+"известной как BSD (Berkeley Standard Distribution). UCB перевел Unix на 32-"
+"битную архитектуру, добавил виртуальную память и реализовал версию стека TCP/"
+"IP, на котором, по сути, был построен Интернет. UCB сделал BSD доступным за "
+"стоимость носителя по условиям лицензии, которая стала известна как "
+"\"лицензия BSD\". Клиент покупал Unix у AT&T, а затем заказывал ленту BSD у "
+"UCB."
+
+#. 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 по-прежнему владела Unix и теперь могла "
+"продавать его. AT&T начала агрессивную кампанию по лицензированию, и "
+"большинство коммерческих Unix того времени стали производными от 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 подала в суд на UCB за нарушения лицензий, "
+"связанных с BSD. UCB обнаружила, что AT&T включила в свои продукты множество "
+"улучшений, сделанных в BSD, без указания авторства или оплаты, и последовало "
+"длительное судебное разбирательство, в основном между AT&T и UCB. В этот "
+"период некоторые программисты UCB начали проект по переписыванию любого кода "
+"AT&T, связанного с BSD. В результате этого проекта появилась система под "
+"названием BSD 4.4-lite (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, "
+"описывала версию Unix для ПК на базе 386, производную от BSD, с файлами-"
+"заменителями под лицензией BSD для 6 отсутствующих файлов из 4.4 lite. Эта "
+"система, названная 386BSD, была создана бывшим программистом из UCB Уильямом "
+"Джолитцем. Она стала первоосновой всех современных 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 приобрела права на Unix у 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 ""
+"Так называемая http://www.opensource.org/licenses/bsd-license.php[новая "
+"лицензия BSD], применяемая к FreeBSD в последние годы, по сути, означает, "
+"что вы можете делать что угодно с программой или её исходным кодом, но не "
+"получаете никаких гарантий, и ни один из авторов не несёт ответственности ("
+"по сути, вы не можете ни на кого подать в суд). Эта новая лицензия 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 с \"общественным достоянием\" (лицензия Public "
+"Domain). Хотя объект в общественном достоянии также свободен для "
+"использования всеми, у него нет владельца."
+
+#. 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 ""
+"Пока будущее Unix оставалось неясным в конце 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, был сотрудником MIT, когда его "
+"лаборатория перешла с собственных разработок на проприетарные системы. "
+"Столлман был расстроен, обнаружив, что не может законно вносить даже "
+"незначительные улучшения в систему. (Многие его коллеги ушли, чтобы основать "
+"две компании, основанные на программном обеспечении, разработанном в MIT и "
+"лицензированном MIT; по-видимому, возникли разногласия по поводу доступа к "
+"исходному коду этого программного обеспечения). Столлман разработал "
+"альтернативу коммерческой лицензии на программное обеспечение и назвал её "
+"GPL, или «Универсальная общественная лицензия GNU» (GNU Public License). Он "
+"также основал некоммерческую организацию — http://www.fsf.org[Фонд "
+"свободного программного обеспечения] (FSF), целью которой была разработка "
+"целой операционной системы, включая все сопутствующие программы, которая не "
+"подчинялась бы проприетарным лицензиям. Эта система была названа GNU, что "
+"означает «GNU is Not Unix» (GNU — не Unix)."
+
+#. 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 ""
+"\"This General Public License does not permit incorporating your program "
+"into proprietary programs (Стандартная Общественная Лицензия GNU не "
+"разрешает включать вашу программу в программы, использование которых "
+"ограничено их правообладателями).\"<<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 ""
+"вывод программы не считается производным произведением. Это позволяет "
+"использовать компилятор 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 "
+"игнорируются в отношении Linux и связанного с ним программного обеспечения. "
+"Долгосрочные последствия этого неясны."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:159
+#, no-wrap
+msgid "The origins of Linux and the LGPL"
+msgstr "Истоки Linux и 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 ""
+"Пока бушевали коммерческие войны Unix, ядро Linux разрабатывалось как клон "
+"Unix для ПК. Линус Торвальдс признает, что существование компилятора GNU C и "
+"связанных с ним инструментов GNU стало основой для появления Linux. Он "
+"выпустил ядро Linux под лицензией 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 стало слишком сильным. Такие приложения часто должны быть "
+"связаны с системными библиотеками. Это привело к созданию модифицированной "
+"версии GPL под названием http://www.opensource.org/licenses/lgpl-license."
+"php[LGPL] (\"Library\", позже переименована в \"Lesser\" 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 ""
+"Одной из серьёзных проблем, связанных с проприетарным программным "
+"обеспечением, является так называемое \"осиротение\". Это происходит, когда "
+"единичный сбой в бизнесе или изменение стратегии продукта приводит к краху "
+"огромной пирамиды зависимых систем и компаний по причинам, не зависящим от "
+"них. Десятилетия опыта показали, что текущий размер или успех поставщика "
+"программного обеспечения не гарантирует, что их ПО останется доступным, "
+"поскольку рыночные условия и стратегии могут быстро меняться."
+
+#. 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>>. То есть они "
+"легально отозвали всё распространение и все производные работы, основанные "
+"на этих авторских правах. Остаётся открытым вопрос, может ли подобное "
+"произойти с более крупным и распределённым проектом; также есть некоторая "
+"путаница относительно того, действительно ли данное ПО распространялось под "
+"лицензией 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 приобрела Cygnus, инженерную компанию, которая "
+"взяла на себя разработку инструментов компилятора FSF. Cygnus смогла это "
+"сделать, потому что разработала бизнес-модель, в которой они продавали "
+"поддержку для программного обеспечения GNU. Это позволило им нанять около 50 "
+"инженеров и направлять развитие программ, внося основную часть изменений в "
+"код программы. Как отмечает Дональд Розенберг: «проекты, использующие "
+"лицензии вроде 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. Это особенно актуально при работе с уникальными "
+"специализированными процессорами в средах, где все затраты на программное "
+"обеспечение, скорее всего, считаются накладными расходами, с минимальными "
+"ожиданиями того, что другие будут использовать получившийся компилятор."
+
+#. 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 хорошо "
+"подходит для использования в качестве маркетингового оружия, потенциально "
+"снижая общую экономическую выгоду и способствуя монополистическому поведению."
+
+#. 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 пытается заставить программистов вносить вклад в развивающийся "
+"набор программ, а затем конкурировать в распространении и поддержке этого "
+"набора. Такая ситуация нереалистична для многих необходимых стандартов ядра "
+"системы, которые могут применяться в самых разных средах, требующих "
+"коммерческой настройки или интеграции с унаследованными стандартами под "
+"существующими (не-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 ""
+"Это последнее соображение часто может быть решающим, как это было, когда "
+"проект Apache выбирал свою лицензию:"
+
+#. 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 ""
+"\"Этот тип лицензии идеально подходит для продвижения использования "
+"эталонного кода, реализующего протокол для общего сервиса. Это ещё одна "
+"причина, по которой мы выбрали его для группы Apache - многие из нас хотели, "
+"чтобы HTTP выжил и стал по-настоящему многосторонним стандартом, и мы "
+"нисколько не возражали бы, если бы Microsoft или Netscape решили включить "
+"наш HTTP-движок или любой другой компонент нашего кода в свои продукты, если "
+"бы это способствовало достижению цели сохранения 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, в сочетании с ad-hoc-консорциумами "
+"индивидуумов, может достичь этой цели без разрушения экономических "
+"предположений, заложенных в развертывающем конце трубопровода передачи "
+"технологий."
+
+#. 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 ""
+"Крупные компании, занимающиеся разработкой открытого исходного кода, должны "
+"понимать, что программисты ценят Open Source, потому что это позволяет "
+"сохранить доступ к программному обеспечению при смене работодателя. "
+"Некоторые компании поощряют такое поведение как дополнительное преимущество "
+"работы, особенно когда задействованное ПО не имеет прямого стратегического "
+"значения. По сути, это предварительно предоставленная пенсионная льгота с "
+"потенциальными упущенными возможностями, но без прямых затрат. Поощрение "
+"сотрудников к работе на признание коллег вне компании — это недорогое и "
+"переносимое преимущество, которое компания иногда может предоставить "
+"практически без негативных последствий."
+
+#. 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 особенно "
+"важна для некоммерческих организаций, взаимодействующих с развивающимися "
+"странами. В некоторых регионах, где применение закона становится "
+"дорогостоящим процессом, простота новой лицензии BSD по сравнению с GPL "
+"может быть значительным преимуществом."
+
+#. 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]]] В разделе \"What License to Use?\" книги 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/ru/articles/building-products/_index.adoc b/documentation/content/ru/articles/building-products/_index.adoc
new file mode 100644
index 0000000000..469af9b0ef
--- /dev/null
+++ b/documentation/content/ru/articles/building-products/_index.adoc
@@ -0,0 +1,333 @@
+---
+authors:
+ -
+ author: 'Joseph Koshy'
+ email: jkoshy@FreeBSD.org
+description: 'Как FreeBSD может помочь вам создать лучший продукт'
+organizations:
+ -
+ organization: 'The FreeBSD Project'
+tags: ["FreeBSD", "FreeBSD as base for your product"]
+title: 'Создание продуктов на основе FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Создание продуктов на основе FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/building-products/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Проект FreeBSD — это всемирный, основанный на добровольцах и совместной работе проект, разрабатывающий переносимую и высококачественную операционную систему. Проект FreeBSD распространяет исходный код своего продукта под либеральной лицензией с целью поощрения использования своего кода. Сотрудничество с проектом FreeBSD может помочь организациям сократить время выхода на рынок, снизить инженерные затраты и улучшить качество своих продуктов.
+
+В этой статье рассматриваются вопросы использования кода FreeBSD в устройствах и программных продуктах. В ней подчеркиваются характеристики FreeBSD, которые делают её отличной основой для разработки продуктов. В заключение статьи предлагаются несколько «лучших практик» для организаций, сотрудничающих с проектом FreeBSD.
+
+'''
+
+toc::[]
+
+[[introduction]]
+== Введение
+
+Современный FreeBSD известен как высокопроизводительная серверная операционная система. Он развернут на миллионах веб-серверов и хостов, доступных из интернета, по всему миру. Код FreeBSD также является неотъемлемой частью множества продуктов — от устройств, таких как сетевые маршрутизаторы, межсетевые экраны и системы хранения данных, до персональных компьютеров. Части FreeBSD также использовались в коммерческом коробочном программном обеспечении (см. crossref:building-products[freebsd-intro, FreeBSD как набор строительных блоков]).
+
+В этой статье мы рассматриваем проект link:https://www.FreeBSD.org/[FreeBSD] как ресурс для разработки программного обеспечения — как набор строительных блоков и процессов, которые можно использовать для создания продуктов.
+
+Хотя исходный код FreeBSD распространяется свободно, чтобы в полной мере воспользоваться преимуществами работы проекта, организациям необходимо _сотрудничать_ с ним. В последующих разделах этой статьи мы обсудим эффективные способы взаимодействия с проектом и подводные камни, которых следует избегать при этом.
+
+*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). 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.
+
+=== Целевая аудитория
+
+Этот документ может быть интересен следующим широким группам людей:
+
+* Принимающие решения в продуктовых компаниях, ищущие способы повысить качество своего продукта, сократить время выхода на рынок и снизить инженерные затраты в долгосрочной перспективе.
+* Консультанты по технологиям, ищущие передовые методы использования "открытого исходного кода".
+* Заинтересованные в понимании динамики проектов с открытым исходным кодом представители отрасли.
+* Разработчики программного обеспечения, желающие использовать FreeBSD и ищущие способы внести свой вклад.
+
+=== Цели статьи
+
+Прочитав эту статью, вы должны:
+
+* Понимание целей проекта FreeBSD и его организационной структуры.
+* Понимание модели разработки и процессов выпуска релизов.
+* Понимание того, как традиционные корпоративные процессы разработки программного обеспечения отличаются от используемых в проекте FreeBSD.
+* Осведомленность о каналах связи, используемых проектом, и уровне прозрачности, который вы можете ожидать.
+* Осознание оптимальных способов работы с проектом — как лучше всего снизить инженерные затраты, ускорить выход на рынок, управлять уязвимостями безопасности и сохранить будущую совместимость с вашим продуктом по мере развития проекта FreeBSD.
+
+=== Структура статьи
+
+Остальная часть статьи структурирована следующим образом:
+
+* crossref:building-products[freebsd-intro, FreeBSD как набор строительных блоков] представляет проект FreeBSD, исследует его организационную структуру, ключевые технологии и процессы разработки релизов.
+* crossref:building-products[freebsd-collaboration, Сотрудничество с FreeBSD] описывает способы взаимодействия с проектом FreeBSD. В нём рассматриваются типичные проблемы, с которыми сталкиваются компании при работе с добровольными проектами, такими как FreeBSD.
+* crossref:building-products[conclusion, Заключение] завершает.
+
+[[freebsd-intro]]
+== FreeBSD как набор строительных блоков
+
+FreeBSD представляет собой отличную основу для создания продуктов:
+
+* Исходный код FreeBSD распространяется под либеральной лицензией BSD, что способствует его использованию в коммерческих продуктах crossref:building-products[Mon2005,"Почему следует использовать лицензию в стиле BSD для вашего открытого проекта"] с минимальными сложностями.
+* Проект FreeBSD обладает превосходными инженерными практиками, которые можно использовать.
+* Проект обеспечивает исключительную прозрачность своей работы, позволяя организациям, использующим его код, эффективно планировать будущее.
+* Культура проекта FreeBSD, унаследованная от Исследовательской группы по информатике Калифорнийского университета в Беркли crossref:building-products[McKu1999-1,"Двадцать лет Berkeley Unix: от собственности AT&T до свободного распространения"], способствует созданию высококачественных продуктов. Некоторые функции FreeBSD задают современный уровень развития технологий.
+
+crossref:building-products[GoldGab2005,"Инновации происходят в другом месте: открытое ПО как бизнес-стратегия"] подробно рассматривает бизнес-причины использования открытого ПО. Для организаций преимущества использования компонентов FreeBSD в своих продуктах включают сокращение времени выхода на рынок, снижение затрат на разработку и уменьшение рисков разработки.
+
+=== Сборка с FreeBSD
+
+Вот несколько способов, как организации использовали FreeBSD:
+
+* В качестве вышестоящего источника для проверенного кода библиотек и утилит.
++
+Будучи "нисходящими" по отношению к проекту, организации используют новые функции, исправления ошибок и тестирование, которые получает вышестоящий код.
+* Как встроенная ОС (например, для OEM-маршрутизаторов и устройств с межсетевым экраном). В этой модели организации используют настроенное ядро FreeBSD и набор прикладных программ вместе с проприетарным уровнем управления для своего устройства. OEM-производители получают выгоду от добавления поддержки нового оборудования проектом FreeBSD на уровне вышестоящего кода, а также от тестирования, которое проходит базовая система.
++
+FreeBSD поставляется с автономной средой разработки, которая позволяет легко создавать подобные конфигурации.
+* Как совместимая с Unix среда для функций управления высокопроизводительными устройствами хранения данных и сетевого оборудования, работающая на отдельном процессорном "лезвии".
++
+FreeBSD предоставляет инструменты для создания выделенных образов ОС и прикладных программ. Его реализация API BSD Unix является зрелой и проверенной. FreeBSD также может обеспечить стабильную среду кросс-разработки для других компонентов высокопроизводительных устройств.
+* Как средство для получения широкого тестирования и поддержки от международной команды разработчиков для некритичной "интеллектуальной собственности".
++
+В этой модели организации вносят полезные инфраструктурные фреймворки в проект FreeBSD (например, см. man:netgraph[3]). Широкое распространение кода помогает быстро выявлять проблемы производительности и ошибки. Участие высококлассных разработчиков также приводит к полезным расширениям инфраструктуры, от которых выигрывает и сама организация-вкладчик.
+* Как среда разработки, поддерживающая кросс-разработку для встраиваемых ОС, таких как http://www.rtems.com/[RTEMS] и http://ecos.sourceware.org/[eCOS].
++
+В обширной коллекции портированных и упакованных приложений FreeBSD, насчитывающей {numports} элементов, доступно множество полноценных сред разработки.
+* В качестве способа поддержки Unix-подобного API в проприетарной ОС, повышая её привлекательность для разработчиков приложений.
++
+В этой части ядра FreeBSD и прикладных программ "портированы" для работы вместе с другими задачами в проприетарной ОС. Наличие стабильной и хорошо протестированной реализации Unix(TM) API может сократить усилия, необходимые для переноса популярных приложений на проприетарную ОС. Поскольку FreeBSD поставляется с качественной документацией по своей внутренней структуре и имеет эффективные процессы управления уязвимостями и выпуска релизов, затраты на поддержание актуальности остаются низкими.
+
+[[freebsd-technologies]]
+=== Технологии
+
+В проекте FreeBSD поддерживается большое количество технологий. Ниже приведен их выбор:
+
+* Полная система, способная самостоятельно осуществлять кросс-хостинг для link:https://www.FreeBSD.org/platforms/[множества архитектур:]
+* Модульное симметричное многопроцессорное ядро с загружаемыми модулями и гибкой, удобной системой настройки.
+* Поддержка эмуляции бинарных файлов Linux(TM) и SVR4 с почти нативной скоростью. Поддержка бинарных сетевых драйверов Windows(TM) (NDIS).
+* Библиотеки для множества задач программирования: архиваторы, поддержка FTP и HTTP, поддержка потоков, а также полноценная среда программирования, аналогичная POSIX(TM).
+* Безопасность: Принудительное управление доступом (man:mac[9]), клетки (man:jail[2]), ACL и поддержка криптографических устройств в ядре.
+* Сетевые возможности: работа с межсетевым экраном, управление QoS, высокопроизводительные TCP/IP сети с поддержкой множества расширений.
++
+Встроенная в FreeBSD система Netgraph (man:netgraph[4]) позволяет гибко соединять модули сетевого ядра между собой.
+* Поддержка технологий хранения данных: Fibre Channel, SCSI, программный и аппаратный RAID, ATA и SATA.
++
+FreeBSD поддерживает множество файловых систем, а его родная файловая система UFS2
+поддерживает мягкие обновления, снимки и очень большие размеры файловых систем (16TB на
+файловую систему) crossref:building-products[McKu1999,"Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem"].
++
+Встроенная в ядро FreeBSD система GEOM (man:geom[4]) позволяет гибко комбинировать модули хранения данных.
+* Более {numports} портированных приложений, как коммерческих, так и с открытым исходным кодом, управляемых через коллекцию портов FreeBSD.
+
+=== Организационная структура
+
+Организационная структура FreeBSD не является иерархической.
+
+Существует два основных типа участников FreeBSD: обычные пользователи FreeBSD и разработчики с правом записи (известные в жаргоне как _коммиттеры_) в исходную базу.
+
+В первой группе участвуют тысячи разработчиков; подавляющее большинство вкладов в FreeBSD поступает от участников этой группы. Права на коммит (доступ на запись) в репозиторий предоставляются тем, кто регулярно вносит вклад в проект. Права на коммит связаны с дополнительными обязанностями, и новым коммиттерам назначаются наставники, чтобы помочь им освоиться.
+
+.Организация FreeBSD
+image::freebsd-organization.png[]
+
+Разрешение конфликтов осуществляется «Основной командой» из девяти человек, которая избирается из группы коммиттеров.
+
+В FreeBSD нет "корпоративных" коммиттеров. Отдельные коммиттеры обязаны нести ответственность за изменения, которые они вносят в код. В extref:{committers-guide}[Руководстве коммиттера FreeBSD] crossref:building-products[ComGuide,"Руководство коммиттера"] описаны правила и обязанности коммиттеров.
+
+Модель проекта FreeBSD подробно рассматривается в crossref:building-products[Nik2005,"Модель проекта для FreeBSD"].
+
+=== Процессы разработки релизов FreeBSD
+
+Процессы разработки релизов FreeBSD играют важную роль в обеспечении высокого качества выпускаемых версий. В любой момент времени добровольцы FreeBSD поддерживают несколько линий кода (crossref:building-products[fig-freebsd-branches, Ветви релизов FreeBSD]):
+
+* Новые функции и критически важный код попадают в ветку разработки, также известную как ветка _-CURRENT_.
+* Ветви _-STABLE_ представляют собой линии кода, ответвленные от HEAD через регулярные промежутки времени. В ветку -STABLE допускается только проверенный код. Новые функции добавляются только после их тестирования и стабилизации в ветке -CURRENT.
+* Ветви _-RELEASE_ поддерживаются командой безопасности FreeBSD. На ветви -RELEASE допускаются только исправления ошибок для критических проблем.
+
+[[fig-freebsd-branches]]
+.Ветви выпусков FreeBSD
+image::freebsd-branches.png[]
+
+Строки кода поддерживаются до тех пор, пока есть интерес со стороны пользователей и разработчиков.
+
+Архитектуры машин разделены на «уровни»: архитектуры _Уровня 1_ полностью поддерживаются командами разработки выпусков и безопасности проекта, архитектуры _Уровня 2_ поддерживаются по мере возможностей, а экспериментальные архитектуры составляют _Уровень 3_. Список extref:{committers-guide}[поддерживаемых архитектур, archs] является частью коллекции документации FreeBSD.
+
+Команда разработки релизов публикует link:https://www.FreeBSD.org/releng/[дорожную карту] будущих выпусков FreeBSD на веб-сайте проекта. Указанные в дорожной карте даты не являются крайними сроками; FreeBSD выпускается, когда его код и документация готовы.
+
+Процессы разработки релизов FreeBSD описаны в crossref:building-products[RelEngDoc,"Инженерия релизов FreeBSD"].
+
+[[freebsd-collaboration]]
+== Сотрудничество с FreeBSD
+
+Проекты с открытым исходным кодом, такие как FreeBSD, предлагают готовый код очень высокого качества.
+
+Хотя доступ к качественному исходному коду может снизить затраты на начальную разработку, в долгосрочной перспективе затраты на управление изменениями становятся преобладающими. По мере того как вычислительные среды меняются с годами и обнаруживаются новые уязвимости безопасности, ваш продукт также должен меняться и адаптироваться. Использование открытого исходного кода лучше рассматривать не как разовое мероприятие, а как __непрерывный процесс__. Лучшие проекты для сотрудничества — это те, которые __активны__; т.е. имеют активное сообщество, четкие цели и прозрачный стиль работы.
+
+* FreeBSD имеет активное сообщество разработчиков. На момент написания этого документа в мире насчитываются тысячи участников со всех обитаемых континентов, а также более 300 человек с правом записи в исходные репозитории проекта.
+* Цели проекта FreeBSD описаны в crossref:building-products[Hub1994,"Участие в проекте FreeBSD"]:
+
+** Разработать высококачественную операционную систему для популярного компьютерного оборудования и,
+** Сделать нашу работу доступной для всех под либеральной лицензией.
+
+* FreeBSD придерживается открытой и прозрачной рабочей культуры. Почти все обсуждения в проекте происходят по электронной почте на link:https://lists.freebsd.org/[публичных списках рассылки], которые также архивируются для потомков. Политики проекта link:https://www.FreeBSD.org/internal/policies/[документированы] и поддерживаются в системе контроля версий. Участие в проекте открыто для всех.
+
+[[freebsd-org]]
+=== Понимание культуры FreeBSD
+
+Чтобы эффективно работать с проектом FreeBSD, необходимо понимать его культуру.
+
+Добровольческие проекты работают по другим правилам, чем коммерческие компании. Частая ошибка, которую совершают компании, входя в мир открытого исходного кода, — недооценка этих различий.
+
+*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"crossref:building-products[Nor1993,"Tutorial on Good Lisp Programming Style"].
+
+*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.
+
+Проект ценит долгосрочные перспективы crossref:building-products[Nor2001,"Научись программировать за десять лет"]. Часто встречающаяся в проекте аббревиатура — DTRT, что означает «Do The Right Thing» (сделай правильно).
+
+*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. At another level, the same notation is used for communication of intent between two programmers.
+
+Формальные спецификации и проектные документы редко используются в проекте. Вместо них применяются понятный и хорошо написанный код, а также хорошо составленные журналы изменений (crossref:building-products[fig-change-log, Пример записи в журнале изменений]). Разработка FreeBSD происходит по принципу «грубого консенсуса и работающего кода» crossref:building-products[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
+
+Use double precision to simplify and optimize arg reduction for small
+and medium size args too: instead of conditionally subtracting a float
+17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always
+subtract a double 33+53 bit one. The float version is now closer to
+the double version than to old versions of itself -- it uses the same
+33+53 bit approximation as the simplest cases in the double version,
+and where the float version had to switch to the slow general case at
+|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the
+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.
+....
+.Пример записи в журнале изменений [[fig-change-log]]
+
+Общение между программистами улучшается благодаря использованию общего стандарта кодирования man:style[9].
+
+*Communication Channels.* FreeBSD's contributors are spread across the world. Email (and to a lesser extent, IRC) is the preferred means of communication in the project.
+
+=== Лучшие практики для сотрудничества с проектом FreeBSD
+
+Теперь рассмотрим несколько лучших практик для наиболее эффективного использования FreeBSD в разработке продуктов.
+
+Планируйте на долгосрочную перспективу::
+Настройка процессов, которые помогают отслеживать разработку FreeBSD. Например:
++
+*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.
++
+crossref:building-products[fig-svn-blame, Аннотированный листинг исходного кода, сгенерированный с помощью `svn blame`] показывает часть аннотированного листинга файла, на который ссылается журнал изменений в crossref:building-products[fig-change-log, Пример записи в журнале изменений]. Происхождение каждой строки исходного кода чётко видно. Аннотированные листинги, показывающие историю каждого файла, входящего в состав FreeBSD, https://svnweb.freebsd.org/[доступны в интернете].
++
+[.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$");
+ 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) *
+176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the remainder of x rem pi/2 in *y
+176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double precision for everything except passing x
+152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use __kernel_rem_pio2() for large x
+ 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)
+176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include <float.h>
+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"
+....
+.Аннотированный листинг исходного кода, сгенерированный с использованием `svn blame` [[fig-svn-blame]]
++
+*Use a gatekeeper.* Appoint a _gatekeeper_ to monitor FreeBSD development, to keep an eye out for changes that could potentially impact your products.
++
+*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]. This step helps ensure that you do not have to fix the bug the next time you take a code drop from upstream.
+Используйте преимущества разработки релизов FreeBSD::
+Используйте код из ветви разработки -STABLE FreeBSD. Эти ветви разработки официально поддерживаются инженерной командой выпуска и командой безопасности FreeBSD и содержат проверенный код.
+
+Пожертвовуйте код для снижения затрат::
+Основная часть затрат, связанных с разработкой продуктов, приходится на их поддержку. Пожертвовав некритичный код проекту, вы получаете выгоду в виде гораздо более широкого распространения вашего кода, чем это было бы возможно иначе. В свою очередь, это приводит к выявлению большего количества ошибок и уязвимостей безопасности, а также к обнаружению и исправлению аномалий производительности.
+
+Получайте поддержку эффективно::
+Для продуктов с жёсткими сроками рекомендуется нанять или заключить консультационное соглашение с разработчиком или компанией, имеющими опыт работы с FreeBSD. {freebsd-jobs} является полезным каналом связи для поиска специалистов. Проект FreeBSD поддерживает link:https://www.FreeBSD.org/commercial/consult_bycat/[галерею консультантов и консалтинговых компаний], занимающихся работой с FreeBSD. http://www.bsdcertification.org/[Группа сертификации BSD] предлагает сертификацию для всех основных ОС, производных от BSD.
++
+Для менее критичных задач вы можете обратиться за помощью в link:https://lists.freebsd.org/[списки рассылки проекта]. Полезное руководство о том, как правильно задавать вопросы, приведено в crossref:building-products[Ray2004,"Как правильно задавать вопросы"].
+Распространите информацию о вашем участии::
+Вы не обязаны афишировать своё использование FreeBSD, но это поможет как вашему делу, так и проекту.
++
+Позволяя сообществу FreeBSD узнать, что ваша компания использует FreeBSD, вы повышаете шансы привлечь высококвалифицированных специалистов. Большой список поддержки FreeBSD также означает большее внимание среди разработчиков. Это, в свою очередь, создает более устойчивую основу для вашего будущего.
+Поддержите разработчиков FreeBSD::
+Иногда самый прямой способ получить нужную функциональность в FreeBSD — это поддержать разработчика, который уже занимается связанной проблемой. Помощь может варьироваться от пожертвования оборудования до прямой финансовой поддержки. В некоторых странах пожертвования проекту FreeBSD имеют налоговые льготы. У проекта есть специальный link:https://www.FreeBSD.org/donations/[представитель по пожертвованиям], который помогает донорам. Также проект поддерживает веб-страницу, где разработчики link:https://www.FreeBSD.org/donations/wantlist/[указывают свои потребности].
++
+В соответствии с политикой проекта FreeBSD, о всех полученных вкладах в любой форме на его веб-сайте делается extref:{contributors}[запись с благодарностью].
+
+[[conclusion]]
+== Заключение
+
+Цели проекта FreeBSD — создание и бесплатное распространение исходного кода высококачественной операционной системы. Сотрудничая с проектом FreeBSD, вы можете сократить затраты на разработку и ускорить вывод продукта на рынок в различных сценариях разработки.
+
+Мы рассмотрели характеристики проекта FreeBSD, которые делают его отличным выбором для включения в продуктовую стратегию организации. Затем мы изучили преобладающую культуру проекта и рассмотрели эффективные способы взаимодействия с его разработчиками. В завершение статьи был приведён список лучших практик, которые могут помочь организациям в сотрудничестве с проектом.
+
+:sectnums!:
+
+[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 год.
+
+[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The FreeBSD Project. Copyright(R) 2005 год.
+
+[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard Gabriel. Copyright(R) 2005 год. Morgan-Kaufmann.
+
+[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD Project] Jordan Hubbard. Copyright(R) 1994-2005 гг. The FreeBSD Project.
+
+[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory Ganger. Copyright(R) 1999 год.
+
+[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/opensources/book/toc.html[Open Sources: Voices from the Open Source Revolution] O'Reilly Inc.. Copyright(R) 1993 год.
+
+[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Why you should use a BSD style license for your Open Source Project] Bruce Montague. The FreeBSD Project. Copyright(R) 2005 год.
+
+[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD Project] Niklas Saers. Copyright(R) 2005 год. The FreeBSD Project.
+
+[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993 год.
+
+[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself Programming in Ten Years] 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 год.
+
+[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] Murray Stokely. Copyright(R) 2001 год. The FreeBSD Project.
diff --git a/documentation/content/ru/articles/building-products/_index.po b/documentation/content/ru/articles/building-products/_index.po
new file mode 100644
index 0000000000..1cd929d1ad
--- /dev/null
+++ b/documentation/content/ru/articles/building-products/_index.po
@@ -0,0 +1,1595 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-21 12:20+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesbuilding-products_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#, no-wrap
+msgid "How FreeBSD can help you build a better product"
+msgstr "Как FreeBSD может помочь вам создать лучший продукт"
+
+#. 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 "Создание продуктов на основе FreeBSD"
+
+#. 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 ""
+"Проект FreeBSD — это всемирный, основанный на добровольцах и совместной "
+"работе проект, разрабатывающий переносимую и высококачественную операционную "
+"систему. Проект FreeBSD распространяет исходный код своего продукта под "
+"либеральной лицензией с целью поощрения использования своего кода. "
+"Сотрудничество с проектом FreeBSD может помочь организациям сократить время "
+"выхода на рынок, снизить инженерные затраты и улучшить качество своих "
+"продуктов."
+
+#. 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 ""
+"В этой статье рассматриваются вопросы использования кода FreeBSD в "
+"устройствах и программных продуктах. В ней подчеркиваются характеристики "
+"FreeBSD, которые делают её отличной основой для разработки продуктов. В "
+"заключение статьи предлагаются несколько «лучших практик» для организаций, "
+"сотрудничающих с проектом 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 "Введение"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:67
+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 crossref:building-products[freebsd-"
+"intro, FreeBSD as a set of building blocks])."
+msgstr ""
+"Современный FreeBSD известен как высокопроизводительная серверная "
+"операционная система. Он развернут на миллионах веб-серверов и хостов, "
+"доступных из интернета, по всему миру. Код FreeBSD также является "
+"неотъемлемой частью множества продуктов — от устройств, таких как сетевые "
+"маршрутизаторы, межсетевые экраны и системы хранения данных, до персональных "
+"компьютеров. Части FreeBSD также использовались в коммерческом коробочном "
+"программном обеспечении (см. crossref:building-products[freebsd-intro, "
+"FreeBSD как набор строительных блоков])."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:69
+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 ""
+"В этой статье мы рассматриваем проект link:https://www.FreeBSD.org/[FreeBSD] "
+"как ресурс для разработки программного обеспечения — как набор строительных "
+"блоков и процессов, которые можно использовать для создания продуктов."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:72
+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 ""
+"Хотя исходный код FreeBSD распространяется свободно, чтобы в полной мере "
+"воспользоваться преимуществами работы проекта, организациям необходимо "
+"_сотрудничать_ с ним. В последующих разделах этой статьи мы обсудим "
+"эффективные способы взаимодействия с проектом и подводные камни, которых "
+"следует избегать при этом."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:75
+#, fuzzy
+#| 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"
+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). 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."
+msgstr ""
+"*Предупреждение для читателя.* Автор считает, что перечисленные в этой "
+"статье характеристики проекта FreeBSD были в основном верны на момент "
+"написания статьи (2005 год).\n"
+"Однако читателю следует учитывать, что практики и процессы, используемые "
+"сообществами открытого исходного кода, могут меняться со временем, поэтому "
+"информацию в этой статье следует рассматривать как ориентировочную, а не "
+"нормативную.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:76
+#, no-wrap
+msgid "Target Audience"
+msgstr "Целевая аудитория"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:79
+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:81
+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:82
+msgid ""
+"Technology consultants looking for best-practices in leveraging \"open-"
+"source\"."
+msgstr ""
+"Консультанты по технологиям, ищущие передовые методы использования "
+"\"открытого исходного кода\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:83
+msgid ""
+"Industry observers interested in understanding the dynamics of open-source "
+"projects."
+msgstr ""
+"Заинтересованные в понимании динамики проектов с открытым исходным кодом "
+"представители отрасли."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:84
+msgid ""
+"Software developers seeking to use FreeBSD and looking for ways to "
+"contribute back."
+msgstr ""
+"Разработчики программного обеспечения, желающие использовать FreeBSD и "
+"ищущие способы внести свой вклад."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:85
+#, no-wrap
+msgid "Article Goals"
+msgstr "Цели статьи"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:88
+msgid "After reading this article you should have:"
+msgstr "Прочитав эту статью, вы должны:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:90
+msgid ""
+"An understanding of the goals of the FreeBSD Project and its organizational "
+"structure."
+msgstr "Понимание целей проекта FreeBSD и его организационной структуры."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:91
+msgid ""
+"An understanding of its development model and release engineering processes."
+msgstr "Понимание модели разработки и процессов выпуска релизов."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:92
+msgid ""
+"An understanding of how conventional corporate software development "
+"processes differ from that used in the FreeBSD project."
+msgstr ""
+"Понимание того, как традиционные корпоративные процессы разработки "
+"программного обеспечения отличаются от используемых в проекте FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:93
+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:94
+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 ""
+"Осознание оптимальных способов работы с проектом — как лучше всего снизить "
+"инженерные затраты, ускорить выход на рынок, управлять уязвимостями "
+"безопасности и сохранить будущую совместимость с вашим продуктом по мере "
+"развития проекта FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:95
+#, no-wrap
+msgid "Article Structure"
+msgstr "Структура статьи"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:98
+msgid "The rest of the article is structured as follows:"
+msgstr "Остальная часть статьи структурирована следующим образом:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:100
+msgid ""
+"crossref:building-products[freebsd-intro, FreeBSD as a set of building "
+"blocks] introduces the FreeBSD project, explores its organizational "
+"structure, key technologies and release engineering processes."
+msgstr ""
+"crossref:building-products[freebsd-intro, FreeBSD как набор строительных "
+"блоков] представляет проект FreeBSD, исследует его организационную "
+"структуру, ключевые технологии и процессы разработки релизов."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:101
+msgid ""
+"crossref:building-products[freebsd-collaboration, Collaborating with "
+"FreeBSD] describes ways to collaborate with the FreeBSD project. It examines "
+"common pitfalls encountered by corporates working with voluntary projects "
+"like FreeBSD."
+msgstr ""
+"crossref:building-products[freebsd-collaboration, Сотрудничество с FreeBSD] "
+"описывает способы взаимодействия с проектом FreeBSD. В нём рассматриваются "
+"типичные проблемы, с которыми сталкиваются компании при работе с "
+"добровольными проектами, такими как FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:102
+msgid "crossref:building-products[conclusion, Conclusion] concludes."
+msgstr "crossref:building-products[conclusion, Заключение] завершает."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:104
+#, no-wrap
+msgid "FreeBSD as a set of building blocks"
+msgstr "FreeBSD как набор строительных блоков"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:107
+msgid "FreeBSD makes an excellent foundation on which to build products:"
+msgstr "FreeBSD представляет собой отличную основу для создания продуктов:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:110
+msgid ""
+"FreeBSD source code is distributed under a liberal BSD license facilitating "
+"its adoption in commercial products crossref:building-products[Mon2005,\"Why "
+"you should use a BSD style license for your Open Source Project\"] with "
+"minimum hassle."
+msgstr ""
+"Исходный код FreeBSD распространяется под либеральной лицензией BSD, что "
+"способствует его использованию в коммерческих продуктах crossref:building-"
+"products[Mon2005,\"Почему следует использовать лицензию в стиле BSD для "
+"вашего открытого проекта\"] с минимальными сложностями."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:111
+msgid ""
+"The FreeBSD project has excellent engineering practices that can be "
+"leveraged."
+msgstr ""
+"Проект FreeBSD обладает превосходными инженерными практиками, которые можно "
+"использовать."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:112
+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:115
+msgid ""
+"The culture of the FreeBSD project, carried over from the Computer Science "
+"Research Group at The University of California, Berkeley crossref:building-"
+"products[McKu1999-1,\"Twenty Years of Berkeley Unix: From AT&T-Owned to "
+"Freely Redistributable\"], fosters high-quality work. Some features in "
+"FreeBSD define the state of the art."
+msgstr ""
+"Культура проекта FreeBSD, унаследованная от Исследовательской группы по "
+"информатике Калифорнийского университета в Беркли crossref:building-"
+"products[McKu1999-1,\"Двадцать лет Berkeley Unix: от собственности AT&T до "
+"свободного распространения\"], способствует созданию высококачественных "
+"продуктов. Некоторые функции FreeBSD задают современный уровень развития "
+"технологий."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:118
+msgid ""
+"crossref:building-products[GoldGab2005,\"Innovation Happens Elsewhere: Open "
+"Source as Business Strategy\"] 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 ""
+"crossref:building-products[GoldGab2005,\"Инновации происходят в другом "
+"месте: открытое ПО как бизнес-стратегия\"] подробно рассматривает бизнес-"
+"причины использования открытого ПО. Для организаций преимущества "
+"использования компонентов FreeBSD в своих продуктах включают сокращение "
+"времени выхода на рынок, снижение затрат на разработку и уменьшение рисков "
+"разработки."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:119
+#, no-wrap
+msgid "Building with FreeBSD"
+msgstr "Сборка с FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:122
+msgid "Here are a few ways organizations have used FreeBSD:"
+msgstr "Вот несколько способов, как организации использовали FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:124
+msgid "As an upstream source for tested code for libraries and utilities."
+msgstr ""
+"В качестве вышестоящего источника для проверенного кода библиотек и утилит."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:126
+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:127
+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 ""
+"Как встроенная ОС (например, для OEM-маршрутизаторов и устройств с "
+"межсетевым экраном). В этой модели организации используют настроенное ядро "
+"FreeBSD и набор прикладных программ вместе с проприетарным уровнем "
+"управления для своего устройства. OEM-производители получают выгоду от "
+"добавления поддержки нового оборудования проектом FreeBSD на уровне "
+"вышестоящего кода, а также от тестирования, которое проходит базовая система."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:129
+msgid ""
+"FreeBSD ships with a self-hosting development environment that allows easy "
+"creation of such configurations."
+msgstr ""
+"FreeBSD поставляется с автономной средой разработки, которая позволяет легко "
+"создавать подобные конфигурации."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:130
+msgid ""
+"As a Unix compatible environment for the management functions of high-end "
+"storage and networking devices, running on a separate processor \"blade\"."
+msgstr ""
+"Как совместимая с Unix среда для функций управления высокопроизводительными "
+"устройствами хранения данных и сетевого оборудования, работающая на "
+"отдельном процессорном \"лезвии\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:134
+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 ""
+"FreeBSD предоставляет инструменты для создания выделенных образов ОС и "
+"прикладных программ. Его реализация API BSD Unix является зрелой и "
+"проверенной. FreeBSD также может обеспечить стабильную среду кросс-"
+"разработки для других компонентов высокопроизводительных устройств."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:135
+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:139
+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 ""
+"В этой модели организации вносят полезные инфраструктурные фреймворки в "
+"проект FreeBSD (например, см. man:netgraph[3]). Широкое распространение кода "
+"помогает быстро выявлять проблемы производительности и ошибки. Участие "
+"высококлассных разработчиков также приводит к полезным расширениям "
+"инфраструктуры, от которых выигрывает и сама организация-вкладчик."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:140
+msgid ""
+"As a development environment supporting cross-development for embedded OSes "
+"like http://www.rtems.com/[RTEMS] and http://ecos.sourceware.org/[eCOS]."
+msgstr ""
+"Как среда разработки, поддерживающая кросс-разработку для встраиваемых ОС, "
+"таких как http://www.rtems.com/[RTEMS] и http://ecos.sourceware.org/[eCOS]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:142
+msgid ""
+"There are many full-fledged development environments in the {numports}-"
+"strong collection of applications ported and packaged with FreeBSD."
+msgstr ""
+"В обширной коллекции портированных и упакованных приложений FreeBSD, "
+"насчитывающей {numports} элементов, доступно множество полноценных сред "
+"разработки."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:143
+msgid ""
+"As a way to support a Unix-like API in an otherwise proprietary OS, "
+"increasing its palatability for application developers."
+msgstr ""
+"В качестве способа поддержки Unix-подобного API в проприетарной ОС, повышая "
+"её привлекательность для разработчиков приложений."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:147
+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 ""
+"В этой части ядра FreeBSD и прикладных программ \"портированы\" для работы "
+"вместе с другими задачами в проприетарной ОС. Наличие стабильной и хорошо "
+"протестированной реализации Unix(TM) API может сократить усилия, необходимые "
+"для переноса популярных приложений на проприетарную ОС. Поскольку FreeBSD "
+"поставляется с качественной документацией по своей внутренней структуре и "
+"имеет эффективные процессы управления уязвимостями и выпуска релизов, "
+"затраты на поддержание актуальности остаются низкими."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:149
+#, no-wrap
+msgid "Technologies"
+msgstr "Технологии"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:153
+msgid ""
+"There are a large number of technologies supported by the FreeBSD project. "
+"A selection of these are listed below:"
+msgstr ""
+"В проекте FreeBSD поддерживается большое количество технологий. Ниже "
+"приведен их выбор:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:155
+msgid ""
+"A complete system that can cross-host itself for link:https://"
+"www.FreeBSD.org/platforms/[many architectures:]"
+msgstr ""
+"Полная система, способная самостоятельно осуществлять кросс-хостинг для "
+"link:https://www.FreeBSD.org/platforms/[множества архитектур:]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:156
+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:157
+msgid ""
+"Support for emulation of Linux(TM) and SVR4 binaries at near machine speeds. "
+"Support for binary Windows(TM) (NDIS) network drivers."
+msgstr ""
+"Поддержка эмуляции бинарных файлов Linux(TM) и SVR4 с почти нативной "
+"скоростью. Поддержка бинарных сетевых драйверов Windows(TM) (NDIS)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:158
+msgid ""
+"Libraries for many programming tasks: archivers, FTP and HTTP support, "
+"thread support, in addition to a full POSIX(TM) like programming environment."
+msgstr ""
+"Библиотеки для множества задач программирования: архиваторы, поддержка FTP и "
+"HTTP, поддержка потоков, а также полноценная среда программирования, "
+"аналогичная POSIX(TM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:159
+msgid ""
+"Security features: Mandatory Access Control (man:mac[9]), jails "
+"(man:jail[2]), ACLs, and in-kernel cryptographic device support."
+msgstr ""
+"Безопасность: Принудительное управление доступом (man:mac[9]), клетки "
+"(man:jail[2]), ACL и поддержка криптографических устройств в ядре."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:160
+msgid ""
+"Networking features: firewall-ing, QoS management, high-performance TCP/IP "
+"networking with support for many extensions."
+msgstr ""
+"Сетевые возможности: работа с межсетевым экраном, управление QoS, "
+"высокопроизводительные TCP/IP сети с поддержкой множества расширений."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:162
+msgid ""
+"FreeBSD's in-kernel Netgraph (man:netgraph[4]) framework allows kernel "
+"networking modules to be connected together in flexible ways."
+msgstr ""
+"Встроенная в FreeBSD система Netgraph (man:netgraph[4]) позволяет гибко "
+"соединять модули сетевого ядра между собой."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:163
+msgid ""
+"Support for storage technologies: Fibre Channel, SCSI, software and hardware "
+"RAID, ATA and SATA."
+msgstr ""
+"Поддержка технологий хранения данных: Fibre Channel, SCSI, программный и "
+"аппаратный RAID, ATA и SATA."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:167
+#, no-wrap
+msgid ""
+"FreeBSD supports a number of filesystems, and its native UFS2 filesystem\n"
+"supports soft updates, snapshots and very large filesystem sizes (16TB per\n"
+"\t\tfilesystem) crossref:building-products[McKu1999,\"Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem\"].\n"
+msgstr ""
+"FreeBSD поддерживает множество файловых систем, а его родная файловая система UFS2\n"
+"поддерживает мягкие обновления, снимки и очень большие размеры файловых систем (16TB на\n"
+"файловую систему) crossref:building-products[McKu1999,\"Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem\"].\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:169
+msgid ""
+"FreeBSD's in-kernel GEOM (man:geom[4]) framework allows kernel storage "
+"modules to be composed in flexible ways."
+msgstr ""
+"Встроенная в ядро FreeBSD система GEOM (man:geom[4]) позволяет гибко "
+"комбинировать модули хранения данных."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:170
+msgid ""
+"Over {numports} ported applications, both commercial and open-source, "
+"managed via the FreeBSD ports collection."
+msgstr ""
+"Более {numports} портированных приложений, как коммерческих, так и с "
+"открытым исходным кодом, управляемых через коллекцию портов FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:171
+#, no-wrap
+msgid "Organizational Structure"
+msgstr "Организационная структура"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:174
+msgid "FreeBSD's organizational structure is non-hierarchical."
+msgstr "Организационная структура FreeBSD не является иерархической."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:176
+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 ""
+"Существует два основных типа участников FreeBSD: обычные пользователи "
+"FreeBSD и разработчики с правом записи (известные в жаргоне как "
+"_коммиттеры_) в исходную базу."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:180
+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 ""
+"В первой группе участвуют тысячи разработчиков; подавляющее большинство "
+"вкладов в FreeBSD поступает от участников этой группы. Права на коммит "
+"(доступ на запись) в репозиторий предоставляются тем, кто регулярно вносит "
+"вклад в проект. Права на коммит связаны с дополнительными обязанностями, и "
+"новым коммиттерам назначаются наставники, чтобы помочь им освоиться."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:181
+#, no-wrap
+msgid "FreeBSD Organization"
+msgstr "Организация FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:182
+#, no-wrap
+msgid "freebsd-organization.png"
+msgstr "freebsd-organization.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:185
+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:190
+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] crossref:building-"
+"products[ComGuide,\"Committer's Guide\"] documents the rules and "
+"responsibilities for committers."
+msgstr ""
+"В FreeBSD нет \"корпоративных\" коммиттеров. Отдельные коммиттеры обязаны "
+"нести ответственность за изменения, которые они вносят в код. В extref:"
+"{committers-guide}[Руководстве коммиттера FreeBSD] crossref:building-"
+"products[ComGuide,\"Руководство коммиттера\"] описаны правила и обязанности "
+"коммиттеров."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:193
+msgid ""
+"FreeBSD's project model is examined in detail in crossref:building-"
+"products[Nik2005,\"A project model for the FreeBSD Project\"]."
+msgstr ""
+"Модель проекта FreeBSD подробно рассматривается в crossref:building-"
+"products[Nik2005,\"Модель проекта для FreeBSD\"]."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:194
+#, no-wrap
+msgid "FreeBSD Release Engineering Processes"
+msgstr "Процессы разработки релизов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:199
+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 (crossref:building-"
+"products[fig-freebsd-branches, FreeBSD Release Branches]):"
+msgstr ""
+"Процессы разработки релизов FreeBSD играют важную роль в обеспечении "
+"высокого качества выпускаемых версий. В любой момент времени добровольцы "
+"FreeBSD поддерживают несколько линий кода (crossref:building-products[fig-"
+"freebsd-branches, Ветви релизов FreeBSD]):"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:201
+msgid ""
+"New features and disruptive code enters on the development branch, also "
+"known as the _-CURRENT_ branch."
+msgstr ""
+"Новые функции и критически важный код попадают в ветку разработки, также "
+"известную как ветка _-CURRENT_."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:202
+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 ""
+"Ветви _-STABLE_ представляют собой линии кода, ответвленные от HEAD через "
+"регулярные промежутки времени. В ветку -STABLE допускается только "
+"проверенный код. Новые функции добавляются только после их тестирования и "
+"стабилизации в ветке -CURRENT."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:203
+msgid ""
+"_-RELEASE_ branches are maintained by the FreeBSD security team. Only bug "
+"fixes for critical issues are permitted onto -RELEASE branches."
+msgstr ""
+"Ветви _-RELEASE_ поддерживаются командой безопасности FreeBSD. На ветви "
+"-RELEASE допускаются только исправления ошибок для критических проблем."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:205
+#, no-wrap
+msgid "FreeBSD Release Branches"
+msgstr "Ветви выпусков FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:206
+#, no-wrap
+msgid "freebsd-branches.png"
+msgstr "freebsd-branches.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:209
+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:212
+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 ""
+"Архитектуры машин разделены на «уровни»: архитектуры _Уровня 1_ полностью "
+"поддерживаются командами разработки выпусков и безопасности проекта, "
+"архитектуры _Уровня 2_ поддерживаются по мере возможностей, а "
+"экспериментальные архитектуры составляют _Уровень 3_. Список extref:"
+"{committers-guide}[поддерживаемых архитектур, archs] является частью "
+"коллекции документации FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:215
+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 ""
+"Команда разработки релизов публикует link:https://www.FreeBSD.org/releng/"
+"[дорожную карту] будущих выпусков FreeBSD на веб-сайте проекта. Указанные в "
+"дорожной карте даты не являются крайними сроками; FreeBSD выпускается, когда "
+"его код и документация готовы."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:218
+msgid ""
+"FreeBSD's release engineering processes are described in crossref:building-"
+"products[RelEngDoc,\"FreeBSD Release Engineering\"]."
+msgstr ""
+"Процессы разработки релизов FreeBSD описаны в crossref:building-"
+"products[RelEngDoc,\"Инженерия релизов FreeBSD\"]."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:220
+#, no-wrap
+msgid "Collaborating with FreeBSD"
+msgstr "Сотрудничество с FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:223
+msgid ""
+"Open-source projects like FreeBSD offer finished code of a very high quality."
+msgstr ""
+"Проекты с открытым исходным кодом, такие как FreeBSD, предлагают готовый код "
+"очень высокого качества."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:228
+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:230
+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 ""
+"FreeBSD имеет активное сообщество разработчиков. На момент написания этого "
+"документа в мире насчитываются тысячи участников со всех обитаемых "
+"континентов, а также более 300 человек с правом записи в исходные "
+"репозитории проекта."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:232
+msgid ""
+"The goals of the FreeBSD project are crossref:building-"
+"products[Hub1994,\"Contributing to the FreeBSD Project\"]:"
+msgstr ""
+"Цели проекта FreeBSD описаны в crossref:building-products[Hub1994,\"Участие "
+"в проекте FreeBSD\"]:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:234
+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:235
+msgid "To make our work available to all under a liberal license."
+msgstr "Сделать нашу работу доступной для всех под либеральной лицензией."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:237
+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 ""
+"FreeBSD придерживается открытой и прозрачной рабочей культуры. Почти все "
+"обсуждения в проекте происходят по электронной почте на link:https://"
+"lists.freebsd.org/[публичных списках рассылки], которые также архивируются "
+"для потомков. Политики проекта link:https://www.FreeBSD.org/internal/"
+"policies/[документированы] и поддерживаются в системе контроля версий. "
+"Участие в проекте открыто для всех."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:239
+#, no-wrap
+msgid "Understanding FreeBSD culture"
+msgstr "Понимание культуры FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:242
+msgid ""
+"To be able to work effectively with the FreeBSD project, you need to "
+"understand the project's culture."
+msgstr ""
+"Чтобы эффективно работать с проектом FreeBSD, необходимо понимать его "
+"культуру."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:245
+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:251
+#, fuzzy
+#| msgid ""
+#| "*Motivation.* Most contributions to FreeBSD are done voluntarily without\n"
+#| "monetary rewards entering the picture. The factors that motivate "
+#| "individuals are\n"
+#| "complex, ranging from altruism, to an interest in solving the kinds of "
+#| "problems\n"
+#| "that FreeBSD attempts to solve. In this environment, \"elegance is never\n"
+#| "optional\"crossref:building-products[Nor1993,\"Tutorial on Good Lisp "
+#| "Programming Style\"].\n"
+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\"crossref:building-products[Nor1993,\"Tutorial on Good Lisp "
+"Programming Style\"]."
+msgstr ""
+"*Мотивация.* Большинство вкладов в FreeBSD делается добровольно,\n"
+"без денежного вознаграждения. Факторы, мотивирующие людей, сложны и\n"
+"варьируются от альтруизма до интереса к решению задач, которые FreeBSD\n"
+"пытается решить. В таких условиях «элегантность никогда не бывает "
+"опциональной»\n"
+"crossref:building-products[Nor1993,\"Tutorial on Good Lisp Programming "
+"Style\"].\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:253
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Долгосрочная перспектива.* FreeBSD ведёт свою историю почти двадцать лет "
+"назад, к работе Исследовательской группы по информатике (Computer Science "
+"Research Group) в Университете Калифорнии, Беркли.footnote:[Исходный "
+"репозиторий FreeBSD содержит историю проекта с момента его создания, а также "
+"доступны CD-ROM с более ранним кодом от CSRG.] Некоторые из оригинальных "
+"разработчиков CSRG до сих пор связаны с проектом.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:255
+msgid ""
+"The project values long-term perspectives crossref:building-"
+"products[Nor2001,\"Teach Yourself Programming in Ten Years\"]. A frequent "
+"acronym encountered in the project is DTRT, which stands for \"Do The Right "
+"Thing\"."
+msgstr ""
+"Проект ценит долгосрочные перспективы crossref:building-"
+"products[Nor2001,\"Научись программировать за десять лет\"]. Часто "
+"встречающаяся в проекте аббревиатура — DTRT, что означает «Do The Right "
+"Thing» (сделай правильно)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:258
+#, fuzzy
+#| 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"
+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. At another level, the same notation is used for communication of "
+"intent between two programmers."
+msgstr ""
+"*Процессы разработки.* Компьютерные программы — это инструменты для общения: "
+"на одном уровне программисты передают свои намерения, используя точную "
+"нотацию, инструменту (компилятору), который преобразует их инструкции в "
+"исполняемый код.\n"
+"На другом уровне та же нотация используется для передачи намерений между "
+"двумя программистами.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:264
+msgid ""
+"Formal specifications and design documents are seldom used in the project. "
+"Clear and well-written code and well-written change logs (crossref:building-"
+"products[fig-change-log, A sample change log entry]) are used in their "
+"place. FreeBSD development happens by \"rough consensus and running "
+"code\"crossref:building-products[Carp1996,\"The Architectural Principles of "
+"the Internet\"]."
+msgstr ""
+"Формальные спецификации и проектные документы редко используются в проекте. "
+"Вместо них применяются понятный и хорошо написанный код, а также хорошо "
+"составленные журналы изменений (crossref:building-products[fig-change-log, "
+"Пример записи в журнале изменений]). Разработка FreeBSD происходит по "
+"принципу «грубого консенсуса и работающего кода» crossref:building-"
+"products[Carp1996,\"Архитектурные принципы Интернета\"]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:270
+#, 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:280
+#, 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:283
+#, 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:284
+#, no-wrap
+msgid "A sample change log entry [[fig-change-log]]"
+msgstr "Пример записи в журнале изменений [[fig-change-log]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:287
+msgid ""
+"Communication between programmers is enhanced by the use of a common coding "
+"standard man:style[9]."
+msgstr ""
+"Общение между программистами улучшается благодаря использованию общего "
+"стандарта кодирования man:style[9]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:290
+#, fuzzy
+#| 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"
+msgid ""
+"*Communication Channels.* FreeBSD's contributors are spread across the "
+"world. Email (and to a lesser extent, IRC) is the preferred means of "
+"communication in the project."
+msgstr ""
+"*Каналы связи.* Участники проекта FreeBSD живут в разных уголках мира.\n"
+"Электронная почта (и в меньшей степени IRC) — это предпочтительные способы "
+"общения в проекте.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:291
+#, no-wrap
+msgid "Best Practices for collaborating with the FreeBSD project"
+msgstr "Лучшие практики для сотрудничества с проектом FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:294
+msgid ""
+"We now look at a few best practices for making the best use of FreeBSD in "
+"product development."
+msgstr ""
+"Теперь рассмотрим несколько лучших практик для наиболее эффективного "
+"использования FreeBSD в разработке продуктов."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:295
+#, no-wrap
+msgid "Plan for the long term"
+msgstr "Планируйте на долгосрочную перспективу"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:298
+msgid ""
+"Setup processes that help in tracking the development of FreeBSD. For "
+"example:"
+msgstr ""
+"Настройка процессов, которые помогают отслеживать разработку FreeBSD. "
+"Например:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:300
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Отслеживание исходного кода FreeBSD.* Проект упрощает зеркалирование своего "
+"SVN-репозитория с помощью extref:{committers-guide}[svnsync, svn-advanced-"
+"use-setting-up-svnsync]. Наличие полной истории исходного кода полезно при "
+"отладке сложных проблем и дает ценное понимание намерений оригинальных "
+"разработчиков. Используйте систему контроля версий, которая позволяет легко "
+"объединять изменения между основной кодовой базой FreeBSD и вашим внутренним "
+"кодом.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:305
+msgid ""
+"crossref:building-products[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 crossref:building-products[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 ""
+"crossref:building-products[fig-svn-blame, Аннотированный листинг исходного "
+"кода, сгенерированный с помощью `svn blame`] показывает часть "
+"аннотированного листинга файла, на который ссылается журнал изменений в "
+"crossref:building-products[fig-change-log, Пример записи в журнале "
+"изменений]. Происхождение каждой строки исходного кода чётко видно. "
+"Аннотированные листинги, показывающие историю каждого файла, входящего в "
+"состав FreeBSD, https://svnweb.freebsd.org/[доступны в интернете]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:309
+#, 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:323
+#, 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:324
+#, no-wrap
+msgid "An annotated source listing generated using `svn blame` [[fig-svn-blame]]"
+msgstr "Аннотированный листинг исходного кода, сгенерированный с использованием `svn blame` [[fig-svn-blame]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:327
+#, fuzzy
+#| 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"
+msgid ""
+"*Use a gatekeeper.* Appoint a _gatekeeper_ to monitor FreeBSD development, "
+"to keep an eye out for changes that could potentially impact your products."
+msgstr ""
+"*Используйте привратника.* Назначьте _привратника_ для отслеживания "
+"разработки FreeBSD, чтобы следить за изменениями, которые могут потенциально "
+"повлиять на ваши продукты.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:330
+#, fuzzy
+#| 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"
+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]. This "
+"step helps ensure that you do not have to fix the bug the next time you take "
+"a code drop from upstream."
+msgstr ""
+"*Сообщайте об ошибках в вышестоящий проект.* Если вы заметили ошибку в коде "
+"FreeBSD, который используете, заполните https://www.FreeBSD.org/support/"
+"bugreports/[отчёт об ошибке].\n"
+"Этот шаг помогает гарантировать, что вам не придётся исправлять ошибку в "
+"следующий раз, когда вы получите обновление кода из вышестоящего проекта.\n"
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:330
+#, no-wrap
+msgid "Leverage FreeBSD's release engineering efforts"
+msgstr "Используйте преимущества разработки релизов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:333
+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 ""
+"Используйте код из ветви разработки -STABLE FreeBSD. Эти ветви разработки "
+"официально поддерживаются инженерной командой выпуска и командой "
+"безопасности FreeBSD и содержат проверенный код."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:334
+#, no-wrap
+msgid "Donate code to reduce costs"
+msgstr "Пожертвовуйте код для снижения затрат"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:338
+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:339
+#, no-wrap
+msgid "Get support effectively"
+msgstr "Получайте поддержку эффективно"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:344
+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 ""
+"Для продуктов с жёсткими сроками рекомендуется нанять или заключить "
+"консультационное соглашение с разработчиком или компанией, имеющими опыт "
+"работы с FreeBSD. {freebsd-jobs} является полезным каналом связи для поиска "
+"специалистов. Проект FreeBSD поддерживает link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[галерею консультантов и консалтинговых компаний], "
+"занимающихся работой с FreeBSD. http://www.bsdcertification.org/[Группа "
+"сертификации BSD] предлагает сертификацию для всех основных ОС, производных "
+"от BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:348
+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 crossref:building-products[Ray2004,\"How to ask "
+"questions the smart way\"]."
+msgstr ""
+"Для менее критичных задач вы можете обратиться за помощью в link:https://"
+"lists.freebsd.org/[списки рассылки проекта]. Полезное руководство о том, как "
+"правильно задавать вопросы, приведено в crossref:building-"
+"products[Ray2004,\"Как правильно задавать вопросы\"]."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:348
+#, no-wrap
+msgid "Publicize your involvement"
+msgstr "Распространите информацию о вашем участии"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:350
+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 ""
+"Вы не обязаны афишировать своё использование FreeBSD, но это поможет как "
+"вашему делу, так и проекту."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:354
+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 ""
+"Позволяя сообществу FreeBSD узнать, что ваша компания использует FreeBSD, вы "
+"повышаете шансы привлечь высококвалифицированных специалистов. Большой "
+"список поддержки FreeBSD также означает большее внимание среди "
+"разработчиков. Это, в свою очередь, создает более устойчивую основу для "
+"вашего будущего."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:354
+#, no-wrap
+msgid "Support FreeBSD developers"
+msgstr "Поддержите разработчиков FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:360
+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 ""
+"Иногда самый прямой способ получить нужную функциональность в FreeBSD — это "
+"поддержать разработчика, который уже занимается связанной проблемой. Помощь "
+"может варьироваться от пожертвования оборудования до прямой финансовой "
+"поддержки. В некоторых странах пожертвования проекту FreeBSD имеют налоговые "
+"льготы. У проекта есть специальный link:https://www.FreeBSD.org/donations/"
+"[представитель по пожертвованиям], который помогает донорам. Также проект "
+"поддерживает веб-страницу, где разработчики link:https://www.FreeBSD.org/"
+"donations/wantlist/[указывают свои потребности]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:362
+msgid ""
+"As a policy the FreeBSD project extref:{contributors}[acknowledges] all "
+"contributions received on its web site."
+msgstr ""
+"В соответствии с политикой проекта FreeBSD, о всех полученных вкладах в "
+"любой форме на его веб-сайте делается extref:{contributors}[запись с "
+"благодарностью]."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:364
+#, no-wrap
+msgid "Conclusion"
+msgstr "Заключение"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:368
+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 ""
+"Цели проекта FreeBSD — создание и бесплатное распространение исходного кода "
+"высококачественной операционной системы. Сотрудничая с проектом FreeBSD, вы "
+"можете сократить затраты на разработку и ускорить вывод продукта на рынок в "
+"различных сценариях разработки."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:372
+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 ""
+"Мы рассмотрели характеристики проекта FreeBSD, которые делают его отличным "
+"выбором для включения в продуктовую стратегию организации. Затем мы изучили "
+"преобладающую культуру проекта и рассмотрели эффективные способы "
+"взаимодействия с его разработчиками. В завершение статьи был приведён список "
+"лучших практик, которые могут помочь организациям в сотрудничестве с "
+"проектом."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:376
+#, no-wrap
+msgid "Bibliography"
+msgstr "Библиография"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:379
+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[The "
+"Architectural Principles of the Internet] B. Carpenter. The Internet "
+"Architecture Board.The Internet Architecture Board. Copyright(R) 1996 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:381
+msgid ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
+"FreeBSD Project. Copyright(R) 2005."
+msgstr ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
+"FreeBSD Project. Copyright(R) 2005 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:383
+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[Innovation "
+"Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard "
+"Gabriel. Copyright(R) 2005 год. Morgan-Kaufmann."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:385
+msgid ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
+"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+msgstr ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
+"Project] Jordan Hubbard. Copyright(R) 1994-2005 гг. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:387
+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: A Technique for Eliminating "
+"Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory "
+"Ganger. Copyright(R) 1999 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:389
+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[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 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:391
+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}[Why you should use a BSD style "
+"license for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"Copyright(R) 2005 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:393
+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}[A project model for the FreeBSD "
+"Project] Niklas Saers. Copyright(R) 2005 год. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:395
+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 on Good "
+"Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:397
+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[Teach Yourself "
+"Programming in Ten Years] Peter Norvig. Copyright(R) 2001 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:399
+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[How "
+"to ask questions the smart way] Eric Steven Raymond. Copyright(R) 2004 год."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:400
+msgid ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+msgstr ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001 год. The FreeBSD Project."
diff --git a/documentation/content/ru/articles/committers-guide/_index.adoc b/documentation/content/ru/articles/committers-guide/_index.adoc
index 96448dfda8..fdc0635660 100644
--- a/documentation/content/ru/articles/committers-guide/_index.adoc
+++ b/documentation/content/ru/articles/committers-guide/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Справочник коммиттера
authors:
- - author: The FreeBSD Documentation Project
- - author: Дмитрий Морозовский
-copyright: 1999-2007 The FreeBSD Documentation Project
-trademarks: ["freebsd", "cvsup", "ibm", "intel", "sparc", "general"]
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '1999-2022 The FreeBSD Documentation Project'
+description: 'Вводная информация для коммиттеров FreeBSD'
+tags: "[\"FreeBSD Committer's Guide\", \"Guide\", \"Community\"]"
+title: 'Руководство коммиттера'
+trademarks: ["freebsd", "coverity", "git", "github", "gitlab", "ibm", "intel", "general"]
+weight: 25
---
-= Справочник коммиттера
+= Руководство коммиттера
:doctype: article
:toc: macro
:toclevels: 1
@@ -41,7 +44,11 @@ endif::[]
[.abstract-title]
Аннотация
-Данный документ содержит информацию для сообщества коммиттеров FreeBSD. Все новые коммиттеры должны изучить его перед началом работы; прочим коммиттерам также рекомендуется время от времени просматривать его.
+В этом документе представлена информация для сообщества коммиттеров FreeBSD. Все новые коммиттеры должны прочитать этот документ перед началом работы, а существующим коммиттерам настоятельно рекомендуется периодически его пересматривать.
+
+Почти все разработчики FreeBSD имеют права на коммит в один или несколько репозиториев. Однако некоторые разработчики не имеют таких прав, и часть информации здесь применима и к ним. (Например, некоторые люди имеют права только для работы с базой данных отчетов о проблемах.) Дополнительную информацию можно найти в crossref:committers-guide[non-committers, Вопросы, специфичные для разработчиков без прав на коммит].
+
+Этот документ также может быть интересен участникам сообщества FreeBSD, которые хотят узнать больше о том, как работает проект.
'''
@@ -51,1107 +58,3082 @@ toc::[]
== Административные детали
[.informaltable]
-[cols="20%,80%", frame="none"]
+[cols="1,1", frame="none"]
|===
-|__Хост основного репозитория__
-|`ncvs.FreeBSD.org`
+|_Способ логина_
+|man:ssh[1], только протокол версии 2
+
+|_Главный хост для входа в оболочку_
+|`freefall.FreeBSD.org`
-|__Способ авторизации__
-|man:ssh[1], только протокол 2
+|_Референсные машины_
+|`ref*.FreeBSD.org`, `universe*.freeBSD.org` (см. также ссылку link:https://www.FreeBSD.org/internal/machines/[Хосты проекта FreeBSD])
-|__Основной корень репозитория (CVSROOT)__
-|`ncvs.FreeBSD.org`: [.filename]#/home/ncvs# (см. также <<cvs.operations>>).
+|_Узел SMTP_
+|`smtp.FreeBSD.org:587` (см. также crossref:committers-guide[smtp-setup, Настройка доступа SMTP]).
-|__`{cvsadm}`__
-|`{peter}` и `{markm}`, а также `{joe}` и `{marcus}` для иерархии [.filename]#ports/#
+|`_src/_` Git-репозиторий
+|`ssh://git@gitrepo.FreeBSD.org/src.git`
-|__Списки рассылки__
-|{doc-developers-name}, {doc-committers-name}; {ports-developers-name}, {ports-committers-name}; {src-developers-name}, {src-committers-name}. (Каждому репозиторию проекта соответствуют отдельные списки рассылки с суффиксами -developers и -committers. Архивы этих списков хранятся в файлах [.filename]#/home/mail/repository-name-developers-archive# и [.filename]#/home/mail/repository-name-committers-archive# на машинах кластера `FreeBSD.org`).
+|`_doc/_` Git-репозиторий
+|`ssh://git@gitrepo.FreeBSD.org/doc.git`
-|__Отчеты Правления__
-|[.filename]#/home/core/public/monthly-report# на машинах кластера `FreeBSD.org`.
+|`_ports/_` Git-репозиторий
+|`ssh://git@gitrepo.FreeBSD.org/ports.git`
-|__Наиболее значимые метки CVS__
-|`RELENG_4` (ветвь 4.X-STABLE), `RELENG_5` (ветвь 5.X-STABLE), `RELENG_6` (ветвь 6.X-STABLE), `HEAD` (ветвь -CURRENT)
+|_Внутренние списки рассылки_
+|developers (технически называемый all-developers), doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (Каждый репозиторий проекта имеет свои собственные списки рассылки -developers и -committers. Архивы этих списков можно найти в файлах [.filename]#/local/mail/repository-name-developers-archive# и [.filename]#/local/mail/repository-name-committers-archive# на `freefall.FreeBSD.org`.)
+
+|_Ежемесячные отчеты основной команды (Core Team)_
+|[.filename]#/home/core/public/reports# на кластере `FreeBSD.org`.
+
+|_Ежемесячные отчеты команды управления портами_
+|[.filename]#/home/portmgr/public/monthly-reports# в кластере `FreeBSD.org`.
+
+|_Важные ветки Git в `src/`:_
+|`stable/n` (`n`-STABLE), `main` (-CURRENT)
|===
-Для авторизации на машины проекта вы должны использовать протоколы man:ssh[1] или man:telnet[1] с включенным Kerberos 5. В случае man:ssh[1], допустим только протокол версии 2. Эти протоколы являются значительно более защищенными по сравнению с man:telnet[1] или man:rlogin[1], поскольку информация об авторизации передается в зашифрованном виде. По умолчанию, протокол man:ssh[1] также шифрует весь трафик. Учитывая наличие таких утилит, как man:ssh-agent[1] и man:scp[1], протокол man:ssh[1] значительно удобнее прочих в использовании. Если вы ничего не знаете об man:ssh[1], загляните в раздел <<ssh.guide>>.
+Для подключения к хостам проекта требуется man:ssh[1]. Дополнительную информацию
+можно найти в crossref:committers-guide[ssh.guide, Руководстве по быстрому началу работы с SSH].
+
+Полезные ссылки:
+
+* link:https://www.FreeBSD.org/internal/[Внутренние страницы проекта FreeBSD]
+* link:https://www.FreeBSD.org/internal/machines/[Узлы проекта FreeBSD]
+* link:https://www.FreeBSD.org/administration/[Административные группы проекта FreeBSD]
+
+[[pgpkeys]]
+== Ключи OpenPGP для FreeBSD
+
+Криптографические ключи, соответствующие стандарту OpenPGP (__Pretty Good Privacy__), используются проектом FreeBSD для аутентификации коммиттеров. Сообщения, содержащие важную информацию, такие как публичные SSH-ключи, могут быть подписаны с помощью OpenPGP-ключа, чтобы доказать, что они действительно отправлены коммиттером. Дополнительную информацию можно найти в https://nostarch.com/releases/pgp_release.pdf[PGP & GPG: Email for the Practical Paranoid от Michael Lucas] и https://en.wikipedia.org/wiki/Pretty_Good_Privacy[].
+
+[[pgpkeys-creating]]
+=== Создание ключа
+
+Существующие ключи можно использовать, но сначала их следует проверить с помощью [.filename]#documentation/tools/checkkey.sh#. В этом случае убедитесь, что у ключа есть FreeBSD user ID.
+
+Для тех, у кого ещё нет ключа OpenPGP или требуется новый ключ, соответствующий требованиям безопасности FreeBSD, здесь показано, как его сгенерировать.
+
+[[pgpkeys-create-steps]]
+[.procedure]
+====
+. Установите [.filename]#security/gnupg#. Добавьте следующие строки в [.filename]#~/.gnupg/gpg.conf#, чтобы задать минимально приемлемые настройки для подписи и предпочтений новых ключей (подробнее см. в link:https://www.gnupg.org/documentation/manuals/gnupg/GPG-Options.html[документации по опциям GnuPG]):
++
+[.programlisting]
+....
+# Sorted list of preferred algorithms for signing (strongest to weakest).
+personal-digest-preferences SHA512 SHA384 SHA256 SHA224
+# Default preferences for new keys
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 CAST5 BZIP2 ZLIB ZIP Uncompressed
+....
+. Сгенерировать ключ:
++
+[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.
+....
+
+<.> 2048-битные ключи с трехлетним сроком действия обеспечивают достаточную защиту на данный момент (2022-10).
+
+<.> Срок действия ключа в три года достаточно мал, чтобы устаревшие ключи, ослабленные растущей мощностью компьютеров, перестали использоваться, но достаточно велик, чтобы уменьшить проблемы управления ключами.
+
+<.> Используйте здесь своё настоящее имя, предпочтительно совпадающее с указанным в удостоверении личности, выданном государством, чтобы другим было проще подтвердить вашу личность. Текст, который может помочь другим идентифицировать вас, можно ввести в раздел `Комментарий`.
++
+После ввода адреса электронной почты запрашивается парольная фраза. Методы создания безопасной парольной фразы вызывают споры. Вместо того чтобы предлагать один способ, вот несколько ссылок на сайты, описывающие различные методы: https://world.std.com/~reinhold/diceware.html[], https://www.iusmentis.com/security/passphrasefaq/[], https://xkcd.com/936/[], https://en.wikipedia.org/wiki/Passphrase[].
+====
+
+Защитите закрытый ключ и парольную фразу. Если закрытый ключ или парольная фраза могли быть скомпрометированы или раскрыты, немедленно уведомите mailto:accounts@FreeBSD.org[accounts@FreeBSD.org] и отзовите ключ.
+
+Фиксация нового ключа показана в crossref:committers-guide[commit-steps, Шаги для новых коммиттеров].
+
+[[kerberos-ldap]]
+== Kerberos и LDAP веб-пароль для кластера FreeBSD
+
+Кластер FreeBSD требует пароль Kerberos для доступа к определенным сервисам. Пароль Kerberos также служит веб-паролем LDAP, поскольку LDAP проксирует запросы к Kerberos в кластере. Некоторые из сервисов, требующих его, включают:
+
+* https://bugs.freebsd.org/bugzilla[Bugzilla]
+
+Для создания новой учетной записи Kerberos в кластере FreeBSD или сброса пароля Kerberos для существующей учетной записи с использованием генератора случайных паролей:
+
+[source, shell]
+....
+% ssh kpasswd.freebsd.org
+....
+
+[NOTE]
+====
+Это должно быть выполнено с компьютера за пределами кластера FreeBSD.org.
+====
+
+Пароль Kerberos также можно установить вручную, войдя в `freefall.FreeBSD.org` и выполнив:
+
+[source, shell]
+....
+% kpasswd
+....
+
+[NOTE]
+====
+Если ранее не использовались аутентифицированные через Kerberos службы кластера FreeBSD.org, будет отображено сообщение `Client unknown`. Эта ошибка означает, что сначала необходимо использовать метод `ssh kpasswd.freebsd.org`, показанный выше, для инициализации учётной записи Kerberos.
+====
[[committer.types]]
-== Типы коммит битов
+== Типы битов коммита (прав на коммит)
-CVS Репозиторий FreeBSD состоит из нескольких разделов, охватывающих исходные тексты базовой операционной системы, документацию, инфраструктуру построения внешних приложений (портов), а также различные служебные утилиты. Право записи в репозиторий ("коммит бит") подразумевает указание области дерева, в которое оно может быть применено. Как правило, области напрямую связаны с группой, подтвердившей право коммиттера на бит. В дальнейшем, область действия коммит бита может быть расширена; в этом случае, коммиттер должен следовать стандартным правилам нового для коммиттера в данной области, в частности, получая подтверждения на каждый коммит и, возможно, в течение какого-то времени работу с ментором.
+Репозиторий FreeBSD содержит ряд компонентов, которые в совокупности поддерживают исходный код базовой операционной системы, документацию, инфраструктуру портов сторонних приложений и различные поддерживаемые утилиты. При выделении прав на коммит (commit bits) в FreeBSD указываются области дерева, где эти права могут быть использованы. Как правило, области, связанные с правами, отражают, кто авторизовал их выделение. Дополнительные области полномочий могут быть добавлены позже: в этом случае коммиттер должен следовать стандартной процедуре выделения прав на коммит для соответствующей области дерева, получив одобрение от соответствующей инстанции и, возможно, наставника для этой области на некоторый период времени.
[.informaltable]
[cols="1,1,1", frame="none"]
|===
-|__Тип коммит бита__
-|__Ответственные__
-|__Области репозитория__
+|__Тип коммиттера__
+|__Ответственный__
+|__Компоненты дерева исходного кода__
|src
-|core@
-|src/ и соответствующие части doc/
+|srcmgr@
+|src/
|doc
|doceng@
-|doc/, www/, документация дерева src/
+|документация doc/, ports/, src/
|ports
|portmgr@
|ports/
|===
-Биты, выделенные до разделения дерева на области могут использоваться во всех частях дерева. Однако, с точки зрения здравого смысла, коммиттер, не имеющий опыта работы в какой-либо части дерева, должен предоставлять предлагаемые изменения для рассмотрения другими коммиттерами, получать подтверждения от ответственных за различные части репозитория, а также, возможно, работать совместно с ментором. Поскольку правила ведения различных областей кода различаются, указанные нормы скорее направлены на благо коммиттера, не имеющего достаточного опыта работы в данной области.
+Биты коммитов, выделенные до разработки концепции областей ответственности, могут быть подходящими для использования во многих частях дерева. Однако здравый смысл подсказывает, что коммиттер, ранее не работавший в определённой области дерева, должен перед коммитом получить рецензирование (review), согласование от соответствующего ответственного лица и/или работать с наставником. Поскольку правила поддержки кода различаются в зависимости от области дерева, это важно как для самого коммиттера, работающего в менее знакомой области, так и для других участников, работающих с деревом.
+
+Коммиттерам рекомендуется запрашивать рецензирование своей работы в рамках обычного процесса разработки, независимо от области дерева, в которой происходит работа.
+
+=== Политика активности коммиттеров в других деревьях
-Вне зависимости от области приложения усилий, запросы коммиттеров на рассмотрение предлагаемых изменений в процессе разработки могут только приветствоваться.
+* Все коммиттеры могут изменять файлы [.filename]#src/share/misc/committers-*.dot#, [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# и [.filename]#ports/astro/xearth/files#.
+* Документационные коммиттеры могут вносить изменения в документацию в файлы [.filename]#src#, такие как руководства, README, базы данных fortune, календарные файлы и исправления комментариев, без одобрения коммиттера src, при условии соблюдения обычных правил и внимания к коммитам.
+* Любой коммиттер может вносить изменения в любое другое дерево с пометкой "Approved by" от некурируемого коммиттера с соответствующими правами. Курируемые коммиттеры (имеющие наставника) могут предоставлять пометку "Reviewed by", но не "Approved by".
+* Коммиттеры могут получить дополнительный бит по обычному процессу: найти наставника, который предложит их srcmgr, doceng или portmgr, в зависимости от ситуации. После одобрения их добавят в 'access', и начнётся стандартный период наставничества, который будет включать продолжение отметки "Approved by" в течение некоторого времени.
-=== Правила для коммиттеров документации ([.filename]#doc/#) при работе с деревом исходных текстов ([.filename]#src/#)
+[[doc-blanket-approval]]
+==== Неявное (по умолчанию) одобрение для документации
-* Коммиттеры документации могут самостоятельно изменять документацию к исходным текстам, например, страницы справочника, файлы README, базы данных утилиты fortune, календарей, а также исправлять комментарии в исходных текстах без дополнительного согласования с коммиттерами исходных текстов, при условии сохранения здравого смысла и манеры коммитов.
-* Коммиттеры документации могут вносить незначительные изменения и исправления в исходные тексты (такие как исправления к процессу сборки, добавление малых дополнительных возможностей и т.п.) при наличии одобрения от коммиттера исходных текстов.
-* Коммиттер документации может расширить область действия своего бита на область исходных текстов (и стать, таким образом, коммиттером исходных текстов), найдя себе ментора, который предложит это расширение Правлению (Core). После одобрения, строка с его именем пользователя вносится в файл 'access', и применяются обычные правила периода работы с ментором, подразумевающие получение одобрения на каждый коммит.
-* Одобрение коммита ("Approved by") может производиться только "полновесным" (не работающим с ментором) коммиттером исходных текстов; последние могут рассматривать предлагаемые изменения и указываться в строке "Reviewed by".
+Некоторые типы исправлений имеют "одобрение по умолчанию" от {doceng}, что позволяет любому коммиттеру исправлять эти категории проблем в любой части дерева документации. Эти исправления не требуют одобрения или проверки от коммиттера документации, если у автора нет прав на коммит в документацию.
-[[cvs.operations]]
-== Работа с CVS
+Общее одобрение применяется к следующим типам исправлений:
+
+* Опечатки
+* Тривиальные исправления
++
+Пунктуация, URL-адреса, даты, пути и имена файлов с устаревшей или некорректной информацией, а также другие распространённые ошибки, которые могут ввести читателей в заблуждение.
-Подразумевается, что вы уже имеете опыт базовой работы с CVS.
+За годы в дереве документации были неявно одобрены некоторые случаи. Этот список показывает наиболее распространённые из них:
-`{cvsadm}` являются "владельцами" репозитория CVS и ответственны за все прямые его изменения (в целях чистки или исправления каких-либо вопиющих ошибок коммиттеров при работе с CVS). Если в результате ваших действий с частью репозитория произошел несчастный случай, например, после неверной операции `cvs import` или `cvs tag`, пошлите письмо соответствующей подгруппе `{cvsadm}` (см. следующую таблицу) и сообщите о проблеме. В наиболее серьезных случаях, касающихся не только какой-либо части репозитория, а дерева CVS в целом, вы можете написать `{cvsadm}`. Пожалуйста, _не надо_ писать группе `{cvsadm}` по поводу репозиторного копирования и прочих вопросов, которые может решить соответствующая подгруппа.
+* Изменения в [.filename]#documentation/content/ru/books/porters-handbook/versions/_index.adoc#
++
+extref:{porters-handbook}versions[Значения __FreeBSD_version (Руководство по созданию портов)], в основном используется коммиттерами src.
+* Изменения в [.filename]#doc/shared/contrib-additional.adoc#
++
+Сопровождение раздела extref:{contributors}[Дополнительные участники FreeBSD, contrib-additional].
+* Все link:#commit-steps[Шаги для новых коммиттеров], связанные с документацией
+* Рекомендации по безопасности; Уведомления об ошибках; Релизы;
++
+{security-officer} и {re} используют эти разделы.
+* Изменения в [.filename]#website/content/ru/donations/donors.adoc#
++
+{donations} использует этот документ.
-[[repomeisters]]Напрямую изменять содержимое репозитория может только группа CVS-мастеров; для обеспечения этого, только CVS-мастера имеют учетные записи на машинах, поддерживающих основной репозиторий.
+Перед любым коммитом необходимо выполнить тестовую сборку; подробности см. в разделах «Обзор» и «Процесс сборки документации FreeBSD» extref:{fdp-primer}[Руководства для новых участников проекта документации FreeBSD].
+
+[[git-primer]]
+== Руководство по Git
+
+[[git-basics]]
+=== Основы Git
+
+При поиске по ключевым словам "Git Primer" можно найти множество хороших материалов. Страницы Дэниела Милера link:https://danielmiessler.com/study/git/[Введение в Git] и Вилли Виллуса link:https://gist.github.com/williewillus/068e9a8543de3a7ef80adb2938657b6b[Git - Краткое введение] являются хорошими обзорами. Книга по Git также полная, но гораздо длиннее: https://git-scm.com/book/en/v2. Также обратите внимание на сайт https://dangitgit.com/, посвящённый распространённым ловушкам и подводным камням Git, на случай, если вам нужно исправить ошибки. Наконец, введение, link:https://eagain.net/articles/git-for-computer-scientists/[ориентированное на компьютерных учёных], оказалось полезным для некоторых в объяснении мировоззрения Git.
+
+Этот документ предполагает, что вы уже читали про это, и постарается не повторять основы (хотя кратко их рассмотрит).
+
+[[git-mini-primer]]
+=== Мини-руководство по Git
+
+Это руководство имеет менее амбициозные цели, чем старое руководство по Subversion, но должно охватить основы.
+
+==== Область применения
+
+Если вы хотите загрузить FreeBSD, собрать его из исходных кодов и в целом поддерживать актуальность таким способом, это руководство для вас. Оно охватывает получение исходных кодов, их обновление, бинарный поиск (bisect) и кратко затрагивает способы работы с локальными изменениями. В нём изложены основы, а также даны полезные ссылки на более глубокие материалы для случаев, когда читателю будет недостаточно базовой информации. Другие разделы этого руководства посвящены более сложным темам, связанным с участием в проекте.
+
+Цель этого раздела — выделить те аспекты Git, которые необходимы для отслеживания исходных кодов. Предполагается базовое понимание Git. В интернете есть множество вводных руководств по Git, но https://git-scm.com/book/en/v2[Книга по Git] предлагает одно из лучших изложений.
+
+[[git-mini-primer-getting-started]]
+==== Начало работы для разработчиков
+
+Этот раздел описывает доступ на чтение и запись для коммиттеров, чтобы отправлять коммиты от разработчиков или контрибьюторов.
+
+[[git-mini-daily-use]]
+===== Повседневное использование
[NOTE]
====
-Адреса, на которые следует посылать запросы, зависят от области репозитория, которую требуется поправить:
+В приведенных ниже примерах замените `${repo}` на имя нужного репозитория FreeBSD: `doc`, `ports` или `src`.
+====
+
+* Клонировать репозиторий:
++
+[source, shell]
+....
+% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/${repo}.git
+....
++
+В результате у вас в качестве удалённых (remote) должны быть официальные зеркала:
++
+[source, shell]
+....
+% git remote -v
+freebsd https://git.freebsd.org/${repo}.git (fetch)
+freebsd https://git.freebsd.org/${repo}.git (push)
+....
+
+* Настройка данных коммиттера FreeBSD:
++
+Хук для коммита в repo.freebsd.org проверяет, что поле "Commit" соответствует информации о коммиттере в FreeBSD.org. Самый простой способ получить предлагаемую конфигурацию — выполнить скрипт `/usr/local/bin/gen-gitconfig.sh` на freefall:
++
+[source, shell]
+....
+% gen-gitconfig.sh
+[...]
+% git config user.name (your name in gecos)
+% git config user.email (your login)@FreeBSD.org
+....
+
+* Установите URL для отправки (push URL):
++
+[source, shell]
+....
+% git remote set-url --push freebsd git@gitrepo.freebsd.org:${repo}.git
+....
++
+В таком случае у вас должны быть раздельные URL для извлечения (fetch) и отправки (push) как наиболее эффективная настройка:
++
+[source, shell]
+....
+% git remote -v
+freebsd https://git.freebsd.org/${repo}.git (fetch)
+freebsd git@gitrepo.freebsd.org:${repo}.git (push)
+....
++
+Еще раз обратите внимание, что `gitrepo.freebsd.org` является псевдонимом для `repo.freebsd.org`.
-* ncvs@ - репозиторий [.filename]#/home/ncvs#, основные исходные тексты
-* pcvs@ - репозиторий [.filename]#/home/pcvs#, порты
-* dcvs@ - репозиторий [.filename]#/home/dcvs#, документация
-* projcvs@ - репозиторий [.filename]#/home/projcvs#, прочие проекты
+* Установка хука для шаблона сообщения коммита:
++
+Для репозитория документации:
++
+[source, shell]
+....
+% cd .git/hooks
+% ln -s ../../.hooks/prepare-commit-msg
+....
++
+Для репозитория портов:
++
+[source, shell]
+....
+% git config --add core.hooksPath .hooks
+....
++
+Для репозитория src:
++
+[source, shell]
+....
+% cd .git/hooks
+% ln -s ../../tools/tools/git/hooks/prepare-commit-msg
+....
+
+[[admin-branch]]
+===== Ветка "admin"
+
+Файлы `access` и `mentors` хранятся в отдельной (orphan) ветке `internal/admin` в каждом репозитории.
+
+Следующий пример показывает, как переключиться (check out) на ветку `internal/admin` в локальной ветке с именем `admin`:
+
+[source, shell]
+....
+% git config --add remote.freebsd.fetch '+refs/internal/*:refs/internal/*'
+% git fetch
+% git checkout -b admin internal/admin
+....
+В качестве альтернативы вы можете добавить рабочее дерево для ветки `admin`:
+
+[source, shell]
+....
+git worktree add -b admin ../${repo}-admin internal/admin
+....
+
+Для просмотра ветки `internal/admin` в веб-интерфейсе: `https://cgit.freebsd.org/${repo}/log/?h=internal/admin`
+
+Для отправки (push) укажите полную спецификацию ссылки:
+
+[source, shell]
+....
+git push freebsd HEAD:refs/internal/admin
+....
+
+==== Как поддерживать актуальную копию дерева исходных кодов FreeBSD src
+[[keeping_current]]
+Первый шаг: клонирование дерева. Это загружает всё дерево целиком. Существует два способа загрузки. Большинству пользователей потребуется глубокое клонирование репозитория. Однако бывают случаи, когда может потребоваться поверхностное клонирование.
+
+===== Названия веток
+FreeBSD-CURRENT использует ветку `main`.
+
+`main` — это ветка по умолчанию.
+
+Для FreeBSD-STABLE названия веток включают `stable/12` и `stable/13`.
+
+Для FreeBSD-RELEASE, названия веток разработки выпусков включают `releng/12.4` и `releng/13.2`.
+
+https://www.freebsd.org/releng/[] отображает:
+
+* ветки `main` и `stable/⋯` открыты
+* ветки `releng/⋯`, каждая из которых замораживается при создании тега релиза.
+
+Примеры:
+
+* тег https://cgit.freebsd.org/src/tag/?h=release/13.1.0[release/13.1.0] на ветке https://cgit.freebsd.org/src/log/?h=releng/13.1[releng/13.1]
+* тег https://cgit.freebsd.org/src/tag/?h=release/13.2.0[release/13.2.0] на ветке https://cgit.freebsd.org/src/log/?h=releng/13.2[releng/13.2].
+
+===== Репозитории
+Пожалуйста, обратитесь к разделу crossref:committers-guide[admin,Административные детали] для получения актуальной информации о том, где взять исходные коды FreeBSD. Значение $URL ниже можно получить с этой страницы.
+
+Примечание: Проект не использует подмодули, так как они плохо подходят для наших рабочих процессов и модели разработки. То, как мы отслеживаем изменения в сторонних приложениях, обсуждается в другом месте и, как правило, мало интересует обычного пользователя.
+
+===== Полный клон
+Полный клон загружает всё дерево целиком, включая всю историю и ветки. Это самый простой способ. Он также позволяет использовать функцию Git `worktree`, чтобы все активные ветки были извлечены в отдельные каталоги, но с единственной копией репозитория.
+[source, shell]
+....
+% git clone -o freebsd $URL -b branch [<directory>]
+....
+-- создаст полную копию. `branch` должна быть одной из веток, перечисленных в предыдущем разделе. Если параметр `branch` не указан: будет использоваться ветка по умолчанию (`main`). Если параметр `<directory>` не указан: имя нового каталога будет соответствовать имени репозитория ([.filename]#doc#, [.filename]#ports# или [.filename]#src#).
+
+Вам понадобится полный клон, если вас интересует история, вы планируете вносить локальные изменения или работать более чем с одной веткой. Это также самый простой способ поддерживать актуальность. Если вас интересует история, но вы работаете только с одной веткой и у вас мало места, вы также можете использовать `--single-branch`, чтобы загрузить только одну ветку (хотя некоторые коммиты слияния не будут ссылаться на ветку, из которой произошло слияние, что может быть важно для некоторых пользователей, интересующихся детальными версиями истории).
+
+===== Частичный клон
+
+Частичный клон копирует только самый актуальный код, но не включает или включает лишь малую часть истории. Это может быть полезно, когда вам нужно собрать определённую ревизию FreeBSD или когда вы только начинаете и планируете более полно отслеживать дерево. Также вы можете использовать его, чтобы ограничить историю только определённым количеством ревизий. Однако обратите внимание на существенное ограничение этого подхода, описанное ниже.
+
+[source, shell]
+....
+% git clone -o freebsd -b branch --depth 1 $URL [dir]
+....
+
+Это клонирует репозиторий, но будет содержать только самую последнюю версию в репозитории. Остальная история не загружается. Если позже вы передумаете, вы можете выполнить `git fetch --unshallow`, чтобы получить старую историю.
+
+[WARNING]
+====
+При частичном клонировании вы потеряете счетчик коммитов в выводе команды uname. Это может затруднить определение необходимости обновления системы при выпуске бюллетеня безопасности.
====
-Дерево CVS в настоящее время разделено на четыре независимых репозитория: `doc`, `ports`, `projects` и `src`. Для удобства работы пользователей при распространении через CVSup различные деревья комбинируются в одно, с одним служебным каталогом `CVSROOT`.
+===== Сборка
-[NOTE]
+После загрузки сборка выполняется так, как описано в руководстве, например:
+[source, shell]
+....
+% cd src
+% make buildworld
+% make buildkernel
+% make installkernel
+% make installworld
+....
+так что здесь это не будет рассматриваться подробно.
+
+Если вы хотите собрать собственное ядро, в extref:{handbook}kernelconfig[разделе конфигурации ядра, kernelconfig] руководства FreeBSD рекомендуется создать файл MYKERNEL в sys/${ARCH}/conf с вашими изменениями на основе GENERIC. Чтобы Git игнорировал MYKERNEL, его можно добавить в .git/info/exclude.
+
+===== Обновление
+
+Для обновления обоих типов деревьев используются одинаковые команды. Это загружает (pull) все изменения, сделанные после последнего обновления.
+[source, shell]
+....
+% git pull --ff-only
+....
+обновит дерево. В Git 'перемотка' (fast forward) — это слияние, которое только перемещает указатель ветки и не требует пересоздания коммитов. Если всегда выполнять слияние/загрузку (merge/pull) с перемоткой, это гарантирует точную копию дерева FreeBSD. Это важно, если вы хотите поддерживать локальные патчи.
+
+См. ниже, как управлять локальными изменениями. Самый простой способ — использовать `--autostash` в команде `git pull`, но доступны и более сложные варианты.
+
+==== Выбор конкретной версии
+
+В Git команда `git checkout` используется для переключения как между ветками, так и между конкретными версиями. Версии в Git представляют собой длинные хеши, а не последовательные номера.
+
+Когда вы извлекаете конкретную версию, просто укажите нужный хэш в командной строке (команда `git log` может помочь вам определиться, какой хэш выбрать):
+[source, shell]
+....
+% git checkout 08b8197a74
+....
+и вам это скопировано (checkout). Вы увидите сообщение, похожее на следующее:
+[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
+....
+где последняя строка формируется из хэша, который вы использовали для извлечения рабочей копии, и первой строки сообщения коммита из этой ревизии. Хэш может быть сокращен до минимальной уникальной длины. Сам Git не всегда последователен в том, сколько цифр он отображает.
+
+==== Бинарный поиск (bisect)
+Иногда что-то идёт не так. Последняя версия работала, но только что обновлённая — нет. Разработчик может попросить вас провести бинарный поиск проблемы, чтобы определить, какой коммит вызвал регрессию.
+
+Git упрощает поиск изменений с помощью мощной команды `git bisect`. Вот краткое описание, как её использовать. Для получения дополнительной информации вы можете посмотреть https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-elimination или https://git-scm.com/docs/git-bisect. Страница man git-bisect хорошо описывает, что может пойти не так, что делать, когда версии не собираются, в каких ситуациях вам лучше использовать другие условия поиска, а не 'хорошо (good)' и 'плохо (bad)', и так далее, но это здесь не будет рассматриваться.
+
+`git bisect start --first-parent` запустит процесс бинарного поиска. Далее необходимо указать диапазон для проверки. `git bisect good XXXXXX` укажет рабочую версию, а `git bisect bad XXXXX` — нерабочую версию. Нерабочая версия почти всегда будет HEAD (специальный тег для текущего состояния). Рабочая версия будет последней, которую вы проверяли. Аргумент `--first-parent` необходим, чтобы последующие команды `git bisect` не пытались переключиться на ветку вендора, в которой отсутствует полное дерево исходников FreeBSD.
+
+[TIP]
====
-Обратите внимание, что модуль `www`, содержащий исходные тексты http://www.FreeBSD.org[веб-сайта FreeBSD], расположен в репозитории `doc`.
+Если вы хотите узнать последнюю версию, которую вы извлекли, используйте `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
+...
+....
+показывает, как я перемещаю рабочее дерево в ветку `main` (a816...) и затем обновляю его из вышестоящего репозитория (до 5ef0...). В этом случае, bad будет HEAD (или 5ef0bd68b515), а good — a8163e165c5b. Как видно из вывода, HEAD@{1} также часто работает, но не является безошибочным, если вы выполняли другие действия с деревом Git после обновления, но до того, как обнаружили необходимость в бинарном поиске.
====
-В настоящее время, все репозитории CVS располагаются на одной машине, `ncvs.FreeBSD.org`, однако, для обеспечения возможности в будущем разнести их по физически различным машинам, для каждой поддерживается отдельное имя хоста. Их и следует использовать коммиттерам. Наконец, каждый репозиторий расположен в отдельном каталоге. В итоге, общая картина выглядит так:
-[[cvs-repositories-and-hosts]]
-.Репозитории CVS FreeBSD, хосты и каталоги
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Репозиторий
-| Хост
-| Каталог
+Установите сначала «хорошую» версию, затем установите «плохую» (хотя порядок не имеет значения). При установке «плохой» версии вы получите некоторую статистику по процессу:
+[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.
+....
-|doc
-|dcvs.FreeBSD.org
-|/home/dcvs
+Затем вы собираете и устанавливаете эту версию. Если она работает корректно, введите `git bisect good`, в противном случае — `git bisect bad`. Если версия не компилируется, введите `git bisect skip`. После каждого шага вы будете получать сообщение, аналогичное приведённому выше. По завершении сообщите о проблемной версии разработчику (или исправьте ошибку самостоятельно и отправьте патч). Команда `git bisect reset` завершит процесс и вернёт вас туда, откуда вы начали (обычно на вершину ветки `main`). Ещё раз, руководство по git-bisect (ссылка выше) — это хороший ресурс на случай возникновения проблем или нестандартных ситуаций.
-|ports
-|pcvs.FreeBSD.org
-|/home/pcvs
+[[git-gpg-signing]]
+==== Подписание коммитов, тегов и отправок с помощью GnuPG
-|projects
-|projcvs.FreeBSD.org
-|/home/projcvs
+Git умеет подписывать коммиты, теги и отправки (push). Когда вы подписываете Git-коммит или тег, вы можете доказать, что отправленный код действительно принадлежит вам и не был изменён во время передачи. Вы также можете подтвердить, что именно вы отправили код, а не кто-то другой.
-|src
-|ncvs.FreeBSD.org
-|/home/ncvs
-|===
+Более подробная документация по подписанию коммитов и тегов доступна в главе https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work[Инструменты Git - Подписание вашей работы] книги по Git.
-Операции с CVS производятся удаленно, путем установки переменной окружения `CVSROOT` (она должна указывать на соответствующий хост и каталог верхнего уровня, например `ncvs.FreeBSD.org``:`[.filename]#/home/ncvs#) и последующего выполнения команд выгрузки и коммита. Многие коммиттеры определяют команды-синонимы, разворачивающиеся в запуск CVS с правильными параметрами. В частности, пользователи оболочки man:tcsh[1] могут добавить следующие строки в свой скрипт начальной загрузки [.filename]#.cshrc#:
+Обоснование подписания отправок можно найти в https://github.com/git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[коммите, где представлена эта функция].
-[.programlisting]
+Лучший способ — просто указать Git, что вы всегда хотите подписывать коммиты, теги и отправки. Это можно сделать, установив несколько переменных конфигурации:
+
+[source, shell]
....
-alias dcvs cvs -d user@dcvs.FreeBSD.org:/home/dcvs
-alias pcvs cvs -d user@pcvs.FreeBSD.org:/home/pcvs
-alias projcvs cvs -d user@projcvs.FreeBSD.org:/home/projcvs
-alias scvs cvs -d user@ncvs.FreeBSD.org:/home/ncvs
+% 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
....
-Теперь все операции с CVS могут выполняться на локальной машине, а для внесения изменений в официальное дерево CVS следует использовать команду `__X__cvs commit`. Если вам нужно добавить в проект что-либо совершенно новое (например, исходные тексты сторонних разработчиков), нужно использовать команду `cvs import`; обратитесь к странице справочника по man:cvs[1] за подробностями.
+// 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]
+======
+Чтобы избежать возможных конфликтов, убедитесь, что вы указали длинный идентификатор ключа для Git. Вы можете получить длинный идентификатор с помощью команды: `gpg --list-secret-keys --keyid-format LONG`.
+======
+
+[TIP]
+======
+Для использования конкретных подключей, без разрешения GnuPG подключей в первичный ключ, добавьте `!` к ключу. Например, для шифрования с подключом `DEADBEEF` используйте `DEADBEEF!`.
+======
+
+===== Проверка подписей
+
+Подпись коммита можно проверить, выполнив команду `git verify-commit <хэш коммита>` или `git log --show-signature`.
+
+Подписи тегов можно проверить с помощью `git verify-tag <имя тега>` или `git tag -v <имя тега>`.
+
+////
+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
+
+////
+
+==== Особенности портов
+Дерево портов работает аналогичным образом. Названия ветвей отличаются, и репозитории расположены в других местах.
+
+Веб-интерфейс cgit для работы в браузере доступен по адресу https://cgit.FreeBSD.org/ports/ . Рабочий репозиторий Git находится по адресу https://git.FreeBSD.org/ports.git и ssh://anongit@git.FreeBSD.org/ports.git (или `anongit@git.FreeBSD.org:ports.git`).
+
+Также доступно зеркало на GitHub, см. extref:{handbook}/mirrors[Внешние зеркала, mirrors] для обзора. Ветка _latest_ называется `main`. Ветки _quarterly_ именуются `yyyyQn`, где 'yyyy' — год, а 'n' — квартал.
+
+[[port-commit-message-formats]]
+===== Форматы сообщений коммитов
+
+В репозитории портов доступен перехватчик, который помогает оформлять сообщения коммитов в https://cgit.freebsd.org/ports/tree/.hooks/prepare-commit-msg[.hooks/prepare-commit-message]. Его можно включить, выполнив команду ``git config --add core.hooksPath .hooks``.
+
+Основная идея заключается в том, что сообщение коммита должно быть оформлено следующим образом:
+
+....
+category/port: Summary.
+
+Description of why the changes where made (Объяснение, почему были сделаны изменения ).
+
+PR: 12345
+....
+
+[IMPORTANT]
====
-Пожалуйста, _не используйте_ команды `cvs checkout` или `cvs update` для синхронизации ваших исходных текстов. Протокол CVS не оптимизирован для удаленной работы и требует значительных накладных расходов со стороны сервера. Пожалуйста, используйте метод синхронизации посредством `cvsup`, а основной хост используйте только для собственно коммитов. Наша распределенная сеть серверов cvsup достаточно развита. При необходимости синхронизации с самыми свежими изменениями вы можете пользоваться машиной `cvsup-master`, которая обладает достаточными ресурсами для удаленной работы с CVS; за нее отвечает `{kuriyama}`.
+Первая строка — это тема коммита, в ней указывается, какой порт был изменён, и краткое описание коммита. Она должна содержать 50 символов или меньше.
+
+Пустая строка должна отделять его от остальной части сообщения о коммите.
+
+Остальная часть сообщения о коммите должна быть перенесена на границе 72 символов.
+
+Еще одна пустая строка должна быть добавлена, если есть какие-либо поля метаданных, чтобы их можно было легко отличить от сообщения о коммите.
====
-Если вам нужно использовать команды CVS `add` и `delete`, так чтобы в реальности переместить часть исходных текстов подобно действию команды man:mv[1], нужно запросить операцию "репозиторного копирования" (repository copy). При этом кто-либо из <<repomeisters,CVS-мастеров>> скопирует необходимые файлы внутри репозитория на нужное место и даст вам знать об этом. Репозиторное копирование производится для сохранения истории (журналов изменения). Возможность отследить историю изменений очень ценна для всего проекта FreeBSD.
+==== Управление локальными изменениями
+Этот раздел посвящен отслеживанию локальных изменений. Если у вас нет локальных изменений, вы можете пропустить этот раздел.
-Документация по CVS, учебные материалы и FAQ можно найти по адресу: http://www.cvshome.org/docs/[http://www.cvshome.org/docs/]. Очень полезна также книга Карла Фогеля (Karl Fogel) http://cvsbook.red-bean.com/cvsbook.html[Open Source Development with CVS]. Некоторая полезная информация о CVS на русском языке может быть найдена http://alexm.here.ru/cvs-ru/[здесь].
+Один важный момент для всех: все изменения остаются локальными, пока они не будут отправлены (push). В отличие от Subversion, Git использует распределённую модель. Для пользователей в большинстве случаев разница невелика. Однако, если у вас есть локальные изменения, вы можете использовать тот же инструмент для управления ими, что и для получения изменений из FreeBSD. Все изменения, которые вы не отправили, являются локальными и могут быть легко изменены (это делает git rebase, обсуждаемый ниже).
-`{des}` написал такой "мини-пример" работы с CVS:
+===== Сохранение локальных изменений
+Самый простой способ сохранить локальные изменения (особенно незначительные) — использовать `git stash`. В простейшем случае вы используете `git stash`, чтобы записать изменения (что помещает их в стек stash). Большинство людей используют это для сохранения изменений перед обновлением дерева, как описано выше. Затем они используют `git stash apply`, чтобы повторно применить изменения к дереву. Stash представляет собой стек изменений, который можно просмотреть с помощью `git stash list`. Подробности приведены в man-странице git-stash (https://git-scm.com/docs/git-stash).
-. Извлечение нужного модуля из репозитория: команда `co` или `checkout`.
-+
-[source,shell]
+Этот метод подходит, когда у вас есть небольшие изменения в дереве. Если у вас что-то более сложное, вероятно, лучше будет создать локальную ветку и выполнять перебазирование. Сохранение изменений также интегрировано в команду `git pull`: просто добавьте `--autostash` в командную строку.
+
+===== Сохранение локальной ветки
+[[keeping_a_local_branch]]
+С помощью Git гораздо проще поддерживать локальную ветку, чем в Subversion. В Subversion необходимо выполнять коммит слияния и разрешать конфликты. Это выполнимо, но может привести к запутанной истории изменений, которую будет сложно передать в вышестоящий репозиторий, если это потребуется, или сложно воспроизвести при необходимости. Git также позволяет выполнять коммит слияния, но с теми же проблемами. Это один из способов управления веткой, но наименее гибкий.
+
+В дополнение к слиянию, Git поддерживает концепцию «перебазирования» (rebase), которая позволяет избежать этих проблем. Команда `git rebase` воспроизводит все коммиты ветки в конце родительской ветки. Мы рассмотрим наиболее распространённые сценарии, возникающие при её использовании.
+
+====== Создать ветку
+
+Предположим, вы хотите внести изменение в команду `ls` FreeBSD, чтобы она никогда не использовала цветовое выделение. Существует множество причин для этого, но в данном примере мы будем использовать это в качестве базового сценария. Команда `ls` в FreeBSD периодически изменяется, и вам нужно будет адаптироваться к этим изменениям. К счастью, с помощью `git rebase` это обычно происходит автоматически.
+[source, shell]
....
-% cvs checkout shazam
+% 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
....
-+
-Эта команда извлечет копию модуля [.filename]#shazam#. Если модуль с таким именем не существует (не описан в файле modules), будет произведена попытка извлечь директорию верхнего уровня [.filename]#shazam#.
-+
-.Полезные опции команды `cvs checkout`
-[cols="1,1", frame="none"]
-|===
-|`-P`
-|Не создавать (точнее, удалить после завершения выполнения) пустые каталоги
-|`-l`
-|Извлекать один уровень каталогов (без подкаталогов)
-|`-r__rev__`
-|Извлечь ревизию, ветвь или тег _rev_ для указанного модуля
+Коммит откроет редактор, чтобы описать выполненные изменения. После ввода описания у вас будет собственная **локальная** ветка в Git-репозитории. Соберите и установите изменения, как обычно, следуя указаниям в руководстве. Git отличается от других систем контроля версий тем, что нужно явно указывать, какие файлы коммитить. Я предпочитаю делать это в командной строке коммита, но также можно использовать `git add`, как описано в более подробных руководствах.
-|`-D__date__`
-|Извлечь состояние модуля в репозитории на момент _date_
-|===
-+
-Примеры в применении к FreeBSD:
+====== Время обновить
-** Извлечь модуль [.filename]#miscfs#, расположенный в каталоге репозитория [.filename]#src/sys/miscfs#:
-+
-[source,shell]
+Когда приходит время внедрить новую версию, процесс почти такой же, как и без веток. Вы выполняете обновление, как описано выше, но перед обновлением нужно выполнить одну дополнительную команду и одну после. Ниже предполагается, что вы начинаете с неизменённого дерева. Важно начинать операции перебазирования с чистого дерева (Git требует этого).
+
+[source, shell]
....
-% cvs co miscfs
+% git checkout main
+% git pull --ff-only
+% git rebase -i main no-color-ls
....
-+
-После выполнения вы получите каталог [.filename]#miscfs#, содержащий подкаталоги [.filename]#CVS#, [.filename]#deadfs#, [.filename]#devfs# и т.д. Один из них ([.filename]#linprocfs#) будет пустым.
-** Извлечь те же файлы, но с полным путем:
-+
-[source,shell]
+
+Это откроет редактор, в котором будут перечислены все коммиты. В данном примере не изменяйте его содержимое. Обычно это делается при обновлении базовой версии (хотя также можно использовать команду Git rebase для управления коммитами в ветке).
+
+После завершения вышеуказанных действий необходимо перенести коммиты для `ls.c` со старой версии FreeBSD на новую.
+
+Иногда возникают конфликты слияния. Это нормально. Не паникуйте. Вместо этого решайте их так же, как и любые другие конфликты слияния. Чтобы упростить, я опишу лишь распространённую проблему, которая может возникнуть. Ссылка на полное руководство приведена в конце этого раздела.
+
+Допустим, изменения включают переход на terminfo в вышестоящем коде, а также изменение названия опции. При обновлении вы можете увидеть следующее:
+[source, shell]
....
-% cvs co src/sys/miscfs
+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
....
-+
-Теперь у вас есть каталог [.filename]#src#, содержащий подкаталоги [.filename]#CVS# и [.filename]#sys#. Каталог [.filename]#src/sys# содержит подкаталоги [.filename]#CVS# и [.filename]#miscfs# и т.д.
-** Извлечь те же файлы, удалив при этом пустые подкаталоги:
-+
-[source,shell]
+что выглядит пугающе.
+
+Если открыть редактор, вы увидите типичное разрешение конфликта с трёхсторонним слиянием, с которым вы могли сталкиваться в других системах управления исходным кодом (остальная часть ls.c опущена):
+[source, shell]
....
-% cvs co -P miscfs
+ <<<<<<< HEAD
+ #ifdef COLORLS_NEW
+ #include <terminfo.h>
+ =======
+ #undef COLORLS
+ #ifdef COLORLS
+ #include <termcap.h>
+ >>>>>>> 646e0f9cda11... no color ls
....
-+
-Вы получите каталог [.filename]#miscfs# с подкаталогами [.filename]#CVS#, [.filename]#deadfs#, [.filename]#devfs#... однако без подкаталога [.filename]#linprocfs#, поскольку он не содержит файлов.
-** Извлечь каталог [.filename]#miscfs# без подкаталогов:
-+
-[source,shell]
+
+Новый код идет первым, а ваш код - вторым.
+
+Правильное решение здесь — просто добавить `#undef COLORLS_NEW` перед `#ifdef`, а затем удалить старые изменения:
+[source, shell]
....
-% cvs co -l miscfs
+#undef COLORLS_NEW
+#ifdef COLORLS_NEW
+#include <terminfo.h>
....
-+
-Теперь в каталоге [.filename]#miscfs# будет только один подкаталог [.filename]#CVS#.
-** Извлечь модуль [.filename]#miscfs# из ветви 6.X:
-+
-[source,shell]
+и сохранить файл.
+
+Ребазирование было прервано, поэтому вам необходимо завершить его:
+[source, shell]
....
-% cvs co -rRELENG_6 miscfs
+% git add ls.c
+% git rebase --continue
....
-+
-Теперь вы можете изменить исходные тексты и произвести коммит в эту ветвь.
-** Извлечь модуль [.filename]#miscfs# по состоянию на момент выхода 6.0-RELEASE:
-+
-[source,shell]
+
+что указывает Git, что файл `ls.c` исправлен и можно продолжить операцию перебазирования. Поскольку возник конфликт, система откроет редактор для обновления сообщения коммита (если это необходимо). Если сообщение коммита по-прежнему корректно, просто закройте редактор.
+
+Если вы застряли в процессе перебазирования, не паникуйте. Команда `git rebase --abort` вернёт вас к исходному состоянию. Однако важно начинать с неизменённого дерева. Примечание: упомянутая выше команда `git reflog` будет полезна в этой ситуации, так как она содержит список всех (промежуточных) коммитов, которые вы можете просмотреть, изучить или выбрать через `cherry-pick`.
+
+Для более подробного ознакомления с этой темой, см. довольно обширное руководство по адресу: https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/. Этот ресурс будет полезен для решения проблем, которые возникают нечасто, но слишком специфичны для данного руководства.
+
+===== Переключение на другую ветку FreeBSD
+Если вы хотите перейти с ветки stable/12 на ветку current и у вас есть полный клон репозитория, будет достаточно выполнить следующую команду:
+[source, shell]
....
-% cvs co -rRELENG_6_0_0_RELEASE miscfs
+% git checkout main
+% # build and install here...
....
-+
-В этом случае вы не сможете внести изменения в репозиторий, поскольку `RELENG_6_0_0_RELEASE` описывает момент времени, а не ветвь разработки.
-** Извлечь модуль [.filename]#miscfs# по состоянию на 15 января 2000 г:
-+
-[source,shell]
+Однако, если у вас есть локальная ветка, есть несколько важных замечаний. Во-первых, перебазирование переписывает историю, поэтому вам, скорее всего, захочется сохранить её каким-либо образом. Во-вторых, переключение между ветками часто вызывает больше конфликтов. Если предположить, что приведённый выше пример относился к ветке stable/12, то для перехода на ветку `main` я бы рекомендовал следующее:
+[source, shell]
....
-% cvs co -D'01/15/2000' miscfs
+% 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
....
-+
-Как и в предыдущем случае, изменения не могут быть записаны.
-** Извлечь модуль [.filename]#miscfs#, каким он был неделю назад:
-+
-[source,shell]
+
+Что делает вышеописанное: извлекается ветка no-color-ls. Затем для неё создаётся новое имя (no-color-ls-stable-12) на случай, если потребуется вернуться к ней. После этого выполняется перебазирование на ветку `main`. Это позволит найти все коммиты в текущей ветке no-color-ls (вплоть до точки её ответвления от stable/12) и затем воспроизвести их на ветке `main`, создав там новую ветку no-color-ls (поэтому я и попросил вас создать резервное имя).
+
+[[mfc-with-git]]
+=== Процедуры MFC (Merge From Current)
+==== Краткое содержание
+
+Рабочий процесс MFC можно обобщить как `git cherry-pick -x` плюс `git commit --amend` для корректировки сообщения коммита. Для нескольких коммитов используйте `git rebase -i`, чтобы объединить их вместе и отредактировать сообщение коммита.
+
+==== Одиночный коммит MFC
+
+[source, shell]
....
-% cvs co -D'last week' miscfs
+% git checkout stable/X
+% git cherry-pick -x $HASH --edit
....
-+
-И вновь, изменения не могут быть записаны.
-+
-Обратите внимание, что мета-данные хранятся в подкаталогах [.filename]#CVS#.
-+
-Аргументы опций `-D` and `-r` сохраняются (являются "клейкими", sticky), например, при последующем использовании команды `cvs update`.
-. Проверка состояния извлеченных файлов: команда `status`.
-+
-[source,shell]
+
+Для коммитов MFC, например, импорта от вендора, вам потребуется указать одного родителя для целей выборочного применения (cherry-pick). Обычно это будет «первый родитель» ветки, из которой вы применяете изменения, то есть:
+
+[source, shell]
....
-% cvs status shazam
+% git checkout stable/X
+% git cherry-pick -x $HASH -m 1 --edit
....
-+
-Эта команда покажет статус файла [.filename]#shazam# или каждого файла в директории [.filename]#shazam#. Для каждого из файлов статус может быть одним из:
-+
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-|Up-to-date
-|Файл соответствует репозиторию и не модифицировался
+Если что-то пойдет не так, вам потребуется либо прервать выборочное применение с помощью `git cherry-pick --abort`, либо исправить проблему и выполнить `git cherry-pick --continue`.
-|Needs Patch
-|Файл не изменялся, но репозиторий содержит обновленную версию
+После завершения выборочного применения выполните отправку с помощью `git push`. Если возникнет ошибка из-за проигрыша в гонке коммитов, используйте `git pull --rebase` и повторите попытку отправки.
-|Locally Modified
-|Файл соответствует репозиторию, но был изменен локально
+==== MFC в ветку RELENG
-|Needs Merge
-|Файл изменен локально; вместе с тем, файл изменен и в репозитории
+MFC в ветки, требующие одобрения, требуют немного больше внимания. Процесс одинаков как для обычного слияния, так и для прямого коммита в исключительной ситуации.
-|File had conflicts on merge
-|После последнего обновления возникли конфликты, и они все еще не устранены
-|===
-+
-Кроме того, будут показаны локальная версия и дата модификации, версия и дата последней из доступных (если вы применяли "клейкие" дату, тег или ветвь, последняя доступная версия может отличаться от вашей), а также клейкие теги, временные метки и опции.
-. Обновление извлеченного модуля: команда `update`.
-+
-[source,shell]
+* Сначала выполните слияние или прямой коммит в соответствующую ветку `stable/X`, прежде чем сливать в ветку `releng/X.Y`.
+* Используйте хэш из ветки `stable/X` для MFC в ветку `releng/X.Y`.
+* Оставляйте обе строки "cherry picked from" в сообщении коммита.
+* Обязательно добавьте строку `Approved by:` при работе в редакторе.
+
+[source, shell]
....
-% cvs update shazam
+% git checkout releng/13.0
+% git cherry-pick -x $HASH --edit
....
-+
-Эта команда обновит состояние файла [.filename]#shazam# или файлов в каталоге [.filename]#shazam# до наиболее свежих версий выбранной вами при извлечении ветви. Если выбирался "момент времени", не произойдет ничего, если только за истекшее время в репозитории не был перемещен тег или не произошло чего-нибудь еще непредвиденного.
-+
-Полезные опции в дополнение к уже описанным для команды `checkout`:
-+
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-|`-D`
-|Извлечь вновь появившиеся или пропущенные ранее подкаталоги
+Если вы забыли добавить строку `Approved by:`, вы можете выполнить `git commit --amend`, чтобы отредактировать сообщение коммита перед отправкой изменения.
-|`-a`
-|Обновиться до текущего состояния головной ветви
+==== Множественный коммит MFC
-|`-j__rev__`
-|магическая опция (см. ниже)
-|===
-+
-Если вы извлекали модуль с опциями `-r` или `-D`, выполнение команды `cvs update` с другими параметрами `-r` или `-D` или с опцией `-a` приведет к выбору новой ветви, ревизии или даты. Использование опции `-a` удаляет использованные ранее клейкие свойства; опции `-r` и `-D`, наоборот, фиксируют их.
-+
-Теоретически использование `HEAD` в качестве аргумента опции `-r` должно дать тот же результат, что и указание опции `-a`, однако это верно лишь в теории.
-+
-Опция `-D` полезна, если:
+[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
+# отметить каждый коммит после первого как 'squash'
+# При необходимости обновить сообщение коммита, чтобы отразить все его элементы.
+# Обязательно сохранить строки "cherry picked from".
+% git push freebsd HEAD:stable/X
+....
-** после извлечения вами модуля кем-либо еще в него были добавлены дополнительные каталоги;
-** вы извлекали верхний уровень модуля при помощи опции `-l`, а в дальнейшем решили извлечь и подкаталоги;
-** вы удалили какие-либо подкаталоги и теперь хотите вновь извлечь их.
+Если отправка не удалась из-за проигрыша в гонке коммитов, выполните перебазирование и повторите попытку:
-+
-__Обращайте внимание на вывод команды `cvs update`.__ Действие, произведенное с файлом, обозначается буквой перед его именем:
-+
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-|`U`
-|Файл был успешно обновлен.
+[source, shell]
+....
+% git checkout stable/X
+% git pull
+% git checkout tmp-branch
+% git rebase stable/X
+% git push freebsd HEAD:stable/X
+....
-|`P`
-|Файл был успешно обновлен (произведен успешный патч из удаленного репозитория).
+После завершения MFC вы можете удалить временную ветку:
-|`M`
-|Файл был изменен, и при этом обновлен успешно.
+[source, shell]
+....
+% git checkout stable/X
+% git branch -d tmp-branch
+....
-|`C`
-|Файл был изменен, и при объединении изменений возникли конфликты.
-|===
-+
-Объединение (merging) производится, если вы выгрузили рабочую копию какого-то модуля, изменили его, затем кто-либо еще произвел коммит собственных изменений, и, наконец, вы выполняете команду `cvs update`. CVS знает, что производились локальные изменения, и пытается объединить ваши изменения с теми, что произошли в репозитории (от состоянии версии, которую вы выгружали, до версии, до которой вы пытаетесь обновиться). Если изменения происходили с различными частями файла, объединение почти всегда произойдет успешно (хотя результат при этом может не быть синтаксически или семантически корректным).
-+
-CVS выводит букву `M` перед именем всех локально измененных файлов, даже если у них нет новых версий в репозитории, так что команда `cvs update` удобна для быстрого получения списка файлов, которые вы изменяли.
-+
-Если в результате вы видите букву `C`, ваши изменения конфликтуют с изменениями, внесенными в репозиторий (изменения были в одних и тех же или рядом расположенных строках, либо вы изменили файл настолько, что при сравнении `cvs` не смогла удержать контекст и приложить изменения из репозитория). Вам необходимо устранить конфликты, вручную редактируя файл. Конфликтующие фрагменты помечаются строками из знаков `<`, `=` и `>`. В начале каждого из конфликтов присутствует строка из семи знаков `<` и имени файла, затем идет фрагмент, содержащий внесенные вами изменения, разделитель из семи знаков `=`, соответствующий фрагмент из версии файла, содержащейся в репозитории, и, наконец, строка из семи знаков `>` совместно с номером версии, до которой вы обновляли файл.
-+
-Опция `-J` содержит некоторое количество черной магии. При ее наличии локальный файл обновляется до указанной версии так же, как и при использовании опции `-r`, но отслеживаемые номер версии или ветвь не изменяются. Эта опция умеет смысл лишь при парном использовании: при этом делается попытка применить изменения между двумя указанными версиями к локальной копии файла.
-+
-К примеру, вы внесли изменения и произвели коммит в файл [.filename]#shazam/shazam.c# в FreeBSD-CURRENT, а позднее хотите перенести обновления в FreeBSD-STABLE (Merge-From-Current, MFC). Версия, которая требует переноса - 1.15:
-
-** Извлеките текущую версию модуля [.filename]#shazam# для ветви FreeBSD-STABLE:
-+
-[source,shell]
+==== MFC — импорт от вендора
+
+Импорты от вендоров — это единственное в дереве, что создает коммит слияния в ветке `main`. Коммиты слияния выборочным переносом (cherry-pick) в stable/XX представляют дополнительную сложность, поскольку у коммита слияния два родителя. Как правило, вам понадобится разница с первым родителем, так как это разница с `main` (хотя могут быть и исключения).
+
+[source, shell]
....
-% cvs co -rRELENG_6 shazam
+% git cherry-pick -x -m 1 $HASH
....
+обычно это то, что вам нужно. Это укажет выборочному переносу применить правильный diff.
-** Приложите изменения между версиями 1.14 и 1.15:
-+
-[source,shell]
+Бывают, надеюсь, редкие случаи, когда возможно, что ветка `main` была объединена в обратном порядке скриптом преобразования. Если это произойдет (а мы пока таких случаев не обнаружили), вам следует изменить указанное выше на `-m 2`, чтобы выбрать правильного родителя. Просто выполните:
+[source, shell]
....
-% cvs update -j1.14 -j1.15 shazam/shazam.c
+% git cherry-pick --abort
+% git cherry-pick -x -m 2 $HASH
....
-+
-Почти наверняка вы получите конфликт в строках, содержащих идентификатор файла (`$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $` или, в случае FreeBSD, `$FreeBSD: head/ru_RU.KOI8-R/articles/committers-guide/article.xml 45050 2014-06-13 14:53:24Z taras $`). Вам потребуется отредактировать файл для устранения конфликта (в данном случае достаточно убрать строки-разделители и вторую строку `$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $`, оставив лишь строку с `$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $` для FreeBSD-STABLE).
-. Просмотр изменение между локальной версией и версией из репозитория: команда `diff`.
-+
-[source,shell]
+для этого. Опция `--abort` выполнит очистку после неудачной первой попытки.
+
+==== Переделка MFC
+
+Если вы делаете MFC, и всё идет ужасно неправильно, и вы хотите начать сначала, то самый простой способ — использовать `git reset --hard`, как показано ниже:
+[source, shell]
....
-% cvs diff shazam
+% git reset --hard freebsd/stable/12
....
-+
-Эта команда покажет все отличия локального состояния файла (или файлов модуля) [.filename]#shazam# от состояния, сохраненного в репозитории.
-+
-.Полезные опции команды `cvs diff`
-[cols="1,1", frame="none"]
-|===
-|`-u`
-|Использовать унифицированный (unified) формат.
-|`-c`
-|Использовать контекстный (context) формат.
+хотя если у вас есть некоторые ревизии, которые вы хотите сохранить, а другие — нет, использование `git rebase -i` предпочтительнее.
-|`-N`
-|Показывать отсутствующие или созданные файлы.
-|===
-+
-Всегда имеет смысл пользоваться опцией `-u`, поскольку унифицированный формат гораздо удобнее и лучше читаем, чем почти все другие (в некоторых случаях контекстный формат, генерируемый опцией `-c` может быть несколько лучше, но он гораздо более громоздок). Унифицированный формат различий состоит из серии фрагментов, каждый из которых начинается со строки, состоящей из двух символов `@` и номеров строк, описывающих положение изменившегося участка. Затем следует группа строк: те, что начинаются с пробела, описывают контекст, начинающиеся с символа `-` определяют удаленные строки, наконец, начинающиеся с символа `+` - добавленные.
-+
-Вы можете сравнивать текущее состояние с версией, отличающейся от той, с которой вы извлекали файл, указав опцию `-r` или `-D` подобно командам `checkout` и `update`, или даже получить список изменений между любыми двумя версиями (вне зависимости от того, что лежит в вашей локальной копии), указав _две_ версии при помощи опций `-r` или `-D`.
-. Просмотр журнала изменений: команда `log`.
-+
-[source,shell]
+==== Некоторые соображения о MFC
+
+При внесении исходных коммитов в стабильные и релизные ветки мы преследуем следующие цели:
+
+* Четко обозначить прямые коммиты, отличая их от коммитов, вносящих изменения из другой ветки.
+* Избегать внесения известных нарушений в стабильные ветки и ветки выпуска релизов (releng).
+* Позволить разработчикам определять, какие изменения были или не были перенесены из одной ветки в другую.
+
+С помощью Subversion мы использовали следующие практики для достижения этих целей:
+
+* Использование тегов `MFC` и `MFS` для пометки коммитов, которые сделали слияние изменения из другой ветки.
+* Объединение (squash) исправляющих (fixup) коммитов с основным коммитом при слиянии изменения.
+* Запись информации о слияниях для корректной работы `svn mergeinfo --show-revs`.
+
+С помощью Git нам потребуется использовать другие стратегии для достижения тех же целей. Этот документ призван определить лучшие практики для коммитов слияния исходного кода с использованием Git, которые достигают этих целей. В целом мы стремимся использовать встроенные возможности Git для достижения этих целей, а не применять практики, основанные на модели Subversion.
+
+Общее замечание: в связи с техническими различиями в Git, мы не будем использовать "коммиты слияния" Git (созданные через `git merge`) в стабильных ветках или ветках releng. Вместо этого, когда в документе упоминаются "коммиты слияния", имеется в виду коммит, изначально сделанный в `main`, который реплицируется или "переносится" в стабильную ветку, или коммит из стабильной ветки, который реплицируется в ветку releng с помощью вариации команды `git cherry-pick`.
+
+==== Поиск подходящих хэшей для MFC
+
+Git предоставляет встроенную поддержку этого через команды `git cherry` и `git log --cherry`. Эти команды сравнивают исходные различия коммитов (но не другие метаданные, такие как сообщения журнала), чтобы определить, идентичны ли два коммита. Это хорошо работает, когда каждый коммит из `main` переносится как отдельный коммит в стабильную ветку, но перестаёт работать, если несколько коммитов из `main` объединяются в один коммит в стабильной ветке. Проект активно использует `git cherry-pick -x` с сохранением всех строк для обхода этих трудностей и разрабатывает автоматизированные инструменты для использования этого подхода.
+
+==== Стандарты сообщений коммитов
+===== Пометка MFC
+
+Проект принял следующую практику для пометки MFC:
+
+* Используйте флаг `-x` с командой `git cherry-pick`. Это добавляет строку в сообщение коммита, которая включает хэш оригинального коммита при слиянии. Поскольку это добавляется непосредственно Git, коммиттерам не нужно вручную редактировать журнал коммитов при слиянии.
+
+При слиянии нескольких коммитов сохраняйте все строки "cherry picked from".
+
+===== Обрезать метаданные?
+
+Одной из областей, которая не была чётко задокументирована в Subversion (и даже в CVS), является форматирование метаданных в сообщениях журнала для коммитов MFC. Должны ли они включать метаданные из исходного коммита без изменений или должны быть изменены для отражения информации о самом коммите MFC?
+
+Исторически практика различалась, хотя некоторые различия зависят от области. Например, MFC, относящиеся к PR, обычно включают поле PR в MFC, чтобы коммиты MFC включались в аудит-трекер системы отслеживания ошибок. В других областях ситуация менее ясна. Например, Phabricator показывает разницу последнего коммита, помеченного для обзора, поэтому включение URL-адресов Phabricator заменяет основной коммит на завершенные коммиты. Список рецензентов также неясен. Если рецензент одобрил изменение для `main`, означает ли это, что он одобрил коммит MFC? Верно ли это только для идентичного кода или лишь с незначительной доработкой? Очевидно, это неверно для более масштабных доработок. Даже для идентичного кода: что, если коммит не конфликтует, но вносит изменение ABI? Рецензент мог одобрить коммит для `main` из-за нарушения ABI, но может не одобрить слияние того же коммита в неизменном виде. Придется полагаться на собственное наилучшее суждение до тех пор, пока не будут согласованы четкие руководящие принципы.
+
+Для MFC, регулируемых re@, добавляются новые поля метаданных, такие как тег Approved by для одобренных коммитов. Эти новые метаданные должны быть добавлены через `git commit --amend` или аналогичные средства после того, как исходный коммит будет проверен и одобрен. Мы также можем захотеть зарезервировать некоторые поля метаданных в коммитах MFC, такие как URL-адреса Phabricator, для использования re@ в будущем.
+
+Сохранение существующих метаданных обеспечивает очень простой рабочий процесс. Разработчики используют `git cherry-pick -x` без необходимости редактировать сообщение журнала.
+
+Если же мы решим изменять метаданные в MFC, разработчикам придется явно редактировать сообщения журнала с помощью `git cherry-pick --edit` или `git commit --amend`. Однако по сравнению с svn, по крайней мере, существующее сообщение о фиксации может быть предварительно заполнено, а поля метаданных можно добавлять или удалять без необходимости повторного ввода всего сообщения о фиксации.
+
+Суть в том, что разработчикам, вероятно, потребуется тщательно готовить свои сообщения о коммитах для MFC, которые не являются тривиальными.
+
+[[vendor-import-git]]
+=== Импорт вендоров с Git
+
+В этом разделе подробно описывается процедура импорта вендора с использованием Git.
+
+==== Соглашение о наименовании веток
+
+Все ветки и теги вендоров начинаются с `vendor/`. Эти ветки и теги видны по умолчанию.
+
+[NOTE]
+====
+Эта глава следует соглашению, что `freebsd` — это имя источника для официального репозитория Git FreeBSD. Если вы используете другое соглашение, замените `freebsd` на используемое вами имя в приведённых ниже примерах.
+====
+
+Мы рассмотрим пример обновления mtree NetBSD, который находится в нашем дереве. Ветка вендора для него — `vendor/NetBSD/mtree`.
+
+==== Обновление старого импорта от вендора
+
+Деревья вендоров обычно содержат лишь подмножество стороннего программного обеспечения, подходящего для FreeBSD. Эти деревья, как правило, очень малы по сравнению с деревом FreeBSD. Таким образом, рабочие деревья Git довольно компактны и быстры, что делает их предпочтительным методом использования. Убедитесь, что выбранный вами каталог ( `../mtree` ) в настоящее время не существует.
+
+[source, shell]
....
-% cvs log shazam
+% git worktree add ../mtree vendor/NetBSD/mtree
....
-+
-Если [.filename]#shazam# является обычным файлом, эта команда выдаст на экран _заголовок_ с информацией о файле, в частности, его местоположении в репозитории, какая версия соответствует текущему состоянию (`HEAD`), в каких ветвях разработки файл присутствует, а также перечислит теги, которыми он помечен. Затем, для каждой версии файла выводится соответствующее ей журнальное сообщение, включающее дату, время и автора коммита, количество добавленных и удаленных строк и собственно журнального сообщения, написанного коммиттером.
-+
-Если [.filename]#shazam# является каталогом, вышеописанная процедура выполняется для каждого файла в каталоге. Если при этом команде `log` не был указан флаг `-l`, процедура рекурсивно повторяется для всех подкаталогов.
-+
-Команда `log` используется для просмотра истории одного или нескольких файлов в том виде, как она сохранена в репозитории CVS. Используя опцию `-r__rev__`, вы можете посмотреть журнальное сообщение к одной определенной версии:
-+
-[source,shell]
+
+==== Обновление исходных кодов в ветке вендора
+
+Подготовьте полное, чистое дерево исходных кодов вендора. Импортируйте всё, но делайте слияние только тому, что необходимо.
+
+Этот пример предполагает, что исходный код NetBSD получен из их зеркала на GitHub в каталоге `~/git/NetBSD`. Учтите, что «вышестоящий репозиторий» мог добавить или удалить файлы, поэтому мы хотим убедиться, что удаления также распространяются. Пакет package:net/rsync[] обычно установлен, поэтому я буду использовать его.
+
+[source, shell]
....
-% cvs log -r1.2 shazam
+% 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
....
-+
-Эта команда покажет журнальное сообщение для версии `1.2` файла [.filename]#shazam# (или для версий `1.2` каждого из файлов в каталоге [.filename]#shazam#).
-. Кто что делал: команда `annotate`. Эта команда показывает перед каждой строкой указанного файла (файлов) имя пользователя, вносившего последние изменения в эту строку.
-+
-[source,shell]
+
+Крайне важно убедиться, что импортируемый исходный код получен из надежного источника. Многие проекты с открытым исходным кодом используют криптографические подписи для подписывания изменений кода, тегов git и/или tar-архивов с исходным кодом. Всегда проверяйте эти подписи и используйте механизмы изоляции, такие как клетки, chroot, в сочетании с выделенной непривилегированной учетной записью пользователя, отличной от той, которую вы используете регулярно (подробнее см. в разделе «Обновление дерева исходного кода FreeBSD» ниже), пока вы не будете уверены, что импортируемый исходный код выглядит безопасным. Отслеживание разработки в вышестоящем репозитории и периодический просмотр изменений кода в нем могут значительно помочь в повышении качества кода и принести пользу всем участникам. Также рекомендуется изучать результаты git diff перед импортом их в область вендора.
+
+Всегда выполняйте команды `git diff` и `git status` и внимательно изучайте результаты. В случае сомнений полезно выполнить `git annotate` на ветке вендора или в вышестоящем git-репозитории, чтобы увидеть, кто и почему внес изменение.
+
+В примере выше мы использовали `-m` для иллюстрации, но вам следует составить корректное сообщение в редакторе (используя шаблон сообщения о фиксации).
+
+Также важно создать аннотированный тег с помощью `git tag -a`, иначе отправка будет отклонена. Только аннотированные теги разрешены для отправки. Аннотированный тег даёт вам возможность ввести сообщение коммита. Укажите версию, которую вы импортируете, вместе с любыми важными новыми функциями или исправлениями в этой версии.
+
+==== Обновление копии FreeBSD
+
+На этом этапе вы можете отправить импорт в `vendor` в наш репозиторий.
+
+[source, shell]
....
-% cvs annotate shazam
+% git push --follow-tags freebsd vendor/NetBSD/mtree
....
-. Добавление новых файлов: команда `add`.
-+
-Создайте файл, выполните для него команду `cvs add`, затем произведите запись в репозиторий (коммит): `cvs commit`.
-+
-Точно так же, новые каталоги добавляются в репозиторий путем создания и последующего выполнения команды `cvs add`. Заметьте, что выполнять коммит после добавления каталога не надо.
-. Удаление устаревших файлов: команда `remove`.
-+
-Удалите файл, затем выполните команду `cvs rm` с его именем в качестве параметра, наконец, выполните для него `cvs commit`.
-. Внесение изменений в репозиторий: команда `commit` или `checkin`.
-+
-.Useful `cvs commit` options
-[cols="1,1", frame="none"]
-|===
-|`-F`
-|Форсировать внесение изменений для не модифицированного файла.
-|`-m__msg__`
-|Указать сообщение для журнала в командной строке (не запускать текстовый редактор).
-|===
-+
-Опцию `-F` следует использовать, если вы поняли, что забыли указать какую-либо важную информацию в журнале изменений.
-+
-Хорошие журнальные сообщения очень важны. Они дают возможность другим узнать, зачем вы производили изменения, причем не только в момент их произведения, но и месяцы или годы спустя, когда кто-либо заинтересуется, почему выглядящий нелогично или неэффективно фрагмент кода попал в каши исходные тексты. Кроме того, это очень помогает в оценке того, нужно ли переносить соответствующий код в FreeBSD-STABLE (MFC).
-+
-Сообщения должны быть ясными, краткими, четкими, и представлять из себя разумную аннотацию, какие изменения были произведены и почему.
-+
-Сообщения должны достаточно ясно показывать сторонним разработчикам, насколько их касаются изменения и нужно ли им исследовать изменения подробно.
-+
-Избегайте внесения нескольких не связанных друг с другом изменений за один раз. Это затрудняет объединение изменений, а также, при обнаружении ошибок, усложняет поиск ответственного за ошибки участка.
-+
-Избегайте смешивания в одном коммите изменений функциональности со стилистическими правками или исправлениями в пробелах. Это усложняет объединение, и, кроме того, затрудняет понимание того, какие именно функциональные изменения были внесены. В случае коммита в файлы документации, это затруднит работу групп поддержки перевода, поскольку становится сложнее отделить изменения, требующие перевода.
-+
-Избегайте коммита большой группы файлов за один раз с одним общим и невнятным сообщением. Напротив, вносите изменения в отдельные файлы (или небольшие группы связанных файлов) с адекватными сообщениями для журналирования.
-+
-Перед коммитом, __обязательно__:
-
-** проверьте, что вы будете выполнять коммит в правильную ветвь, посредством команды `cvs status`.
-** проверьте ваши изменения при помощи команды `cvs diff`
-
-+
-Кроме того, ВСЕГДА указывайте, в какие именно файлы вы вносите изменения, так чтобы не включить в этот список лишних файлов. Команда `cvs commit` без аргументов включит все измененные файлы в текущем каталоге и всех подкаталогах.
-
-Еще несколько полезных советов:
-
-. Часто используемые опции можно занести в файл [.filename]#~/.cvsrc#, например:
-+
-[.programlisting]
+`--follow-tags` указывает `git push` также отправлять теги, связанные с локально зафиксированной ревизией.
+
+==== Обновление дерева исходных кодов FreeBSD
+
+Теперь вам нужно обновить mtree в FreeBSD. Исходные коды находятся в `contrib/mtree`, так как это программное обеспечение из внешних источников.
+
+Время от времени нам может потребоваться вносить изменения в предоставленный (contrib) код, чтобы лучше соответствовать потребностям FreeBSD. По возможности, пожалуйста, старайтесь передавать локальные изменения обратно в вышестоящие проекты — это помогает им лучше поддерживать FreeBSD, а также экономит ваше время при разрешении конфликтов в будущем при импорте обновлений.
+
+[source, shell]
....
-cvs -z3
-diff -Nu
-update -Pd
-checkout -P
+% cd ../src
+% git subtree merge -P contrib/mtree vendor/NetBSD/mtree
....
-+
-Для данного случая:
-** всегда использовать компрессию уровня 3 для связи с удаленным сервером CVS. В случае медленного соединения это избавит вас от лишней головной боли.
-** всегда использовать опции `-N` (показывать добавленные или удаленные файлы) и `-u` (унифицированный формат) для man:diff[1].
-** всегда использовать опции `-P` (удалять пустые каталоги) и `-D` (добавлять новые каталоги) при обновлении.
-** всегда использовать опцию `-P` (удалять пустые каталоги) при извлечении файлов и модулей.
+Это создаст коммит слияния поддерева `contrib/mtree` с локальной веткой `vendor/NetBSD/mtree`. Изучите разницу (diff) между результатом слияния и содержимым вышестоящей ветки. Если слияние сократило наши локальные изменения до более тривиальных различий, таких как изменения пустых строк или отступов, попробуйте исправить локальные изменения, чтобы уменьшить разницу с вышестоящей версией, или попытайтесь внести оставшиеся изменения обратно в вышестоящий проект. Если возникли конфликты, вам потребуется устранить их перед коммитом. Включите подробности об объединяемых изменениях в сообщение коммита слияния.
-. Пользуйтесь скриптом Эйвинда Эклунда (Eivind Eklund) `cdiff` для просмотра изменению унифицированного формата. Он является оберткой для man:less[1], добавляющей цветовые коды ANSI для выделения заголовком, добавленных и удаленных строк; прочие строки не модифицируются. Помимо этого, скрипт корректно разворачивает табуляции (которые часто выглядят неправильно в изменениях из-за дополнительного символа в начале строки).
-+
-package:textproc/cdiff[]
-+
-Просто используйте его вместо man:more[1] или man:less[1]:
-+
-[source,shell]
+Некоторое открытое программное обеспечение включает скрипт `configure`, который генерирует файлы, используемые для определения процесса сборки кода; обычно эти сгенерированные файлы, такие как `config.h`, должны обновляться как часть процесса импорта. При выполнении этого всегда помните, что эти скрипты являются исполняемым кодом, работающим под учётными данными текущего пользователя. Этот процесс всегда должен запускаться в изолированной среде, в идеале внутри клетки, не имеющей сетевого доступа, и с непривилегированной учётной записью; или, как минимум, с выделенной учётной записью, отличной от той, которую вы обычно используете для повседневных задач или для отправки изменений в репозиторий исходного кода FreeBSD. Это минимизирует риск столкновения с ошибками, которые могут привести к потере данных или, в худших случаях, к выполнению злонамеренно внедрённого кода. Использование изолированной клетки также предотвращает обнаружение скриптами configure локально установленных пакетов программного обеспечения, что может привести к неожиданным результатам.
+
+При тестировании ваших изменений запускайте их сначала в chroot или в клетке, или даже внутри виртуальной машины, особенно для модификаций ядра или библиотек. Этот подход помогает предотвратить неблагоприятное взаимодействие с вашей рабочей средой. Это может быть особенно полезно для изменений в библиотеках, которые используют многие компоненты базовой системы среди прочего.
+
+==== Перебазирование ваших изменений относительно последней версии исходного дерева FreeBSD
+
+Поскольку текущая политика рекомендует избегать слияний (merge), то, если вышестоящая ветка FreeBSD `main` продвинулась вперёд до того, как у вас появится возможность отправить изменения, вам придётся переделывать слияние.
+
+Обычный `git rebase` или `git pull --rebase` не умеет перемещать коммит слияния **как коммит слияния**, поэтому вместо этого вам придётся воссоздать коммит.
+
+Следующие шаги следует выполнить, чтобы легко воссоздать коммит слияния, как если бы `git rebase --merge-commits` сработал правильно:
+
+* Перейдите в корень репозитория
+* Создайте побочную ветвь `XXX` с **содержимым** дерева со слиянием.
+* Обновите эту побочную ветку `XXX` для слияния и актуализации с основной веткой FreeBSD `main`.
+** В худшем случае вам всё равно придётся разрешать конфликты слияния, если они были, но это должно быть крайне редко.
+** Разрешите конфликты и, если необходимо, объедините (collapse) несколько коммитов в один (без конфликтов объединение не требуется)
+* извлеките (checkout) ветку `main`
+* создайте ветку `YYY` (позволяет проще откатиться, если что-то пойдет не так)
+* Повторите слияние поддерева
+* Вместо разрешения конфликтов от слияния поддерева, извлеките (checkout) содержимое XXX поверх него.
+** Завершающая `.` важна, как и нахождение на верхнем уровне репозитория.
+** Вместо переключения веток на XXX, он накладывает содержимое XXX поверх репозитория
+* Сделайте коммит полученному результату с предыдущим сообщением коммита (пример предполагает, что в ветке XXX была только одна операция слияния).
+* Убедитесь, что ветки одинаковые.
+* Сделайте любые необходимые проверки, включая привлечение других людей для проверки, если вы считаете, что это необходимо.
+* Запишите (push) этот коммит. Если вы «снова проиграли в гонке», просто повторите эти шаги (см. рецепт ниже)
+* Удалите ветки после того, как коммит попадёт в вышестоящий репозиторий. Они одноразовые.
+
+Команды, которые можно использовать, следуя приведённому выше примеру с mtree, будут выглядеть следующим образом (символ `#` начинает комментарий, помогающий связать команды с описаниями выше):
+
+[source, shell]
....
-% cvs diff -Nu shazam | cdiff
+% 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
....
-+
-Помимо этого, некоторые текстовые редакторы, такие как man:vim[1] (package:editors/vim[]) поддерживают цветовую синтаксическую разметку многих типов файлов, в том числе файлов изменений и журналов CVS/RCS.
-+
-[source,shell]
+
+Примечание: если что-то пойдет не так с коммитом, вы можете сбросить ветку `YYY`, повторно выполнив команду checkout, которая создала её, с флагом -B, чтобы начать заново:
+[source, shell]
....
-% echo "syn on" >> ~/.vimrc
-% cvs diff -Nu shazam | vim -
-% cvs log shazam | vim -
+% git checkout -B YYY freebsd/main # Создать новую временную ветку YYY, если начать заново будет проще
....
-. CVS - старая, загадочная и порой слабо предсказуемая в своем поведении программа. Ни один человек не способен удержать в голове все тонкости ее работы, так что не бойтесь спрашивать совета у Искусственного Интеллекта (а именно `{cvsadm}`).
-. Не оставляйте компьютер в процессе работы команды `cvs commit` (в редакторе при написании журнального сообщения) слишком надолго (более чем на 2-3 минуты). Эта команда блокирует каталог репозитория, в котором она запущена, и не позволяет другим разработчикам изменять его содержимое. Если вам нужно написать длинное журнальное сообщение, подготовьте его заранее и вставьте в редакторе во время выполнения команды `cvs commit`, либо запишите его в файл и используйте опцию CVS `-F`:
-+
-[source,shell]
+==== Отправка (push) изменений
+
+Когда вы считаете, что у вас есть набор изменений, и они хорошие, вы можете отправить их в форк на GitHub или GitLab для просмотра и рецензирования другими. Одна из хороших особенностей Git заключается в том, что он позволяет публиковать черновые версии вашей работы для проверки другими. Хотя Phabricator хорош для проверки содержания, публикация обновленной ветки вендора и коммитов слияния позволяет другим проверить детали, которые в конечном итоге появятся в репозитории.
+
+После проверки, когда вы уверены, что это хорошее изменение, вы можете отправить (push) его в репозиторий FreeBSD:
+
+[source, shell]
....
-% vi logmsg
-% cvs ci -F logmsg shazam
+% 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
....
-+
-Это самый быстрый способ передать журнальное сообщение CVS; однако, вы должны быть внимательны при редактировании файла [.filename]#logmsg#, поскольку при выполнении коммита у вас не будет шансов его поправить.
-. Вы можете существенно ускорить скорость работы CVS с центральным репозиторием, используя постоянное соединение с репозиторием. Для этого добавьте в файл [.filename]#~/.ssh/config# строки
-+
-[.programlisting]
+
+Примечание: Я использовал `XXX` и `YYY`, чтобы было очевидно, что это ужасные имена, и они не должны покидать вашу машину. Если вы используете такие имена для другой работы, вам нужно будет выбрать другие имена или рискнуть потерять другую работу. В этих именах нет ничего волшебного. В вышестоящий репозиторий вам не разрешат их отправить, но, тем не менее, обратите внимание на точные команды выше. Некоторые команды используют синтаксис, который лишь незначительно отличается от типичного использования, и это различие в поведении критически важно для работы данного рецепта.
+
+==== Как переделать вещи, если это необходимо
+
+Если вы попытались выполнить отправку из предыдущего раздела и она завершилась неудачей, то вам следует выполнить следующие действия для «повторного выполнения» операций. Эта последовательность сохраняет коммит с сообщением о коммите всегда на позиции XXX~1 для упрощения коммита.
+
+[source, shell]
....
-Host ncvs.FreeBSD.org
- ControlPath /home/user/.ssh/cvs.cpath
-Host dcvs.FreeBSD.org
- ControlPath /home/user/.ssh/cvs.cpath
-Host projcvs.FreeBSD.org
- ControlPath /home/user/.ssh/cvs.cpath
-Host pcvs.FreeBSD.org
- ControlPath /home/user/.ssh/cvs.cpath
+% 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
....
-+
-Затем откройте постоянное соединение с машиной repoman:
-+
-[source,shell]
+
+Затем проверьте, как описано выше, и отправьте (push), как описано выше, когда будет готово.
+
+=== Создание новой ветки вендора
+
+Существует несколько способов создания новой ветки вендора. Рекомендуемый способ — создать новый репозиторий и затем сделать его слияние с FreeBSD. Например, производится импорт `glorbnitz` версии 3.1415 в дерево FreeBSD. Для простоты мы не будем обрезать этот релиз. Это простая пользовательская команда, которая переводит устройство nitz в различные магические состояния glorb, и она достаточно мала, так что обрезка не сэкономит много.
+
+==== Создайте репозиторий
+
+[source, shell]
....
-% ssh -fNM ncvs.FreeBSD.org
+% cd /some/where
+% mkdir glorbnitz
+% cd glorbnitz
+% git init
+% git checkout -b vendor/glorbnitz
....
-+
-Теперь команды CVS должны выполняться быстрее, поскольку используют существующее соединение с репозиторием. Учтите, что регистр в именах хостов имеет значение.
-[[conventions]]
-== Соглашения и традиции
+На этом этапе у вас есть новый репозиторий, в котором все новые коммиты будут направляться в ветку `vendor/glorbnitz`.
-Став коммиттером, вы должны прежде всего произвести некоторые стандартные действия.
+Опытные пользователи Git также могут сделать это непосредственно в своей копии FreeBSD, используя `git checkout --orphan vendor/glorbnitz`, если им так удобнее.
+
+==== Скопируйте себе исходники
+
+Поскольку это новая импортированная копия, вы можете просто скопировать файлы исходного кода командой cp, либо использовать tar или даже rsync, как показано выше. И мы добавим всё, предполагая отсутствие файлов с точкой в начале имени.
+
+[source, shell]
+....
+% cp -r ~/glorbnitz/* .
+% git add *
+....
+
+На этом этапе у вас должна быть чистая копия glorbnitz, готовая к коммиту.
+
+[source, shell]
+....
+% git commit -m "Import GlorbNitz frobnosticator revision 3.1415"
+....
+
+Как и выше, я использовал `-m` для простоты, но вам, вероятно, следует создать сообщение коммита, которое объясняет, что такое Glorb и почему для его получения используется Nitz. Не все это знают, поэтому для вашего реального коммита вам следует руководствоваться разделом crossref:committers-guide[commit-log-message,сообщение коммита], а не имитировать краткий стиль, использованный здесь.
+
+==== Теперь импортируйте его в наш репозиторий
+
+Теперь необходимо импортировать ветку в наш репозиторий.
+
+[source, shell]
+....
+% cd /path/to/freebsd/repo/src
+% git remote add glorbnitz /some/where/glorbnitz
+% git fetch glorbnitz vendor/glorbnitz
+....
+
+Обратите внимание, что ветка vendor/glorbnitz находится в репозитории. На этом этапе `/some/where/glorbnitz` можно удалить, если хотите. Это было лишь промежуточным шагом для достижения цели.
+// perhaps the real treasure was the friends it made along the way...
+
+==== Сделайте тег и отправьте (push)
+
+Дальнейшие шаги во многом аналогичны процессу обновления ветки вендора, за исключением самого шага обновления ветки вендора.
+
+[source, shell]
+....
+% git worktree add ../glorbnitz vendor/glorbnitz
+% cd ../glorbnitz
+% git tag --annotate vendor/glorbnitz/3.1415
+# Убедитесь, что коммит хороший, с помощью "git show"
+% git push --follow-tags freebsd vendor/glorbnitz
+....
+
+Под «хорошим» мы подразумеваем:
+
+. Все необходимые файлы присутствуют
+. Ни один из неправильных файлов не присутствует
+. Ветка вендора указывает на что-то разумное
+. Тег выглядит хорошо и имеет аннотацию
+. Сообщение коммита для тега содержит краткую сводку о нововведениях с момента предыдущего тега
+
+==== Время наконец сделать слияние этого в базовое дерево
+
+[source, shell]
+....
+% cd ../src
+% git subtree add -P contrib/glorbnitz vendor/glorbnitz
+# Убедитесь, что коммит хороший, с помощью "git show"
+% git commit --amend # one last sanity check on commit message
+% git push freebsd
+....
+
+Здесь «хороший» означает:
+
+. Все правильные файлы и ни одного неправильного были объединены слиянием в contrib/glorbnitz.
+. В дереве нет других изменений.
+. Сообщения коммитов должны выглядеть crossref:committers-guide[commit-log-message,хорошо]. Они должны содержать сводку изменений с момента последнего слияния с основной веткой FreeBSD `main` и любые предостережения.
+. UPDATING должен быть обновлен, если есть что-то важное, например, заметные пользователям изменения, важные аспекты обновления и т.д.
-* Добавьте себя в список "SGML сущностей" авторов в файл [.filename]#doc/en_US.ISO8859-1/shared/xml/authors.ent#; это изменение должно быть сделано прежде прочих, поскольку в противном случае следующий ваш коммит неизбежно разрушит процесс построения дерева doc/.
-+
-Это довольно простая задача, но при этом она является неплохим первым тестом ваших навыков работы с CVS.
-* Также добавьте свою "SGML сущность" в [.filename]#www/en/developers.xml#.
-* Добавьте себя в раздел "Разработчики" статьи extref:{contributors}[Участники проекта FreeBSD] ([.filename]#doc/en_US.ISO8859-1/articles/contributors/contrib.committers.xml#) и удалите свою запись из раздела "Прочие участники" ([.filename]#doc/en_US.ISO8859-1/articles/contributors/contrib.additional.xml#).
-* Добавьте новость о новом коммиттере в файл [.filename]#www/shared/xml/news.xml#. Используйте существующие записи вида "Новый коммиттер" как шаблон.
-* Вам нужно добавить ваш PGP или GnuPG ключ в каталог [.filename]#doc/shared/pgpkeys# (а если у вас нет ключа, вам нужно его создать). Не забудьте изменить и произвести коммит в файл [.filename]#doc/shared/pgpkeys/pgpkeys.ent#.
-+
-`{des}` написал скрипт для упрощения этого процесса. Дополнительную информацию можно прочесть в файле http://cvsweb.FreeBSD.org/doc/shared/pgpkeys/README[README].
-+
[NOTE]
====
-Очень важно, чтобы в Руководстве пользователя был записан актуальный PGP/GnuPG ключ, поскольку он может потребоваться для идентификации коммиттера (например, его будет проверять группа `{admins}` для аварийного восстановления учетной записи). Полный набор актуальных ключей пользователей домена `FreeBSD.org` можно найти по адресу link:https://www.FreeBSD.org/doc/pgpkeyring.txt[http://www.FreeBSD.org/doc/pgpkeyring.txt].
+Это еще не подключило `glorbnitz` к сборке. Способ сделать это зависит от конкретного импортируемого программного обеспечения и выходит за рамки данного руководства.
====
-* Добавьте себя в файл [.filename]#src/shared/misc/committers-репозиторий.dot#, где репозиторием будет являться либо doc, либо ports, либо src в зависимости от полученных вами коммиттерских привилегий.
-* Некоторые коммиттеры добавляют информацию о своем местоположении в файл [.filename]#ports/astro/xearth/files/freebsd.committers.markers#.
-* Некоторые добавляют данные о дне своего рождения в файл [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd#.
-* Представьтесь другим коммиттерам, иначе никто не будет знать, кто вы и чем занимаетесь. От вас не требуется писать подробное резюме или биографию: будут достаточны один-два абзаца о себе и областях FreeBSD, в которых вы планируете работать. Пошлите это письмо в {src-developers-name} - и все!
-* Зайдите на машину `hub.FreeBSD.org` и создайте файл [.filename]#/var/forward/user# (замените _user_ на ваше имя пользователя). Этот файл должен содержать адрес электронной почты, на который будет переправляться вся почта на адрес _yourusername_@FreeBSD.org, в том числе сообщения о коммитах и другая почта на адреса {committers-name} и {src-developers-name}. Слишком большие почтовые ящики на машине `hub` могут быть "нечаянно" удалены или обрезаны без предупреждения, так что, чтобы не потерять почту, регулярно читайте ее либо перенаправьте куда-нибудь еще.
-+
-Из-за ощутимой загрузки, возникающей на серверах, обрабатывающих списки рассылки, из-за большого количества незапрошенной почты (спама), сервер, принимающий почту для домена FreeBSD.org, производит некоторые основные проверки и на основании их отвергает некоторые письма. На настоящий момент единственным проверяемым параметром является корректность информации DNS для хоста, доставляющего почту, но в будущем список может вырасти. Эти проверки временами обвиняют в том, что они отвергают правильную почту. Если вы хотите отключить проверки для своего адреса, создайте файл [.filename]#~/.spam_lover# в своей домашней директории на машине `freefall.FreeBSD.org`.
-* Если вы были подписаны на {cvs-all}, вам, скорее всего, следует отписаться от него, чтобы не получать дубликатов каждого сообщения о коммитах.
-Все новые коммиттеры первоначально работают под руководством ментора. Ваш ментор отвечает за обучение вас правилам и соглашениям, принятым в проекте, и помогает вам сделать первые шаги в среде коммиттеров. Он(а) также персонально отвечает за ваши действия в этот начальный период. До тех пор, пока ваш ментор не решит (и не анонсирует это посредством форсированного коммита файла [.filename]#access#), что вы достаточно освоились и готовы работать самостоятельно, перед любым коммитом вы должны получить одобрение (approval) ментора и указать это в журнальном сообщении коммита строкой `Approved by:`.
+===== Сохраняя актуальность
-Все коммиты в дерево [.filename]#src# сначала должны производиться в ветвь FreeBSD-CURRENT и лишь затем интегрироваться в FreeBSD-STABLE. Никакие серьезные изменения, новые возможности или рискованные модификации не должны производиться напрямую в ветви FreeBSD-STABLE.
+Итак, время идёт. Пришло время обновить дерево до последних изменений из вышестоящего репозитория. При переходе на ветку `main` (при checkout) убедитесь, что у вас нет незакоммиченных изменений. Намного проще закоммитить их в отдельную ветку (или использовать `git stash`) перед выполнением следующих действий.
-[[pref-license]]
-== Предпочтительная лицензия для новых файлов
+Если вы привыкли к `git pull`, мы настоятельно рекомендуем использовать опцию `--ff-only` и дополнительно установить её в качестве опции по умолчанию. В качестве альтернативы, `git pull --rebase` полезен, если у вас есть изменения, проиндексированные (stage) в ветке `main`.
-В настоящее время Проект FreeBSD считает предпочтительной формой лицензии на исходные тексты следующий текст:
+[source, shell]
+....
+% git config --global pull.ff only
+....
-[.programlisting]
+Возможно, вам потребуется опустить --global, если вы хотите, чтобы эта настройка применялась только к этому репозиторию.
+
+[source, shell]
+....
+% cd freebsd-src
+% git checkout main
+% git pull (--ff-only|--rebase)
....
-/*-
-* Copyright (c) [year] [your name]
-* 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.
-*
-* [id for your version control system, if any]
-*/
-....
-
-Проект FreeBSD крайне не рекомендует так называемый "третий пункт", или "пункт о рекламе" в лицензии на новый исходный код. В связи с большим количеством участников проекта FreeBSD, выполнение этого пункта большинством коммерческих производителей все более затруднительно. Если ваш код в дереве исходников содержит "пункт о рекламе", рассмотрите возможность его удаления. На самом деле, рассмотрите возможность перехода на приведенную лицензию.
-
-Проект FreeBSD не рекомендует использование полностью новых лицензий или вариаций стандартных лицензий. Новые лицензии перед использованием в репозитории проекта требуют утверждения группой mailto:core@FreeBSD.org[core@FreeBSD.org]. Большое число различных лицензий затрудняет использование кода, в основном из-за ненамеренных неверных выводов из плохо сформулированных формулировок лицензии.
-
-Политика проекта требует, чтобы код под НЕ-BSD лицензиями располaгался только в определённых местах репозитория, а в некоторых случаях компиляция должна быть условной по умолчанию или вообще отключена. К примеру, ядро GENERIC должно состоять только из лицензий идентичных или в значительной степени схожих с BSD лицензией. Программное обеспечение под лицензиями GPL, APSL, CDDL и др. не должно включаться в состав GENERIC.
-
-Разработчикам напоминается, что в open source правильное понимание "open" также важно, как правильное понимание "source", ибо некорректное использование интеллектуальной собственности имеет серьезные последствия. Какие-либо вопросы или беспокойства на этот счёт должны быть немедленно вынесены на обсуждение главной команде разработчиков (core team).
-[[developer.relations]]
-== Взаимодействие между разработчиками
+Существует распространённая ловушка: команда `git pull` попытается выполнить слияние, что иногда создаёт коммит слияния, которого ранее не существовало. Восстановление после этого может быть затруднительно.
-Если вы работаете над собственным исходным кодом, либо в области, в которой вы уже определены как ответственная персона, вам, скорее всего, не потребуется согласовывать коммит с кем-либо еще из разработчиков. Те же правила действуют, если вы нашли ошибку в той части системы, которой явно давно никто не занимается (к нашему стыду, существует несколько таких областей). Если же вы собираетесь модифицировать что-либо активно поддерживаемое (по-хорошему, узнать это можно только исследуя архивы списка рассылки `cvs-committers`), стоит послать предполагаемый патч ответственному за этот участок кода, как вы бы поступали, пока не были коммиттером. В случае портов нужно обращаться по адресу, указанному в строке `MAINTAINER` в файле [.filename]#Makefile#. Для других частей репозитория, в случае если вам не очевидно, кто ведет данный участок кода, может помочь исследование вывода команды `cvs log`. `{fenner}` написал отличный скрипт для определения разработчиков, наиболее активно производивших коммиты, выводящий для каждого из указанных файлов имя пользователя вместе с количеством произведенных им коммитов в данный файл. Скрипт можно найти на машине `freefall` в файле [.filename]#~fenner/bin/whodid#. Если найденная вами персона не отвечает на ваши вопросы или иным образом демонстрирует отсутствие интереса к проблеме, смело производите коммит самостоятельно.
+Рекомендуется также использовать расширенную форму.
-Если вы по каким-либо причинам не уверены в своих изменениях, предложите их для оценки в списке рассылки `-hackers` перед коммитом. Будет лучше, если вас обругают там и тогда, чем когда предлагаемое изменение уже будет частью репозитория. Если случилось так, что ваш коммит встретил сопротивление, возможно, стоит его откатить (back out) до тех пор, пока не будет достигнут консенсус. Помните - с помощью CVS всегда можно вернуться к предыдущему состоянию.
+[source, shell]
+....
+% cd freebsd-src
+% git checkout main
+% git fetch freebsd
+% git merge --ff-only freebsd/main
+....
-Не принимайте в штыки мнения других разработчиков, с которыми вы не согласны. Если они предлагают иное решение проблемы чем вы, или даже иначе воспринимают проблему, это не значит, что они глупы, имеют сомнительное происхождение, хотят разрушить вашу работу, очернить ваше доброе имя, или развалить проект FreeBSD. Просто они смотрят на мир под иным углом. Различные взгляды - благо.
+Эти команды сбрасывают ваше дерево к ветке `main`, а затем обновляют его из исходного источника, откуда дерево было первоначально получено (pull). Важно переключиться на `main` перед выполнением этого, чтобы обеспечить продвижение вперёд. Теперь пришло время продвинуть изменения вперёд:
-Будьте честны в спорах. Оценивайте свою позицию по заслугам, честно относитесь к ее слабым сторонам и будьте готовы принять другие точки зрения и пути решения. Будьте открыты.
+[source, shell]
+....
+% git rebase -i main working
+....
-Будьте терпимы, если вас поправляют. Все мы совершаем ошибки. Если вы ошиблись, извинитесь. Не обвиняйте ни себя, ни, тем более, других в ошибке. Не теряйте времени на смущение или упреки, просто исправьте ошибку и двигайтесь дальше.
+Это вызовет интерактивный экран для изменения настроек по умолчанию. Пока просто выйдите из редактора. Всё должно примениться автоматически. Если нет, то вам потребуется разрешить различия. https://docs.github.com/en/free-pro-team@latest/github/using-git/resolving-merge-conflicts-after-a-git-rebase[Документация GitHub] может помочь вам в этом процессе.
-Спрашивайте и просите о помощи. Предлагайте ваши изменения для рассмотрения коллегам и рассматривайте их изменения. Одним из преимуществ программного обеспечения с открытыми исходными текстами является открытость разработки. Если никто не будет исследовать чужой код, это преимущество исчезнет.
+[[git-push-upstream]]
+===== Время отправить (push) изменения вверх (upstream)
-[[gnats]]
-== GNATS
+Сначала убедитесь, что URL для отправки (push) правильно настроен для вышестоящего репозитория.
-Для отслеживания ошибок и запросов на изменения проект FreeBSD использует GNATS. Если вы исправили ошибку или внесли изменения, описанные в одном из сообщений об ошибках (PR), не забудьте закрыть это сообщение, используя команду `edit-pr _pr-number_` на машине `freefall`. Хорошо будет, если вы потратите немного времени на поиск и закрытие других PR по этой теме. Вы и сами можете пользоваться man:send-pr[1] для предложения изменений, которые, по вашему мнению, могут потребовать более подробного обсуждения с коллегами.
+[source, shell]
+....
+% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git
+....
-Более подробно о GNATS можно прочитать по адресам:
+Затем убедитесь, что имя пользователя и адрес электронной почты настроены правильно. Требуется, чтобы они точно соответствовали записи passwd в кластере FreeBSD.
-* http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html[http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html]
-* link:https://www.FreeBSD.org/support/[http://www.FreeBSD.org/support/]
-* man:send-pr[1]
+Используйте
+
+[source, shell]
+....
+freefall% gen-gitconfig.sh
+....
-Вы можете пользоваться локальной копией GNATS, поддерживая ее синхронность при помощи CVSup. При этом вы можете использовать команды GNATS локально, а также пользоваться другими интерфейсами, такими как `tkgnats`, что позволит вам работать с базой сообщений об ошибках без соединения с Интернет.
+на freefall.freebsd.org (при условии, что /usr/local/bin находится в PATH), чтобы получить готовый шаблон конфигурации, который можно использовать напрямую.
-[.procedure]
-.Procedure: Использование локальной копии GNATS
-. Если вы еще не поддерживаете зеркало дерева GNATS, добавьте в ваш [.filename]#supfile# строку
-+
-[.programlisting]
+Следующая команда делает слияние ветки `working` в основную ветку `main` вышестоящего репозитория. Важно, чтобы вы подготовили свои изменения именно так, как хотите видеть их в исходном репозитории FreeBSD, перед выполнением этой операции. Данный синтаксис отправляет (push) ветку `working` в `main`, перемещая ветку `main` вперед. Вы сможете сделать это только в том случае, если результатом будет линейное изменение для `main` (т.е. без слияний).
+
+[source, shell]
....
-gnats release=current prefix=/usr
+% git push freebsd working:main
....
-+
-Учтите, что эта строка должна предшествовать любым строкам, содержащим параметр "tag=", поскольку дерево GNATS не находится под управлением CVS и не имеет символьных меток.
-+
-После запуска cvsup в каталоге [.filename]#/usr/gnats# будет создана копия дерева GNATS FreeBSD. Вы можете использовать файл _refuse_ для копирования отдельных категорий. Например, если вас интересуют только сообщения категории `docs`, добавьте в файл [.filename]#/usr/local/etc/cvsup/sup/refuse# footnote:[Точный путь к файлу зависит от установок *default base в вашем файле supfile.] строку
-+
-[.programlisting]
+
+Если ваша отправка (push) отклонена из-за проигрыша в гонке коммитов, перебазируйте вашу ветку перед повторной попыткой:
+
+[source, shell]
....
-gnats/[a-ce-z]*
+% git checkout working
+% git fetch freebsd
+% git rebase freebsd/main
+% git push freebsd working:main
....
-+
-Прочие примеры в этом разделе подразумевают, что вы синхронизируете только категорию `docs`.
-. Установите порт GNATS из [.filename]#ports/databases/gnats#. После установки вы обнаружите различные служебные каталоги в дереве [.filename]#$PREFIX/shared/gnats#.
-. Создайте символьные ссылки на синхронизированные каталоги GNATS в служебный каталог GNATS:
-+
-[source,shell]
+
+[[git-push-upstream-alt]]
+===== Время отправить (push) изменения вверх (альтернативный вариант)
+
+Некоторым удобнее делать слияние своих изменений в локальную ветку `main` перед отправкой в удалённый репозиторий. Кроме того, `git arc stage` перемещает изменения из ветки в локальную `main`, когда требуется выполнить только часть изменений из ветки. Инструкции схожи с предыдущим разделом:
+[source, shell]
....
-# cd /usr/local/shared/gnats/gnats-db
-# ln -s /usr/gnats/docs
+% git checkout main
+% git merge --ff-only `working`
+% git push freebsd
....
-+
-Проделайте эту операцию для всех синхронизируемых категорий.
-. Обновите служебный файл GNATS [.filename]#categories#, расположенный в каталоге [.filename]#$PREFIX/shared/gnats/gnats-db/gnats-adm#:
-+
-[.programlisting]
+Если вы проиграли гонку, попробуйте снова с
+[source, shell]
....
-# This category is mandatory
-pending:Category for faulty PRs:gnats-admin:
-#
-# FreeBSD categories
-#
-docs:Documentation Bug:freebsd-doc:
+% git pull --rebase
+% git push freebsd
....
-. Запустите [.filename]#$PREFIX/libexec/gnats/gen-index# для создания индекса. Вывод этой команды должен быть перенаправлен в файл [.filename]#$PREFIX/shared/gnats/gnats-db/gnats-adm/index#. Эту операцию можно выполнять периодически при помощи man:cron[8] или запускать man:cvsup[1] из скрипта, который затем сгенерирует новый индекс:
-+
-[source,shell]
+Эти команды получат (fetch) последние изменения из `freebsd/main`, а затем перебазируют (rebase) локальные изменения `main` поверх них, что и требуется, когда вы проиграли гонку коммитов. Примечание: коммиты слияния ветки вендоров не будет работать с этой техникой.
+
+===== Поиск ревизии Subversion
+
+Вам нужно убедиться, что вы получили (fetch) примечания (подробности смотрите в разделе crossref:committers-guide[git-mini-daily-use, Ежедневное использование]). Как только вы это сделаете, примечания будут отображаться в команде git log следующим образом:
+
+[source, shell]
....
-# /usr/local/libexec/gnats/gen-index \
- > /usr/local/shared/gnats/gnats-db/gnats-adm/index
+% git log
....
-. Протестируйте созданную конфигурацию запросом к базе данных GNATS. Следующая команда выведет список открытых сообщений об ошибках в категории `docs`:
-+
-[source,shell]
+Если у вас есть конкретная версия, вы можете использовать эту конструкцию:
+
+[source, shell]
....
-# query-pr -c docs -s open
+% git log --grep revision=XXXX
....
-+
-Другие интерфейсы, например, порт package:databases/tkgnats[] также должны работать.
-. Выберите PR и закройте его.
+чтобы найти конкретную ревизию. Шестнадцатеричное число после 'commit' — это хэш, который можно использовать для ссылки на этот коммит.
+
+[[git-faq]]
+=== Часто задаваемые вопросы о Git
+
+В этом разделе представлены конкретные ответы на вопросы, которые часто возникают у пользователей и разработчиков.
[NOTE]
====
-Описанная процедура позволяет вам выбирать и просматривать сообщения об ошибках локально. Для редактирования или закрытия вам потребуется зайти на машину `freefall`.
+Мы используем общепринятое соглашение, согласно которому источником для репозитория FreeBSD является 'freebsd', а не стандартный 'origin', чтобы позволить людям использовать его для собственной разработки и минимизировать случайные отправки (push) в неправильный репозиторий.
====
-[[people]]
-== Кто есть кто
+==== Пользователи
-Помимо мастеров репозитория, существует еще несколько участников и групп проекта FreeBSD, с которыми вам как коммиттеру может потребоваться общаться. Краткий и ни в коем случае не полный список приводится ниже.
+===== Как отслеживать -current и -stable, имея только одну копию репозитория?
-`{jhb}`::
-Джон возглавляет проект SMPng и отвечает за архитектуру, дизайн и реализацию перехода на многонитевое ядро. Джон также является редактором статьи "Архитектура SMPng". Если вы работаете с тонкими блокировками многопроцессорного ядра, координируйте свою работу с Джоном.
+**Q:** Although disk space is not a huge issue, it's more efficient to use only one copy of the repository. With SVN mirroring, I could checkout multiple trees from the same repository. How do I do this with Git?
-`{doceng}`::
-doceng - группа, отвечающая за инфраструктуру построения документации, прием новых коммиттеров документации и актуальность информации относительно CVS на веб-сайте и FTP-сайте FreeBSD. Эта группа не разбирает конфликты. Большая часть обсуждений, связанных с документацией, происходит в {freebsd-doc}. Дополнительную информацию о деятельности группы можно найти в ее http://www.FreeBSD.org/internal/doceng/[собственном документе]. Коммиттеры, заинтересованные в обновлении документации, должны ознакомиться с extref:{fdp-primer}[Учебником по Проекту Документирования FreeBSD для новых участников].
+**A:** You can use Git worktrees. 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. While using a 'bare repository' has been put forward as a way to cope, it's more complicated and will not be documented here.
-`{ru}`::
-Руслан великолепно знает тонкости man:mdoc[7]. Если вы пишете справочную страницу и нуждаетесь в совете по ее структуре или разметке, обратитесь к Руслану.
+Сначала необходимо клонировать репозиторий FreeBSD, здесь показано клонирование в `freebsd-current` для избежания путаницы. `$URL` — это любой зеркальный сервер, который работает для вас наилучшим образом:
-`{bde}`::
-Брюс занимается общим стилем кода проекта. Если ваш коммит мог бы быть лучше оформлен, Брюс укажет вам на это. Радуйтесь, что такой человек вообще есть. Брюс также является знатоком различных стандартов, применимых к FreeBSD.
+[source, shell]
+....
+% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' $URL freebsd-current
+....
-`{murray}`::
-Таков состав группы `{re}`. Эта группа отвечает за сроки и процесс выпуска релизов. В период заморозки кода, выпускающие инженеры принимают окончательные решения по поводу всех изменений системы в ветви, готовящейся к очередному релизу. Если вы хотите интегрировать какие-либо изменения из FreeBSD-CURRENT в FreeBSD-STABLE (какими бы они ни были в данный конкретный момент), вам предстоит общаться с этой группой.
-+
-Хироки, кроме того, ведет раздел документации к релизам ([.filename]#src/release/doc/*#). Если ваши изменения стоят того, чтобы быть упомянутыми в информации о релизе, сообщите об этом Хироки. Еще лучше, если вы пошлете патч с предлагаемыми изменениями к документу.
-`{cperciva}`::
-Колин - link:https://www.FreeBSD.org/security/[FreeBSD Security Officer] и отвечает за деятельность группы `{security-officer}`.
+после того, как он будет клонирован, вы можете просто создать рабочее дерево из него:
-`{wollman}`::
-Если вам нужен совет по поводу темных мест сетевой части ядра, или вы не уверены в планируемом изменении сетевой подсистемы, мудрым решением будет обратиться к Гарретту. Помимо того, он хорошо разбирается в различных стандартах, применимых к FreeBSD.
+[source, shell]
+....
+% cd freebsd-current
+% git worktree add ../freebsd-stable-12 stable/12
+....
-{cvs-src-desc}::
-cvs-committers - адрес, используемый CVS для посылки сообщений о коммитах. Вы _никогда_ не должны посылать письма напрямую на этот адрес; следует лишь отвечать на него, когда вам нужно послать короткие комментарии, непосредственно относящиеся к коммиту.
+это извлечёт `stable/12` в каталог с именем `freebsd-stable-12`, который находится на одном уровне с каталогом `freebsd-current`. После создания он обновляется очень похожим образом, как вы могли бы ожидать:
-{developers-name}::
-Все коммиттеры подписаны на список рассылки -developers. Этот список создан для обсуждения вопросов, касающихся "сообщества" коммиттеров FreeBSD, таких как выборы Правления, анонсы и т.п.
-+
-{developers-name} служит для только для использования FreeBSD коммиттерами. Коммиттеры должны иметь возможность публично обсуждать вещи, которые должны быть разрешены, перед тем, как они будут публично объявлены. Данные дискуссии не предназначены для широкой публики и могут нанести вред FreeBSD.
-+
-Все FreeBSD коммиттеры должны соблюдать авторские права оригинального автора или авторов писем из этого списка рассылки. Не публикуйте и не пересылайте сообщения из {developers-name} вне подписчиков данного списка рассылки без согласия всех авторов.
-+
-Нарушители авторских прав будут удалены из списка подписчиков {developers-name}, и будут приостановлены их коммиттерские привилегии. Повторяющиеся или вопиющие нарушения приведут к полному лишению коммиттерских прав.
-+
-Этот список _не_ предназначен для обсуждения кода, и _не является_ заменой списков {freebsd-arch}. На самом деле, такое его использование вредит проекту, поскольку открытые обсуждения вопросов, касающихся всего сообщества пользователей FreeBSD в закрытом списке недопустимы. И, наконец: __никогда, действительно никогда не пишите в {developers-name} с копией в другой список рассылки FreeBSD__. Никогда не пишите в какой-либо другой список рассылки с копией в {developers-name:}. Подобные действия серьезно подрывают смысл существования данного списка рассылки.
-[[ssh.guide]]
-== SSH: быстрый старт
+[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
+....
-[.procedure]
-. Если вы используете FreeBSD версии 4.0 или более позднюю, OpenSSH включен в базовую поставку системы. Для более ранних версий обновите и установите OpenSSH из порта package:security/openssh[].
-. Для тех, кто не хочет набирать свой пароль каждый раз при использовании man:ssh[1] и использует для авторизации ключи RSA или DSA, удобной будет утилита man:ssh-agent[1]. Если вы собираетесь использовать ее, убедитесь, что она запущена раньше прочих приложений. Пользователи X Window, например, обычно запускают ее из файлов [.filename]#.xsession# или [.filename]#.xinitrc#. Подробнее смотрите в справочной странице man:ssh-agent[1].
-. Создайте пару ключей при помощи man:ssh-keygen[1]. Ключи появятся в каталоге [.filename]#$HOME/.ssh/#.
-. Пошлите ваш публичный ключ (содержимое файла [.filename]#$HOME/.ssh/id_dsa.pub# или [.filename]#$HOME/.ssh/id_rsa.pub#) вашему будущему ментору, чтобы он мог быть помещен в файл [.filename]#yourlogin# в каталоге [.filename]#/c/ssh-keys/# на машине `freefall`.
+Я рекомендую использовать `--ff-only`, так как это безопаснее и позволяет избежать случайного попадания в 'кошмар слияния', когда в вашем дереве появляются дополнительные изменения, вынуждающие выполнять сложное слияние вместо простого.
-Теперь вы можете пользоваться утилитой man:ssh-add[1] для авторизации один раз за сессию. Утилита запросит кодовую фразу для вашего секретного ключа и затем сохранит ее в агенте авторизации (man:ssh-agent[1]). Если вы хотите удалить сохраненный секретный ключ из агента, используйте команду `ssh-add -d`.
+Вот https://adventurist.me/posts/00296[хорошая статья], в которой рассматривается этот вопрос более подробно.
-Для теста используйте команду типа `ssh freefall.FreeBSD.org ls /usr`.
+==== Разработчики
-За дополнительной информацией обращайтесь к package:security/openssh[], man:ssh[1], man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1] и man:scp[1].
+===== Ой! Я закоммитил в `main` вместо другой ветки.
-[[rules]]
-== Большой Список Правил Коммиттера FreeBSD
+**Q:** From time to time, I goof up and mistakenly commit to the `main` branch. What do I do?
-. Уважайте других коммиттеров.
-. Уважайте других участников проекта.
-. Обсудите любые значимые изменения _до_ коммита.
-. Уважайте существующих мейнтейнеров (указанных в поле `MAINTAINER` файлов [.filename]#Makefile# или в файле [.filename]#MAINTAINER# в корневом каталоге репозитория).
-. Любое спорное изменение необходимо откатить (back out) в ожидании решения, если того требует мейнтейнер. Вопросы безопасности могут перекрывать мнение мейнтейнера, если так решит Security Officer.
-. Изменения вносятся в ветвь FreeBSD-CURRENT до FreeBSD-STABLE, за исключением случаев, прямо разрешенных выпускающими инженерами или неприменимости изменения к FreeBSD-CURRENT. Любое нетривиальное и не срочное изменение должно быть выдержано в FreeBSD-CURRENT в течение по крайней мере 3 дней перед переносом, чтобы его могли адекватно протестировать. Выпускающие инженеры обладают той же властью в ветви FreeBSD-STABLE, что и мейнтейнеры (см. правило 5).
-. Не пререкайтесь с другими коммиттерами публично: это дурно выглядит. Если вам необходимо с чем-либо "категорически не согласиться", делайте это личной почтой.
-. Соблюдайте все периоды заморозки кода (core freeze), а также своевременно читайте списки рассылки `committers` и `developers`, чтобы быть в курсе расписания таких периодов.
-. Если вы сомневаетесь в какой-либо процедуре, сначала спросите!
-. Тестируйте свои изменения перед коммитом.
-. Не производите коммит в деревья [.filename]#src/contrib#, [.filename]#src/crypto# и [.filename]#src/sys/contrib# без _прямого_ разрешения (approval) соответствующего мейнтейнера(ов).
+**A:** First, don't panic.
-Невыполнение этих правил может служить основанием для приостановки или, в случае рецидивов, полного лишения коммиттерских прав. Члены Правления (Core) имеют право временно приостановить права коммиттера до момента, когда Правление в целом сможет решить вопрос. В "аварийном" случае (коммиттер разрушает репозиторий) такие права имеют также ответственные за репозиторий. Для приостановки прав коммиттера более чем на неделю или для полного лишения таковых прав требуется квалифицированное большинство (2/3) голосов Правления. Это правило существует не потому, что Правление состоит из злобных диктаторов, разбрасывающихся коммиттерами словно банками из-под колы, но ради предоставления проекту аварийного выключателя. Если кто-то выходит из-под контроля, важно иметь возможность справиться с ситуацией немедленно, а не быть втянутыми в дебаты. В любом случае, коммиттер, чьи права приостановлены, имеет право на "слушания Правления", на которых определяется срок приостановки или лишения коммиттерских прав. Коммиттер, права которого приостановлены может запросить пересмотр своего вопроса через 30 дней и каждые последующие 30 дней (если общий период приостановки превышает 30 дней). Коммиттер, полностью лишенный прав, может запросить пересмотр по истечении 6 месяцев. Правила пересмотра являются _полностью неформальными_ и во всех случаях Правление имеет право отвергнуть запрос на пересмотр, если считает свое первоначальное решение верным.
+Во-вторых, не отправляйте (push) изменения. На самом деле, можно исправить почти всё, если изменения не были отправлены. Все ответы в этом разделе предполагают, что отправки не произошло.
-Во всех прочих аспектах деятельности проекта, Правление является подмножеством коммиттеров и ограничено __теми же правилами__. Само по себе членство в Правлении не дает права преступать описанные правила. Правление обладает "особой силой" только в случае деятельность как целое, а не на индивидуальной основе. Члены Правления - в первую очередь коммиттеры.
+Следующий ответ предполагает, что вы закоммитили в `main` и хотите создать ветку с названием `issue`:
-=== Подробности
+[source, shell]
+....
+% git checkout -b issue # Create the 'issue' branch
+% git checkout -B main freebsd/main # Reset main to upstream
+% git checkout issue # Back to where you were
+....
-[[respect]]
-. Уважайте других коммиттеров.
-+
-Вы должны относиться к другим коммиттерам как к коллегам по разработке (кем они и являются). Несмотря на возникающие временами попытки утверждать обратное, никто не стал коммиттером по своей или чьей-либо еще глупости, и мало что обижает сильнее, чем подобные обвинения от коллег. Вне зависимости от того, всегда ли мы чувствуем уважение друг к другу или нет (у каждого бывают не лучшие дни), мы всегда должны _выказывать_ уважение к другим коммиттерам, как в публичных форумах, так и в личной почте.
-+
-Способность совместной работы в течение длительного времени - одно из главных достижений проекта, много более важное, чем любой набор изменений в коде, и никакие аргументы относительно кода не стоят потерь в возможности гармонично работать вместе.
-+
-Чтобы не противоречить этому правилу, никогда не посылайте писем, когда вы злы или каким-либо иным образом можете спровоцировать других на конфронтацию. Сначала успокойтесь, затем подумайте о том, как наиболее эффективно убедить оппонента(ов) в правильности ваших аргументов; не подливайте масла в огонь ради краткого мига злорадства, если ценой будет долгая ругань. Это не просто крайне "энергетически неэффективно": повторяющиеся прецеденты публичной агрессии, влияющие на нашу способность работать вместе, будут всерьез рассмотрены лидерами проекта, и могут привести к приостановке или потере прав коммиттера. Во внимание будут приниматься как публичные высказывания, так и личная переписка; это не означает, что Правление будет требовать раскрытия тайны переписки, однако, все предоставленные затронутыми коммиттерами материалы будут рассмотрены.
-+
-Описанные процедуры никого не могут порадовать даже в малом, однако "целостность проекта превыше всего". Никакой объем кода не стоит потери целостности.
-. Уважайте других участников проекта.
-+
-Вы не всегда были коммиттером. В свое время вы были простым сторонним участником (contributor). Помните об этом все время. Помните, сколь важно было добиться внимания и помощи. Не забывайте, насколько ваше участие было важным для вас. Помните свои ощущения. Не препятствуйте другим участникам и не унижайте их. Относитесь к ним с уважением. Возможно, они наши будущие коммиттеры, и они настолько же важны для проекта, как и коммиттеры. Их вклад в проект настолько же ценен и важен, как и ваш. В конце концов, вам пришлось приложить немало усилий для проекта, чтобы стать коммиттером. Всегда помните об этом.
-+
-Обдумайте первое правило <<respect,Уважайте других коммиттеров>> и применяйте его и к другим участникам проекта.
-. Обсудите любые значимые изменения _до_ коммита.
-+
-Репозиторий CVS - не место для анонса изменений или обсуждения их. Все изменения должны обсуждаться в списках рассылки, и лишь после достижения консенсуса вносится в репозиторий. Это не означает, что вы должны спрашивать разрешения на исправление очевидной синтаксической ошибки в коде или опечатки в странице справочника. Вы должны ощутить, когда предполагаемое изменение требует предварительного обсуждения и обратной связи. Как правило, никто не станет возражать против обширных изменений, если результат очевидно лучше предыдущего состояния, однако никто не любит, когда эти изменения __неожиданны__. Лучший способ убедиться, что вы на правильном пути - дать ваш код просмотреть кому-либо еще из коммиттеров.
-+
-Если вы сомневаетесь, просите отзыва!
-. Уважайте существующих мейнтейнеров.
-+
-Многие части кода FreeBSD не являются чьей-либо "собственностью": ситуация, когда некто подпрыгнет и завопит, если вы внесете изменения в "его" код, редка; однако, всегда стоит предварительно проверить. Одним из используемых соглашений было добавление строки MAINTAINER в файл [.filename]#Makefile# пакета или части дерева, которая активно поддерживается одним или несколькими коммиттерами; см. также соответствующий раздел extref:{developers-handbook}[Source Tree Guidelines and Policies, policies]. В случае, если какой-то участок системы имеет несколько мейнтейнеров, изменение его одним из них должно быть одобрено по крайней мере одним из других. В случаях, когда "принадлежность" кода неясна, вы можете взглянуть на историю коммитов, чтобы понять, кто наиболее активно либо в последнее время работал в этой области.
-+
-Отдельные области FreeBSD попадают под контроль коммиттеров, занимающихся поддержкой целых категорий на пути эволюции FreeBSD, таких как локализация или сетевая подсистема. Для дополнительной информации смотрите extref:{contributors}[http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributors/staff-who, staff-who]
-. Любое спорное изменение необходимо откатить в ожидании решения, если того требует мейнтейнер. Вопросы безопасности могут перекрывать мнение мейнтейнера, если так решит Security Officer.
-+
-Это может быть нелегко, особенно в период конфликта (когда каждый участник уверен, что прав именно он). К счастью, CVS дает возможность, вместо того чтобы вести бушующую перебранку, просто откатить внесенные изменения, успокоиться всем участникам конфликта, а затем попробовать найти взаимоприемлемый путь. Если в конце концов окажется, что изменение стоит того, оно может быть легко применено вновь. В противном случае, пользователям не придется жить с неправильным состоянием дерева исходных текстов, пока стороны заняты выяснением отношений. Запросы на откаты возникают _крайне_ редко, поскольку обсуждение обычно выявляет неверные или спорные моменты до коммита; однако, если такой запрос все же возник, он должен быть безусловно удовлетворен, чтобы мы могли спокойно выяснить, было изменение неверным или нет.
-. Изменения вносятся в ветвь FreeBSD-CURRENT до FreeBSD-STABLE, за исключением случаев, прямо разрешенных выпускающими инженерами или неприменимости изменения к FreeBSD-CURRENT. Любое нетривиальное и не срочное изменение должно быть выдержано в FreeBSD-CURRENT в течение по крайней мере 3 дней перед переносом, чтобы его могли адекватно протестировать. Выпускающие инженеры обладают той же властью в ветви FreeBSD-STABLE, что и мейнтейнеры (см. правило 5).
-+
-Это еще одно "не обсуждаемое" правило: выпускающий инженер безусловно отвечает за последствия, если выясняется что внесенные изменения неверны. Уважайте эти права, и помогайте группе выпуска релизов в работе с ветвью FreeBSD-STABLE. На первый взгляд может показаться, что ветвь FreeBSD-STABLE развивается чересчур консервативно. Не забывайте, однако, что разумный консерватизм - отличительное свойство FreeBSD-STABLE, и что эта ветвь развивается по законам, отличным от законов FreeBSD-CURRENT. Кроме того, нет смысла тестировать изменения в FreeBSD-CURRENT, если они немедленно переносятся в FreeBSD-STABLE. Разработчики FreeBSD-CURRENT должны иметь возможность протестировать внесенные изменения, так что оставьте время для такого тестирования, если только речь не идет о критическом исправлении или о чем-либо очевидно не требующем тестирования (например, исправления опечаток в страницах справочника, очевидных ошибок или опечаток в исходных текстах и т.п.) Иными словами, исходите из соображений здравого смысла.
-+
-Изменения в ветви поддержки безопасности (security branches, например, `RELENG_6_0`) должны быть одобрены членом группы `{security-officer}` или, в некоторых случаях, одним из выпускающих инженеров (`{re}`).
-. Не пререкайтесь с другими коммиттерами публично: это дурно выглядит. Если вам необходимо с чем-либо "категорически не согласиться", делайте это личной почтой.
-+
-Для всех участников проекта очень важно поддержание его публичного образа; особенно это важно, если мы хотим продолжать привлекать новых участников. Случается, что, несмотря на все усилия по сохранению власти над собой, люди срываются и грубят друг другу. Лучшее, что здесь можно сделать - минимизировать эффект, пока все участники не успокоятся. Следовательно, вы не должны озвучивать свою ярость публично, а равно и пересылать частную переписку в общедоступные списки рассылки. Выражения, употребляющиеся в переписке один на один зачастую гораздо менее сдержанны, чем те, которые каждый участник употребил бы публично, так что подобной переписке нет места в публичных рассылках: это лишь усугубит и без того неприятную ситуацию. Если кто-либо, говорящий вам нелицеприятные слова, делает это в частной переписке, соблюдайте приличия и вы: отвечайте приватно. Если, по вашему мнению, кто-либо из разработчиков поступает с вами нечестно, и это настолько мучит вас, обратитесь к Правлению, а не выносите конфликт наружу. Правление приложит все силы к разрешению ситуации, выступая в роли третейского судьи. В случаях, когда спор затрагивает какие-либо части кода, и участники не могут прийти к взаимно приемлемому соглашению, Правление может привлечь независимого участника для разрешения вопроса. В этом случае все участники конфликта должны согласиться принять решение, вынесенное третьей стороной.
-. Соблюдайте все периоды заморозки кода (core freeze), а также своевременно читайте списки рассылки `committers` и `developers`, чтобы быть в курсе расписания таких периодов.
-+
-Внесение не одобренных изменений в период заморозки кода является довольно большой ошибкой. Коммиттеры должны быть в курсе событий, прежде чем внести 10 мегабайт изменений после долгого отсутствия. Нарушающие это правило будут подвергаться заморозке коммиттерского бита до прохождения курса в Счастливом Лагере Повышения Квалификации FreeBSD, который организован в Гренландии.
-. Если вы сомневаетесь в какой-либо процедуре, сначала спросите!
-+
-Множество ошибок совершается, когда кто-либо совершает поспешные действия, думая, что поступает правильно. Делая что-либо впервые, вы, скорее всего, не знаете принятых мелочей и тонкостей, и лучше всего будет сначала спросить, не то вы имеете шансы выставить себя не в лучшем свете. Не стоит стыдиться спросить "Как, черт возьми, это надо делать?" Мы и так знаем, что вы умны: иначе вы не стали бы коммиттером.
-. Тестируйте свои изменения перед коммитом.
-+
-Это правило может показаться очевидным. Впрочем, если бы оно действительно было очевидно для всех, мы не так часто сталкивались со случаями явного его нарушения. Если ваши изменения затрагивают ядро, убедитесь, что после него нормально собираются ядра GENERIC и LINT. Если вы изменяете другую часть исходного кода, убедитесь, что код собирается (успешно завершается make buildworld). Если вы изменяете код в какой-либо ветви, убедитесь, что вы тестируете его на машине, которая работает именно на этой ветви кода. Если ваши изменения могут затронуть другие архитектуры, проверьте его на всех поддерживаемых архитектурах. Список доступных ресурсов можно найти на странице link:https://www.FreeBSD.org/internal/[www.FreeBSD.org/internal/]. По мере расширения списка поддерживаемых платформ в кластер будут добавляться соответствующие машины для тестирования.
-. Не производите коммит в деревья [.filename]#src/contrib#, [.filename]#src/crypto# и [.filename]#src/sys/contrib# без _прямого_ разрешения (approval) соответствующего мейнтейнера(ов).
-+
-Описанные деревья содержат исходный код сторонних производителей, который, как правило, импортируется в соответствующие ветви. Любой коммит, даже не выводящий файл из ветви производителя, может стать головной болью для ответственных за эту часть проекта разработчиков. Так что, если у вас нет _прямого_ разрешения от мейнтейнера, _ничего_ не делайте с этой частью репозитория (если, конечно, вы не поддерживаете этот код сами).
-+
-Отметим, что только что сказанное вовсе не означает, что вы не должны пытаться улучшить упомянутый код, наоборот, этому будут только рады. Лучше всего, если вы передадите ваши исправления вендору. Если изменения специфичны для FreeBSD, обсудите вопрос с мейнтейнером, возможно, он посчитает разумным применить их локально. Тем не менее, что бы вы ни делали, _не_ производите коммит сами!
-+
-Если вы хотите стать ответственным за "ничей" участок дерева исходников, свяжитесь с {core}.
-
-=== Правила работы с различными архитектурами
-
-Начиная с версии 5.0 проект FreeBSD начал поддерживать несколько новых вычислительных архитектур, и более не является "i386(TM)-центричным". Для упрощения поддержки FreeBSD на базе всех этих платформ Правлением было сформулировано следующее заявление:
+===== Ой! Я закоммитил что-то не в ту ветку!
-[.blockquote]
-Основной 32-битной платформой разработки является i386; основная 64-битная платформа - Sparc64. Крупные изменения в дизайне (в том числе основные изменения в API и ABI) до попадания в репозиторий должны быть отлажены по крайней мере на одной 32 и одной 64-битной платформе, желательно на основных поддерживаемых платформах.
+**Q:** I was working on feature on the `wilma` branch, but accidentally committed a change relevant to the `fred` branch in 'wilma'. What do I do?
-Платформы i386 и Sparc64 были выбраны по причине широкой распространенности доступности для разработчиков; кроме того, они представляют принципиально разные подходы к дизайну процессора и системы в целом: порядок байт в слове, организация регистров, реализация DMA, кэша, страничной адресации и т.д.
+**A:** The answer is similar to the previous one, but with cherry picking. This assumes there's only one commit on wilma, but will generalize to more complicated situations. 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.
-Процессор Alpha, конечно, является 64-битным, однако он представляет более традиционный дизайн и потому не может служить достаточно хорошей тестовой платформой для отработки тонкостей, с которыми разработчик может столкнуться на других 64-битных платформах. Платформа ia64 во многом сложна так же, как и Sparc64, однако ее доступность для разработчиков пока оставляет желать лучшего.
+[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
+....
-Мы будем переформулировать эти правила по мере того, как будут меняться цены и доступность 64-битных платформ.
+Если это не последний коммит, вы можете выборочно применить (cherry-pick) это одно изменение из wilma к fred, затем использовать `git rebase -i`, чтобы удалить изменение из wilma.
-Кроме того, разработчики должны быть в курсе наших правил классов поддержки (Tier Policy) различных аппаратных архитектур. Эти правила предназначены для общего описание процесса разработки, и потому отличаются от вышеописанных требований к возможностям и архитектурам. Правила классов поддержки на период выпуска релизов много жестче, чем ограничения на изменения в процессе разработки.
+[source, shell]
+....
+# Мы находимся на ветке wilma
+% git checkout fred # перейти на ветку fred
+% git cherry-pick HASH_OF_CHANGE # скопировать ошибочно размещённый коммит
+% git rebase -i main wilma # удалить скопированное изменение
+....
-=== Другие рекомендации
+**Q:** But what if I want to commit a few changes to `main`, but keep the rest in `wilma` for some reason?
-Перед коммитом в области документации используйте какие-либо средства проверки орфографии. Для документов SGML, кроме того, при помощи команды `make lint` следует проверить корректность форматирования.
+**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. 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!
-Для страниц справочника, при помощи утилиты из коллекции портов `manck` проверяйте корректность перекрестных ссылок и ссылок на файлы, а также наличие всех необходимых ссылок на синонимы (переменная `MLINK`).
+**Q:** I want to split off some changes from branch `wilma` into branch `fred`
-Не смешивайте функциональные изменения со стилистическими (не изменяющими функциональных свойств кода). Такое смешивание затрудняет вычленение изменений при использовании команды `cvs diff` и, таким образом, может скрыть появившиеся ошибки. Не смешивайте в коммите в деревья [.filename]#doc/# и [.filename]#www/# изменения текста и переформатирование: это затрудняет работу переводчиков. Производите все стилистические изменения или переформатирования отдельными коммитами, и четко обозначайте их как таковые в журнальных сообщениях к коммиту.
+**A:** The more general answer would be the same as the previous. 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. `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`. If all goes well, and there are no conflicts, you're done. If not, you'll need to resolve the conflicts as you go.
-=== Удаление возможностей
+Другой способ сделать это — выгрузить `wilma`, а затем создать ветку `fred`, указывающую на ту же точку в дереве. Затем вы можете выполнить `git rebase -i` для обеих этих веток, выбирая изменения, которые вы хотите видеть в `fred` или `wilma`, оставляя строки с `pick` и удаляя остальные в редакторе. Некоторые предпочитают создать тег/ветку с названием `pre-split` перед началом, на случай если что-то пойдет не так при разделении. Вы можете отменить это следующей последовательностью:
-При необходимости удаления какой-либо функциональной возможности из утилит базовой системы следует использовать следующую схему действий:
+[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
+....
-. В странице справочника и, возможно, в комментариях к релизу опция, утилита или интерфейс объявляются устаревающими и не рекомендованными к использованию (deprecated); их использование выводит предупреждение.
-. Опция, утилита или интерфейс сохраняются до очередного основного релиза (релиз X.0).
-. Опция, утилита или интерфейс удаляются, в том числе из документации: теперь они являются устаревшими. Как правило, об этом стоит упомянуть в комментариях к релизу.
+Последний шаг необязателен. Если вы собираетесь повторить попытку разделения, его можно пропустить.
-[[archs]]
-== Поддержка различных архитектур
+**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. How do I find what `wilma` was before I started. I don't know how many times I moved things around.
-FreeBSD является хорошо портируемой операционной системой и предназначена для работы на самых разнообразных аппаратных архитектурах. Важной частью процесса обеспечения гибкости в поддержке современных тенденций развития оборудования является деление кода на машинно-зависимый (Machine Dependent, MD) и машинно-независимый (Machine Independent, MI), а также, по возможности, минимизация машинно-зависимой части кода. Каждая новая аппаратная архитектура, которую начинает поддерживать FreeBSD, ощутимо увеличивает работу по поддержке кода, инструментария и процесса выпуска релизов. Кроме того, становится значительно сложнее эффективно тестировать изменения в коде ядра. Все это делает необходимым введение различных классов поддержки для различных архитектур, при сохранении максимальной стабильности малого числа "основных платформ".
+**A:** All is not lost. You can figure out it, so long as it hasn't been too long, or too many commits (hundreds).
-=== Основные намерения
+Итак, я создал ветку wilma и закоммитил в неё пару изменений, затем решил разделить её на fred и wilma. Ничего странного при этом не произошло, но предположим, что произошло. Способ посмотреть, что вы сделали, — это использовать `git reflog`:
-Проект FreeBSD предназначен для работы на рабочих станциях, серверах и высокопроизводительных встроенных системах. Сохраняя ориентир на малое количество архитектур в интересах таких систем, проект FreeBSD остается способен поддерживать высокий уровень надежности, стабильности и производительности, а также уменьшить нагрузку на различные группы поддержки проекта, такие как группы поддержки портов, документации, безопасности и выпуска релизов. Разнообразие поддерживаемых аппаратных платформ расширяет область применимости FreeBSD за счет поддержки новых возможностей (например, поддержка 64-битных процессоров, использование во встроенных системах и т.п.); тем не менее, расширение этого списка всегда должно быть тщательно оценено с позиций увеличения затрат на поддержку дополнительной аппаратной платформы.
+[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
+...
+%
+....
-Проект FreeBSD делит различные аппаратные платформы на 4 класса. Для каждого класса описывается набор требований, необходимых для присвоения платформе данного класса, и обязательства разработчиков по отношению к платформе. Кроме того, определяется порядок смены класса для архитектуры.
+Здесь мы видим изменения, которые я внес. Вы можете использовать это, чтобы понять, где что-то пошло не так. Я лишь укажу на несколько моментов. Первый из них — HEAD@{X} является 'коммитоподобной' сущностью, поэтому вы можете использовать это в качестве аргумента команды. Хотя если эта команда вносит что-либо в репозиторий, номера X изменяются. Вы также можете использовать хэш (первый столбец).
-=== Класс 1: Полностью поддерживаемые архитектуры
+Далее, 'Encourage contributions' был последним коммитом, который я сделал в `wilma` перед тем, как решил разделить всё. Вы также можете видеть, что тот же хэш присутствует, когда я создал ветку `fred` для этого. Я начал с перебазирования `fred`, и вы видите 'начало', каждый шаг и 'завершение' этого процесса. Хотя нам это здесь не нужно, вы можете точно понять, что произошло. К счастью, чтобы исправить это, вы можете выполнить шаги из предыдущего ответа, но с хэшом `869cbd3` вместо `pre-split`. Хотя это кажется немного многословным, это легко запомнить, поскольку вы делаете одно действие за раз. Вы также можете последовательно применить команды одну за другой:
-Платформы 1 класса полностью поддерживаются группой безопасности, группой выпуска релизов и мейнтейнерами инструментария. Новые возможности, добавляемые в код системы, должны быть полностью функциональны для всех архитектур первого класса для каждого из релизов (исключением могут быть архитектурно-зависимые возможности, такие как драйвера аппаратуры). Как правило, все платформы 1 класса должны поддерживаться системами сборки либо расположенными непосредственно в кластере FreeBSD.org, либо легко доступными для всех разработчиков.
+[source, shell]
+....
+% git checkout -B wilma 869cbd3
+% git branch -D fred
+....
-Архитектуры первого класса должны быть готовыми к эксплуатации под управлением FreeBSD во всех аспектах, включая процесс установки и среду разработки.
+и вы готовы попробовать снова. Команда `checkout -B` с хэшем объединяет извлечение (checkout) и создание ветки для него. Использование `-B` вместо `-b` принудительно перемещает уже существующую ветку. В любом случае это работает, что и прекрасно (и ужасно) в Git. Одна из причин, по которой я склонен использовать `git checkout -B xxxx хэш` вместо извлечения (checkout) хэша, а затем создания / перемещения ветки, — это чисто чтобы избежать слегка тревожного сообщения об отделённом HEAD:
-В настоящее время платформами 1 класса являются i386, Sparc64, AMD64, and PC98.
+[source, shell]
+....
+% git checkout 869cbd3
+M faq.md
+Note: checking out '869cbd3'.
-=== Класс 2: Архитектуры для разработчиков
+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.
-Платформы 2 класса не поддерживаются группами безопасности и выпуска релизов. Поддержка инструментария оставляется на усмотрение его мейнтейнеров. Новые возможности, реализуемые в FreeBSD, должны быть реализуемы на этих платформах, однако непосредственная реализация на момент добавления кода в дерево исходных текстов не требуется. Реализация порта на архитектуру 2 класса может быть добавлена в репозиторий, если она не входит в противоречие с текущим состоянием систем первого класса и не влияет в существенной степени на прочие платформы 2 класса. Для добавления архитектуры 2 класса в дерево исходных текстов FreeBSD система должна быть способна загрузиться хотя бы в однопользовательский режим на реальной аппаратуре. Некоторые исключения из последнего правила могут быть сделаны для новой аппаратуры, находящейся в состоянии разработки и временно не доступной для проекта.
+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:
-Обычно архитектурами 2 класса являются те, которые планируются к переходу в 1 класс, но пока находятся в состоянии разработки. Также во втором классе могут находится платформы, перешедшие из 1 класса по причине потери актуальности, по мере того как уменьшается количество ресурсов, доступных для поддержки системы в состоянии готовности к промышленной эксплуатации.
+ git checkout -b <new-branch-name>
-В настоящее время платформами 2 класса являются PowerPC и ia64.
+HEAD is now at 869cbd3 Encourage contributions
+% git checkout -B wilma
+....
-=== Класс 3: Экспериментальные архитектуры
+это производит тот же эффект, но мне приходится читать гораздо больше, а отрубленные головы (прим перев.: detached HEAD — отрубленная голова) — не тот образ, который мне нравится созерцать.
-Платформы 3 класса не поддерживаются группами безопасности и выпуска релизов. Поддержка инструментария оставляется на усмотрение его мейнтейнеров. Архитектурами третьего класса могут быть: те, для которых нет и в ближайшее время не предвидится доступного проекту оборудования; имеющие менее трех активных разработчиков; не способные загрузиться в однопользовательский режим на реальной аппаратуре (или под управлением эмулятора, если реальная аппаратура недоступна); наконец, системы, которые оцениваются как исчезающие, чья дальнейшая распространенность сомнительна. Поддержка систем 3 класса не вносится в основное дерево исходных текстов FreeBSD, однако работа над такими архитектурами может производиться в репозитории Perforce FreeBSD, для облегчения контроля версий и дальнейшей интеграции с основной массой кода.
+===== Ой! Я выполнил `git pull`, и это создало коммит слияния, что мне делать?
-В настоящее время единственной платформой 3 класса является S/390(R).
+**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?
-=== Класс 4: не поддерживаемые архитектуры
+**A:** This can happen when you invoke the pull with your development branch checked out.
-Системы 4 класса никак не поддерживаются проектом.
+Многие разработчики используют `git pull --rebase`, чтобы избежать этой ситуации.
-К 4 классу относятся все архитектуры, не перечисленные выше.
+Сразу после получения и слияния (pull) у вас в рабочую копию будет извлечен новый коммит слияния. Git поддерживает синтаксис `HEAD^#` для определения родителей коммита слияния:
-=== Правила смены класса для архитектуры
+[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
+....
-Для переноса платформы из класса в класс требуется решение, утвержденное Правлением, которое, в свою очередь, согласует его с группами безопасности, выпуска релизов и поддержки инструментария.
+Из этих журналов вы можете легко определить, какой коммит является вашей разработкой. Затем вы просто сбрасываете свою ветку к соответствующему `HEAD^#`:
-[[ports]]
-== FAQ по работе с портами
+[source, shell]
+....
+git reset --hard HEAD^1
+....
+
+Кроме того, команда `git pull --rebase` на этом этапе перебазирует ваши изменения из ветки 'main' на последнюю версию 'freebsd/main'.
+
+**Q:** But I also need to fix my `main` branch. How do I do that?
-.Добавление нового порта
+**A:** Git keeps track of the remote repository branches in a `freebsd/` namespace. To fix your `main` branch, just make it point to the remote's `main`:
-=== Как добавить новый порт?
+[source, shell]
+....
+git branch -f main freebsd/main
+....
-Для начала прочитайте раздел, посвященный репозиторному копированию.
+Ветви в Git не имеют ничего магического: они всего лишь метки на графе, которые автоматически перемещаются вперед при создании коммитов. Так что вышеописанное работает, потому что вы просто перемещаете метку. Из-за этого нет никаких метаданных о ветке, которые нужно было бы сохранять.
-Самым простым будет использовать скрипт `addport` на машине `freefall`. Он добавит порт из указанного вами каталоге, определив нужную категорию из файла [.filename]#Makefile#, добавит строку в файл [.filename]#CVSROOT/modules# и в файл [.filename]#Makefile# для нужной категории. Скрипт был написан `{mharo}` и `{will}`; вопросы и исправления по поводу `addport` следует отправлять Уиллу, как текущему мейнтейнеру.
+===== Смешивание и сопоставление веток
-=== Что еще следует сделать, добавляя новый порт?
+**Q:** So I have two branches `worker` and `async` that I'd like to combine into one branch called `feature` while maintaining the commits in both.
-Проверьте его. Желательно убедиться в том, что порт и соответствующий пакет корректно собираются. Рекомендуемая последовательность действий такова:
+**A:** This is a job for cherry pick.
-[source,shell]
+[source, shell]
....
-# make install
-# make package
-# make deinstall
-# pkg_add имя собранного пакета
-# make deinstall
-# make reinstall
-# make package
+% git checkout worker
+% git checkout -b feature # create a new branch
+% git cherry-pick main..async # bring in the changes
+....
+
+Теперь у вас есть новая ветка под названием `feature`. Эта ветка объединяет коммиты из обеих веток. Вы можете далее работать с ней с помощью `git rebase`.
+
+**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.
+
+**A:** This takes a little bit of prep work, but `git rebase` will do the heavy lifting here.
+[source, shell]
+....
+% git checkout driver # Checkout the driver
+% git checkout -b kernel # Create kernel branch
+% git checkout -b userland # Create userland branch
....
-Более подробные инструкции можно найти в extref:{porters-handbook}[Руководстве FreeBSD по созданию портов].
+Теперь у вас есть две идентичные ветки. Значит, пришло время разделить коммиты. Мы предположим, что сначала все коммиты в ветке `driver` попадут либо в ветку `kernel`, либо в ветку `userland`, но не в обе одновременно.
-Пользуйтесь man:portlint[1] для проверки корректности порта. Не обязательно добиваться полного отсутствия предупреждений, но по крайней мере исправьте простейшие из них.
+[source, shell]
+....
+% git rebase -i main kernel
+....
-Если новый порт прислал человек, еще не упомянутый в extref:{contributors}[Списке прочих участников, contrib-additional], добавьте его имя туда.
+и просто включите изменения, которые вы хотите (строкой 'p' или 'pick'), и удалите коммиты, которые не нужны (это звучит пугающе, но в худшем случае вы всегда можете всё отбросить и начать заново с ветки `driver`, если вы только её не переместили).
-Закройте PR, если новый порт пришел в виде PR. Для этого воспользуйтесь командой `edit-pr _PR#_` на машине `freefall` и измените значение в строке `state` с `open` на `closed`. Затем опишите причину смены статуса, и на этом работа закончена.
+[source, shell]
+....
+% git rebase -i main userland
+....
-[[perks]]
-== Пряники и прочие льготы
+и сделайте то же самое, что вы сделали с веткой `kernel `.
-Увы, льгот, возникающих от того, что вы являетесь коммиттером, не так уж много. Пожалуй, единственным несомненным долговременным преимуществом будет признание вас как компетентного специалиста. Тем не менее, кое-какие льготы все же существуют:
+**Q:** Oh great! I followed the above and forgot a commit in the `kernel` branch. How do I recover?
-Прямой доступ к машине `cvsup-master`::
-Будучи коммиттером, вы можете обратиться к `{kuriyama}`, чтобы получить доступ к машине `cvsup-master.FreeBSD.org`, приложив вывод команды `cvpasswd _yourusername_@FreeBSD.org freefall.FreeBSD.org`. Обратите внимание: в командной строке вы должны указать `freefall.FreeBSD.org`, хотя реальным сервером будет `cvsup-master`. Доступом к `cvsup-master` не следует злоупотреблять: это весьма загруженная машина.
+**A:** You can use the `driver` branch to find the hash of the commit is missing and cherry pick it.
-Бесплатная подписка на комплект из 4 CD или DVD::
-Компания http://www.freebsdmall.com[FreeBSD Mall, Inc.] предоставляет для всех коммиттеров FreeBSD возможность бесплатной подписки на выпуски FreeBSD. Порядок подписки появляется в списке рассылки mailto:developers@FreeBSD.org[developers@FreeBSD.org] после каждого релиза.
+[source, shell]
+....
+% git checkout kernel
+% git log driver
+% git cherry-pick $HASH
+....
-[[misc]]
-== Прочие вопросы
+**Q:** OK. I have the same situation as the above, but my commits are all mixed up. I need parts of one commit to go to one branch and the rest to go to the other. In fact, I have several. Your rebase method to select sounds tricky.
+
+**A:** In this situation, you'd be better off to curate the original branch to separate out the commits, and then use the above method to split the branch.
+
+Итак, предположим, что есть всего один коммит с чистым деревом. Вы можете использовать либо `git rebase` со строкой `edit`, либо это с коммитом на острие. В любом случае шаги одинаковы. Первое, что нам нужно сделать, — это откатиться на один коммит назад, оставив изменения незакоммиченными в дереве:
+
+[source, shell]
+....
+% git reset HEAD^
+....
+
+Примечание: НЕ, повторяю, НЕ добавляйте здесь `--hard`, так как это также удалит изменения из вашего дерева.
+
+Теперь, если вам повезёт, изменения, которые нужно разделить, полностью укладываются по границам файлов. В этом случае вы можете просто выполнить обычный `git add` для файлов в каждой группе, а затем сделать `git commit`. Примечание: при этом вы потеряете сообщение коммита при выполнении сброса, поэтому если оно вам по какой-то причине нужно, следует сохранить копию (хотя `git log $HASH` может его восстановить).
+
+Если вам не повезло, вам придётся разделять файлы. Для этого существует ещё один инструмент, который можно применять по одному файлу за раз.
+
+[source, shell]
+....
+git add -i foo/bar.c
+....
+
+будет последовательно проходить через различия, предлагая вам включить или исключить каждый фрагмент. После завершения, выполните `git commit`, и оставшиеся изменения окажутся в вашем дереве. Вы также можете запускать эту команду несколько раз, даже для нескольких файлов (хотя я считаю удобнее работать с одним файлом за раз и использовать `git rebase -i` для объединения связанных коммитов).
+
+===== Присоединение к организации FreeBSD на GitHub.
+
+**Q:** How do I join the FreeBSD GitHub organization?
+
+**A:** Please see https://wiki.freebsd.org/GitHub#Joining_the_Organisation[our GitHub Wiki Info] page for details. Briefly, all FreeBSD committers may join. Those who are not committers who request joining will be considered on a case by case basis.
+
+==== Клонирование и зеркалирование
+
+**Q:** I'd like to mirror the entire Git repository, how do I do that?
+
+**A:** If all you want to do is mirror, then
-=== Почему не следует вносить малозначимые изменения в ветви разработчика (vendor branches)?
+[source, shell]
+....
+% git clone --mirror $URL
+....
+
+сработает. Однако, у этого есть два недостатка, если вы хотите использовать это для чего-то кроме зеркала, которое вы будете переклонировать.
+
+Во-первых, это 'голый репозиторий', который содержит базу данных репозитория, но не имеет извлеченного рабочего дерева. Это отлично подходит для зеркалирования, но ужасно для повседневной работы. Существует несколько способов обойти это с помощью `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
+....
+
+Но если вы не используете свой зеркальный репозиторий для дальнейшего локального клонирования, то это неподходящий выбор.
+
+Второй недостаток заключается в том, что Git обычно перезаписывает ссылки из вышестоящего репозитория (названия веток, теги и т.д.) , чтобы ваши локальные ссылки могли изменяться независимо от вышестоящего репозитория. Это означает, что вы потеряете изменения, если будете коммитить в свой репозиторий куда-либо, кроме веток приватных проектов.
-* После этого действия каждый новый релиз от разработчика требует ручного приложения и объединения патчей.
-* Что хуже, каждый новый релиз от разработчика требует ручной _проверки_ приложенных патчей.
-* Опция CVS `-J` не всегда хорошо работает. Можете спросить `{obrien}`, он расскажет вам жутких историй.
+**Q:** So what can I do instead?
+
+**A:** Well, you can stuff all of the upstream repository's refs into a private namespace in your local repository. Git clones everything via a 'refspec' and the default refspec is:
+
+[source, shell]
+....
+ fetch = +refs/heads/*:refs/remotes/freebsd/*
+....
+
+что говорит просто получить (fetch) ссылки веток.
+
+Однако в репозитории FreeBSD есть и ряд других элементов. Чтобы увидеть их, вы можете добавить явные спецификации ссылок для каждого пространства имен ссылок или получить всё. Чтобы настроить ваш репозиторий для этого:
+
+[source, shell]
+....
+git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'
+....
-=== Как мне добавить файл в ветвь CVS?
+что поместит всё из вышестоящего репозитория в пространство имён `refs/freebsd/` вашего локального репозитория. Обратите внимание, что это также захватывает все несконвертированные ветки вендоров, а количество связанных с ними ссылок довольно велико.
+
+Вам потребуется ссылаться на эти ссылки с их полными именами, поскольку они не входят в обычные пространства имён Git.
+
+[source, shell]
+....
+git log refs/freebsd/vendor/zlib/1.2.10
+....
+
+будет просматривать журнал ветки вендора для zlib, начиная с версии 1.2.10.
+
+=== Сотрудничество с другими
+
+Одним из ключевых моментов качественной разработки программного обеспечения в таком крупном проекте, как FreeBSD, является возможность сотрудничать с другими участниками до отправки своих изменений в дерево исходного кода. Репозитории Git проекта FreeBSD пока не позволяют отправлять пользовательские ветки в репозиторий, поэтому если вы хотите поделиться своими изменениями с другими, вам необходимо использовать другой механизм, например, репозиторий, размещённый в GitLab или GitHub, для обмена изменениями в ветке, созданной пользователем.
+
+Следующие инструкции показывают, как создать пользовательскую ветку на основе ветки FreeBSD `main` и отправить её в GitHub.
+
+Прежде чем начать, убедитесь, что ваш локальный репозиторий Git актуален и имеет правильно настроенные источники, как показано в разделе crossref:committers-guide[keeping_current,выше].
+
+[source, shell]
+```` % git remote -v freebsd https://git.freebsd.org/src.git (fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````
+
+Первым шагом является создание форка https://github.com/freebsd/freebsd-src[FreeBSD] на GitHub, следуя этим https://docs.github.com/en/github/getting-started-with-github/fork-a-repo[инструкциям]. Назначением форка должен быть ваш собственный, личный аккаунт на GitHub (в моём случае gvnn3).
+
+Теперь добавьте удаленный репозиторий в вашей локальной системе, который указывает на ваш форк:
+[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)
+....
+В этом репозитории вы можете создать ветку crossref:committers-guide[keeping_a_local_branch,как показано выше].
+
+[source, shell]
+....
+% git checkout -b gnn-pr2001-fix
+....
-Для добавления файла в ветви просто обновите исходные файлы до нужной ветви, а затем используйте команду `cvs add`. Например, если мы хотите перенести файл [.filename]#src/sys/alpha/include/smp.h# из ветви HEAD в ветвь RELENG_6, в которой он пока не существует, можно использовать следующую последовательность действий:
+Вносите любые изменения в своей ветке. Собирайте, тестируйте, и как только будете готовы к совместной работе с другими, настанет время отправить свои изменения в ветку, размещённую в GitHub. Прежде чем отправить изменения, вам нужно будет установить соответствующую вышестоящую ветку (upstream), о чём Git сообщит при первой попытке отправки в ваш удалённый репозиторий +github+:
-.MFC для нового файла
+[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
+....
+
+Если установить параметры отправки (push) так, как советует +git+, то это позволяет ему успешно выполниться:
+
+[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'.
+....
+
+Последующие изменения в той же ветке будут по умолчанию отправляться корректно:
+
+[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
+....
+
+На этом этапе ваша работа находится в вашей ветке на +GitHub+, и вы можете поделиться ссылкой с другими участниками.
+
+[[github-pull-land]]
+=== Обработка запросов на принятие изменений (pull request) на github
+В этом разделе описано, как интегрировать запрос на принятие изменений (pull request) из GitHub, отправленный на зеркала FreeBSD в Git на GitHub. Хотя на данный момент это не официальный способ отправки исправлений, иногда таким образом приходят хорошие правки, и проще всего просто перенести их в дерево коммиттера и оттуда отправить (push) в дерево FreeBSD. Аналогичные шаги можно использовать для получать и сливать (pull) ветки из других репозиториев и их использовать их. При коммите запросов на принятие изменений от других следует проявлять особую осторожность, чтобы проверить все изменения и убедиться, что они в точности соответствуют заявленным.
+
+Прежде чем начать, убедитесь, что локальный репозиторий Git актуален и имеет правильно настроенные источники, как показано в разделе crossref:committers-guide[keeping_current,выше]. Кроме того, убедитесь, что у вас есть следующие источники:
+[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)
+....
+Часто запросы на принятие изменений просты: это запросы, содержащие всего один коммит. В этом случае можно использовать упрощённый подход, хотя подход из предыдущего раздела также будет работать. Здесь создаётся ветка, изменения выборочно применяются, сообщение коммита корректируется и проверяется на адекватность перед отправкой. В этом примере используется ветка `staging`, но она может иметь любое имя. Эта техника работает для любого количества коммитов в запросе на принятие изменений, особенно когда изменения чисто применяются к дереву FreeBSD. Однако, когда коммитов несколько, особенно когда требуются незначительные корректировки, `git rebase -i` работает лучше, чем `git cherry-pick`. Вкратце, эти команды создают ветку; выборочно применяют изменения из запроса на принятие изменений; тестируют их; корректируют сообщения коммитов; и выполняют слияние перемоткой (fast-forward) обратно в `main`. Номер PR ниже обозначен как `$PR`. При корректировке сообщения добавьте `Pull Request: https://github.com/freebsd-src/pull/$PR`. Все запросы на принятие изменений, зафиксированные в репозитории FreeBSD, должны быть проверены как минимум одним человеком. Это не обязательно должен быть тот, кто их фиксирует, но в этом случае тот, кто фиксирует, должен доверять компетентности других рецензентов в проверке коммита. Коммиттеры, которые проводят рецензирование кода у запросов на принятие изменений перед их отправкой в репозиторий, должны добавить строку `Reviewed by:` к коммиту, потому что в этом случае это не подразумевается. Добавьте всех, кто просматривает и одобряет коммит на github, также в `Reviewed by:`. Как всегда, следует позаботиться о том, чтобы изменение делало то, что предполагается, и чтобы в нём не было вредоносного кода.
+[NOTE]
+======
+Кроме того, пожалуйста, убедитесь, что имя автора запроса на принятие изменений не является анонимным. Веб-интерфейс редактирования Github генерирует имена вида:
+[source, shell]
+....
+Author: github-user <38923459+github-user@users.noreply.github.com>
+....
+Автору следует отправить вежливую просьбу предоставить более подходящее имя и/или адрес электронной почты. Следует проявлять особую осторожность, чтобы не допустить ошибок стиля или внедрения вредоносного кода.
+======
+
+[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]
+====
+Для сложных запросов на принятие изменений с несколькими коммитами, содержащими конфликты, следуйте приведённой ниже схеме.
+
+. извлеките запрос на принятие изменений `git checkout github/pull/XXX`
+. создайте ветку для перебазирования `git checkout -b staging`
+. перебазируйте ветку `staging` на последнюю версию `main` с помощью `git rebase -i main staging`
+. разрешите конфликты и проведите все необходимые тестирования
+. перемотайте (fast-forward) ветку `staging` в `main`, как описано выше
+. сделайте финальную проверку изменений, чтобы убедиться, что всё в порядке
+. отправьте в репозиторий Git FreeBSD.
+
+Это также будет работать при внесении веток, разработанных в другом месте, в локальное дерево для коммита.
+====
+После завершения работы с запросом на принятие изменений (pull request), закройте его с помощью веб-интерфейса GitHub. Стоит отметить, что если ваш источник `github` использует `https://`, единственным шагом, для которого потребуется учетная запись GitHub, будет закрытие запроса на принятие изменений.
+
+[[vcs-history]]
+== История системы контроля версий
+
+Проект перешёл на crossref:committers-guide[git-primer,git].
+
+Репозиторий исходных кодов FreeBSD перешёл с CVS на Subversion 31 мая 2008 года. Первый настоящий коммит SVN — __r179447__. Репозиторий исходных кодов перешёл с Subversion на Git 23 декабря 2020 года. Последний настоящий коммит svn — __r368820__. Хеш первого настоящего коммита git — __5ef5f51d2bef80b0ede9b10ad5b0e9440b60518c__.
+
+Репозиторий `doc/www` FreeBSD перешёл с CVS на Subversion 19 мая 2012 года. Первый настоящий коммит SVN — __r38821__. Репозиторий документации перешёл с Subversion на Git 8 декабря 2020 года. Последний коммит SVN — __r54737__. Первый настоящий хэш коммита git — __3be01a475855e7511ad755b2defd2e0da5d58bbe__.
+
+Репозиторий `ports` FreeBSD перешел с CVS на Subversion 14 июля 2012 года. Первый настоящий коммит SVN — __r300894__. Репозиторий ports перешел с Subversion на Git 6 апреля 2021 года. Последний коммит SVN — __r569609__. Первый настоящий хэш коммита git — __ed8d3eda309dd863fb66e04bccaa513eee255cbf__.
+
+[[conventions]]
+== Настройка, соглашения и традиции
+
+В качестве нового разработчика необходимо выполнить ряд действий. Первый набор шагов относится исключительно к коммиттерам. Эти шаги должны быть выполнены наставником для тех, кто не является коммиттером.
+
+[[conventions-committers]]
+=== Для новых коммиттеров
+
+Те, кому предоставлены права на коммит в репозитории FreeBSD, должны выполнить следующие шаги.
+
+* Получите одобрение наставника перед внесением каждого из этих изменений!
+* Все коммиты в [.filename]#src# сначала попадают в FreeBSD-CURRENT, прежде чем быть слитыми в FreeBSD-STABLE. Ветка FreeBSD-STABLE должна сохранять совместимость ABI и API с предыдущими версиями этой ветки. Не делайте слияние изменений, нарушающих эту совместимость.
+
+[[commit-steps]]
+[.procedure]
+====
+*Steps for New Committers*
+
+. Добавить автора
++
+[.filename]#doc/shared/authors.adoc# - Добавить информацию об авторе. Последующие шаги зависят от этой информации, и пропуск этого шага приведёт к сбою сборки [.filename]#doc/#. Это относительно простая задача, но она остаётся хорошим первым испытанием навыков работы с системой контроля версий.
+. Обновить список разработчиков и участников
++
+[.filename]#doc/shared/contrib-committers.adoc# - Добавьте запись, которая затем появится в разделе "Разработчики" extref:{contributors}[Списка контрибьюторов, staff-committers]. Записи сортируются по фамилии.
++
+[.filename]#doc/shared/contrib-additional.adoc# - _Удалить_ запись. Записи отсортированы по имени.
+. Добавление статьи в Новости
++
+[.filename]#doc/website/data/en/news/news.toml# - Добавьте запись. Найдите другие записи, объявляющие о новых коммиттерах, и следуйте формату. Используйте дату из письма об утверждении коммиттерских прав.
+. Добавить PGP-ключ
++
+`{des}` написал сценарий оболочки ([.filename]#doc/documentation/tools/addkey.sh#) для упрощения этого процесса. Для получения дополнительной информации обратитесь к файлу https://cgit.freebsd.org/doc/plain/documentation/static/pgpkeys/README[README].
++
+Используйте [.filename]#doc/documentation/tools/checkkey.sh# для проверки, что ключи соответствуют как минимум минимальным стандартам лучших практик.
++
+После добавления и проверки ключа добавьте оба обновленных файла в систему контроля версий и затем зафиксируйте (commit) их. Записи в этом файле отсортированы по фамилии.
++
+[NOTE]
+======
+Очень важно иметь актуальный PGP/GnuPG ключ в репозитории. Ключ может потребоваться для подтверждения личности коммиттера. Например, `{admins}` используют его для восстановления учетной записи. Полный набор ключей пользователей `FreeBSD.org` доступен для скачивания по ссылке link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt].
+======
+. Обновление информации о наставнике и подопечном
++
+[.filename]#src/share/misc/committers-<repository>.dot# - Добавить запись в раздел текущих коммиттеров, где _repository_ - это `doc`, `ports` или `src`, в зависимости от предоставленных прав коммита.
++
+Добавьте запись для каждого дополнительного отношения наставник/подопечный в нижнем разделе.
+. Сгенерировать пароль Kerberos
++
+См. crossref:committers-guide[kerberos-ldap, Kerberos и LDAP веб-пароль для кластера FreeBSD] для генерации или настройки учётной записи Kerberos для использования с другими сервисами FreeBSD, такими как link:https://bugs.freebsd.org/bugzilla/[база данных отслеживания ошибок] (вы получаете учётную запись для отслеживания ошибок как часть этого шага).
+. Необязательно: Включить учётную запись Вики
++
+Учётная запись link:https://wiki.freebsd.org[FreeBSD Wiki] — учётная запись на вики позволяет делиться проектами и идеями. Те, у кого ещё нет учётной записи, могут следовать инструкциям на странице link:https://wiki.freebsd.org/Wiki/About[Wiki/About], чтобы её получить. Свяжитесь с mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org], если вам нужна помощь с вашей учётной записью на Вики.
+. Необязательно: Обновить информацию в Вики
++
+Информация в вики — получив доступ к вики, некоторые добавляют записи на страницы https://wiki.freebsd.org/HowWeGotHere[Как мы сюда попали], https://wiki.freebsd.org/IRC/Nicknames[IRC-псевдонимы], https://wiki.freebsd.org/Community/Dogs[Собаки FreeBSD] и/или https://wiki.freebsd.org/Community/Cats[Кошки FreeBSD].
+. Необязательно: Обновить порты с личной информацией
++
+[.filename]#ports/astro/xearth/files/freebsd.committers.markers# и [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# — Некоторые люди добавляют в эти файлы записи о себе, чтобы указать своё местоположение или дату своего дня рождения.
+. Необязательно: Предотвращение повторных рассылок
++
+Подписчики {dev-commits-doc-all}, {dev-commits-ports-all} или {dev-commits-src-all}, возможно, захотят отписаться, чтобы избежать получения дубликатов сообщений о коммитах и ответов на них.
+====
+
+[[conventions-everyone]]
+=== Для всех
+
+[[conventions-everyone-steps]]
+[.procedure]
+====
+. Представьтесь другим разработчикам, иначе никто не будет иметь представления, кто вы и над чем работаете. Представление не должно быть исчерпывающей биографией — просто напишите абзац или два о том, кто вы, чем планируете заниматься как разработчик в FreeBSD, и кто будет вашим наставником. Отправьте это по электронной почте на {developers-name}, и вы начнёте свой путь!
+. Войдите на `freefall.FreeBSD.org` и создайте файл [.filename]#/var/forward/пользователь# (где _пользователь_ — это ваше имя пользователя), содержащий адрес электронной почты, на который должны перенаправляться письма, адресованные на _вашеимяпользователя_@FreeBSD.org. Это включает все сообщения о коммитах, а также любую другую почту, адресованную {committers-name} и {developers-name}. Очень большие почтовые ящики, которые заняли постоянное место на `freefall`, могут быть усечены без предупреждения, если потребуется освободить место, поэтому перенаправляйте или сохраняйте их в другом месте.
++
+[NOTE]
+======
+Если ваша система электронной почты использует SPF со строгими правилами, вам следует исключить `mx2.FreeBSD.org` из проверок SPF.
+======
++
+Из-за высокой нагрузки, которую обработка СПАМа создает на центральных почтовых серверах, обрабатывающих почтовые рассылки, фронтенд-сервер выполняет базовые проверки и может отбрасывать некоторые сообщения на их основе. В настоящее время единственной активной проверкой является наличие корректной DNS-информации для подключающегося хоста, но это может измениться. Некоторые пользователи связывают эти проверки с ложным отбрасыванием легитимной почты. Для отключения данных проверок для вашей почты создайте файл с именем [.filename]#~/.spam_lover# на `freefall.FreeBSD.org`.
++
+[NOTE]
+======
+Те, кто являются разработчиками, но не коммиттерами, не будут подписаны на рассылки коммиттеров или разработчиков. Подписки определяются правами доступа.
+======
+====
+
+[[smtp-setup]]
+==== Настройка доступа SMTP
+
+Для тех, кто желает отправлять электронные письма через инфраструктуру FreeBSD.org, следуйте приведенным ниже инструкциям:
+
+[.procedure]
+====
+. Направьте ваш почтовый клиент на `smtp.FreeBSD.org:587`.
+. Включить STARTTLS.
+. Убедитесь, что ваш адрес `From:` установлен как `_вашеимяпользователя_@FreeBSD.org`.
+. Для аутентификации можно использовать ваше имя пользователя и пароль FreeBSD Kerberos (см. crossref:committers-guide[kerberos-ldap, Kerberos и LDAP веб-пароль для кластера FreeBSD]). Предпочтительнее использовать принципал `_вашеимяпользователя_/mail`, так как он действителен только для аутентификации к почтовым ресурсам.
++
+[NOTE]
+======
+При вводе имени пользователя не включайте `@FreeBSD.org`.
+======
++
+.Дополнительные заметки
+[NOTE]
+======
+* Будет принимать почту только от `_вашеимяпользователя_@FreeBSD.org`. Если вы аутентифицированы как один пользователь, вам не разрешено отправлять почту от другого.
+* Будет добавлен заголовок сообщения с именем пользователя SASL: (`Authenticated sender: _имя_пользователя_`).
+* На хосте действуют различные ограничения по скорости для сокращения попыток взлома перебором паролей.
+======
+====
+
+[[smtp-setup-local-mta]]
+===== Использование локального MTA для пересылки электронной почты в SMTP-сервис FreeBSD.org
+
+Также возможно использовать локальный MTA для пересылки локально отправленных писем на SMTP-серверы FreeBSD.org.
+
+[[smtp-setup-local-postfix]]
+.Использование Postfix
[example]
====
-[source,shell]
+Чтобы сообщить локальному экземпляру Postfix, что любое письмо от `_вашеимяпользователя_@FreeBSD.org` должно быть перенаправлено на серверы FreeBSD.org, добавьте это в ваш [.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
+....
+
+Создайте файл [.filename]#/usr/local/etc/postfix/relayhost_maps# со следующим содержимым:
+
+[.programlisting]
+....
+вашеимяпользователя@FreeBSD.org [smtp.freebsd.org]:587
+....
+
+Создайте [.filename]#/usr/local/etc/postfix/sasl_passwd# со следующим содержимым:
+
+[.programlisting]
+....
+[smtp.freebsd.org]:587 вашеимяпользователя:вашпароль
+....
+
+Если почтовый сервер используется другими людьми, вы можете захотеть предотвратить отправку ими писем с вашего адреса. Для достижения этой цели добавьте это в ваш [.filename]#main.cf#:
+
+[.programlisting]
+....
+smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps
+smtpd_sender_restrictions = reject_known_sender_login_mismatch
+....
+
+Создайте файл [.filename]#/usr/local/etc/postfix/sender_login_maps# со следующим содержимым:
+
+[.programlisting]
+....
+вашеимяпользователя@FreeBSD.org вашеимялокальногопользователя
....
-% cd sys/alpha/include
-% cvs update -rRELENG_6
-cvs update: Updating .
-U clockvar.h
-U console.h
-...
-% cvs update -kk -Ap smp.h > smp.h
-===================================================================
-Checking out smp.h
-RCS: /usr/cvs/src/sys/alpha/include/smp.h,v
-VERS: 1.1
-***************
+Где _вашеимялокальногопользователя_ — это имя пользователя SASL, используемое для подключения к локальному экземпляру Postfix.
+====
+
+[[smtp-setup-local-opensmtpd]]
+.Использование OpenSMTPD
+[example]
+====
+
+Чтобы указать локальному экземпляру OpenSMTPD, что все письма от `_вашеимяпользователя_@FreeBSD.org` должны быть перенаправлены на серверы FreeBSD.org, добавьте это в ваш [.filename]#smtpd.conf#:
+
+[.programlisting]
+....
+action "freebsd" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth <secrets>
+match from any auth вашеимялокальногопользователя mail-from "_вашеимяпользователя_@freebsd.org" for any action "freebsd"
+....
-% cvs add smp.h
-cvs add: scheduling file `smp.h' for addition on branch `RELENG_6'
-cvs add: use 'cvs commit' to add this file permanently
+Где _вашеимялокальногопользователя_ — это имя пользователя SASL, используемое для подключения к локальному экземпляру OpenSMTPD.
-% cvs commit
+Создайте файл [.filename]#/usr/local/etc/mail/secrets# со следующим содержимым:
+[.programlisting]
+....
+freebsd вашеимяпользователя:вашпароль
....
====
+[[smtp-setup-local-exim]]
+.Использование Exim
+[example]
+====
+
+Чтобы направить локальный экземпляр Exim для пересылки всей почты от
+`_example_@FreeBSD.org` на серверы FreeBSD.org, добавьте это в [.filename]#конфигурацию# 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:
+freebsd_plain:
+ driver = plaintext
+ public_name = PLAIN
+ client_send = ^example/mail^examplePassword
+ client_condition = ${if eq{$host}{smtp.freebsd.org}}
+....
+
+Создайте файл [.filename]#/usr/local/etc/exim/freebsd_send# со следующим содержимым:
+
+[.programlisting]
+....
+example@freebsd.org:smtp.freebsd.org::587
+....
+
+====
+
+[[mentors]]
+=== Наставники
+
+Все новые разработчики получают наставника на первые несколько месяцев. Наставник отвечает за обучение подопечного правилам и соглашениям проекта и направляет его первые шаги в сообществе разработчиков. Наставник также несёт личную ответственность за действия подопечного в течение этого начального периода.
+
+Для коммиттеров: не коммитьте ничего без предварительного одобрения ментора. Задокументируйте это одобрение строкой `Approved by:` в сообщении коммита.
+
+Когда наставник решает, что подопечный освоил основы и готов к самостоятельной фиксации изменений, наставник объявляет об этом, выполняя коммит в [.filename]#mentors#. Этот файл находится в сиротской ветке [.filename]#admin# каждого репозитория. Подробная информация о том, как получить доступ к этим веткам, доступна в crossref:committers-guide[admin-branch, ветке "admin"].
+
+[[pre-commit-review]]
+== Предварительная проверка перед коммитом
+
+Рецензирование кода — один из способов повышения качества программного обеспечения. Следующие рекомендации применимы к коммитам в ветку `main` (-CURRENT) репозитория `src`. Другие ветки, а также деревья `ports` и `docs` имеют собственные политики проверки и рецензирования, но данные рекомендации в целом применимы к коммитам, требующим рецензии:
+
+* Все нетривиальные изменения должны быть проверены перед их фиксацией в репозитории.
+* Рецензирование может проводиться по электронной почте, в Bugzilla, в Phabricator или с помощью другого механизма. По возможности рецензирование должно быть публичным.
+* Разработчик, ответственный за изменение кода, также обязан вносить все необходимые изменения, связанные с проверкой.
+* Рецензирование кода может быть итеративным процессом, который продолжается до тех пор, пока патч не будет готов к коммиту. В частности, после отправки патча на рецензирование, он должен получить явное подтверждение "выглядит хорошо" перед коммитом. Оно должно быть явным, и это может принимать любую форму, которая имеет смысл для метода резензирования.
+* Тайм-ауты не являются заменой проверке.
+
+Иногда проверка кода занимает больше времени, чем хотелось бы, особенно для большого по объему функционала. Принятые способы ускорить проверку ваших патчей:
+
+* Проверяйте патчи других людей. Если вы помогаете, все будут более охотно делать то же самое для вас; доброжелательность — наша валюта.
+* Пингуйте патч. Если он срочный, укажите причины, почему для вас важно, чтобы этот патч был принят, и пингуйте каждые пару дней. Если он не срочный, общепринятая вежливая частота пинга — одна неделя. Помните, что вы просите у других профессиональных разработчиков их ценное время.
+* Обратитесь за помощью в списки рассылки, IRC и т.д. Другие могут либо помочь вам напрямую, либо предложить рецензента.
+* Разделите ваш патч на несколько меньших патчей, которые основываются друг на друге. Чем меньше ваш патч, тем выше вероятность, что кто-то бегло его просмотрит.
++
+При внесении крупных изменений полезно держать это в уме с самого начала работы, поскольку разбиение крупных изменений на более мелкие часто бывает затруднительно постфактум.
-=== Какую мета-информацию я должен включать в сообщения для коммита?
+Разработчикам следует участвовать в проверках кода как в роли авторов, так и в роли рецензентов. Если кто-то любезно проверил ваш код, вы должны ответить тем же для кого-то другого. Обратите внимание, что хотя любой может проверить и дать обратную связь по патчу, только соответствующий эксперт по теме может одобрить изменение. Обычно это коммиттер, который регулярно работает с рассматриваемым кодом.
-Помимо информативного описания содержания коммита вам может потребоваться включить в сообщение дополнительную информацию.
+В некоторых случаях может не оказаться эксперта по предметной области. В таких случаях достаточно проверки опытным разработчиком в сочетании с соответствующим тестированием.
-Она состоит из одной или нескольких строк вида: ключевое слово или словосочетание, двоеточие, табуляции для форматирования, собственно дополнительная информация.
+[[commit-log-message]]
+== Журнал сообщений о коммитах
-Ключевыми словами могут быть:
+В этом разделе содержатся некоторые предложения и традиции по форматированию журналов коммитов.
+
+=== Почему важны сообщения коммитов?
+
+При фиксации изменения в Git, Subversion или другой системе контроля версий (СКВ) вам предлагается написать текст с описанием коммита — сообщение о коммите. Насколько важно это сообщение о коммите? Стоит ли прилагать значительные усилия для его написания? Имеет ли значение, если вы просто напишете `исправлена ошибка`?
+
+У большинства проектов более одного разработчика, и они длятся в течение некоторого времени. Сообщения коммитов — это очень важный способ общения с другими разработчиками, как в настоящем, так и в будущем.
+
+В FreeBSD сотни активных разработчиков и сотни тысяч коммитов, охватывающих десятилетия истории. За это время сообщество разработчиков осознало, насколько ценны хорошие сообщения к коммитам; иногда эти уроки давались тяжело.
+
+Сообщения коммитов служат как минимум трем целям:
+
+* Сотрудничество с другими
++
+Коммиты FreeBSD генерируют письма для различных списков рассылки. Они включают сообщение коммита вместе с копией самого патча. Сообщения коммитов также просматриваются с помощью команд, таких как `git log`. Это служит для информирования других разработчиков об изменениях, которые происходят; другой разработчик может захотеть протестировать изменение, может быть заинтересован в теме и захочет просмотреть более подробно, или может иметь свои собственные проекты, которые выиграют от взаимодействия.
+
+* Обеспечение возможности обнаружения изменений
++
+В большом проекте с долгой историей может быть сложно найти интересующие изменения при расследовании проблемы или изменения в поведении. Подробные, детальные сообщения о коммитах позволяют искать изменения, которые могут быть релевантны. Например, `git log --since 1year --grep 'USB timeout'`.
+
+* Предоставление исторической документации
++
+Сообщения о фиксации служат для документирования изменений для будущих разработчиков, возможно, спустя годы или десятилетия. Этот будущий разработчик может оказаться даже вами, первоначальным автором. Изменение, которое кажется очевидным сегодня, может оказаться совсем не таким в будущем.
+
+Команда `git blame` аннотирует каждую строку исходного файла информацией о изменении (хэш и тема коммита), которое её добавило.
+
+Теперь, когда важность хорошего сообщения о коммите в FreeBSD несомненна, вот его элементы:
+
+=== Начните со строки темы
+
+Сообщения о коммите должны начинаться с однострочной темы, кратко описывающей изменение. Сама по себе тема должна позволять читателю быстро определить, представляет ли изменение интерес.
+
+=== Сохраняйте заголовки краткими
+
+Строка темы должна быть максимально короткой, но при этом сохранять необходимую информацию. Это повышает эффективность просмотра журнала Git и позволяет команде `git log --oneline` отображать короткий хэш и тему на одной 80-символьной строке. Хорошим эмпирическим правилом является удержание длины ниже 67 символов, а по возможности — около 50 или меньше.
+
+=== Добавьте к строке темы префикс с указанием компонента, если это применимо
+
+Если изменение относится к определённому компоненту, строка темы может быть предварена именем этого компонента и двоеточием (:). По возможности используйте тот же префикс, который применялся в предыдущих коммитах к тем же файлам.
+
+✓ `foo: Add -k option to keep temporary data`
+
+Включите префикс в лимит 67 символов, чтобы `git log --oneline` избегал переноса.
+
+=== Напишите первую букву темы с заглавной буквы
+
+Первая буква темы должна быть заглавной. Префикс, если он есть, с заглавной буквы не пишется, если это не требуется (например, `USB:` пишется с заглавной буквы).
+
+=== Не заканчивайте строку темы знаками препинания
+
+Не ставьте точку или другие знаки препинания в конце. В этом отношении строка темы подобна заголовку в газете.
+
+=== Разделите тему и тело письма пустой строкой
+
+Отделите тело от темы пустой строкой.
+
+Некоторые тривиальные коммиты не требуют тела и содержат только заголовок.
+
+✓ `ls: Fix typo in usage text`
+
+=== Ограничьте сообщения до 72 колонок
+
+`git log` и `git format-patch` делают отступ в сообщении коммита на четыре пробела. Перенос строк на 72-й колонке обеспечивает соответствующий отступ по правому краю. Ограничение сообщений 72 символами также удерживает сообщение коммита в форматированных патчах ниже рекомендованного RFC 2822 ограничения длины строки электронной почты в 78 символов. Это ограничение хорошо работает с различными инструментами, которые могут отображать сообщения коммитов; перенос строк может быть непоследовательным при большей длине строки.
+
+=== Используйте настоящее время, повелительное наклонение
+
+Это способствует краткости тем и обеспечивает единообразие, включая автоматически генерируемые сообщения коммитов (например, создаваемые `git revert`). Это важно при чтении списка тем коммитов. Думайте о теме как о завершении фразы «при применении это изменение позволит...(when applied, this change will ...)».
+
+✓ `foo: Implement the -k (keep) option` +
+✗ `foo: Implemented the -k option` +
+✗ `This change implements the -k option in foo` +
+✗ `-k option added`
+
+=== Сосредоточьтесь на том, что и почему, а не на том, как
+
+Объясните, чего достигает изменение и почему оно делается, а не как.
+
+Не предполагайте, что читатель знаком с проблемой. Объясните предысторию и мотивацию изменения. Включите данные тестирования производительности, если они у вас есть.
+
+Если в изменениях есть ограничения или неполные аспекты, опишите их в сообщении коммита.
+
+=== Подумайте, можно ли части сообщения коммита оформить как комментарии в коде
+
+Иногда при написании сообщения коммита вы можете обнаружить, что пишете одно-два предложения, объясняющих какой-то сложный или запутанный аспект изменения. В таких случаях стоит подумать, будет ли полезно иметь это объяснение в виде комментария в самом коде.
+
+=== Напишите сообщения коммитов для себя в будущем
+
+При написании сообщения коммита для изменения у вас есть весь контекст в голове — что вызвало изменение, альтернативные подходы, которые рассматривались и были отклонены, ограничения изменения и так далее. Представьте, что вы возвращаетесь к изменению через год или два, и напишите сообщение коммита таким образом, чтобы оно предоставило этот необходимый контекст.
+
+=== Сообщения о коммитах должны быть самодостаточными
+
+Вы можете включать ссылки на сообщения в почтовых рассылках, сайты с результатами тестирования производительности или ссылки на проверки кода. Однако, сообщение о коммите должно содержать всю соответствующую информацию на случай, если эти ссылки станут недоступны в будущем.
+
+Аналогично, коммит может ссылаться на предыдущий коммит, например, в случае исправления ошибки или отката. Помимо идентификатора коммита (ревизии или хеша), включите строку темы из упомянутого коммита (или другую подходящую краткую ссылку). С каждой миграцией системы контроля версий (от CVS к Subversion и затем к Git) идентификаторы ревизий из предыдущих систем могут становиться трудными для отслеживания.
+
+=== Укажите необходимые метаданные в нижней части
+
+Помимо включения информативного сообщения с каждым коммитом, может потребоваться некоторая дополнительная информация.
+
+Эта информация состоит из одной или нескольких строк, содержащих ключевое слово или фразу, двоеточие, табуляции для форматирования и затем дополнительную информацию.
+
+Для ключевых слов, где допустимы множественные значения (например, `PR:` со списком PR через запятую), разрешается использовать одно и то же ключевое слово несколько раз, чтобы избежать неоднозначности или улучшить читаемость.
+
+Ключевые слова или фразы:
[.informaltable]
-[cols="1,1", frame="none"]
+[cols="20%,80%", frame="none"]
|===
|`PR:`
-|Идентификатор сообщения об ошибке, затрагиваемого (как правило, закрываемого) данным коммитом.
+|Номер отчета о проблеме (если есть), на который влияет данный коммит (обычно путем закрытия). Можно указать несколько номеров PR в одной строке, разделяя их запятыми или пробелами.
-|`Submitted by:`
-|Имя и e-mail адрес приславшего исправление; для коммиттеров - просто имя пользователя в кластере FreeBSD.
+|`Reported by:`
+|Имя и адрес электронной почты лица, сообщившего о проблеме; для разработчиков — только имя пользователя в кластере FreeBSD.
+Обычно используется, когда нет PR, например, если проблема была сообщена в
+почтовой рассылке.
+
+|`Submitted by:` +
+(deprecated)
+|Это устарело в git; отправляемые патчи должны указывать автора с помощью `git commit --author` с указанием полного имени и действительного email.
|`Reviewed by:`
-|Имя и e-mail адрес того или тех, кто рецензировал изменения; для коммиттеров - имя пользователя в кластере FreeBSD. Если изменения были посланы в список рассылки на рецензию и получили одобрение, имя списка рассылки.
+a|
+Имя и адрес электронной почты человека или людей, которые проверили изменение; для разработчиков достаточно указать имя пользователя в кластере FreeBSD. Если патч был отправлен в список рассылки для проверки и получил положительный отзыв, то укажите только название списка. Если рецензент не является участником проекта, укажите имя, электронную почту и, если это порт, внешнюю роль, например, сопровождающего:
+
+Проверено разработчиком:
+[source,shell]
+....
+Reviewed by: username
+....
+
+Проверено сопровождающим портов, не являющимся разработчиком:
+[source,shell]
+....
+Reviewed by: Full Name <valid@email> (maintainer)
+....
+
+|`Tested by:`
+|Имя и адрес электронной почты человека или людей, которые проверили изменение; для разработчиков — просто имя пользователя в кластере FreeBSD.
+
+|`Discussed with:`
+|Имя и адрес электронной почты человека или людей, которые внесли вклад в исправление, предоставив содержательную обратную связь; для разработчиков — просто имя пользователя в кластере FreeBSD.
+Обычно используется для упоминания тех, кто не проводил явного рецензирования, тестирования или одобрения изменения, но тем не менее участвовал в обсуждении, связанном с изменением, что привело к улучшениям и лучшему пониманию его влияния на проект FreeBSD.
|`Approved by:`
-|Имя и e-mail адрес того или тех, кто одобрил изменение; как и прежде, для коммиттеров просто имя пользователя в кластере. Обычной практикой является получение одобрения для коммитов в новые для вас области дерева. Кроме того, в период перед каждым релизом все коммиты _должны_ быть одобрены группой выпускающих инженеров. В случае ваших первых коммитов вы должны получить одобрение на них у вашего ментора, и упомянуть его в виде "_username-of-mentor_`(mentor)`".
+a|
+
+Имя и адрес электронной почты лица или лиц, утвердивших изменение; для разработчиков — просто имя пользователя в кластере FreeBSD.
+
+Есть несколько случаев, когда утверждение является обычной практикой:
+
+* когда новый коммиттер находится под наставничеством
+* коммиты в область дерева, указанную в файле LOCKS (src)
+* во время цикла выпуска
+* коммиты в репозиторий, где у вас нет права на коммит (например, коммиттер src делает коммит в docs)
+* коммиты в порт, поддерживаемый кем-то другим
+
+Во время наставничества получите одобрение наставника перед коммитом. Укажите имя пользователя наставника в этом поле и отметьте, что он является наставником:
+
+[source,shell]
+....
+Approved by: имя-пользователя-наставника (mentor)
+....
+
+Если коммиты были утверждены командой, укажите название команды, за которым в скобках следует имя пользователя утверждающего. Например:
+
+[source,shell]
+....
+Approved by: re (имя-пользователя)
+....
|`Obtained from:`
-|Имя проекта, из исходного кода которого было взято изменение.
+|Название проекта (если есть), из которого был получен код. Не используйте эту строку для указания имени отдельного человека.
+
+|`Fixes:`
+|Короткий хэш Git и заголовок коммита, который исправлен этим изменением, как возвращается командой `git log -n 1 --pretty=format:'%h ("%s")' GIT-COMMIT-HASH`.
+Мы включаем заголовок коммита, чтобы можно было найти указанный коммит даже в случае, если будущая миграция системы контроля версий сделает ссылки по хэшу недействительными.
|`MFC after:`
-|Если вы хотите получать по почте напоминания об MFC, укажите число дней, недель или месяцев с момента изначального коммита, через которое вы планируете произвести MFC.
+|Чтобы получить напоминание по электронной почте о запланированном MFC через определенное время, укажите количество дней, недель или месяцев, после которых планируется выполнить MFC.
+
+|`MFC to:`
+|Если коммиту должно быть сделано слияние в подмножество стабильных веток, укажите названия веток.
+
+|`MFH:`
+|Если коммиту должено быть сделано слияние в квартальную ветку портов, укажите квартальную ветку. Например, `2021Q2`.
+
+|`Relnotes:`
+|Если изменение является кандидатом для включения в примечания к выпуску следующей версии из ветки, установите значение `yes`.
|`Security:`
-|Если ваши изменения затрагивают вопросы безопасности или исправляют какие-либо уязвимости, укажите ссылки на опубликованные отчеты или описание проблемы.
+|Если изменение связано с уязвимостью или угрозой безопасности, укажите одну или несколько ссылок либо описание проблемы. По возможности включите URL VuXML или идентификатор CVE.
+
+|`Event:`
+|Описание события, в рамках которого был выполнен этот коммит. Если это повторяющееся событие, добавьте год или даже месяц. Например, это может быть `FooBSDcon 2019`. Идея этой строки — отдать должное конференциям, встречам и другим подобным мероприятиям, а также показать, что их проведение полезно. Пожалуйста, не используйте строку `Sponsored by:` для этого, так как она предназначена для организаций, спонсирующих определённые функции, или разработчиков, работающих над ними.
+
+|`Sponsored by:`
+|Организации, спонсировавшие это изменение (если есть). Разделяйте несколько организаций запятыми. Если только часть работы была спонсирована или разные суммы спонсорской поддержки были предоставлены разным авторам, укажите соответствующую информацию в скобках после каждого имени спонсора. Например, `Example.com (alice, code refactoring), Wormulon (bob), Momcorp (cindy)` показывает, что Alice была спонсирована Example.com для рефакторинга кода, в то время как Wormulon спонсировал работу Bob, а Momcorp спонсировал работу Cindy. Другие авторы либо не были спонсированы, либо решили не указывать спонсорство.
+
+|`Pull Request:`
+|Это изменение было отправлено как запрос на принятие изменений (pull request) или запрос на слияние (merge request) в один из публичных Git-репозиториев FreeBSD только для чтения.
+Оно должно включать полный URL запроса на включение изменений, так как они часто выполняют роль рецензий кода.
+Например: `https://github.com/freebsd/freebsd-src/pull/745`
+
+|`Co-authored-by:`
+|Имя и адрес электронной почты дополнительного автора коммита.
+GitHub содержит подробное описание трейлера Co-authored-by по адресу 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 подтверждает соответствие требованиям https://developercertificate.org/
+
+|`Differential Revision:`
+|Полный URL обзора в Phabricator. Эта строка __должна быть последней строкой__. Например: `https://reviews.freebsd.org/D1708`.
+
|===
-.Сообщение для коммита, основанного на PR
+.Журнал изменений для коммита на основе PR
[example]
====
-Вы собираетесь внести коммит, основанный на PR, присланном John Smith и содержащим патч для исправления проблемы. Ваше сообщение должно заканчиваться примерно такими строками:
+Коммит основан на патче из PR, предоставленного Джоном Смитом. Поле "PR" в сообщении коммита заполнено.
[.programlisting]
....
...
-PR: foo/12345
-Submitted by: John Smith <John.Smith@example.com>
+PR: 12345
....
+Участник устанавливает автора патча с помощью `git commit --author "John Smith <John.Smith@example.com>"`.
+
====
-.Сообщение для коммита, требующего рецензии
+.Журнал изменений для коммита, требующего проверки
[example]
====
-Вы собираетесь изменить подсистему работы с виртуальной памятью. Вы опубликовали предполагаемые изменения в соответствующем списке рассылки (в данном случае `freebsd-arch`), и изменения были одобрены.
+Вносятся изменения в систему виртуальной памяти. После отправки патчей в соответствующий список рассылки (в данном случае, `freebsd-arch`) и утверждения изменений.
[.programlisting]
....
...
-Reviewed by: -arch
+Reviewed by: -arch
....
====
-.Сообщение для коммита, требующего одобрения
+.Журнал изменений для коммита, требующего одобрения
[example]
====
-Вы намерены произвести коммит в область дерева, для которой определен ведущий (MAINTAINER). Вы скоординировали усилия с мейнтейнером, и он отреагировал "Отлично. Производи коммит."
+Закоммитить порт после согласования с указанным MAINTAINER, который дал добро на коммит.
[.programlisting]
....
...
-Approved by: abc
+Approved by: abc (maintainer)
....
-Где _abc_ имя пользователя, одобрившего ваш коммит.
+Где _abc_ — имя учётной записи лица, одобрившего коммит.
====
-.Сообщение для коммита, использующего код OpenBSD
+.Журнал изменений для коммита, вносящего код из OpenBSD
[example]
====
-Вы собираетесь внести изменение, основанное на коде, использованном проектом OpenBSD.
+Коммит некоторого кода на основе работы, выполненной в проекте OpenBSD.
[.programlisting]
....
...
-Obtained from: OpenBSD
+Obtained from: OpenBSD
....
====
-.Сообщение для коммита, планирующего интеграцию из FreeBSD-CURRENT в FreeBSD-STABLE через некоторое время
+.Журнал коммитов для правки в FreeBSD-CURRENT с запланированным коммитом в FreeBSD-STABLE в последующее время.
[example]
====
-Вы хотите внести изменения, которые должны быть интегрированы из FreeBSD-CURRENT в ветвь FreeBSD-STABLE через две недели.
+Коммит некоторого кода, которому будет сделано слияние из ветки FreeBSD-CURRENT в ветку FreeBSD-STABLE через две недели.
[.programlisting]
....
...
-MFC after: 2 weeks
+MFC after: 2 weeks
+....
+
+Где _2_ — количество дней, недель или месяцев, после которых запланировано MFC. Вариант _weeks_ может быть — `day`, `days`, `week`, `weeks`, `month`, `months`.
+====
+
+Часто необходимо комбинировать их.
+
+Рассмотрим ситуацию, когда пользователь отправил PR с кодом из проекта NetBSD. Разработчик, просматривая PR, видит, что это не та часть дерева, с которой он обычно работает, поэтому он отправляет изменение на рецензирование в список рассылки `arch`. Поскольку изменение сложное, разработчик решает отложить MFC на месяц, чтобы обеспечить достаточное тестирование.
+
+Дополнительная информация, которую нужно включить в коммит, будет выглядеть примерно так
+
+.Пример объединённого журнала коммитов
+[example]
+====
+
+[.programlisting]
+....
+PR: 54321
+Reviewed by: -arch
+Obtained from: NetBSD
+MFC after: 1 month
+Relnotes: yes
+....
+
+====
+
+[[pref-license]]
+== Предпочтительная лицензия для новых файлов
+
+Полная политика лицензирования проекта FreeBSD доступна по ссылке link:https://www.FreeBSD.org/internal/software-license/[https://www.FreeBSD.org/internal/software-license]. Остальная часть этого раздела предназначена для того, чтобы помочь вам начать работу. Как правило, если сомневаетесь — спрашивайте. Дать совет гораздо проще, чем исправлять дерево исходного кода.
+
+Проект FreeBSD предлагает и использует следующий текст в качестве предпочтительной схемы лицензирования:
+
+[.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]
+ */
....
-Где _2_ является количеством дней, недель или месяцев, через которое вы планируете интегрировать (MFC) в FreeBSD-STABLE. В качестве _weeks_ может быть использовано `week`, `weeks`, `month`, `months`, либо этот параметр может быть опущен (при этом подразумевается _X_ дней).
+Проект FreeBSD настоятельно не рекомендует использовать так называемую «рекламную оговорку» в новом коде. Из-за большого числа участников проекта FreeBSD соблюдение этой оговорки стало затруднительным для многих коммерческих вендоров. Если ваш код в дереве содержит рекламную оговорку, пожалуйста, рассмотрите возможность её удаления. Более того, пожалуйста, рассмотрите возможность использования вышеуказанной лицензии для вашего кода.
+
+Проект FreeBSD не приветствует полностью новые лицензии и вариации стандартных лицензий. Новые лицензии требуют одобрения {core-email} для размещения в репозитории `src`. Чем больше различных лицензий используется в дереве, тем больше проблем это создаёт для тех, кто желает использовать этот код, обычно из-за непредвиденных последствий плохо сформулированной лицензии.
+
+Политика проекта требует, чтобы код под некоторыми не-BSD лицензиями размещался только в определённых разделах репозитория, а в некоторых случаях компиляция должна быть условной или даже отключена по умолчанию. Например, ядро GENERIC должно компилироваться только под лицензиями, идентичными или существенно схожими с лицензией BSD. Программное обеспечение под лицензиями GPL, APSL, CDDL и т.п. не должно компилироваться в GENERIC.
+
+Разработчикам следует помнить, что в открытом исходном коде правильное понимание «открытости» так же важно, как и правильное понимание «исходного кода», поскольку неправильное обращение с интеллектуальной собственностью имеет серьёзные последствия. Любые вопросы или опасения следует немедленно доводить до сведения основной команды.
+
+[[tracking.license.grants]]
+== Отслеживание лицензий, предоставленных проекту FreeBSD
+
+Различное программное обеспечение или данные существуют в репозиториях, где проект FreeBSD получил специальную лицензию для их использования. Примером могут служить шрифты Terminus для использования с man:vt[4]. Здесь автор Димитар Жеков разрешил нам использовать шрифт "Terminus BSD Console" под лицензией BSD с двумя пунктами, а не под обычной Open Font License, которую он обычно применяет.
+
+Очевидно, разумно вести учет всех подобных разрешений лицензий. С этой целью {core-email} решил сохранять их архив. Каждый раз, когда проекту FreeBSD предоставляется специальная лицензия, мы требуем уведомлять {core-email}. Разработчики, участвующие в организации такого разрешения, пожалуйста, присылайте детали на {core-email}, включая:
+
+* Контактные данные лиц или организаций, предоставляющих специальную лицензию.
+* Какие файлы, каталоги и т.д. в репозиториях охватываются предоставлением лицензии, включая номера ревизий, в которые был добавлен любой материал с особыми условиями лицензирования.
+* Дата вступления лицензии в силу. Если не согласовано иное, это будет дата выдачи лицензии авторами соответствующего программного обеспечения.
+* Текст лицензии.
+* Примечание о любых ограничениях, исключениях или особых условиях, которые применяются конкретно к использованию лицензионных материалов в FreeBSD.
+* Любая другая соответствующая информация.
+
+Как только {core-email} убедится, что собраны все необходимые данные и они корректны, секретарь отправит подтверждение о получении, подписанное PGP, включая детали лицензии. Это подтверждение будет постоянно архивироваться и служить нашим постоянным свидетельством о предоставлении лицензии.
+
+Архив лицензий должен содержать только сведения о предоставленных лицензиях; это не место для обсуждений вопросов лицензирования или других тем. Доступ к данным в архиве лицензий будет предоставляться по запросу в {core-email}.
+
+[[spdx.tags]]
+== Теги SPDX в дереве
+
+Проект использует теги https://spdx.dev[SPDX] в нашей исходной базе. На данный момент эти теги выделены отступами, чтобы автоматизированные средства могли программно извлекать лицензионные условия. Все теги _SPDX-License-Identifier_ в дереве следует считать информативными. Все файлы в дереве исходных кодов FreeBSD с этими тегами также содержат копию лицензии, регулирующей использование данного файла. Если возникает противоречие, руководствоваться следует дословным текстом лицензии. Проект старается следовать https://spdx.github.io/spdx-spec/v2.2.2/[Спецификации SPDX, версия 2.2]. Инструкцию, как помечать исходные файлы, и допустимые алгебраические выражения можно найти в https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/[Приложении D] и https://spdx.github.io/spdx-spec/v2.2.2/using-SPDX-short-identifiers-in-source-files/[Приложении E]. Проект берет идентификаторы из списка допустимых https://spdx.org/licenses/[кратких лицензионных идентификаторов] SPDX. Проект использует только тег _SPDX-License-Identifier_.
+
+По состоянию на март 2021 года примерно 25 000 из 90 000 файлов в дереве были помечены.
+[[developer.relations]]
+== Отношения с разработчиками
+
+При работе непосредственно с вашим собственным кодом или с кодом, который уже хорошо зарекомендовал себя как ваша зона ответственности, вероятно, нет особой необходимости согласовывать действия с другими коммиттерами перед внесением изменений. Это же относится и к исправлению ошибок в явно заброшенных частях системы (к сожалению, такие области существуют). При изменении частей системы, которые поддерживаются (формально или неформально), рассмотрите возможность запроса рецензирования, как это делал бы разработчик до получения прав коммиттера. Для портов свяжитесь с сопровождающим, указанным в переменной `MAINTAINER` в файле [.filename]#Makefile#.
+
+Чтобы определить, поддерживается ли определённая часть дерева, проверьте файл MAINTAINERS в корне дерева. Если там никого не указано, просмотрите историю изменений, чтобы увидеть, кто вносил изменения в прошлом. Чтобы вывести список имён и адресов электронной почты всех авторов коммитов для заданного файла за последние 2 года, а также количество коммитов каждого автора, отсортированных по убыванию количества коммитов, используйте:
+
+[source, shell]
+----
+% git -C /path/to/repo shortlog -sne --since="2 years" -- relative/path/to/file
+----
+
+Если запросы остаются без ответа или коммиттер иным образом демонстрирует отсутствие интереса к затронутой области, можно смело выполнять коммит.
+
+[IMPORTANT]
+====
+Избегайте отправки личных писем сопровождающим. Других людей может заинтересовать не только итоговый результат, но и обсуждение.
+====
+
+Если есть какие-либо сомнения относительно коммита по любой причине, необходимо провести его рецензирование перед выполнением. Лучше получить критику сразу, чем когда он станет частью репозитория. Если коммит вызывает споры, возможно, стоит рассмотреть возможность отката изменений до разрешения вопроса. Помните, что с системой контроля версий мы всегда можем вернуть всё обратно.
+
+Не оспаривайте намерения других. Если они видят иное решение проблемы или даже иную проблему, скорее всего, это не потому, что они глупы, имеют сомнительное происхождение или пытаются разрушить чужой труд, личный имидж или FreeBSD, а просто потому, что у них иной взгляд на мир. Разное — это хорошо.
+
+Честно выражайте несогласие. Обосновывайте свою позицию по её достоинствам, будьте честны относительно возможных недостатков и будьте открыты для понимания их решения или даже их видения проблемы.
+
+Примите исправление. Все мы не безгрешны. Когда вы совершили ошибку, извинитесь и продолжайте жить дальше. Не корите себя и уж тем более не вините других за свою ошибку. Не тратьте время на смущение или взаимные обвинения — просто исправьте проблему и двигайтесь дальше.
+
+Попросите о помощи. Ищите (и предоставляйте) рецензии коллег. Одно из преимуществ открытого программного обеспечения заключается в большом количестве проверяющих; но это не работает, если никто не проверяет код.
+
+[[if-in-doubt]]
+== Если сомневаетесь...
+
+Если вы в чем-то не уверены, будь то технический вопрос или соглашение по проекту, обязательно спросите. Если вы промолчите, вы никогда не продвинетесь вперед.
+
+Если вопрос связан с технической проблемой, задайте его в публичных списках рассылки. Удержитесь от соблазна написать лично тому, кто знает ответ. Так каждый сможет извлечь пользу из вопроса и ответа.
+
+Для административных вопросов и вопросов, связанных с конкретным проектом, обращайтесь в следующем порядке:
+
+* Ваш наставник или бывший наставник.
+* Опытный коммиттер — по IRC, электронной почте и т.д.
+* Любая команда с ролью ("hat"), так как в ней вам могут дать окончательный ответ.
+* Если всё ещё не уверены, спросите на {developers-name}.
+
+Когда ваш вопрос будет решён, если никто не указал вам на документацию, содержащую ответ на ваш вопрос, задокументируйте его, так как у других возникнет тот же вопрос.
+
+[[bugzilla]]
+== Bugzilla
+
+Проект FreeBSD использует Bugzilla для отслеживания ошибок и запросов на изменения. Если вы исправили проблему или реализовали предложение из базы данных PR, обязательно закройте PR. Также будет вежливо, если вы найдёте время закрыть другие PR, связанные с вашими коммитами.
+
+Коммиттеры с учётными записями Bugzilla не на ``FreeBSD.org`` могут объединить старую учётную запись с учётной записью `FreeBSD.org`, выполнив следующие шаги:
+
+[.procedure]
+====
+. Войдите, используя старую учетную запись.
+. Открыть новую ошибку. Выбрать `Services` в качестве продукта и `Bug Tracker` в качестве компонента. В описании ошибки перечислите аккаунты, которые нужно объединить.
+. Войдите, используя учетную запись `FreeBSD.org`, и оставьте комментарий к только что созданной ошибке, чтобы подтвердить владение. Дополнительные сведения о том, как сгенерировать или установить пароль для вашей учетной записи `FreeBSD.org`, см. в crossref:committers-guide[kerberos-ldap, Kerberos и LDAP веб-пароль для кластера FreeBSD].
+. Если необходимо объединить более двух учетных записей, оставьте комментарии от каждой из них.
+====
+
+Вы можете узнать больше о Bugzilla на:
+
+* extref:{pr-guidelines}[Рекомендации по работе с сообщениями о проблемах FreeBSD]
+* link:https://www.FreeBSD.org/support/[https://www.FreeBSD.org/support]
+
+[[phabricator]]
+== Phabricator
+
+Проект FreeBSD использует https://reviews.freebsd.org[Phabricator] для запросов на рецензирование кода. Подробности можно найти на https://wiki.freebsd.org/Phabricator[странице Phabricator в вики].
+
+Пожалуйста, используйте команду `git arc`, предоставляемую `devel/freebsd-git-devtools` (установите порт или пакет, затем введите `git help arc` для получения документации), для создания и обновления рецензий в Phabricator. Это упростит другим процесс проверки и тестирования ваших патчей.
+
+Коммиттеры с учётными записями Phabricator не на ``FreeBSD.org`` могут переименовать старую учётную запись в ``FreeBSD.org``, выполнив следующие шаги:
+
+[.procedure]
+====
+. Измените адрес электронной почты вашей учетной записи Phabricator на ваш `FreeBSD.org` email.
+. Открыть новую ошибку в нашем трекере ошибок, используя вашу учетную запись `FreeBSD.org`, см. crossref:committers-guide[bugzilla, Bugzilla] для получения дополнительной информации. Выберите `Services` в качестве продукта и `Code Review` в качестве компонента. В описании ошибки запросите переименование вашей учетной записи Phabricator и укажите ссылку на вашего пользователя Phabricator. Например, `https://reviews.freebsd.org/p/bob_example.com/`
+====
+
+[IMPORTANT]
+====
+Учетные записи Phabricator не могут быть объединены, пожалуйста, не создавайте новую учетную запись.
====
-В отдельных случаях вам потребуется комбинировать приведенные примеры.
+[[people]]
+== Кто есть кто
+
+Помимо хранителей репозиториев, есть и другие участники проекта FreeBSD и команды, с которыми вам, скорее всего, предстоит познакомиться в роли коммиттера. Кратко и далеко не исчерпывающе, вот они:
+
+`{doceng}`::
+doceng — это группа, ответственная за инфраструктуру сборки документации, утверждение новых коммиттеров документации и обеспечение актуальности веб-сайта FreeBSD и документации на FTP-сайте в соответствии с деревом Subversion. Она не является органом по разрешению конфликтов. Подавляющее большинство обсуждений, связанных с документацией, происходит в рассылке {freebsd-doc}. Подробнее о команде doceng можно узнать в её https://www.FreeBSD.org/internal/doceng/[уставе]. Коммиттеры, заинтересованные в работе над документацией, должны ознакомиться с руководством extref:{fdp-primer}[Проект документации FreeBSD: введение для новых участников].
+
+`{re-members}`::
+Вот члены команды `{re}`. Эта команда отвечает за установку сроков выпуска и контроль процесса выпуска. Во время заморозки кода, инженеры выпуска обладают окончательным правом принятия решений по всем изменениям в системе для ветки, ожидающей статуса выпуска. Если у вас есть что-то, что вы хотите влить (merge) из FreeBSD-CURRENT в FreeBSD-STABLE (какими бы ни были их значения в любой момент времени), именно с этими людьми нужно обсудить этот вопрос.
+
+`{so}`::
+`{so-name}` — это link:https://www.FreeBSD.org/security/[ответственный за безопасность FreeBSD], который курирует работу `{security-officer}`.
+
+{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.
+
+{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.
++
+`{developers-name}` предназначен исключительно для использования коммиттерами FreeBSD. Для разработки FreeBSD коммиттеры должны иметь возможность открыто обсуждать вопросы, которые будут решены до их публичного объявления. Откровенные обсуждения работы в процессе не подходят для открытой публикации и могут навредить FreeBSD.
++
+Все коммиттеры FreeBSD обязаны не публиковать и не пересылать сообщения из {developers-name} за пределы списка рассылки без разрешения всех авторов. Нарушители будут удалены из {developers-name}, что приведёт к приостановке привилегий на коммит. Повторные или вопиющие нарушения могут привести к постоянному лишению привилегий на коммит.
++
+Этот список _не_ предназначен для обзора кода или каких-либо технических обсуждений. На самом деле, использование его в таком качестве вредит проекту FreeBSD, так как создаёт впечатление закрытого списка, где общие решения, затрагивающие всех пользователей FreeBSD, принимаются без "открытости". И последнее, но не менее важное: __никогда, ни при каких обстоятельствах, не отправляйте письмо на {developers-name} с копией (CC:/BCC:) на другой список FreeBSD__. Никогда не отправляйте письмо на другой список рассылки FreeBSD с копией (CC:/BCC:) на {developers-name}. Это может значительно снизить пользу от данного списка.
+[[ssh.guide]]
+== Руководство по быстрому началу работы с SSH
+
+[.procedure]
+====
+. Если вы не хотите каждый раз вводить пароль при использовании man:ssh[1] и используете ключи для аутентификации, man:ssh-agent[1] создан для вашего удобства. Если вы хотите использовать man:ssh-agent[1], убедитесь, что запускаете его перед запуском других приложений. Например, пользователи X обычно делают это в [.filename]#.xsession# или [.filename]#.xinitrc#. Подробности см. в man:ssh-agent[1].
+. Сгенерируйте пару ключей с помощью man:ssh-keygen[1]. Пара ключей окажется в вашем каталоге [.filename]#$HOME/.ssh/#.
++
+[IMPORTANT]
+======
+Поддерживаются только ключи ECDSA, Ed25519 или RSA.
+======
+. Отправьте ваш открытый ключ ([.filename]#$HOME/.ssh/id_ecdsa.pub#, [.filename]#$HOME/.ssh/id_ed25519.pub# или [.filename]#$HOME/.ssh/id_rsa.pub#) человеку, который настраивает вас как коммиттера, чтобы его можно было добавить в [.filename]#yourlogin# в [.filename]#/etc/ssh-keys/# на `freefall`.
+====
+
+Теперь man:ssh-add[1] можно использовать для аутентификации один раз за сеанс. Он запрашивает парольную фразу для закрытого ключа и затем сохраняет её в агенте аутентификации (man:ssh-agent[1]). Используйте `ssh-add -d` для удаления ключей, сохранённых в агенте.
+
+Проверка с помощью простой удалённой команды: `ssh freefall.FreeBSD.org ls /usr`.
+
+Для получения дополнительной информации см. package:security/openssh-portable[], man:ssh[1], man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1] и man:scp[1].
+
+Для информации о добавлении, изменении или удалении ключей man:ssh[1], см. https://wiki.freebsd.org/clusteradm/ssh-keys[эту статью].
+
+[[coverity]]
+== Доступность Coverity(R) для коммиттеров FreeBSD
+
+Все разработчики FreeBSD могут получить доступ к результатам анализа Coverity для всего программного обеспечения проекта FreeBSD. Все, кто заинтересован в доступе к результатам автоматического анализа Coverity, могут зарегистрироваться на http://scan.coverity.com/[Coverity Scan].
+
+В вики FreeBSD есть мини-руководство для разработчиков, которые заинтересованы в работе с отчетами анализа Coverity(R): https://wiki.freebsd.org/CoverityPrevent[https://wiki.freebsd.org/CoverityPrevent]. Обратите внимание, что это мини-руководство доступно только разработчикам FreeBSD, поэтому если вы не можете открыть эту страницу, вам нужно будет попросить добавить вас в соответствующий список доступа к вики.
+
+Наконец, все разработчики FreeBSD, которые собираются использовать Coverity(R), всегда могут запросить дополнительные детали и информацию об использовании, задав любые вопросы в списке рассылки разработчиков FreeBSD.
+
+[[rules]]
+== Большой список правил коммиттеров FreeBSD
+
+Все участники проекта FreeBSD должны соблюдать _Кодекс поведения_, доступный по ссылке link:https://www.FreeBSD.org/internal/code-of-conduct/[https://www.FreeBSD.org/internal/code-of-conduct]. Как коммиттеры, вы представляете публичное лицо проекта, и ваше поведение оказывает существенное влияние на его общественное восприятие. Это руководство расширяет разделы _Кодекса поведения_, относящиеся к коммиттерам.
+
+. Уважайте других коммиттеров.
+. Уважайте других участников.
+. Обсудите любые значительные изменения _перед_ коммитом.
+. Уважайте существующих сопровождающих (если они указаны в поле `MAINTAINER` в файле [.filename]#Makefile# или в файле [.filename]#MAINTAINER# в корневом каталоге).
+. Любое оспариваемое изменение должно быть отменено до разрешения спора, если этого потребует сопровождающий. Изменения, связанные с безопасностью, могут перекрыть пожелания сопровождающего по усмотрению Ответственного за безопасность.
+. Изменения попадают в FreeBSD-CURRENT до FreeBSD-STABLE, если только это явно не разрешено инженером выпуска или если они не применимы к FreeBSD-CURRENT. Любое нетривиальное или не срочное изменение, которое применимо, также должно оставаться в FreeBSD-CURRENT как минимум 3 дня перед слиянием, чтобы его можно было достаточно протестировать. Инженер выпуска имеет те же полномочия в отношении ветки FreeBSD-STABLE, что и сопровождающий, согласно правилу №5.
+. Не устраивайте публичные разборки с другими разработчиками; это выглядит плохо.
+. Соблюдайте все периоды заморозки кода и своевременно читайте рассылки `committers` и `developers`, чтобы знать, когда действует заморозка кода.
+. Если сомневаетесь в каком-либо действии — сначала спросите!
+. Проверьте свои изменения перед их применением.
+. Не вносите изменения в предоставленное программное обеспечение без _явного_ одобрения соответствующих сопровождающих.
+
+Как уже отмечалось, нарушение некоторых из этих правил может стать основанием для временного лишения прав на коммиты или, при повторных нарушениях, для их постоянного отзыва. Отдельные члены Основной Команды (Core Team) имеют право временно приостановить права на коммиты до тех пор, пока основная команда в полном составе не рассмотрит вопрос. В случае «чрезвычайной ситуации» (например, если коммиттер наносит ущерб репозиторию), временное лишение прав может также быть осуществлено хранителями репозитория. Только Основная Команда 2/3 большинства голосов имеет право приостановить права на коммиты сроком более чем на неделю или отозвать их полностью. Это правило существует не для того, чтобы сделать основную команду сборищем жестоких диктаторов, которые могут избавляться от коммиттеров так же легко, как от пустых банок из-под газировки, а чтобы дать проекту своего рода предохранительный клапан. Если кто-то выходит из-под контроля, важно иметь возможность немедленно принять меры, а не быть парализованными дискуссией. Во всех случаях коммиттер, чьи права приостановлены или отозваны, имеет право на «слушание» в основной команде, где определяется общая продолжительность приостановки. Коммиттер, чьи права приостановлены, также может запросить пересмотр решения через 30 дней и каждые 30 дней после этого (если общий срок приостановки не менее 30 дней). Коммиттер, чьи права были полностью отозваны, может запросить пересмотр по истечении 6 месяцев. Эта политика пересмотра _строго неформальна_, и во всех случаях основная команда оставляет за собой право как удовлетворить, так и проигнорировать запрос на пересмотр, если считает первоначальное решение правильным.
+
+Во всех остальных аспектах работы проекта основная команда является подмножеством коммиттеров и связана __теми же правилами__. Тот факт, что кто-то входит в основную команду, не означает, что им позволено выходить за рамки обозначенных здесь границ; «особые полномочия» основной команды активируются только при действиях в качестве группы, а не индивидуально. Как отдельные лица, члены основной команды — это прежде всего коммиттеры, и только во вторую очередь — основная команда.
+
+=== Подробности
+
+[[respect]]
+. Уважайте других коммиттеров.
++
+Это означает, что вы должны относиться к другим коммиттерам как к коллегам-разработчикам, каковыми они и являются. Несмотря на наши периодические попытки доказать обратное, коммиттером не становятся по глупости, и ничто не раздражает больше, чем когда коллеги относятся к вам именно так. Независимо от того, испытываем ли мы всегда уважение друг к другу или нет (у всех бывают плохие дни), мы должны _относиться_ к другим коммиттерам с уважением всегда — как на публичных форумах, так и в личной переписке.
++
+Способность долгосрочного сотрудничества — это самое ценное достояние проекта, гораздо более важное, чем любые изменения в коде, и превращение споров о коде в проблемы, влияющие на нашу способность гармонично работать вместе, ни при каких обстоятельствах не стоит того.
++
+Для соблюдения этого правила не отправляйте электронные письма, когда вы злитесь или ведёте себя таким образом, который может показаться другим излишне конфронтационным. Сначала успокойтесь, затем подумайте, как наиболее эффективно донести свою точку зрения, чтобы убедить других в своей правоте, а не просто выпустить пар для кратковременного облегчения за счёт долгосрочного конфликта. Иначе это обернётся не только крайне нерациональной тратой сил, но и тем, что повторяющиеся проявления публичной агрессии, мешающие нашей совместной работе, будут строго пресекаться руководством проекта и могут привести к приостановке или лишению ваших прав на коммит. Руководство проекта будет учитывать как публичные, так и приватные сообщения, представленные на его рассмотрение. Оно не будет требовать раскрытия приватной переписки, но примет её во внимание, если участники, вовлечённые в жалобу, предоставят её добровольно.
++
+Всё это никогда не является вариантом, который руководство проекта хоть сколько-нибудь радует, но единство важнее. Никакое количество кода или полезных советов не стоит того, чтобы этим пожертвовать.
+. Уважайте других участников.
++
+Вы не всегда были коммиттером. Когда-то вы были контрибьютором. Помните об этом всегда. Вспомните, каково это — пытаться получить помощь и внимание. Не забывайте, что ваша работа в качестве контрибьютора была для вас очень важна. Вспомните, каково это. Не отговаривайте, не принижайте и не унижайте контрибьюторов. Относитесь к ним с уважением. Они — наши будущие коммиттеры. Они так же важны для проекта, как и коммиттеры. Их вклад так же важен и значим, как и ваш. В конце концов, вы сами сделали множество вкладов, прежде чем стали коммиттером. Всегда помните об этом.
++
+Учитывайте моменты, поднятые в разделе crossref:committers-guide[respect,Уважайте других коммиттеров], и применяйте их также к контрибьюторам.
+. Обсудите любые значительные изменения _перед_ коммитом.
++
+Репозиторий — это не место, где изменения первоначально отправляются на проверку корректности или обсуждаются, сначала это происходит в почтовых рассылках или с помощью сервиса Phabricator. Коммит произойдет только после того, как будет достигнуто некое подобие консенсуса. Это не означает, что требуется разрешение для исправления каждой очевидной синтаксической ошибки или опечатки на странице руководства, просто полезно развить чутьё, когда предлагаемое изменение не столь очевидно и требует предварительного обсуждения. Люди действительно не против масштабных изменений, если результат явно лучше того, что было раньше, им просто не нравится, когда эти изменения становятся _неожиданностью_. Самый лучший способ убедиться, что всё идёт по правильному пути, — это провести рецензирование кода одним или несколькими другими коммиттерами.
++
+Если сомневаетесь, запросите рецензию!
+. Уважайте существующих сопровождающих, если они указаны.
++
+Многие части FreeBSD не "являются чьей-то собственностью" в том смысле, что конкретный человек вскочит и начнёт кричать, если вы внесёте изменения в "его" область, но всё же лучше сначала проверить. Одно из используемых соглашений — добавление строки `maintainer` в [.filename]#Makefile# для любого пакета или поддерева, за которые активно отвечает один или несколько людей; см. extref:{developers-handbook}policies[Рекомендации и политики дерева исходного кода, policies] для документации по этому поводу. Если у участков кода есть несколько сопровождающих, изменения в затронутых областях, внесённые одним сопровождающим, должны быть проверены хотя бы одним другим сопровождающим. В случаях, когда "сопровождение" чего-либо неясно, посмотрите логи репозитория для соответствующих файлов и проверьте, работал ли кто-то недавно или преимущественно в этой области.
+. Любое оспариваемое изменение должно быть отменено до разрешения спора, если этого потребует сопровождающий. Изменения, связанные с безопасностью, могут перекрыть пожелания сопровождающего по усмотрению Ответственного за безопасность.
++
+Это может быть трудно принять во время конфликтов (когда каждая сторона убеждена, что она права, конечно), но система контроля версий делает ненужным продолжение споров, когда гораздо проще просто отменить спорное изменение, успокоить всех и затем попытаться выяснить, как лучше поступить. Если окажется, что изменение всё-таки было правильным, его можно легко вернуть. Если же нет, то пользователям не придётся мириться с ошибочным изменением в дереве, пока все активно обсуждают его достоинства. Люди _очень_ редко требуют отмены изменений в репозитории, поскольку обсуждение обычно выявляет плохие или спорные изменения ещё до коммита, но в таких редких случаях отмена должна производиться без споров, чтобы можно было сразу перейти к выяснению, было ли изменение ошибочным или нет.
+. Изменения вносятся в FreeBSD-CURRENT до FreeBSD-STABLE, если это не разрешено специально инженером выпуска или если они не применимы к FreeBSD-CURRENT. Любое нетривиальное или несрочное изменение, которое применимо, также должно оставаться в FreeBSD-CURRENT как минимум 3 дня перед слиянием, чтобы его можно было достаточно протестировать. Инженер выпуска имеет те же полномочия в отношении ветки FreeBSD-STABLE, как указано в правиле №5.
++
+Это ещё один вопрос, о котором не стоит спорить, поскольку инженер выпуска несёт окончательную ответственность (и получает по шапке), если изменение окажется неудачным. Пожалуйста, уважайте это и оказывайте инженеру выпуска полное сотрудничество, когда дело касается ветки FreeBSD-STABLE. Управление FreeBSD-STABLE может часто казаться излишне консервативным для случайного наблюдателя, но также стоит помнить, что консерватизм — это отличительная черта FreeBSD-STABLE, и там действуют другие правила, чем в FreeBSD-CURRENT. Также нет смысла в том, чтобы FreeBSD-CURRENT был испытательным полигоном, если изменения немедленно переносятся в FreeBSD-STABLE. Изменения должны быть протестированы разработчиками FreeBSD-CURRENT, поэтому дайте некоторое время перед слиянием, если только исправление в FreeBSD-STABLE не является критическим, срочным или настолько очевидным, что дальнейшее тестирование не требуется (исправления опечаток в руководствах, очевидные исправления ошибок/опечаток и т.д.). Другими словами, руководствуйтесь здравым смыслом.
++
+Изменения в ветках безопасности (например, `releng/9.3`) должны быть одобрены членом группы — `{security-officer}` или, в некоторых случаях, членом группы — `{re}`.
+. Не устраивайте публичные разборки с другими разработчиками; это выглядит плохо.
++
+Этот проект поддерживает публичный имидж, который очень важен для всех нас, особенно если мы хотим продолжать привлекать новых участников. Бывают случаи, когда, несмотря на все усилия сохранять самообладание, люди теряют терпение и обмениваются резкими словами. Лучшее, что можно сделать в таких ситуациях, — минимизировать последствия, пока все не остынут. Не выносите гневные слова на публику и не пересылайте личную переписку или другие частные сообщения в публичные списки рассылки, почтовые алиасы, каналы мгновенных сообщений или социальные сети. То, что люди говорят один на один, часто менее приукрашено, чем их публичные высказывания, и такие сообщения не имеют места в публичном пространстве — они только усугубляют и без того сложную ситуацию. Если человек, отправляющий гневное сообщение, хотя бы проявил такт и отправил его лично, проявите такт и вы — оставьте это в тайне. Если вы чувствуете, что другой разработчик относится к вам несправедливо, и это причиняет вам страдания, обратитесь к Основной команде (Core team), а не выносите это на публику. Основная команда постарается выступить в роли миротворцев и вернуть ситуацию в разумное русло. Если спор касается изменений в кодовой базе и участники не могут прийти к согласию, основная команда может назначить третью сторону, устраивающую всех, для разрешения спора. Все вовлечённые стороны должны согласиться с решением, принятым этой третьей стороной.
+. Соблюдайте все периоды заморозки кода и своевременно читайте рассылки `committers` и `developers`, чтобы знать, когда действует заморозка кода.
++
+Внесение неподтверждённых изменений во время заморозки кода — это серьёзная ошибка, и от коммиттеров ожидается, что они будут в курсе происходящего, прежде чем, вернувшись после долгого отсутствия, закоммитить 10 мегабайт накопленных изменений. Те, кто злоупотребляет этим на регулярной основе, будут лишены прав на коммиты до возвращения из Лагеря весёлого перевоспитания FreeBSD, который мы проводим в Гренландии.
+. Если сомневаетесь в каком-либо действии — сначала спросите!
++
+Многие ошибки совершаются из-за того, что кто-то торопится и просто предполагает, что знает правильный способ что-то сделать. Если вы не делали этого раньше, велика вероятность, что вы на самом деле не знаете, как у нас принято делать, и вам действительно нужно сначала спросить, иначе вы рискуете полностью опозориться на публике. Нет ничего постыдного в вопросе «как, черт возьми, это сделать?» Мы уже знаем, что вы умный человек; иначе вы не были бы коммиттером.
+. Проверьте свои изменения перед их применением.
++
+Если ваши изменения касаются ядра, убедитесь, что вы по-прежнему можете компилировать как GENERIC, так и LINT. Если ваши изменения касаются других частей системы, убедитесь, что вы по-прежнему можете компилировать пользовательское пространство с помощью `make buildworld`. Если ваши изменения относятся к ветке, убедитесь, что тестирование проводится на машине, которая работает с этим кодом. Если ваше изменение может нарушить работу другой архитектуры, обязательно протестируйте его на всех поддерживаемых архитектурах. Пожалуйста, убедитесь, что ваше изменение работает для crossref:committers-guide[compilers,поддерживаемых инструментов сборки]. Пожалуйста, обратитесь к https://www.FreeBSD.org/internal/[Внутренней странице FreeBSD] для получения списка доступных ресурсов. По мере добавления других архитектур в список поддерживаемых платформ FreeBSD будут предоставлены соответствующие общие ресурсы для тестирования.
+. Не вносите изменения в предоставленное программное обеспечение без _явного_ одобрения соответствующих сопровождающих.
++
+Предоставленное программное обеспечение — это всё, что находится в деревьях каталогов [.filename]#src/contrib#, [.filename]#src/crypto# или [.filename]#src/sys/contrib#.
++
+Упомянутые выше деревья предназначены для предоставленного программного обеспечения, обычно импортируемого в ветку вендора. Фиксация изменений там может вызвать ненужные проблемы при импорте более новых версий программного обеспечения. В общем случае рекомендуется отправлять исправления напрямую вендору. Исправления могут быть сначала зафиксированы в FreeBSD с разрешения сопровождающего.
++
+Причины изменения стороннего программного обеспечения варьируются от желания строго контролировать тесно связанную зависимость до отсутствия переносимости в каноническом репозитории с их кодом. Независимо от причины, усилия по минимизации нагрузки на поддержку форка полезны для других сопровождающих. Избегайте внесения тривиальных или косметических изменений в файлы, так как это усложняет каждое последующее слияние: такие патчи необходимо вручную перепроверять при каждом импорте.
++
+Если конкретное программное обеспечение не имеет сопровождающего, вам предлагается взять на себя ответственность за него. Если вы не уверены в текущем сопровождении, напишите на {freebsd-arch} и уточните.
+
+=== Политика поддержки нескольких архитектур
+
+В попытке упростить поддержку переносимости FreeBSD на платформы, которые мы поддерживаем, ядро системы разработало следующее предписание:
+
+[.blockquote]
+Основные проектные работы (включая значительные изменения API и ABI) должны подтвердить свою работоспособность как минимум на одной платформе Уровня 1 перед тем, как они могут быть включены в дерево исходного кода.
+
+Разработчики также должны учитывать нашу политику уровней поддержки аппаратных архитектур в долгосрочной перспективе. Эти правила предназначены для предоставления рекомендаций в процессе разработки и отличаются от требований к функциям и архитектурам, указанным в этом разделе. Правила уровней поддержки функций для архитектур на момент выпуска более строгие, чем правила для изменений в процессе разработки.
+
+[[compilers]]
+=== Политика по использованию нескольких компиляторов
+
+Базовая система FreeBSD собирается как с Clang, так и с GCC. Проект делает это тщательно и контролируемо, чтобы максимизировать преимущества от этой дополнительной работы, сводя эту работу к минимуму. Поддержка обоих компиляторов повышает гибкость для наших пользователей. У этих компиляторов разные сильные и слабые стороны, и их совместная поддержка позволяет пользователям выбирать наиболее подходящий для их задач. Clang и GCC поддерживают схожие диалекты C и C++, что требует относительно небольшого количества условного кода. Проект получает улучшенное покрытие кода и повышает его качество, используя возможности обоих компиляторов. Поддержка этого диапазона позволяет проекту собираться в большем количестве пользовательских окружений и задействовать больше CI-окружений, увеличивая удобство для пользователей и предоставляя им больше инструментов для тестирования. Тщательно ограничивая диапазон поддерживаемых версий современными версиями этих компиляторов, проект избегает чрезмерного увеличения матрицы тестирования. Устаревшие и малоизвестные компиляторы, а также старые диалекты языков, имеют крайне ограниченную поддержку, позволяющую собирать пользовательские программы, но без ограничений на сборку базовой системы с их помощью. Точный баланс продолжает развиваться, чтобы гарантировать, что преимущества дополнительной работы остаются выше накладываемых ею затрат. Раньше проект поддерживал очень старые компиляторы Intel или старые версии GCC, но мы заменили поддержку этих устаревших компиляторов на тщательно выбранный диапазон современных компиляторов. В этом разделе описано, где мы используем разные компиляторы и какие ожидания с этим связаны.
+
+Базовая система FreeBSD включает в себя компилятор Clang, входящий в дерево исходного кода. Поскольку он является частью дерева, этот компилятор обладает наибольшей поддержкой. Все изменения должны компилироваться с ним перед коммитом. Полное тестирование, соответствующее изменениям, должно проводиться с этим компилятором.
+
+Базовая система FreeBSD также поддерживает различные версии Clang и GCC в качестве компиляторов, не входящих в дерево исходного кода. Для крупных или рискованных изменений коммиттеры должны выполнить тестовую сборку с поддерживаемой версией GCC. Компиляторы, не входящие в дерево исходного кода, доступны в виде пакетов. Компиляторы GCC доступны в виде пакетов `${TARGET_ARCH}-gcc${VERSION}`, например package:devel/freebsd-gcc14@aarch64[aarch64-gcc14]. Компиляторы Clang доступны в виде пакетов `llvm${VERSION}`, например package:devel/llvm18[llvm18]. Проект запускает автоматизированные задачи CI для сборки всего с использованием этих компиляторов. Ожидается, что коммиттеры исправят задачи, которые они сломали своими изменениями. Коммиттеры могут тестировать сборки пользовательского пространства или отдельных ядер, установив переменную `CROSS_TOOLCHAIN` в имя пакета, например `CROSS_TOOLCHAIN=aarch64-gcc14` или `CROSS_TOOLCHAIN=llvm18`. Для сборки universe или tinderbox, `USE_GCC_TOOLCHAINS=gcc${VERSION}` собирает все архитектуры с использованием соответствующих пакетов компиляторов GCC. Для сборки universe или tinderbox с использованием Clang, не входящего в дерево исходного кода, передайте `CROSS_TOOLCHAIN=llvm${VERSION}`. Обратите внимание, что хотя все архитектуры в базовой системе могут быть скомпилированы с помощью Clang, только несколько архитектур могут быть полностью собраны с помощью GCC.
+
+Проект FreeBSD также имеет несколько CI-пайплайнов на GitHub. Для запросов на принятие изменений (pull request) на GitHub и некоторых веток, отправленных в форки на GitHub, выполняется ряд задач кросс-компиляции. Они тестируют сборку FreeBSD с использованием версий Clang, которые отстают от встроенного компилятора на одну или несколько основных версий.
+
+Проект FreeBSD также обновляет компиляторы. И Clang, и GCC быстро развиваются. Некоторые изменения, такие как удаление устаревших объявлений и определений функций в стиле K&R, будут внесены в дерево до появления нового компилятора. Коммиттерам следует учитывать это и быть готовыми к проверке проблем в своём коде или изменениях с этими новыми компиляторами. Кроме того, сразу после появления новой версии компилятора в дереве, может потребоваться компиляция с использованием старой версии, если есть подозрение на необнаруженную регрессию.
+
+В дополнение к компилятору, LLD от LLVM и binutils от GNU используются компилятором косвенно. Коммиттеры должны учитывать различия в синтаксисе ассемблера и особенностях компоновщиков, а также обеспечивать работоспособность обоих вариантов. Эти компоненты будут тестироваться в рамках CI-задач FreeBSD для Clang или GCC.
+
+Проект FreeBSD предоставляет заголовочные файлы и библиотеки, которые позволяют использовать другие компиляторы для сборки программного обеспечения, не входящего в базовую систему. Эти заголовочные файлы поддерживают создание среды, соответствующей стандартам, включая более ранние диалекты ANSI-C, начиная с C89, а также другие специфичные случаи, выявленные нашей обширной коллекцией портов. Эта поддержка ограничивает отказ от старых стандартов в таких местах, как заголовочные файлы, но не мешает обновлению базовой системы до более новых диалектов. Также она не требует, чтобы базовая система целиком компилировалась с использованием этих старых стандартов. Нарушение этой поддержки приведёт к сбоям в сборке пакетов из коллекции портов, поэтому по возможности этого следует избегать, а при обнаружении проблем — оперативно их исправлять.
+
+Система сборки FreeBSD в настоящее время поддерживает эти различные среды. По мере добавления новых предупреждений в компиляторы проект старается их исправлять. Однако иногда эти предупреждения требуют значительной переработки, поэтому они подавляются каким-либо образом с использованием переменных make, которые вычисляют правильное значение в зависимости от версии компилятора. Разработчики должны учитывать это и обеспечивать правильную условную обработку любых флагов, специфичных для компилятора.
+
+==== Текущие версии компиляторов
+Версии поддерживаемых компиляторов для конкретной ветки, такой как `main` или `stable/X`, со временем меняются. Авторитетным источником информации о поддерживаемых версиях компиляторов являются автоматизированные задачи CI, тестируемые в кросс-сборках GitHub Actions и Jenkins.
+
+Для ветки `main` встроенным компилятором в настоящее время является Clang 19. В настоящее время GCC 12, 13 и 14 тестируются для amd64 через задания CI в Jenkins. Clang 14 и 18 тестируются для aarch64 и arm64 в кросс-сборках GitHub.
+
+=== Другие предложения
+
+При внесении изменений в документацию перед коммитом проверяйте орфографию. Для всех XML-документов убедитесь в корректности директив форматирования, выполнив `make lint` и package:textproc/igor[].
+
+Для страниц руководства запустите package:sysutils/manck[] и package:textproc/igor[] на странице руководства, чтобы проверить, что все перекрестные ссылки и ссылки на файлы корректны, а также что страница руководства имеет все необходимые `MLINKS`.
+
+Не смешивайте исправления стиля с новой функциональностью. Исправление стиля — это любое изменение, которое не меняет функциональность кода. Смешивание изменений затрудняет понимание изменений функциональности при запросе различий между версиями, что может скрыть новые ошибки. Не включайте изменения пробелов вместе с изменениями содержимого в коммитах для [.filename]#doc/#. Лишний шум в различиях значительно усложняет работу переводчиков. Вместо этого вносите исправления стиля или пробелов в отдельных коммитах, явно обозначенных как таковые в сообщении коммита.
+
+=== Устаревающие функции
+
+Когда необходимо удалить функциональность из программного обеспечения в базовой системе, по возможности следуйте этим рекомендациям:
+
+. Упоминание о том, что опция, утилита или интерфейс устарели, содержится в руководстве и, возможно, в примечаниях к выпуску. Использование устаревшей функции вызывает предупреждение.
+. Опция, утилита или интерфейс сохраняются до следующего мажорного (точка-ноль) релиза.
+. Опция, утилита или интерфейс удалены и больше не документируются. Они считаются устаревшими. Также обычно рекомендуется указать их удаление в примечаниях к выпуску.
+
+=== Конфиденциальность и приватность
+
+. Большая часть работы над FreeBSD выполняется публично.
++
+FreeBSD — это _открытый_ проект. Это означает, что не только любой может использовать исходный код, но и большая часть процесса разработки открыта для публичного изучения.
+. Некоторые конфиденциальные вопросы должны оставаться в тайне или быть под запретом на разглашение.
++
+К сожалению, полной прозрачности быть не может. Как разработчик FreeBSD, вы будете иметь определенную степень привилегированного доступа к информации. Следовательно, от вас ожидается соблюдение определенных требований конфиденциальности. Иногда необходимость конфиденциальности исходит от внешних сотрудников или имеет конкретный временной лимит. Однако в большинстве случаев это вопрос неразглашения частных переписок.
+. Ответственный за безопасность обладает исключительным правом публикации уведомлений о безопасности.
++
+Где есть проблемы безопасности, затрагивающие множество различных операционных систем, FreeBSD часто зависит от раннего доступа, чтобы иметь возможность подготовить уведомления для согласованного выпуска. Если разработчики FreeBSD не могут быть доверены в вопросах поддержания безопасности, такой ранний доступ предоставлен не будет. Ответственный за безопасность контролирует доступ к информации об уязвимостях до их публикации и определяет время выпуска всех уведомлений. Он может запросить помощь при условии конфиденциальности у любого разработчика с соответствующими знаниями для подготовки исправлений безопасности.
+. Коммуникации с Основной командой (Core Team) сохраняются в конфиденциальности столько времени, сколько необходимо.
++
+Коммуникации с Основной командой изначально будут рассматриваться как конфиденциальные. Однако в конечном итоге большая часть деятельности Основной команды будет обобщена в ежемесячных или квартальных отчетах ядра. Будет уделено внимание тому, чтобы избежать разглашения каких-либо чувствительных деталей. Записи по некоторым особо чувствительным темам могут вообще не попадать в отчеты и будут храниться только в частных архивах Основной команды.
+. Соглашения о неразглашении могут потребоваться для доступа к определенной коммерчески чувствительной информации.
++
+Доступ к определенным коммерчески чувствительным данным может быть предоставлен только при подписании Соглашения о неразглашении. Перед заключением каких-либо юридически обязывающих соглашений необходимо проконсультироваться с юридическим отделом Фонда FreeBSD.
+. Приватные сообщения не должны становиться публичными без разрешения.
++
+Помимо указанных выше конкретных требований, существует общее правило не публиковать личную переписку между разработчиками без согласия всех вовлеченных сторон. Перед пересылкой сообщения в публичную рассылку, размещением на форуме или веб-сайте, доступном не только для исходных корреспондентов, необходимо запросить разрешение.
+. Общение в каналах, предназначенных только для проекта или с ограниченным доступом, должно оставаться конфиденциальным.
++
+Аналогично личным сообщениям, некоторые внутренние каналы связи, включая почтовые рассылки только для коммиттеров FreeBSD и IRC-каналы с ограниченным доступом, считаются частной перепиской. Для публикации материалов из этих источников требуется разрешение.
+. Основная команда может одобрить публикацию.
++
+В случаях, когда получение разрешения непрактично из-за количества корреспондентов или когда разрешение на публикацию необоснованно отклоняется, Основная команда может одобрить раскрытие таких частных вопросов, которые заслуживают более широкой публикации.
+
+[[archs]]
+== Поддержка множественных архитектур
+
+FreeBSD — это высокопортативная операционная система, предназначенная для работы на множестве различных типов аппаратных архитектур. Поддержание четкого разделения между машинно-зависимым (MD) и машинно-независимым (MI) кодом, а также минимизация MD-кода являются важной частью нашей стратегии по сохранению гибкости в отношении текущих тенденций в аппаратном обеспечении. Каждая новая аппаратная архитектура, поддерживаемая FreeBSD, существенно увеличивает затраты на поддержку кода, инструментальных средств и инжиниринг выпусков. Это также значительно повышает стоимость эффективного тестирования изменений в ядре. Таким образом, существует серьезная мотивация для разграничения уровней поддержки различных архитектур, оставаясь при этом сильными в нескольких ключевых архитектурах, которые рассматриваются как «целевая аудитория» FreeBSD.
+
+=== Заявление об общих намерениях
+
+Проект FreeBSD ориентирован на "коммерческие готовые рабочие станции, серверы и высокопроизводительные встраиваемые системы производственного уровня". Сохраняя фокус на узком наборе архитектур, актуальных для этих сред, проект FreeBSD способен поддерживать высокий уровень качества, стабильности и производительности, а также минимизировать нагрузку на различные команды поддержки проекта, такие как команда портов, команда документации, офицер безопасности и команды разработки релизов. Разнообразие в поддержке оборудования расширяет возможности потребителей FreeBSD, предлагая новые функции и варианты использования, однако эти преимущества всегда должны тщательно оцениваться с учётом реальных затрат на поддержку дополнительных платформ.
+
+Проект FreeBSD разделяет целевые платформы на четыре уровня. Каждый уровень включает список гарантий, на которые могут рассчитывать пользователи, а также обязательства проекта и разработчиков по выполнению этих гарантий. Эти списки определяют минимальные гарантии для каждого уровня. Проект и разработчики могут предоставлять дополнительные уровни поддержки, превышающие минимальные гарантии для данного уровня, но такая дополнительная поддержка не гарантируется. Каждая целевая платформа назначается на определённый уровень для каждой стабильной ветви. В результате, целевая платформа может быть назначена на разные уровни в параллельных стабильных ветках.
+
+=== Целевые платформы
+
+Поддержка аппаратной платформы состоит из двух компонентов: поддержки ядра и пользовательских двоичных интерфейсов приложений (ABI). Поддержка платформы на уровне ядра включает в себя всё необходимое для запуска ядра FreeBSD на аппаратной платформе, например, зависящее от машины управление виртуальной памятью и драйверы устройств. Пользовательский ABI определяет интерфейс для взаимодействия пользовательских процессов с ядром FreeBSD и базовыми системными библиотеками. Пользовательский ABI включает интерфейсы системных вызовов, расположение и семантику публичных структур данных, а также расположение и семантику аргументов, передаваемых подпрограммам. Некоторые компоненты ABI могут быть определены спецификациями, такими как расположение объектов исключений C++ или соглашения о вызовах для функций C.
+
+Ядро FreeBSD также использует ABI (иногда называемый Kernel Binary Interface (KBI)), который включает семантику и расположение публичных структур данных, а также расположение и семантику аргументов публичных функций внутри самого ядра.
+
+Ядро FreeBSD может поддерживать несколько пользовательских ABI. Например, ядро FreeBSD amd64 поддерживает пользовательские ABI FreeBSD amd64 и i386, а также пользовательские ABI Linux x86_64 и i386. Ядро FreeBSD должно поддерживать "родной" ABI в качестве ABI по умолчанию. "Родной" ABI, как правило, разделяет определённые свойства с ABI ядра, такие как соглашение о вызовах в C, размеры базовых типов и т.д.
+
+Уровни определены как для ядер, так и для пользовательских ABI. В общем случае ядро платформы и ABI FreeBSD назначаются на один и тот же уровень.
+
+==== Уровень 1: Полностью поддерживаемые архитектуры
+
+Уровень 1 включает наиболее зрелые платформы FreeBSD. Они поддерживаются офицером безопасности, инженерами выпуска и командой управления портами. Ожидается, что архитектуры Уровня 1 соответствуют производственному качеству во всех аспектах операционной системы FreeBSD, включая среды установки и разработки.
+
+Проект FreeBSD предоставляет следующие гарантии пользователям платформ Уровня 1:
+
+* Официальные образы релизов FreeBSD будут предоставлены командой разработки релизов.
+* Двоичные обновления и исправления исходного кода для Security Advisories и Errata Notices будут предоставляться для поддерживаемых выпусков.
+* Исходные патчи для бюллетеней безопасности будут предоставлены для поддерживаемых веток.
+* Двоичные обновления и исправления исходного кода для кросс-платформенных выпусков Security Advisories обычно предоставляются во время объявления.
+* Изменения в пользовательских ABI, как правило, включают прослойки совместимости (shim) для обеспечения корректной работы бинарных файлов, скомпилированных для любой стабильной ветки, где платформа относится к Уровню 1. Эти прослойки могут быть отключены в стандартной установке. Если прослойки совместимости не предоставляются для изменения ABI, их отсутствие будет явно указано в примечаниях к выпуску.
+* Изменения в определённых частях ABI ядра будут включать прослойки совместимости для обеспечения корректной работы модулей ядра, скомпилированных для самой старой поддерживаемой версии в ветке. Обратите внимание, что не все части ABI ядра защищены.
+* Официальные бинарные пакеты для стороннего программного обеспечения будут предоставлены командой портов. Для встраиваемых архитектур эти пакеты могут быть кросс-собранными на архитектуре другого типа.
+* Наиболее подходящие порты должны либо собираться, либо иметь соответствующие фильтры, чтобы предотвратить сборку неподходящих.
+* Новые функции, которые не являются специфичными для платформы, будут полностью работоспособны на всех архитектурах Уровня 1.
+* Функции и прослойки совместимости, используемые программами, скомпилированными для старых стабильных веток, могут быть удалены в новых основных версиях. Такие изменения будут четко документированы в примечаниях к выпуску.
+* Уровень 1 платформ должен быть полностью документирован. Основные операции будут описаны в Руководстве FreeBSD.
+* Уровень 1 платформ будет включен в дерево исходных кодов.
+* Платформы Уровня 1 должны быть самодостаточными, используя либо встроенный инструментарий, либо внешний инструментарий. Если требуется внешний инструментарий, будут предоставлены официальные бинарные пакеты для него.
+
+Для обеспечения зрелости платформ Уровня 1 проект FreeBSD будет поддерживать следующие ресурсы для разработки:
+
+* Сборка и автоматизация тестирования поддерживаются либо в кластере FreeBSD.org, либо в другом месте, легко доступном для всех разработчиков. Для встраиваемых платформ можно использовать эмулятор, доступный в кластере FreeBSD.org, вместо реального оборудования.
+* Включение в цели `make universe` и `make tinderbox`.
+* Выделенное оборудование в одном из кластеров FreeBSD для сборки пакетов (нативно или через qemu-user).
+
+Совокупно, разработчики должны обеспечить следующее для поддержания статуса платформы Уровня 1:
+
+* Изменения в дереве исходного кода не должны заведомо нарушать сборку платформы Уровня 1.
+* Уровень 1 архитектур должен обладать зрелой, здоровой экосистемой пользователей и активных разработчиков.
+* Разработчики должны иметь возможность собирать пакеты на широко доступных, невстраиваемых системах Уровня 1. Это может означать как нативные сборки, если невстраиваемые системы широко доступны для рассматриваемой платформы, так и кросс-сборки, выполняемые на другой архитектуре Уровня 1.
+* Изменения не должны нарушать ABI пользовательского пространства. Если изменение ABI необходимо, совместимость ABI для существующих бинарных файлов должна обеспечиваться с помощью версионирования символов или увеличения версий разделяемых библиотек.
+* Изменения, которым сделано слияние в стабильные ветки, не должны нарушать защищенные части ABI ядра. Если требуется изменение ABI ядра, изменение должно быть модифицировано для сохранения функциональности существующих модулей ядра.
+
+==== Уровень 2: Развивающиеся и нишевые архитектуры
+
+Уровень 2 включает в себя функциональные, но менее развитые платформы FreeBSD. Они не поддерживаются офицером безопасности, инженерами выпуска и командой управления портами.
+
+Платформы Уровня 2 могут быть кандидатами в платформы Уровня 1, которые всё ещё находятся в активной разработке. Архитектуры, достигшие конца жизненного цикла, также могут быть переведены из статуса Уровня 1 на Уровень 2 по мере сокращения доступности ресурсов для поддержания системы в состоянии производственного качества. Хорошо поддерживаемые нишевые архитектуры также могут относиться к Уровню 2.
+
+Проект FreeBSD предоставляет следующие гарантии пользователям платформ Уровня 2:
+
+* Инфраструктура портов должна включать базовую поддержку архитектур Уровня 2, достаточную для сборки портов и пакетов. Это включает поддержку базовых пакетов, таких как ports-mgmt/pkg, но нет гарантии, что произвольные порты будут собираемыми или работоспособными.
+* Новые функции, которые не являются специфичными для платформы, должны быть реализуемы на всех архитектурах уровня Уровень 2, если они не реализованы.
+* Уровень 2 платформ будет включен в дерево исходных кодов.
+* Платформы Уровня 2 должны быть самодостаточными, используя либо встроенный инструментарий, либо внешний инструментарий. Если требуется внешний инструментарий, будут предоставлены официальные бинарные пакеты для него.
+* Уровень 2 платформ должен обеспечивать функциональные ядра и пользовательские среды, даже если официальный дистрибутив не предоставляется.
+
+Для поддержания зрелости платформ Уровня 2 проект FreeBSD будет поддерживать следующие ресурсы для разработки:
+
+* Включение в цели `make universe` и `make tinderbox`.
+
+Совместно разработчики должны обеспечить следующее для поддержания статуса платформы Уровня 2:
+
+* Изменения в дереве исходного кода не должны заведомо нарушать сборку платформы Уровня 2.
+* Уровень 2 архитектур должен иметь активную экосистему пользователей и разработчиков.
+* Хотя изменения, нарушающие ABI пользовательского пространства, допустимы, не следует делать это без веской причины. Значительные изменения ABI пользовательского пространства должны ограничиваться основными версиями.
+* Новые функции, которые еще не реализованы в архитектурах Уровня 2, должны предоставлять возможность их отключения на этих архитектурах.
+
+==== Уровень 3: Экспериментальные архитектуры
-Рассмотрим ситуацию, когда некто прислал сообщение об ошибке, содержащее код из проекта NetBSD. Вы заинтересовались этим случаем, но он расположен в той части дерева, в которой вы обычно не работаете, так что вы решаете выдать изменения на рассмотрение списка рассылки `arch`. Поскольку изменения были достаточно сложны, вы решаете интегрировать их (MFC) через месяц, чтобы обеспечить адекватное время для тестирования.
+Уровень 3 включает платформы с частичной поддержкой FreeBSD. Они _не_ поддерживаются офицером безопасности, инженерами выпуска релизов и командой управления портами.
-В описанном случае сообщения для коммита может выглядеть примерно так:
+Уровень 3 включает архитектуры на ранних стадиях разработки, предназначенные для неосновных аппаратных платформ или считающиеся устаревшими системами, которые вряд ли получат широкое применение в будущем. Первоначальная поддержка платформ Уровня 3 может находиться в отдельном репозитории, а не в основном репозитории исходного кода.
+
+Проект FreeBSD не предоставляет никаких гарантий пользователям платформ Уровня 3 и не обязуется выделять ресурсы для поддержки разработки. Платформы Уровня 3 могут не всегда собираться, и ни одно ABI ядра или пользовательского пространства не считается стабильным.
+
+==== Неподдерживаемые архитектуры
+
+Другие платформы не поддерживаются проектом в какой-либо форме. Ранее проект описывал их как системы Уровня 4.
+
+После перехода платформы в статус неподдерживаемой, вся поддержка платформы удаляется из исходного кода, портов и документации. Обратите внимание, что поддержка в портах должна сохраняться до тех пор, пока платформа поддерживается в ветке, поддерживаемой портами.
+
+=== Политика изменения уровня архитектуры
+
+Системы могут быть перемещены с одного уровня на другой только с одобрения Основной команды FreeBSD, которая принимает это решение совместно с Security Officer, Release Engineering и командами управления портами. Для перевода платформы на более высокий уровень все недостающие гарантии поддержки должны быть выполнены до завершения повышения.
+
+[[ports]]
+== Специфичные FAQ по портам
+
+[[ports-qa-adding]]
+=== Добавление нового порта
+
+[[ports-qa-add-new]]
+==== Как добавить новый порт?
+
+Добавление порта в дерево относительно просто. Как только порт готов к добавлению, как описано далее crossref:committers-guide[ports-qa-add-new-extra,здесь], необходимо добавить запись каталога порта в [.filename]#Makefile# соответствующей категории. В этом [.filename]#Makefile# порты перечислены в алфавитном порядке и добавлены в переменную `SUBDIR`, например:
[.programlisting]
....
-PR: foo/54321
-Submitted by: John Smith <John.Smith@example.com>
-Reviewed by: -arch
-Obtained from: NetBSD
-MFC after: 1 month
+ SUBDIR += newport
+....
+
+После того как порт и Makefile его категории готовы, новый порт можно закоммитить:
+[source, shell]
+....
+% git add category/Makefile category/newport
+% git commit
+% git push
+....
+[TIP]
+====
+Не забудьте crossref:committers-guide[port-commit-message-formats,настроить git-хуки для дерева портов, как описано здесь]; специальный хук был разработан для проверки [.filename]#Makefile# каждой категории.
+====
+
+[[ports-qa-add-new-extra]]
+==== Есть ли что-то еще, что мне нужно знать при добавлении нового порта?
+
+Проверьте порт, желательно убедиться, что он компилируется и собирается в пакеты правильно.
+
+В главе extref:{porters-handbook}testing[Руководства портировщика по тестированию] содержатся более подробные инструкции. См. разделы extref:{porters-handbook}testing[Portclippy / Portfmt, testing-portclippy] и extref:{porters-handbook}testing[poudriere, testing-poudriere].
+
+Вам не обязательно устранять все предупреждения, но убедитесь, что исправили простые.
+
+Если порт поступил от отправителя, который ранее не участвовал в Проекте, добавьте имя этого человека в раздел extref:{contributors}[Дополнительные участники, contrib-additional] списка участников FreeBSD.
+
+Закройте PR, если порт был отправлен как PR. Чтобы закрыть PR, измените состояние на `Issue Resolved` и установите решение как `Fixed`.
+
+[NOTE]
+====
+Если по какой-то причине использование extref:{porters-handbook}testing[poudriere, testing-poudriere] для тестирования нового порта невозможно, минимальный набор тестирования включает следующую последовательность:
+
+[source, shell]
+....
+# make install
+# make package
+# make deinstall
+# pkg add package you built above
+# make deinstall
+# make reinstall
+# make package
....
-=== Как мне получить доступ к people.FreeBSD.org для того чтобы разместить там персональную информацию или информацию о моих проектах?
+Обратите внимание, что poudriere является эталоном для сборки пакетов. Если порт не собирается в poudriere, он будет удалён.
+====
+
+[[ports-qa-removing]]
+=== Удаление существующего порта
+
+[[ports-qa-remove-one]]
+==== Как удалить существующий порт?
+
+Сначала прочитайте раздел о копиях репозиториев. Перед удалением порта необходимо убедиться, что от него не зависят другие порты.
+
+* Убедитесь, что нет зависимостей от порта в коллекции портов:
+** Имя пакета порта (PKGNAME) появляется ровно в одной строке в последнем файле INDEX.
+** Ни один другой порт не содержит ссылок на каталог порта или PKGNAME в своих Makefiles
++
+[TIP]
+====
+При использовании Git рассмотрите возможность использования man:git-grep[1], так как он значительно быстрее, чем `grep -r`.
+====
++
+* Затем удалите порт:
++
+[.procedure]
+====
+* Удалите файлы и каталог порта с помощью `git rm`.
+* Удалите указание `SUBDIR` для порта в [.filename]#Makefile# родительского каталога.
+* Добавьте запись в [.filename]#ports/MOVED#.
+* Удалите порт из [.filename]#ports/LEGAL#, если он там присутствует.
+====
+
+Альтернативно, вы можете использовать скрипт rmport из [.filename]#ports/Tools/scripts#. Этот скрипт был написан {vd}. При отправке вопросов об этом скрипте в {freebsd-ports}, пожалуйста, также копируйте {crees}, текущего сопровождающего.
+
+[[ports-qa-move-port]]
+=== Как переместить порт в новое место?
+
+[.procedure]
+====
+. Выполните тщательную проверку коллекции портов на наличие зависимостей от старого расположения или имени порта и обновите их. Запуск `grep` по файлу [.filename]#INDEX# недостаточен, поскольку некоторые порты имеют зависимости, включённые через параметры компиляции. Рекомендуется выполнить полный поиск с помощью man:git-grep[1] по коллекции портов.
+. Удалите запись `SUBDIR` из Makefile старой категории и добавьте запись `SUBDIR` в Makefile новой категории.
+. Добавьте запись в [.filename]#ports/MOVED#.
+. Поищите записи в xml-файлах внутри [.filename]#ports/security/vuxml# и скорректируйте их соответствующим образом. В частности, проверьте предыдущие пакеты с новым именем, версия которых может включать новый порт.
+. Переместите порт с помощью `git mv`.
+. Зафиксируйте изменения.
+====
+
+[[ports-qa-copy-port]]
+=== Как скопировать порт в новое место?
+
+[.procedure]
+====
+. Скопируйте порт с помощью `cp -R old-cat/old-port new-cat/new-port`.
+. Добавьте новый порт в файл [.filename]#new-cat/Makefile#.
+. Измените содержимое в [.filename]#new-cat/new-port#.
+. Зафиксируйте изменения.
+====
+
+[[ports-qa-freeze]]
+=== Заморозка портов
+
+[[ports-qa-freeze-what]]
+==== Что такое «заморозка портов»?
+
+«Заморозка портов» (ports freeze) — это ограниченное состояние, в которое дерево портов переводилось перед выпуском релиза. Оно использовалось для обеспечения более высокого качества пакетов, поставляемых с релизом. Обычно это длилось несколько недель. В течение этого времени исправлялись проблемы со сборкой, а также строились пакеты для релиза. Эта практика больше не применяется, так как пакеты для релизов теперь собираются из текущей стабильной квартальной ветки.
+
+Для получения дополнительной информации о том, как делать слияние коммитов в квартальную ветку, см. crossref:committers-guide[ports-qa-misc-request-mfh, Какова процедура получения разрешения на слияние коммита с квартальной веткой?].
+
+[[ports-qa-quarterly]]
+=== Квартальные ветки
+
+[[ports-qa-misc-request-mfh]]
+==== Какова процедура получения разрешения на слияние коммита с квартальной веткой?
+
+По состоянию на 30 ноября 2020 года явное одобрение для внесения изменений в квартальную ветку не требуется.
+
+[[ports-qa-misc-commit-mfh]]
+==== Какова процедура слияния коммитов в квартальную ветку?
+
+Слияние коммитов в квартальную ветку (процесс, который мы по историческим причинам называем MFH) очень похоже на MFC коммитов в репозитории src, поэтому в основном:
+[source, shell]
+....
+% git checkout 2021Q2
+% git cherry-pick -x $HASH
+(verify everything is OK, for example by doing a build test)
+% git push
+....
+
+где `$HASH` — это хэш коммита, который вы хотите скопировать в квартальную ветку. Параметр `-x` гарантирует, что хэш `$HASH` из ветки `main` будет включён в новое сообщение коммита в квартальной ветке.
+
+[[ports-qa-new-category]]
+=== Создание новой категории
+
+[[ports-qa-new-category-how]]
+==== Какова процедура создания новой категории?
+
+Пожалуйста, ознакомьтесь с extref:{porters-handbook}makefiles/[Предложение новой категории, proposing-categories] в Руководстве портера. После выполнения этой процедуры и назначения PR в группе — {portmgr}, решение об одобрении принимается ими. Если решение положительное, их обязанностью является:
+
+[.procedure]
+====
+. Выполните все необходимые перемещения. (Это применимо только к физическим категориям.)
+. Обновите определение `VALID_CATEGORIES` в файле [.filename]#ports/Mk/bsd.port.mk#.
+. Назначить PR обратно на вас.
+====
+
+[[ports-qa-new-category-physical]]
+==== Что мне нужно сделать для создания новой физической категории?
+
+[.procedure]
+====
+. Обновите [.filename]#Makefile# каждого перемещенного порта. Пока не подключайте новую категорию к сборке.
++
+Для этого вам потребуется:
++
+[.procedure]
+======
+. Измените `CATEGORIES` порта (это была цель упражнения, помните?). Новая категория указана первой. Это поможет убедиться, что PKGORIGIN указан правильно.
+. Выполните команду `make describe`. Поскольку команда `make index` верхнего уровня, которую вы запустите через несколько шагов, является итерацией `make describe` для всей иерархии портов, обнаружение ошибок на этом этапе сэкономит время, избавив от необходимости перезапускать этот шаг позже.
+. Если вы хотите быть действительно тщательным, сейчас может быть подходящее время запустить man:portlint[1].
+======
++
+. Проверьте, что значения ``PKGORIGIN`` указаны верно. Система портов использует запись `CATEGORIES` каждого порта для создания его `PKGORIGIN`, который служит для связи установленных пакетов с директорией порта, из которого они были собраны. Если эта запись неверна, такие распространённые инструменты для работы с портами, как man:pkg-version[8] и man:portupgrade[1], не будут работать.
++
+Для этого используйте инструмент [.filename]#chkorigin.sh#: `env PORTSDIR=/path/to/ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh`. Это проверит каждый порт в дереве портов, даже те, которые не связаны со сборкой, поэтому вы можете запустить его сразу после операции перемещения. Подсказка: не забудьте проверить ``PKGORIGIN`` для всех подчинённых портов (slave ports) тех портов, которые вы только что переместили!
+. На вашей локальной системе протестируйте предлагаемые изменения: сначала закомментируйте записи SUBDIR в файлах [.filename]##Makefile## старых категорий портов; затем включите сборку новой категории в [.filename]#ports/Makefile#. Запустите `make checksubdirs` в затронутых каталогах категорий, чтобы проверить записи SUBDIR. Затем в каталоге [.filename]#ports/# выполните `make index`. Это может занять более 40 минут даже на современных системах; однако это необходимый шаг для предотвращения проблем у других пользователей.
+. После этого можно зафиксировать обновлённый файл [.filename]#ports/Makefile#, чтобы подключить новую категорию к сборке, а также сделать коммит изменениям в файле [.filename]#Makefile# для старой категории или категорий.
+. Добавьте соответствующие записи в [.filename]#ports/MOVED#.
+. Обновите документацию, изменив:
+** extref:{porters-handbook}makefiles/[список категорий, porting-categories] в Руководстве портера
++
+. Только после того, как все вышеперечисленное будет выполнено и больше никто не сообщает о проблемах с новыми портами, старые порты следует удалить из их прежних мест в репозитории.
+====
+
+==== Что мне нужно сделать для создания новой виртуальной категории?
+
+Это намного проще, чем физическая категория. Требуется всего несколько изменений:
+
+* extref:{porters-handbook}makefiles/[список категорий, porting-categories] в Руководстве портера
+
+[[ports-qa-misc-questions]]
+=== Разные вопросы
+
+[[ports-qa-misc-blanket-approval]]
+==== Существуют ли изменения, которые можно зафиксировать без запроса одобрения у сопровождающего?
+
+Общее одобрение для большинства портов применяется к следующим типам исправлений:
+
+* Большинство изменений инфраструктуры порта (то есть модернизация без изменения функциональности). Например, это включает переход на новые макросы `USES`, включение подробных сборок и переход на новые синтаксисы системы портов.
+* Тривиальные и _проверенные_ исправления для сборки и выполнения.
+* Документация или изменения метаданных для портов, такие как [.filename]#pkg-descr# или `COMMENT`.
+
+[IMPORTANT]
+====
+Исключениями являются любые компоненты, поддерживаемые {portmgr} или {security-officer}. Несанкционированные коммиты в порты, которые поддерживаются этими группами, недопустимы.
+====
+
+[[ports-qa-misc-correctly-building]]
+==== Как узнать, мой порт собирается правильно или нет?
+
+Пакеты собираются несколько раз в неделю. Если сборка порта завершается неудачно, сопровождающий получит письмо от `pkg-fallout@FreeBSD.org`.
+
+Отчеты по всем сборкам пакетов (официальные, экспериментальные и без регрессии) агрегируются на link:pkg-status.FreeBSD.org[pkg-status.FreeBSD.org].
+
+[[ports-qa-misc-INDEX]]
+==== Я добавил новый порт. Нужно ли добавлять его в [.filename]#INDEX#?
+
+Нет. Файл может быть создан выполнением команды `make index`, или можно загрузить предварительно сгенерированную версию с помощью `make fetchindex`.
+
+[[ports-qa-misc-no-touch]]
+==== Есть ли другие файлы, которые мне нельзя изменять?
+
+Любой файл непосредственно в [.filename]#ports/# или любой файл в подкаталоге, название которого начинается с заглавной буквы ([.filename]#Mk/#, [.filename]#Tools/# и т.д.). В частности, {portmgr} очень ревностно относится к [.filename]#ports/Mk/bsd.port*.mk#, поэтому не вносите изменения в эти файлы, если не хотите навлечь на себя их гнев.
+
+[[ports-qa-misc-updated-distfile]]
+==== Как правильно обновить контрольную сумму для distfile порта, если файл изменился без изменения версии?
+
+Когда контрольная сумма файла дистрибутива обновляется из-за того, что автор обновил файл без изменения ревизии порта, сообщение коммита включает сводку соответствующих различий между оригинальным и новым файлом дистрибутива, чтобы убедиться, что файл дистрибутива не был повреждён или злонамеренно изменён. Если текущая версия порта находится в дереве портов уже некоторое время, копия старого файла дистрибутива обычно доступна на FTP-серверах; в противном случае следует связаться с автором или сопровождающим, чтобы выяснить, почему файл дистрибутива изменился.
+
+[[ports-exp-run]]
+==== Как можно запросить экспериментальную тестовую сборку дерева портов (exp-run)?
+
+Перед коммитом изменений, оказывающих значительное влияние на порты, необходимо выполнить тестовый прогон (exp-run). Исправление может относиться как к дереву портов, так и к базовой системе.
+
+Полные сборки пакетов будут выполнены с патчами, предоставленными отправителем, и отправитель обязан исправить обнаруженные проблемы _(падения сборки и т.п.)_ перед коммитом.
+
+[.procedure]
+====
+. Перейдите по ссылке link:https://bugs.freebsd.org/submit[Страница создания новой PR в Bugzilla].
+. Выберите продукт, к которому относится ваш патч.
+. Заполните отчёт об ошибке как обычно. Не забудьте приложить исправление.
+. Если вверху написано «Показать дополнительные поля (Show Advanced Fields)», нажмите на это. Теперь будет написано «Скрыть дополнительные поля (Hide Advanced Fields)». Станут доступны многие новые поля. Если уже написано «Скрыть дополнительные поля», ничего делать не нужно.
+. В разделе «Flags» установите флаг «exp-run» в значение `?`. Для всех остальных полей при наведении курсора на любое поле отображаются дополнительные сведения.
+. Отправьте. Дождитесь завершения сборки.
+. {portmgr} ответит с информацией возможных падениях.
+. В зависимости от последствий:
+** Если последствий нет, процедура останавливается здесь, и изменение может быть закоммичено, ожидая любых других необходимых утверждений.
+... Если возникнут проблемы, их _необходимо_ исправить, либо напрямую в дереве портов, либо добавив изменения в предоставленный патч.
+... После этого вернитесь к шагу 6, указав, что проблема устранена, и дождитесь повторного запуска exp-run. Повторяйте, пока остаются неисправные порты.
+====
+
+[[non-committers]]
+== Проблемы, характерные для разработчиков, не являющихся коммиттерами
+
+Несколько людей, имеющих доступ к машинам FreeBSD, не обладают правами на коммиты. Почти все положения этого документа применимы и к таким разработчикам (за исключением аспектов, специфичных для коммитов и связанного с ними членства в рассылках). В частности, мы рекомендуем ознакомиться со следующим:
+
+* crossref:committers-guide[admin,Административные детали]
+* crossref:committers-guide[conventions-everyone, Для всех]
++
+[NOTE]
+====
+Попросите вашего наставника добавить вас в список "Дополнительные участники" ([.filename]#doc/shared/contrib-additional.adoc#), если вас там еще нет.
+====
+* crossref:committers-guide[developer.relations, Отношения с разработчиками]
+* crossref:committers-guide[ssh.guide, Руководство по быстрому началу работы с SSH]
+* crossref:committers-guide[rules, Большой список правил коммиттеров FreeBSD]
+
+[[google-analytics]]
+== Информация о Google Analytics
+
+По состоянию на 12 декабря 2012 года на сайте проекта FreeBSD был включен Google Analytics для сбора анонимной статистики использования сайта.
+
+[NOTE]
+====
+По состоянию на 3 марта 2022 года Google Analytics был удалён из проекта FreeBSD.
+====
+
+[[misc]]
+== Разные вопросы
+
+=== Как получить доступ к people.FreeBSD.org для размещения личной или проектной информации?
+
+`people.FreeBSD.org` — это то же самое, что и `freefall.FreeBSD.org`. Просто создайте каталог [.filename]#public_html#. Всё, что вы поместите в этот каталог, будет автоматически доступно по адресу https://people.FreeBSD.org/[https://people.FreeBSD.org/].
+
+=== Где хранятся архивы списков рассылки?
+
+Списки рассылки архивируются в [.filename]#/local/mail# на `freefall.FreeBSD.org`.
+
+=== Я хочу стать наставником нового коммиттера. Какой процесс мне нужно пройти?
+
+См. документ https://www.freebsd.org/internal/new-account/[Процедура создания новой учётной записи] на внутренних страницах.
+
+[[benefits]]
+== Преимущества и привилегии для коммиттеров FreeBSD
+
+[[benefits-recognition]]
+=== Признание
+
+Признание в качестве квалифицированного инженера-программиста — это самая долговечная ценность. Кроме того, возможность работать с одними из лучших специалистов, о встрече с которыми мечтает любой инженер, — это отличный бонус!
+
+[[benefits-freebsdmall]]
+=== FreeBSD Mall
+
+Коммиттеры FreeBSD могут бесплатно получить набор из 4 CD или DVD на конференциях через http://www.freebsdmall.com[FreeBSD Mall, Inc.].
+
+[[benefits-gandi]]
+=== `Gandi.net`
-`people.FreeBSD.org` - синоним для `freefall.FreeBSD.org`. Просто создайте каталог [.filename]#public_html#. Все, что вы разместите в нем, будет автоматически доступно по адресу http://people.FreeBSD.org/[http://people.FreeBSD.org/].
+https://gandi.net[Gandi] предоставляет услуги хостинга веб-сайтов, облачных вычислений, регистрации доменов и сертификатов X.509.
-=== Где расположены архивы списков рассылки?
+Gandi предоставляет скидку E-rate всем разработчикам FreeBSD. Чтобы упростить процесс получения скидки, сначала создайте учетную запись Gandi, заполните платежные данные и выберите валюту. Затем отправьте письмо по адресу mailto:non-profit@gandi.net[non-profit@gandi.net] с вашего адреса `@freebsd.org`, указав ваш идентификатор Gandi.
-Списки рассылки архивируются в иерархию каталогов [.filename]#/g/mail#, видимую на всех машинах кластера как [.filename]#/hub/g/mail# (см. man:pwd[1]).
+[[benefits-rsync]]
+=== `rsync.net`
-=== Мне бы хотелось стать ментором для нового коммиттера. Какого технологического процесса я должен придерживаться?
+https://rsync.net[rsync.net] предоставляет облачное хранилище для резервного копирования вне офиса, оптимизированное для пользователей UNIX. Их сервис полностью работает на FreeBSD и ZFS.
-Обратитесь к документу http://www.freebsd.org/internal/new-account/[Процедура создания нового аккаунта].
+rsync.net предоставляет бесплатный аккаунт на 500 ГБ навсегда разработчикам FreeBSD. Просто зарегистрируйтесь по адресу https://www.rsync.net/freebsd.html[https://www.rsync.net/freebsd.html], используя ваш адрес `@freebsd.org`, чтобы получить этот бесплатный аккаунт.
diff --git a/documentation/content/ru/articles/committers-guide/_index.po b/documentation/content/ru/articles/committers-guide/_index.po
new file mode 100644
index 0000000000..4061142175
--- /dev/null
+++ b/documentation/content/ru/articles/committers-guide/_index.po
@@ -0,0 +1,12213 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 21:42+0300\n"
+"PO-Revision-Date: 2025-09-18 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescommitters-guide_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/committers-guide/_index.adoc:1
+#, no-wrap
+msgid "Introductory information for FreeBSD committers"
+msgstr "Вводная информация для коммиттеров 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 "Руководство коммиттера"
+
+#. 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 ""
+"В этом документе представлена информация для сообщества коммиттеров FreeBSD. "
+"Все новые коммиттеры должны прочитать этот документ перед началом работы, а "
+"существующим коммиттерам настоятельно рекомендуется периодически его "
+"пересматривать."
+
+#. 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 crossref:committers-"
+"guide[non-committers, Issues Specific to Developers Who Are Not Committers] "
+"for more information."
+msgstr ""
+"Почти все разработчики FreeBSD имеют права на коммит в один или несколько "
+"репозиториев. Однако некоторые разработчики не имеют таких прав, и часть "
+"информации здесь применима и к ним. (Например, некоторые люди имеют права "
+"только для работы с базой данных отчетов о проблемах.) Дополнительную "
+"информацию можно найти в crossref:committers-guide[non-committers, Вопросы, "
+"специфичные для разработчиков без прав на коммит]."
+
+#. 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 ""
+"Этот документ также может быть интересен участникам сообщества FreeBSD, "
+"которые хотят узнать больше о том, как работает проект."
+
+#. 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 "man:ssh[1], только протокол версии 2"
+
+#. 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 "`freefall.FreeBSD.org`"
+
+#. 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 "`ref*.FreeBSD.org`, `universe*.freeBSD.org` (см. также ссылку link:https://www.FreeBSD.org/internal/machines/[Хосты проекта FreeBSD])"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:77
+#, no-wrap
+msgid "_SMTP Host_"
+msgstr "_Узел SMTP_"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:79
+#, no-wrap
+msgid "`smtp.FreeBSD.org:587` (see also crossref:committers-guide[smtp-setup, SMTP Access Setup])."
+msgstr "`smtp.FreeBSD.org:587` (см. также crossref:committers-guide[smtp-setup, Настройка доступа SMTP])."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:80
+#, no-wrap
+msgid "`_src/_` Git Repository"
+msgstr "`_src/_` 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/_` 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/_` 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 "_Внутренние списки рассылки_"
+
+#. 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 (технически называемый all-developers), doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (Каждый репозиторий проекта имеет свои собственные списки рассылки -developers и -committers. Архивы этих списков можно найти в файлах [.filename]#/local/mail/repository-name-developers-archive# и [.filename]#/local/mail/repository-name-committers-archive# на `freefall.FreeBSD.org`.)"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:92
+#, no-wrap
+msgid "_Core Team monthly reports_"
+msgstr "_Ежемесячные отчеты основной команды (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# на кластере `FreeBSD.org`."
+
+#. 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 "[.filename]#/home/portmgr/public/monthly-reports# в кластере `FreeBSD.org`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:98
+#, no-wrap
+msgid "_Noteworthy `src/` Git Branches:_"
+msgstr "_Важные ветки Git в `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:103
+#, no-wrap
+msgid ""
+"man:ssh[1] is required to connect to the project hosts. For more information,\n"
+"\tsee crossref:committers-guide[ssh.guide, SSH Quick-Start Guide].\n"
+msgstr ""
+"Для подключения к хостам проекта требуется man:ssh[1]. Дополнительную информацию\n"
+"можно найти в crossref:committers-guide[ssh.guide, Руководстве по быстрому началу работы с SSH].\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:105
+msgid "Useful links:"
+msgstr "Полезные ссылки:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:107
+msgid "link:https://www.FreeBSD.org/internal/[FreeBSD Project Internal Pages]"
+msgstr ""
+"link:https://www.FreeBSD.org/internal/[Внутренние страницы проекта FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:108
+msgid "link:https://www.FreeBSD.org/internal/machines/[FreeBSD Project Hosts]"
+msgstr "link:https://www.FreeBSD.org/internal/machines/[Узлы проекта FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:109
+msgid ""
+"link:https://www.FreeBSD.org/administration/[FreeBSD Project Administrative "
+"Groups]"
+msgstr ""
+"link:https://www.FreeBSD.org/administration/[Административные группы проекта "
+"FreeBSD]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:111
+#, no-wrap
+msgid "OpenPGP Keys for FreeBSD"
+msgstr "Ключи OpenPGP для FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:116
+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 https://en.wikipedia.org/wiki/"
+"Pretty_Good_Privacy[] for more information."
+msgstr ""
+"Криптографические ключи, соответствующие стандарту OpenPGP (__Pretty Good "
+"Privacy__), используются проектом FreeBSD для аутентификации коммиттеров. "
+"Сообщения, содержащие важную информацию, такие как публичные SSH-ключи, "
+"могут быть подписаны с помощью OpenPGP-ключа, чтобы доказать, что они "
+"действительно отправлены коммиттером. Дополнительную информацию можно найти "
+"в https://nostarch.com/releases/pgp_release.pdf[PGP & GPG: Email for the "
+"Practical Paranoid от Michael Lucas] и https://en.wikipedia.org/wiki/"
+"Pretty_Good_Privacy[]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:118
+#, no-wrap
+msgid "Creating a Key"
+msgstr "Создание ключа"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:122
+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 ""
+"Существующие ключи можно использовать, но сначала их следует проверить с "
+"помощью [.filename]#documentation/tools/checkkey.sh#. В этом случае "
+"убедитесь, что у ключа есть FreeBSD user ID."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:124
+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 ""
+"Для тех, у кого ещё нет ключа OpenPGP или требуется новый ключ, "
+"соответствующий требованиям безопасности FreeBSD, здесь показано, как его "
+"сгенерировать."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:129
+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 ""
+"Установите [.filename]#security/gnupg#. Добавьте следующие строки в "
+"[.filename]#~/.gnupg/gpg.conf#, чтобы задать минимально приемлемые настройки "
+"для подписи и предпочтений новых ключей (подробнее см. в link:https://"
+"www.gnupg.org/documentation/manuals/gnupg/GPG-Options.html[документации по "
+"опциям GnuPG]):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:136
+#, 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 ""
+"# 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"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:138
+msgid "Generate a key:"
+msgstr "Сгенерировать ключ:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:145
+#, 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:166
+#, 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:172
+#, 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:175
+#, 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:178
+msgid ""
+"2048-bit keys with a three-year expiration provide adequate protection at "
+"present (2022-10)."
+msgstr ""
+"2048-битные ключи с трехлетним сроком действия обеспечивают достаточную "
+"защиту на данный момент (2022-10)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:180
+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:182
+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:186
+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 ""
+"После ввода адреса электронной почты запрашивается парольная фраза. Методы "
+"создания безопасной парольной фразы вызывают споры. Вместо того чтобы "
+"предлагать один способ, вот несколько ссылок на сайты, описывающие различные "
+"методы: 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:190
+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 ""
+"Защитите закрытый ключ и парольную фразу. Если закрытый ключ или парольная "
+"фраза могли быть скомпрометированы или раскрыты, немедленно уведомите "
+"mailto:accounts@FreeBSD.org[accounts@FreeBSD.org] и отзовите ключ."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:193
+msgid ""
+"Committing the new key is shown in crossref:committers-guide[commit-steps, "
+"Steps for New Committers]."
+msgstr ""
+"Фиксация нового ключа показана в crossref:committers-guide[commit-steps, "
+"Шаги для новых коммиттеров]."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:195
+#, no-wrap
+msgid "Kerberos and LDAP web Password for FreeBSD Cluster"
+msgstr "Kerberos и LDAP веб-пароль для кластера FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:200
+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 ""
+"Кластер FreeBSD требует пароль Kerberos для доступа к определенным сервисам. "
+"Пароль Kerberos также служит веб-паролем LDAP, поскольку LDAP проксирует "
+"запросы к Kerberos в кластере. Некоторые из сервисов, требующих его, "
+"включают:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:202
+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:204
+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 ""
+"Для создания новой учетной записи Kerberos в кластере FreeBSD или сброса "
+"пароля Kerberos для существующей учетной записи с использованием генератора "
+"случайных паролей:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:208
+#, 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:213
+msgid "This must be done from a machine outside of the FreeBSD.org cluster."
+msgstr ""
+"Это должно быть выполнено с компьютера за пределами кластера FreeBSD.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:216
+msgid ""
+"A Kerberos password can also be set manually by logging into "
+"`freefall.FreeBSD.org` and running:"
+msgstr ""
+"Пароль Kerberos также можно установить вручную, войдя в "
+"`freefall.FreeBSD.org` и выполнив:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:220
+#, no-wrap
+msgid "% kpasswd\n"
+msgstr "% kpasswd\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:226
+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 ""
+"Если ранее не использовались аутентифицированные через Kerberos службы "
+"кластера FreeBSD.org, будет отображено сообщение `Client unknown`. Эта "
+"ошибка означает, что сначала необходимо использовать метод `ssh "
+"kpasswd.freebsd.org`, показанный выше, для инициализации учётной записи "
+"Kerberos."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:229
+#, no-wrap
+msgid "Commit Bit Types"
+msgstr "Типы битов коммита (прав на коммит)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:235
+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 ""
+"Репозиторий FreeBSD содержит ряд компонентов, которые в совокупности "
+"поддерживают исходный код базовой операционной системы, документацию, "
+"инфраструктуру портов сторонних приложений и различные поддерживаемые "
+"утилиты. При выделении прав на коммит (commit bits) в FreeBSD указываются "
+"области дерева, где эти права могут быть использованы. Как правило, области, "
+"связанные с правами, отражают, кто авторизовал их выделение. Дополнительные "
+"области полномочий могут быть добавлены позже: в этом случае коммиттер "
+"должен следовать стандартной процедуре выделения прав на коммит для "
+"соответствующей области дерева, получив одобрение от соответствующей "
+"инстанции и, возможно, наставника для этой области на некоторый период "
+"времени."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:241
+#, no-wrap
+msgid "__Committer Type__"
+msgstr "__Тип коммиттера__"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:242
+#, no-wrap
+msgid "__Responsible__"
+msgstr "__Ответственный__"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:244
+#, no-wrap
+msgid "__Tree Components__"
+msgstr "__Компоненты дерева исходного кода__"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:245
+#, no-wrap
+msgid "src"
+msgstr "src"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:246
+#, no-wrap
+msgid "srcmgr@"
+msgstr "srcmgr@"
+
+#. 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 "doc"
+msgstr "doc"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:250
+#, no-wrap
+msgid "doceng@"
+msgstr "doceng@"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:252
+#, no-wrap
+msgid "doc/, ports/, src/ documentation"
+msgstr "документация doc/, ports/, src/"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:253
+#, no-wrap
+msgid "ports"
+msgstr "ports"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:254
+#, no-wrap
+msgid "portmgr@"
+msgstr "portmgr@"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:255
+#, no-wrap
+msgid "ports/"
+msgstr "ports/"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:260
+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 ""
+"Биты коммитов, выделенные до разработки концепции областей ответственности, "
+"могут быть подходящими для использования во многих частях дерева. Однако "
+"здравый смысл подсказывает, что коммиттер, ранее не работавший в "
+"определённой области дерева, должен перед коммитом получить рецензирование "
+"(review), согласование от соответствующего ответственного лица и/или "
+"работать с наставником. Поскольку правила поддержки кода различаются в "
+"зависимости от области дерева, это важно как для самого коммиттера, "
+"работающего в менее знакомой области, так и для других участников, "
+"работающих с деревом."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:262
+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:263
+#, no-wrap
+msgid "Policy for Committer Activity in Other Trees"
+msgstr "Политика активности коммиттеров в других деревьях"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:266
+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 ""
+"Все коммиттеры могут изменять файлы [.filename]#src/share/misc/committers-"
+"*.dot#, [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# и "
+"[.filename]#ports/astro/xearth/files#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:267
+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 ""
+"Документационные коммиттеры могут вносить изменения в документацию в файлы "
+"[.filename]#src#, такие как руководства, README, базы данных fortune, "
+"календарные файлы и исправления комментариев, без одобрения коммиттера src, "
+"при условии соблюдения обычных правил и внимания к коммитам."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:269
+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 ""
+"Любой коммиттер может вносить изменения в любое другое дерево с пометкой "
+"\"Approved by\" от некурируемого коммиттера с соответствующими правами. "
+"Курируемые коммиттеры (имеющие наставника) могут предоставлять пометку "
+"\"Reviewed by\", но не \"Approved by\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:270
+msgid ""
+"Committers can acquire an additional bit by the usual process of finding a "
+"mentor who will propose them to srcmgr, 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 ""
+"Коммиттеры могут получить дополнительный бит по обычному процессу: найти "
+"наставника, который предложит их srcmgr, doceng или portmgr, в зависимости "
+"от ситуации. После одобрения их добавят в 'access', и начнётся стандартный "
+"период наставничества, который будет включать продолжение отметки \"Approved "
+"by\" в течение некоторого времени."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:272
+#, no-wrap
+msgid "Documentation Implicit (Blanket) Approval"
+msgstr "Неявное (по умолчанию) одобрение для документации"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:276
+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 ""
+"Некоторые типы исправлений имеют \"одобрение по умолчанию\" от {doceng}, что "
+"позволяет любому коммиттеру исправлять эти категории проблем в любой части "
+"дерева документации. Эти исправления не требуют одобрения или проверки от "
+"коммиттера документации, если у автора нет прав на коммит в документацию."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:278
+msgid "Blanket approval applies to these types of fixes:"
+msgstr "Общее одобрение применяется к следующим типам исправлений:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:280
+msgid "Typos"
+msgstr "Опечатки"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:281
+msgid "Trivial fixes"
+msgstr "Тривиальные исправления"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:283
+msgid ""
+"Punctuation, URLs, dates, paths and file names with outdated or incorrect "
+"information, and other common mistakes that may confound the readers."
+msgstr ""
+"Пунктуация, URL-адреса, даты, пути и имена файлов с устаревшей или "
+"некорректной информацией, а также другие распространённые ошибки, которые "
+"могут ввести читателей в заблуждение."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:286
+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:288
+msgid ""
+"Changes in [.filename]#documentation/content/en/books/porters-handbook/"
+"versions/_index.adoc#"
+msgstr ""
+"Изменения в [.filename]#documentation/content/ru/books/porters-handbook/"
+"versions/_index.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:290
+msgid ""
+"extref:{porters-handbook}versions/[__FreeBSD_version Values (Porter's "
+"Handbook)], mainly used for src committers."
+msgstr ""
+"extref:{porters-handbook}versions[Значения __FreeBSD_version (Руководство по "
+"созданию портов)], в основном используется коммиттерами src."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:291
+msgid "Changes in [.filename]#doc/shared/contrib-additional.adoc#"
+msgstr "Изменения в [.filename]#doc/shared/contrib-additional.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:293
+msgid ""
+"extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] "
+"maintenance."
+msgstr ""
+"Сопровождение раздела extref:{contributors}[Дополнительные участники "
+"FreeBSD, contrib-additional]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:294
+msgid "All link:#commit-steps[Steps for New Committers], doc related"
+msgstr ""
+"Все link:#commit-steps[Шаги для новых коммиттеров], связанные с документацией"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:295
+msgid "Security advisories; Errata Notices; Releases;"
+msgstr "Рекомендации по безопасности; Уведомления об ошибках; Релизы;"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:297
+msgid "Used by {security-officer} and {re}."
+msgstr "{security-officer} и {re} используют эти разделы."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:298
+msgid "Changes in [.filename]#website/content/en/donations/donors.adoc#"
+msgstr "Изменения в [.filename]#website/content/ru/donations/donors.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:300
+msgid "Used by {donations}."
+msgstr "{donations} использует этот документ."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:302
+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 ""
+"Перед любым коммитом необходимо выполнить тестовую сборку; подробности см. в "
+"разделах «Обзор» и «Процесс сборки документации FreeBSD» extref:{fdp-primer}"
+"[Руководства для новых участников проекта документации FreeBSD]."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:304
+#, no-wrap
+msgid "Git Primer"
+msgstr "Руководство по Git"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:307
+#, no-wrap
+msgid "Git basics"
+msgstr "Основы Git"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:314
+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 ""
+"При поиске по ключевым словам \"Git Primer\" можно найти множество хороших "
+"материалов. Страницы Дэниела Милера link:https://danielmiessler.com/study/"
+"git/[Введение в Git] и Вилли Виллуса link:https://gist.github.com/"
+"williewillus/068e9a8543de3a7ef80adb2938657b6b[Git - Краткое введение] "
+"являются хорошими обзорами. Книга по Git также полная, но гораздо длиннее: "
+"https://git-scm.com/book/en/v2. Также обратите внимание на сайт https://"
+"dangitgit.com/, посвящённый распространённым ловушкам и подводным камням "
+"Git, на случай, если вам нужно исправить ошибки. Наконец, введение, "
+"link:https://eagain.net/articles/git-for-computer-scientists/"
+"[ориентированное на компьютерных учёных], оказалось полезным для некоторых в "
+"объяснении мировоззрения Git."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:316
+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:318
+#, no-wrap
+msgid "Git Mini Primer"
+msgstr "Мини-руководство по Git"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:321
+msgid ""
+"This primer is less ambitiously scoped than the old Subversion Primer, but "
+"should cover the basics."
+msgstr ""
+"Это руководство имеет менее амбициозные цели, чем старое руководство по "
+"Subversion, но должно охватить основы."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:322
+#, no-wrap
+msgid "Scope"
+msgstr "Область применения"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:328
+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 ""
+"Если вы хотите загрузить FreeBSD, собрать его из исходных кодов и в целом "
+"поддерживать актуальность таким способом, это руководство для вас. Оно "
+"охватывает получение исходных кодов, их обновление, бинарный поиск (bisect) "
+"и кратко затрагивает способы работы с локальными изменениями. В нём изложены "
+"основы, а также даны полезные ссылки на более глубокие материалы для "
+"случаев, когда читателю будет недостаточно базовой информации. Другие "
+"разделы этого руководства посвящены более сложным темам, связанным с "
+"участием в проекте."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:332
+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 ""
+"Цель этого раздела — выделить те аспекты Git, которые необходимы для "
+"отслеживания исходных кодов. Предполагается базовое понимание Git. В "
+"интернете есть множество вводных руководств по Git, но https://git-scm.com/"
+"book/en/v2[Книга по Git] предлагает одно из лучших изложений."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:334
+#, no-wrap
+msgid "Getting Started For Developers"
+msgstr "Начало работы для разработчиков"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:337
+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:339
+#, no-wrap
+msgid "Daily use"
+msgstr "Повседневное использование"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:344
+msgid ""
+"In the examples below, replace `${repo}` with the name of the desired "
+"FreeBSD repository: `doc`, `ports`, or `src`."
+msgstr ""
+"В приведенных ниже примерах замените `${repo}` на имя нужного репозитория "
+"FreeBSD: `doc`, `ports` или `src`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:347
+msgid "Clone the repository:"
+msgstr "Клонировать репозиторий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:351
+#, 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:354
+msgid "Then you should have the official mirrors as your remote:"
+msgstr ""
+"В результате у вас в качестве удалённых (remote) должны быть официальные "
+"зеркала:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:360
+#, 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:363
+msgid "Configure the FreeBSD committer data:"
+msgstr "Настройка данных коммиттера FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:366
+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 ""
+"Хук для коммита в repo.freebsd.org проверяет, что поле \"Commit\" "
+"соответствует информации о коммиттере в FreeBSD.org. Самый простой способ "
+"получить предлагаемую конфигурацию — выполнить скрипт `/usr/local/bin/gen-"
+"gitconfig.sh` на freefall:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:373
+#, 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:376
+msgid "Set the push URL:"
+msgstr "Установите URL для отправки (push URL):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:380
+#, 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:383
+msgid ""
+"Then you should have separated fetch and push URLs as the most efficient "
+"setup:"
+msgstr ""
+"В таком случае у вас должны быть раздельные URL для извлечения (fetch) и "
+"отправки (push) как наиболее эффективная настройка:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:389
+#, 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:392
+msgid ""
+"Again, note that `gitrepo.freebsd.org` has been canonicalized to "
+"`repo.freebsd.org`."
+msgstr ""
+"Еще раз обратите внимание, что `gitrepo.freebsd.org` является псевдонимом "
+"для `repo.freebsd.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:394
+msgid "Install commit message template hook:"
+msgstr "Установка хука для шаблона сообщения коммита:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:396
+msgid "For doc repository:"
+msgstr "Для репозитория документации:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:401
+#, no-wrap
+msgid ""
+"% cd .git/hooks\n"
+"% ln -s ../../.hooks/prepare-commit-msg\n"
+msgstr ""
+"% cd .git/hooks\n"
+"% ln -s ../../.hooks/prepare-commit-msg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:404
+msgid "For ports repository:"
+msgstr "Для репозитория портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:408
+#, no-wrap
+msgid "% git config --add core.hooksPath .hooks\n"
+msgstr "% git config --add core.hooksPath .hooks\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:411
+msgid "For src repository:"
+msgstr "Для репозитория src:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:416
+#, no-wrap
+msgid ""
+"% cd .git/hooks\n"
+"% ln -s ../../tools/tools/git/hooks/prepare-commit-msg\n"
+msgstr ""
+"% cd .git/hooks\n"
+"% ln -s ../../tools/tools/git/hooks/prepare-commit-msg\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:419
+#, no-wrap
+msgid "\"admin\" branch"
+msgstr "Ветка \"admin\""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:422
+msgid ""
+"The `access` and `mentors` files are stored in an orphan branch, `internal/"
+"admin`, in each repository."
+msgstr ""
+"Файлы `access` и `mentors` хранятся в отдельной (orphan) ветке `internal/"
+"admin` в каждом репозитории."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:424
+msgid ""
+"Following example is how to check out the `internal/admin` branch to a local "
+"branch named `admin`:"
+msgstr ""
+"Следующий пример показывает, как переключиться (check out) на ветку "
+"`internal/admin` в локальной ветке с именем `admin`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:430
+#, 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:432
+msgid "Alternatively, you can add a worktree for the `admin` branch:"
+msgstr ""
+"В качестве альтернативы вы можете добавить рабочее дерево для ветки `admin`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:436
+#, 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:440
+msgid ""
+"For browsing `internal/admin` branch on web: `https://cgit.freebsd.org/$"
+"{repo}/log/?h=internal/admin`"
+msgstr ""
+"Для просмотра ветки `internal/admin` в веб-интерфейсе: `https://"
+"cgit.freebsd.org/${repo}/log/?h=internal/admin`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:442
+msgid "For pushing, specify the full refspec:"
+msgstr "Для отправки (push) укажите полную спецификацию ссылки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:446
+#, 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:448
+#, no-wrap
+msgid "Keeping Current With The FreeBSD src Tree"
+msgstr "Как поддерживать актуальную копию дерева исходных кодов FreeBSD src"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:455
+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:456
+#, no-wrap
+msgid "Branch Names"
+msgstr "Названия веток"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:458
+msgid "FreeBSD-CURRENT uses the `main` branch."
+msgstr "FreeBSD-CURRENT использует ветку `main`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:460
+msgid "`main` is the default branch."
+msgstr "`main` — это ветка по умолчанию."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:462
+msgid "For FreeBSD-STABLE, branch names include `stable/12` and `stable/13`."
+msgstr "Для FreeBSD-STABLE названия веток включают `stable/12` и `stable/13`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:464
+msgid ""
+"For FreeBSD-RELEASE, release engineering branch names include `releng/12.4` "
+"and `releng/13.2`."
+msgstr ""
+"Для FreeBSD-RELEASE, названия веток разработки выпусков включают `releng/"
+"12.4` и `releng/13.2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:466
+msgid "https://www.freebsd.org/releng/[] shows:"
+msgstr "https://www.freebsd.org/releng/[] отображает:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:468
+msgid "`main` and `stable/⋯` branches open"
+msgstr "ветки `main` и `stable/⋯` открыты"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:469
+msgid "`releng/⋯` branches, each of which is frozen when a release is tagged."
+msgstr ""
+"ветки `releng/⋯`, каждая из которых замораживается при создании тега релиза."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:471
+msgid "Examples:"
+msgstr "Примеры:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:473
+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 ""
+"тег https://cgit.freebsd.org/src/tag/?h=release/13.1.0[release/13.1.0] на "
+"ветке https://cgit.freebsd.org/src/log/?h=releng/13.1[releng/13.1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:474
+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 ""
+"тег https://cgit.freebsd.org/src/tag/?h=release/13.2.0[release/13.2.0] на "
+"ветке https://cgit.freebsd.org/src/log/?h=releng/13.2[releng/13.2]."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:475
+#, no-wrap
+msgid "Repositories"
+msgstr "Репозитории"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:478
+msgid ""
+"Please see the crossref:committers-guide[admin,Administrative Details] for "
+"the latest information on where to get FreeBSD sources. $URL below can be "
+"obtained from that page."
+msgstr ""
+"Пожалуйста, обратитесь к разделу crossref:committers-"
+"guide[admin,Административные детали] для получения актуальной информации о "
+"том, где взять исходные коды FreeBSD. Значение $URL ниже можно получить с "
+"этой страницы."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:481
+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:482
+#, no-wrap
+msgid "Deep Clone"
+msgstr "Полный клон"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:486
+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 ""
+"Полный клон загружает всё дерево целиком, включая всю историю и ветки. Это "
+"самый простой способ. Он также позволяет использовать функцию Git "
+"`worktree`, чтобы все активные ветки были извлечены в отдельные каталоги, но "
+"с единственной копией репозитория."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:489
+#, 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:494
+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 ""
+"создаст полную копию. `branch` должна быть одной из веток, перечисленных в "
+"предыдущем разделе. Если параметр `branch` не указан: будет использоваться "
+"ветка по умолчанию (`main`). Если параметр `<directory>` не указан: имя "
+"нового каталога будет соответствовать имени репозитория ([.filename]#doc#, "
+"[.filename]#ports# или [.filename]#src#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:499
+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 ""
+"Вам понадобится полный клон, если вас интересует история, вы планируете "
+"вносить локальные изменения или работать более чем с одной веткой. Это также "
+"самый простой способ поддерживать актуальность. Если вас интересует история, "
+"но вы работаете только с одной веткой и у вас мало места, вы также можете "
+"использовать `--single-branch`, чтобы загрузить только одну ветку (хотя "
+"некоторые коммиты слияния не будут ссылаться на ветку, из которой произошло "
+"слияние, что может быть важно для некоторых пользователей, интересующихся "
+"детальными версиями истории)."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:500
+#, no-wrap
+msgid "Shallow Clone"
+msgstr "Частичный клон"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:506
+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 ""
+"Частичный клон копирует только самый актуальный код, но не включает или "
+"включает лишь малую часть истории. Это может быть полезно, когда вам нужно "
+"собрать определённую ревизию FreeBSD или когда вы только начинаете и "
+"планируете более полно отслеживать дерево. Также вы можете использовать его, "
+"чтобы ограничить историю только определённым количеством ревизий. Однако "
+"обратите внимание на существенное ограничение этого подхода, описанное ниже."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:510
+#, 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:515
+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 ""
+"Это клонирует репозиторий, но будет содержать только самую последнюю версию "
+"в репозитории. Остальная история не загружается. Если позже вы передумаете, "
+"вы можете выполнить `git fetch --unshallow`, чтобы получить старую историю."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:520
+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 ""
+"При частичном клонировании вы потеряете счетчик коммитов в выводе команды "
+"uname. Это может затруднить определение необходимости обновления системы при "
+"выпуске бюллетеня безопасности."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:522
+#, no-wrap
+msgid "Building"
+msgstr "Сборка"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:526
+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:533
+#, 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:535
+msgid "so that won't be covered in depth here."
+msgstr "так что здесь это не будет рассматриваться подробно."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:538
+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 ""
+"Если вы хотите собрать собственное ядро, в extref:{handbook}"
+"kernelconfig[разделе конфигурации ядра, kernelconfig] руководства FreeBSD "
+"рекомендуется создать файл MYKERNEL в sys/${ARCH}/conf с вашими изменениями "
+"на основе GENERIC. Чтобы Git игнорировал MYKERNEL, его можно добавить в .git/"
+"info/exclude."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:539
+#, no-wrap
+msgid "Updating"
+msgstr "Обновление"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:543
+msgid ""
+"To update both types of trees uses the same commands. This pulls in all the "
+"revisions since your last update."
+msgstr ""
+"Для обновления обоих типов деревьев используются одинаковые команды. Это "
+"загружает (pull) все изменения, сделанные после последнего обновления."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:546
+#, 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:551
+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 ""
+"обновит дерево. В Git 'перемотка' (fast forward) — это слияние, которое "
+"только перемещает указатель ветки и не требует пересоздания коммитов. Если "
+"всегда выполнять слияние/загрузку (merge/pull) с перемоткой, это гарантирует "
+"точную копию дерева FreeBSD. Это важно, если вы хотите поддерживать "
+"локальные патчи."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:554
+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 ""
+"См. ниже, как управлять локальными изменениями. Самый простой способ — "
+"использовать `--autostash` в команде `git pull`, но доступны и более сложные "
+"варианты."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:555
+#, no-wrap
+msgid "Selecting a Specific Version"
+msgstr "Выбор конкретной версии"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:559
+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 ""
+"В Git команда `git checkout` используется для переключения как между "
+"ветками, так и между конкретными версиями. Версии в Git представляют собой "
+"длинные хеши, а не последовательные номера."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:561
+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 ""
+"Когда вы извлекаете конкретную версию, просто укажите нужный хэш в командной "
+"строке (команда `git log` может помочь вам определиться, какой хэш выбрать):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:564
+#, no-wrap
+msgid "% git checkout 08b8197a74\n"
+msgstr "% git checkout 08b8197a74\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:567
+msgid ""
+"and you have that checked out. You will be greeted with a message similar "
+"to the following:"
+msgstr ""
+"и вам это скопировано (checkout). Вы увидите сообщение, похожее на следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:570
+#, 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:574
+#, 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:577
+#: documentation/content/en/articles/committers-guide/_index.adoc:1746
+#, 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: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:579
+#: documentation/content/en/articles/committers-guide/_index.adoc:1748
+#, 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:581
+#, 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:585
+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 ""
+"где последняя строка формируется из хэша, который вы использовали для "
+"извлечения рабочей копии, и первой строки сообщения коммита из этой ревизии. "
+"Хэш может быть сокращен до минимальной уникальной длины. Сам Git не всегда "
+"последователен в том, сколько цифр он отображает."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:586
+#, no-wrap
+msgid "Bisecting"
+msgstr "Бинарный поиск (bisect)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:590
+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:595
+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 упрощает поиск изменений с помощью мощной команды `git bisect`. Вот "
+"краткое описание, как её использовать. Для получения дополнительной "
+"информации вы можете посмотреть https://www.metaltoad.com/blog/beginners-"
+"guide-git-bisect-process-elimination или https://git-scm.com/docs/git-"
+"bisect. Страница man git-bisect хорошо описывает, что может пойти не так, "
+"что делать, когда версии не собираются, в каких ситуациях вам лучше "
+"использовать другие условия поиска, а не 'хорошо (good)' и 'плохо (bad)', и "
+"так далее, но это здесь не будет рассматриваться."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:602
+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` запустит процесс бинарного поиска. Далее "
+"необходимо указать диапазон для проверки. `git bisect good XXXXXX` укажет "
+"рабочую версию, а `git bisect bad XXXXX` — нерабочую версию. Нерабочая "
+"версия почти всегда будет HEAD (специальный тег для текущего состояния). "
+"Рабочая версия будет последней, которую вы проверяли. Аргумент `--first-"
+"parent` необходим, чтобы последующие команды `git bisect` не пытались "
+"переключиться на ветку вендора, в которой отсутствует полное дерево "
+"исходников FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:606
+msgid ""
+"If you want to know the last version you checked out, you should use `git "
+"reflog`:"
+msgstr ""
+"Если вы хотите узнать последнюю версию, которую вы извлекли, используйте "
+"`git reflog`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:611
+#, 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:615
+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 ""
+"показывает, как я перемещаю рабочее дерево в ветку `main` (a816...) и затем "
+"обновляю его из вышестоящего репозитория (до 5ef0...). В этом случае, bad "
+"будет HEAD (или 5ef0bd68b515), а good — a8163e165c5b. Как видно из вывода, "
+"HEAD@{1} также часто работает, но не является безошибочным, если вы "
+"выполняли другие действия с деревом Git после обновления, но до того, как "
+"обнаружили необходимость в бинарном поиске."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:619
+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:626
+#, 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:635
+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 ""
+"Затем вы собираете и устанавливаете эту версию. Если она работает корректно, "
+"введите `git bisect good`, в противном случае — `git bisect bad`. Если "
+"версия не компилируется, введите `git bisect skip`. После каждого шага вы "
+"будете получать сообщение, аналогичное приведённому выше. По завершении "
+"сообщите о проблемной версии разработчику (или исправьте ошибку "
+"самостоятельно и отправьте патч). Команда `git bisect reset` завершит "
+"процесс и вернёт вас туда, откуда вы начали (обычно на вершину ветки "
+"`main`). Ещё раз, руководство по git-bisect (ссылка выше) — это хороший "
+"ресурс на случай возникновения проблем или нестандартных ситуаций."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:637
+#, no-wrap
+msgid "Signing the commits, tags, and pushes, with GnuPG"
+msgstr "Подписание коммитов, тегов и отправок с помощью GnuPG"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:642
+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 умеет подписывать коммиты, теги и отправки (push). Когда вы подписываете "
+"Git-коммит или тег, вы можете доказать, что отправленный код действительно "
+"принадлежит вам и не был изменён во время передачи. Вы также можете "
+"подтвердить, что именно вы отправили код, а не кто-то другой."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:644
+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 ""
+"Более подробная документация по подписанию коммитов и тегов доступна в главе "
+"https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work[Инструменты Git - "
+"Подписание вашей работы] книги по Git."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:646
+msgid ""
+"The rationale behind signing pushes can be found in the https://github.com/"
+"git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[commit that "
+"introduced the feature]."
+msgstr ""
+"Обоснование подписания отправок можно найти в https://github.com/git/git/"
+"commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[коммите, где представлена "
+"эта функция]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:649
+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 ""
+"Лучший способ — просто указать Git, что вы всегда хотите подписывать "
+"коммиты, теги и отправки. Это можно сделать, установив несколько переменных "
+"конфигурации:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:656
+#, 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:664
+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 ""
+"Чтобы избежать возможных конфликтов, убедитесь, что вы указали длинный "
+"идентификатор ключа для Git. Вы можете получить длинный идентификатор с "
+"помощью команды: `gpg --list-secret-keys --keyid-format LONG`."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:670
+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 ""
+"Для использования конкретных подключей, без разрешения GnuPG подключей в "
+"первичный ключ, добавьте `!` к ключу. Например, для шифрования с подключом "
+"`DEADBEEF` используйте `DEADBEEF!`."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:672
+#, no-wrap
+msgid "Verifying signatures"
+msgstr "Проверка подписей"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:675
+msgid ""
+"Commit signatures can be verified by running either `git verify-commit "
+"<commit hash>`, or `git log --show-signature`."
+msgstr ""
+"Подпись коммита можно проверить, выполнив команду `git verify-commit <хэш "
+"коммита>` или `git log --show-signature`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:677
+msgid ""
+"Tag signatures can be verified with `git verify-tag <tag name>`, or `git tag "
+"-v <tag name>`."
+msgstr ""
+"Подписи тегов можно проверить с помощью `git verify-tag <имя тега>` или `git "
+"tag -v <имя тега>`."
+
+#
+#
+#. 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:686
+#, no-wrap
+msgid "Ports Considerations"
+msgstr "Особенности портов"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:689
+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:692
+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 ""
+"Веб-интерфейс cgit для работы в браузере доступен по адресу https://"
+"cgit.FreeBSD.org/ports/ . Рабочий репозиторий Git находится по адресу "
+"https://git.FreeBSD.org/ports.git и ssh://anongit@git.FreeBSD.org/ports.git "
+"(или `anongit@git.FreeBSD.org:ports.git`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:696
+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 ""
+"Также доступно зеркало на GitHub, см. extref:{handbook}/mirrors[Внешние "
+"зеркала, mirrors] для обзора. Ветка _latest_ называется `main`. Ветки "
+"_quarterly_ именуются `yyyyQn`, где 'yyyy' — год, а 'n' — квартал."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:698
+#, no-wrap
+msgid "Commit message formats"
+msgstr "Форматы сообщений коммитов"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:702
+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 ""
+"В репозитории портов доступен перехватчик, который помогает оформлять "
+"сообщения коммитов в https://cgit.freebsd.org/ports/tree/.hooks/prepare-"
+"commit-msg[.hooks/prepare-commit-message]. Его можно включить, выполнив "
+"команду ``git config --add core.hooksPath .hooks``."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:704
+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:707
+#, no-wrap
+msgid "category/port: Summary.\n"
+msgstr "category/port: Summary.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:709
+#, no-wrap
+msgid "Description of why the changes where made.\n"
+msgstr "Description of why the changes where made (Объяснение, почему были сделаны изменения ).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:711
+#, no-wrap
+msgid "PR:\t 12345\n"
+msgstr "PR:\t 12345\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:717
+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 ""
+"Первая строка — это тема коммита, в ней указывается, какой порт был изменён, "
+"и краткое описание коммита. Она должна содержать 50 символов или меньше."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:719
+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:721
+msgid ""
+"The rest of the commit message should be wrapped at the 72 characters "
+"boundary."
+msgstr ""
+"Остальная часть сообщения о коммите должна быть перенесена на границе 72 "
+"символов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:723
+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:725
+#, no-wrap
+msgid "Managing Local Changes"
+msgstr "Управление локальными изменениями"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:728
+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:734
+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 ""
+"Один важный момент для всех: все изменения остаются локальными, пока они не "
+"будут отправлены (push). В отличие от Subversion, Git использует "
+"распределённую модель. Для пользователей в большинстве случаев разница "
+"невелика. Однако, если у вас есть локальные изменения, вы можете "
+"использовать тот же инструмент для управления ими, что и для получения "
+"изменений из FreeBSD. Все изменения, которые вы не отправили, являются "
+"локальными и могут быть легко изменены (это делает git rebase, обсуждаемый "
+"ниже)."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:735
+#, no-wrap
+msgid "Keeping local changes"
+msgstr "Сохранение локальных изменений"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:742
+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 ""
+"Самый простой способ сохранить локальные изменения (особенно незначительные) "
+"— использовать `git stash`. В простейшем случае вы используете `git stash`, "
+"чтобы записать изменения (что помещает их в стек stash). Большинство людей "
+"используют это для сохранения изменений перед обновлением дерева, как "
+"описано выше. Затем они используют `git stash apply`, чтобы повторно "
+"применить изменения к дереву. Stash представляет собой стек изменений, "
+"который можно просмотреть с помощью `git stash list`. Подробности приведены "
+"в man-странице git-stash (https://git-scm.com/docs/git-stash)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:746
+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 ""
+"Этот метод подходит, когда у вас есть небольшие изменения в дереве. Если у "
+"вас что-то более сложное, вероятно, лучше будет создать локальную ветку и "
+"выполнять перебазирование. Сохранение изменений также интегрировано в "
+"команду `git pull`: просто добавьте `--autostash` в командную строку."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:747
+#, no-wrap
+msgid "Keeping a local branch"
+msgstr "Сохранение локальной ветки"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:754
+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 ""
+"С помощью Git гораздо проще поддерживать локальную ветку, чем в Subversion. "
+"В Subversion необходимо выполнять коммит слияния и разрешать конфликты. Это "
+"выполнимо, но может привести к запутанной истории изменений, которую будет "
+"сложно передать в вышестоящий репозиторий, если это потребуется, или сложно "
+"воспроизвести при необходимости. Git также позволяет выполнять коммит "
+"слияния, но с теми же проблемами. Это один из способов управления веткой, но "
+"наименее гибкий."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:758
+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 ""
+"В дополнение к слиянию, Git поддерживает концепцию «перебазирования» "
+"(rebase), которая позволяет избежать этих проблем. Команда `git rebase` "
+"воспроизводит все коммиты ветки в конце родительской ветки. Мы рассмотрим "
+"наиболее распространённые сценарии, возникающие при её использовании."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:760
+msgid "====== Create a branch"
+msgstr "====== Создать ветку"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:765
+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 ""
+"Предположим, вы хотите внести изменение в команду `ls` FreeBSD, чтобы она "
+"никогда не использовала цветовое выделение. Существует множество причин для "
+"этого, но в данном примере мы будем использовать это в качестве базового "
+"сценария. Команда `ls` в FreeBSD периодически изменяется, и вам нужно будет "
+"адаптироваться к этим изменениям. К счастью, с помощью `git rebase` это "
+"обычно происходит автоматически."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:787
+#, 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:794
+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 ""
+"Коммит откроет редактор, чтобы описать выполненные изменения. После ввода "
+"описания у вас будет собственная **локальная** ветка в Git-репозитории. "
+"Соберите и установите изменения, как обычно, следуя указаниям в руководстве. "
+"Git отличается от других систем контроля версий тем, что нужно явно "
+"указывать, какие файлы коммитить. Я предпочитаю делать это в командной "
+"строке коммита, но также можно использовать `git add`, как описано в более "
+"подробных руководствах."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:796
+msgid "====== Time to update"
+msgstr "====== Время обновить"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:801
+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 ""
+"Когда приходит время внедрить новую версию, процесс почти такой же, как и "
+"без веток. Вы выполняете обновление, как описано выше, но перед обновлением "
+"нужно выполнить одну дополнительную команду и одну после. Ниже "
+"предполагается, что вы начинаете с неизменённого дерева. Важно начинать "
+"операции перебазирования с чистого дерева (Git требует этого)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:807
+#, 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:812
+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 ""
+"Это откроет редактор, в котором будут перечислены все коммиты. В данном "
+"примере не изменяйте его содержимое. Обычно это делается при обновлении "
+"базовой версии (хотя также можно использовать команду Git rebase для "
+"управления коммитами в ветке)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:814
+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 ""
+"После завершения вышеуказанных действий необходимо перенести коммиты для "
+"`ls.c` со старой версии FreeBSD на новую."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:821
+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:824
+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 ""
+"Допустим, изменения включают переход на terminfo в вышестоящем коде, а также "
+"изменение названия опции. При обновлении вы можете увидеть следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:834
+#, 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:836
+msgid "which looks scary."
+msgstr "что выглядит пугающе."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:838
+msgid ""
+"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 ""
+"Если открыть редактор, вы увидите типичное разрешение конфликта с "
+"трёхсторонним слиянием, с которым вы могли сталкиваться в других системах "
+"управления исходным кодом (остальная часть ls.c опущена):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:848
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:851
+msgid "The new code is first, and your code is second."
+msgstr "Новый код идет первым, а ваш код - вторым."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:853
+msgid ""
+"The right fix here is to just add a #undef COLORLS_NEW before #ifdef and "
+"then delete the old changes:"
+msgstr ""
+"Правильное решение здесь — просто добавить `#undef COLORLS_NEW` перед "
+"`#ifdef`, а затем удалить старые изменения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:858
+#, no-wrap
+msgid ""
+"#undef COLORLS_NEW\n"
+"#ifdef COLORLS_NEW\n"
+"#include <terminfo.h>\n"
+msgstr ""
+"#undef COLORLS_NEW\n"
+"#ifdef COLORLS_NEW\n"
+"#include <terminfo.h>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:860
+msgid "save the file."
+msgstr "и сохранить файл."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:862
+msgid "The rebase was interrupted, so you have to complete it:"
+msgstr "Ребазирование было прервано, поэтому вам необходимо завершить его:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:866
+#, no-wrap
+msgid ""
+"% git add ls.c\n"
+"% git rebase --continue\n"
+msgstr ""
+"% git add ls.c\n"
+"% git rebase --continue\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:871
+msgid ""
+"which tells Git that ls.c has been fixed and to continue the rebase "
+"operation. Since there was a conflict, you will get kicked into the editor "
+"to update the commit message if necessary. If the commit message is still "
+"accurate, just exit the editor."
+msgstr ""
+"что указывает Git, что файл `ls.c` исправлен и можно продолжить операцию "
+"перебазирования. Поскольку возник конфликт, система откроет редактор для "
+"обновления сообщения коммита (если это необходимо). Если сообщение коммита "
+"по-прежнему корректно, просто закройте редактор."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:876
+msgid ""
+"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."
+msgstr ""
+"Если вы застряли в процессе перебазирования, не паникуйте. Команда `git "
+"rebase --abort` вернёт вас к исходному состоянию. Однако важно начинать с "
+"неизменённого дерева. Примечание: упомянутая выше команда `git reflog` будет "
+"полезна в этой ситуации, так как она содержит список всех (промежуточных) "
+"коммитов, которые вы можете просмотреть, изучить или выбрать через `cherry-"
+"pick`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:879
+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. It is a "
+"good resource for issues that arise occasionally but are too obscure for "
+"this guide."
+msgstr ""
+"Для более подробного ознакомления с этой темой, см. довольно обширное "
+"руководство по адресу: https://www.freecodecamp.org/news/the-ultimate-guide-"
+"to-git-merge-and-git-rebase/. Этот ресурс будет полезен для решения проблем, "
+"которые возникают нечасто, но слишком специфичны для данного руководства."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:880
+#, no-wrap
+msgid "Switching to a Different FreeBSD Branch"
+msgstr "Переключение на другую ветку FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:883
+msgid ""
+"If you wish to shift from stable/12 to the current branch. If you have a "
+"deep clone, the following will suffice:"
+msgstr ""
+"Если вы хотите перейти с ветки stable/12 на ветку current и у вас есть "
+"полный клон репозитория, будет достаточно выполнить следующую команду:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:887
+#, no-wrap
+msgid ""
+"% git checkout main\n"
+"% # build and install here...\n"
+msgstr ""
+"% git checkout main\n"
+"% # build and install here...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:892
+msgid ""
+"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:"
+msgstr ""
+"Однако, если у вас есть локальная ветка, есть несколько важных замечаний. Во-"
+"первых, перебазирование переписывает историю, поэтому вам, скорее всего, "
+"захочется сохранить её каким-либо образом. Во-вторых, переключение между "
+"ветками часто вызывает больше конфликтов. Если предположить, что приведённый "
+"выше пример относился к ветке stable/12, то для перехода на ветку `main` я "
+"бы рекомендовал следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:897
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:904
+msgid ""
+"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. 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)."
+msgstr ""
+"Что делает вышеописанное: извлекается ветка no-color-ls. Затем для неё "
+"создаётся новое имя (no-color-ls-stable-12) на случай, если потребуется "
+"вернуться к ней. После этого выполняется перебазирование на ветку `main`. "
+"Это позволит найти все коммиты в текущей ветке no-color-ls (вплоть до точки "
+"её ответвления от stable/12) и затем воспроизвести их на ветке `main`, "
+"создав там новую ветку no-color-ls (поэтому я и попросил вас создать "
+"резервное имя)."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:906
+#, no-wrap
+msgid "MFC (Merge From Current) Procedures"
+msgstr "Процедуры MFC (Merge From Current)"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:907
+#, no-wrap
+msgid "Summary"
+msgstr "Краткое содержание"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:911
+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 ""
+"Рабочий процесс MFC можно обобщить как `git cherry-pick -x` плюс `git commit "
+"--amend` для корректировки сообщения коммита. Для нескольких коммитов "
+"используйте `git rebase -i`, чтобы объединить их вместе и отредактировать "
+"сообщение коммита."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:912
+#, no-wrap
+msgid "Single commit MFC"
+msgstr "Одиночный коммит MFC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:918
+#, no-wrap
+msgid ""
+"% git checkout stable/X\n"
+"% git cherry-pick -x $HASH --edit\n"
+msgstr ""
+"% git checkout stable/X\n"
+"% git cherry-pick -x $HASH --edit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:922
+msgid ""
+"For MFC commits, for example a vendor import, you would need to specify one "
+"parent for cherry-pick purposes. Normally, that would be the \"first "
+"parent\" of the branch you are cherry-picking from, so:"
+msgstr ""
+"Для коммитов MFC, например, импорта от вендора, вам потребуется указать "
+"одного родителя для целей выборочного применения (cherry-pick). Обычно это "
+"будет «первый родитель» ветки, из которой вы применяете изменения, то есть:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:927
+#, no-wrap
+msgid ""
+"% git checkout stable/X\n"
+"% git cherry-pick -x $HASH -m 1 --edit\n"
+msgstr ""
+"% git checkout stable/X\n"
+"% git cherry-pick -x $HASH -m 1 --edit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:930
+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`."
+msgstr ""
+"Если что-то пойдет не так, вам потребуется либо прервать выборочное "
+"применение с помощью `git cherry-pick --abort`, либо исправить проблему и "
+"выполнить `git cherry-pick --continue`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:933
+msgid ""
+"Once the cherry-pick is finished, push with `git push`. If you get an error "
+"due to losing the commit race, use `git pull --rebase` and try to push again."
+msgstr ""
+"После завершения выборочного применения выполните отправку с помощью `git "
+"push`. Если возникнет ошибка из-за проигрыша в гонке коммитов, используйте "
+"`git pull --rebase` и повторите попытку отправки."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:934
+#, no-wrap
+msgid "MFC to RELENG branch"
+msgstr "MFC в ветку RELENG"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:938
+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 ""
+"MFC в ветки, требующие одобрения, требуют немного больше внимания. Процесс "
+"одинаков как для обычного слияния, так и для прямого коммита в "
+"исключительной ситуации."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:940
+msgid ""
+"Merge or direct commit to the appropriate `stable/X` branch first before "
+"merging to the `releng/X.Y` branch."
+msgstr ""
+"Сначала выполните слияние или прямой коммит в соответствующую ветку `stable/"
+"X`, прежде чем сливать в ветку `releng/X.Y`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:941
+msgid ""
+"Use the hash that's in the `stable/X` branch for the MFC to `releng/X.Y` "
+"branch."
+msgstr "Используйте хэш из ветки `stable/X` для MFC в ветку `releng/X.Y`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:942
+msgid "Leave both \"cherry picked from\" lines in the commit message."
+msgstr "Оставляйте обе строки \"cherry picked from\" в сообщении коммита."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:943
+msgid "Be sure to add the `Approved by:` line when you are in the editor."
+msgstr "Обязательно добавьте строку `Approved by:` при работе в редакторе."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:948
+#, no-wrap
+msgid ""
+"% git checkout releng/13.0\n"
+"% git cherry-pick -x $HASH --edit\n"
+msgstr ""
+"% git checkout releng/13.0\n"
+"% git cherry-pick -x $HASH --edit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:951
+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."
+msgstr ""
+"Если вы забыли добавить строку `Approved by:`, вы можете выполнить `git "
+"commit --amend`, чтобы отредактировать сообщение коммита перед отправкой "
+"изменения."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:952
+#, no-wrap
+msgid "Multiple commit MFC"
+msgstr "Множественный коммит MFC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:963
+#, no-wrap
+msgid ""
+"% git checkout -b tmp-branch stable/X\n"
+"% for h in $HASH_LIST; do git cherry-pick -x $h; done\n"
+"% git rebase -i stable/X\n"
+"# mark each of the commits after the first as 'squash'\n"
+"# Update the commit message to reflect all elements of commit, if necessary.\n"
+"# Be sure to retain the \"cherry picked from\" lines.\n"
+"% git push freebsd HEAD:stable/X\n"
+msgstr ""
+"% git checkout -b tmp-branch stable/X\n"
+"% for h in $HASH_LIST; do git cherry-pick -x $h; done\n"
+"% git rebase -i stable/X\n"
+"# отметить каждый коммит после первого как 'squash'\n"
+"# При необходимости обновить сообщение коммита, чтобы отразить все его элементы.\n"
+"# Обязательно сохранить строки \"cherry picked from\".\n"
+"% git push freebsd HEAD:stable/X\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:966
+msgid "If the push fails due to losing the commit race, rebase and try again:"
+msgstr ""
+"Если отправка не удалась из-за проигрыша в гонке коммитов, выполните "
+"перебазирование и повторите попытку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:974
+#, no-wrap
+msgid ""
+"% git checkout stable/X\n"
+"% git pull\n"
+"% git checkout tmp-branch\n"
+"% git rebase stable/X\n"
+"% git push freebsd HEAD:stable/X\n"
+msgstr ""
+"% git checkout stable/X\n"
+"% git pull\n"
+"% git checkout tmp-branch\n"
+"% git rebase stable/X\n"
+"% git push freebsd HEAD:stable/X\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:977
+msgid "Once the MFC is complete, you can delete the temporary branch:"
+msgstr "После завершения MFC вы можете удалить временную ветку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:982
+#, no-wrap
+msgid ""
+"% git checkout stable/X\n"
+"% git branch -d tmp-branch\n"
+msgstr ""
+"% git checkout stable/X\n"
+"% git branch -d tmp-branch\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:984
+#, no-wrap
+msgid "MFC a vendor import"
+msgstr "MFC — импорт от вендора"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:989
+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 ""
+"Импорты от вендоров — это единственное в дереве, что создает коммит слияния "
+"в ветке `main`. Коммиты слияния выборочным переносом (cherry-pick) в stable/"
+"XX представляют дополнительную сложность, поскольку у коммита слияния два "
+"родителя. Как правило, вам понадобится разница с первым родителем, так как "
+"это разница с `main` (хотя могут быть и исключения)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:993
+#, no-wrap
+msgid "% git cherry-pick -x -m 1 $HASH\n"
+msgstr "% git cherry-pick -x -m 1 $HASH\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:996
+msgid ""
+"is typically what you want. This will tell cherry-pick to apply the correct "
+"diff."
+msgstr ""
+"обычно это то, что вам нужно. Это укажет выборочному переносу применить "
+"правильный diff."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1000
+msgid ""
+"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:"
+msgstr ""
+"Бывают, надеюсь, редкие случаи, когда возможно, что ветка `main` была "
+"объединена в обратном порядке скриптом преобразования. Если это произойдет "
+"(а мы пока таких случаев не обнаружили), вам следует изменить указанное выше "
+"на `-m 2`, чтобы выбрать правильного родителя. Просто выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1004
+#, no-wrap
+msgid ""
+"% git cherry-pick --abort\n"
+"% git cherry-pick -x -m 2 $HASH\n"
+msgstr ""
+"% git cherry-pick --abort\n"
+"% git cherry-pick -x -m 2 $HASH\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1006
+msgid "to do that. The `--abort` will cleanup the failed first attempt."
+msgstr ""
+"для этого. Опция `--abort` выполнит очистку после неудачной первой попытки."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1007
+#, no-wrap
+msgid "Redoing a MFC"
+msgstr "Переделка MFC"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1011
+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:"
+msgstr ""
+"Если вы делаете MFC, и всё идет ужасно неправильно, и вы хотите начать "
+"сначала, то самый простой способ — использовать `git reset --hard`, как "
+"показано ниже:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1014
+#, no-wrap
+msgid "% git reset --hard freebsd/stable/12\n"
+msgstr "% git reset --hard freebsd/stable/12\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1017
+msgid ""
+"though if you have some revs you want to keep, and others you don't, using "
+"`git rebase -i` is better."
+msgstr ""
+"хотя если у вас есть некоторые ревизии, которые вы хотите сохранить, а "
+"другие — нет, использование `git rebase -i` предпочтительнее."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1018
+#, no-wrap
+msgid "Considerations when MFCing"
+msgstr "Некоторые соображения о MFC"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1021
+msgid ""
+"When committing source commits to stable and releng branches, we have the "
+"following goals:"
+msgstr ""
+"При внесении исходных коммитов в стабильные и релизные ветки мы преследуем "
+"следующие цели:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1023
+msgid ""
+"Clearly mark direct commits distinct from commits that land a change from "
+"another branch."
+msgstr ""
+"Четко обозначить прямые коммиты, отличая их от коммитов, вносящих изменения "
+"из другой ветки."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1024
+msgid "Avoid introducing known breakage into stable and releng branches."
+msgstr ""
+"Избегать внесения известных нарушений в стабильные ветки и ветки выпуска "
+"релизов (releng)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1025
+msgid ""
+"Allow developers to determine which changes have or have not been landed "
+"from one branch to another."
+msgstr ""
+"Позволить разработчикам определять, какие изменения были или не были "
+"перенесены из одной ветки в другую."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1027
+msgid ""
+"With Subversion, we used the following practices to achieve these goals:"
+msgstr ""
+"С помощью Subversion мы использовали следующие практики для достижения этих "
+"целей:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1029
+msgid ""
+"Using `MFC` and `MFS` tags to mark commits that merged changes from another "
+"branch."
+msgstr ""
+"Использование тегов `MFC` и `MFS` для пометки коммитов, которые сделали "
+"слияние изменения из другой ветки."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1030
+msgid "Squashing fixup commits into the main commit when merging a change."
+msgstr ""
+"Объединение (squash) исправляющих (fixup) коммитов с основным коммитом при "
+"слиянии изменения."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1031
+msgid "Recording mergeinfo so that `svn mergeinfo --show-revs` worked."
+msgstr ""
+"Запись информации о слияниях для корректной работы `svn mergeinfo --show-"
+"revs`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1035
+msgid ""
+"With Git, we will need to use different strategies to achieve the same "
+"goals. This document aims to define best practices when merging source "
+"commits using Git that achieve these goals. In general, we aim to use Git's "
+"native support to achieve these goals rather than enforcing practices built "
+"on Subversion's model."
+msgstr ""
+"С помощью Git нам потребуется использовать другие стратегии для достижения "
+"тех же целей. Этот документ призван определить лучшие практики для коммитов "
+"слияния исходного кода с использованием Git, которые достигают этих целей. В "
+"целом мы стремимся использовать встроенные возможности Git для достижения "
+"этих целей, а не применять практики, основанные на модели Subversion."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1038
+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. 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`."
+msgstr ""
+"Общее замечание: в связи с техническими различиями в Git, мы не будем "
+"использовать \"коммиты слияния\" Git (созданные через `git merge`) в "
+"стабильных ветках или ветках releng. Вместо этого, когда в документе "
+"упоминаются \"коммиты слияния\", имеется в виду коммит, изначально сделанный "
+"в `main`, который реплицируется или \"переносится\" в стабильную ветку, или "
+"коммит из стабильной ветки, который реплицируется в ветку releng с помощью "
+"вариации команды `git cherry-pick`."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1039
+#, no-wrap
+msgid "Finding Eligible Hashes to MFC"
+msgstr "Поиск подходящих хэшей для MFC"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1045
+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 предоставляет встроенную поддержку этого через команды `git cherry` и "
+"`git log --cherry`. Эти команды сравнивают исходные различия коммитов (но не "
+"другие метаданные, такие как сообщения журнала), чтобы определить, идентичны "
+"ли два коммита. Это хорошо работает, когда каждый коммит из `main` "
+"переносится как отдельный коммит в стабильную ветку, но перестаёт работать, "
+"если несколько коммитов из `main` объединяются в один коммит в стабильной "
+"ветке. Проект активно использует `git cherry-pick -x` с сохранением всех "
+"строк для обхода этих трудностей и разрабатывает автоматизированные "
+"инструменты для использования этого подхода."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1046
+#, no-wrap
+msgid "Commit message standards"
+msgstr "Стандарты сообщений коммитов"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1047
+#, no-wrap
+msgid "Marking MFCs"
+msgstr "Пометка MFC"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1050
+msgid "The project has adopted the following practice for marking MFCs:"
+msgstr "Проект принял следующую практику для пометки MFC:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1052
+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."
+msgstr ""
+"Используйте флаг `-x` с командой `git cherry-pick`. Это добавляет строку в "
+"сообщение коммита, которая включает хэш оригинального коммита при слиянии. "
+"Поскольку это добавляется непосредственно Git, коммиттерам не нужно вручную "
+"редактировать журнал коммитов при слиянии."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1054
+msgid ""
+"When merging multiple commits, keep all the \"cherry picked from\" lines."
+msgstr ""
+"При слиянии нескольких коммитов сохраняйте все строки \"cherry picked from\"."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1055
+#, no-wrap
+msgid "Trim Metadata?"
+msgstr "Обрезать метаданные?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1059
+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 ""
+"Одной из областей, которая не была чётко задокументирована в Subversion (и "
+"даже в CVS), является форматирование метаданных в сообщениях журнала для "
+"коммитов MFC. Должны ли они включать метаданные из исходного коммита без "
+"изменений или должны быть изменены для отражения информации о самом коммите "
+"MFC?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1068
+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 ""
+"Исторически практика различалась, хотя некоторые различия зависят от "
+"области. Например, MFC, относящиеся к PR, обычно включают поле PR в MFC, "
+"чтобы коммиты MFC включались в аудит-трекер системы отслеживания ошибок. В "
+"других областях ситуация менее ясна. Например, Phabricator показывает "
+"разницу последнего коммита, помеченного для обзора, поэтому включение URL-"
+"адресов Phabricator заменяет основной коммит на завершенные коммиты. Список "
+"рецензентов также неясен. Если рецензент одобрил изменение для `main`, "
+"означает ли это, что он одобрил коммит MFC? Верно ли это только для "
+"идентичного кода или лишь с незначительной доработкой? Очевидно, это неверно "
+"для более масштабных доработок. Даже для идентичного кода: что, если коммит "
+"не конфликтует, но вносит изменение ABI? Рецензент мог одобрить коммит для "
+"`main` из-за нарушения ABI, но может не одобрить слияние того же коммита в "
+"неизменном виде. Придется полагаться на собственное наилучшее суждение до "
+"тех пор, пока не будут согласованы четкие руководящие принципы."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1072
+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 ""
+"Для MFC, регулируемых re@, добавляются новые поля метаданных, такие как тег "
+"Approved by для одобренных коммитов. Эти новые метаданные должны быть "
+"добавлены через `git commit --amend` или аналогичные средства после того, "
+"как исходный коммит будет проверен и одобрен. Мы также можем захотеть "
+"зарезервировать некоторые поля метаданных в коммитах MFC, такие как URL-"
+"адреса Phabricator, для использования re@ в будущем."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1075
+msgid ""
+"Preserving existing metadata provides a very simple workflow. Developers "
+"use `git cherry-pick -x` without having to edit the log message."
+msgstr ""
+"Сохранение существующих метаданных обеспечивает очень простой рабочий "
+"процесс. Разработчики используют `git cherry-pick -x` без необходимости "
+"редактировать сообщение журнала."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1078
+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 ""
+"Если же мы решим изменять метаданные в MFC, разработчикам придется явно "
+"редактировать сообщения журнала с помощью `git cherry-pick --edit` или `git "
+"commit --amend`. Однако по сравнению с svn, по крайней мере, существующее "
+"сообщение о фиксации может быть предварительно заполнено, а поля метаданных "
+"можно добавлять или удалять без необходимости повторного ввода всего "
+"сообщения о фиксации."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1080
+msgid ""
+"The bottom line is that developers will likely need to curate their commit "
+"message for MFCs that are non-trivial."
+msgstr ""
+"Суть в том, что разработчикам, вероятно, потребуется тщательно готовить свои "
+"сообщения о коммитах для MFC, которые не являются тривиальными."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1082
+#, no-wrap
+msgid "Vendor Imports with Git"
+msgstr "Импорт вендоров с Git"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1085
+msgid "This section describes the vendor import procedure with Git in detail."
+msgstr ""
+"В этом разделе подробно описывается процедура импорта вендора с "
+"использованием Git."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1086
+#, no-wrap
+msgid "Branch naming convention"
+msgstr "Соглашение о наименовании веток"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1089
+msgid ""
+"All vendor branches and tags start with `vendor/`. These branches and tags "
+"are visible by default."
+msgstr ""
+"Все ветки и теги вендоров начинаются с `vendor/`. Эти ветки и теги видны по "
+"умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1094
+msgid ""
+"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 ""
+"Эта глава следует соглашению, что `freebsd` — это имя источника для "
+"официального репозитория Git FreeBSD. Если вы используете другое соглашение, "
+"замените `freebsd` на используемое вами имя в приведённых ниже примерах."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1098
+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 ""
+"Мы рассмотрим пример обновления mtree NetBSD, который находится в нашем "
+"дереве. Ветка вендора для него — `vendor/NetBSD/mtree`."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1099
+#, no-wrap
+msgid "Updating an old vendor import"
+msgstr "Обновление старого импорта от вендора"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1105
+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 ""
+"Деревья вендоров обычно содержат лишь подмножество стороннего программного "
+"обеспечения, подходящего для FreeBSD. Эти деревья, как правило, очень малы "
+"по сравнению с деревом FreeBSD. Таким образом, рабочие деревья Git довольно "
+"компактны и быстры, что делает их предпочтительным методом использования. "
+"Убедитесь, что выбранный вами каталог ( `../mtree` ) в настоящее время не "
+"существует."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1109
+#, no-wrap
+msgid "% git worktree add ../mtree vendor/NetBSD/mtree\n"
+msgstr "% git worktree add ../mtree vendor/NetBSD/mtree\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1111
+#, no-wrap
+msgid "Update the Sources in the Vendor Branch"
+msgstr "Обновление исходных кодов в ветке вендора"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1114
+msgid ""
+"Prepare a full, clean tree of the vendor sources. Import everything but "
+"merge only what is needed."
+msgstr ""
+"Подготовьте полное, чистое дерево исходных кодов вендора. Импортируйте всё, "
+"но делайте слияние только тому, что необходимо."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1118
+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 ""
+"Этот пример предполагает, что исходный код NetBSD получен из их зеркала на "
+"GitHub в каталоге `~/git/NetBSD`. Учтите, что «вышестоящий репозиторий» мог "
+"добавить или удалить файлы, поэтому мы хотим убедиться, что удаления также "
+"распространяются. Пакет package:net/rsync[] обычно установлен, поэтому я "
+"буду использовать его."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1132
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1145
+msgid ""
+"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."
+msgstr ""
+"Крайне важно убедиться, что импортируемый исходный код получен из надежного "
+"источника. Многие проекты с открытым исходным кодом используют "
+"криптографические подписи для подписывания изменений кода, тегов git и/или "
+"tar-архивов с исходным кодом. Всегда проверяйте эти подписи и используйте "
+"механизмы изоляции, такие как клетки, chroot, в сочетании с выделенной "
+"непривилегированной учетной записью пользователя, отличной от той, которую "
+"вы используете регулярно (подробнее см. в разделе «Обновление дерева "
+"исходного кода FreeBSD» ниже), пока вы не будете уверены, что импортируемый "
+"исходный код выглядит безопасным. Отслеживание разработки в вышестоящем "
+"репозитории и периодический просмотр изменений кода в нем могут значительно "
+"помочь в повышении качества кода и принести пользу всем участникам. Также "
+"рекомендуется изучать результаты git diff перед импортом их в область "
+"вендора."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1149
+msgid ""
+"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."
+msgstr ""
+"Всегда выполняйте команды `git diff` и `git status` и внимательно изучайте "
+"результаты. В случае сомнений полезно выполнить `git annotate` на ветке "
+"вендора или в вышестоящем git-репозитории, чтобы увидеть, кто и почему внес "
+"изменение."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1152
+msgid ""
+"In the example above we used `-m` to illustrate, but you should compose a "
+"proper message in an editor (using a commit message template)."
+msgstr ""
+"В примере выше мы использовали `-m` для иллюстрации, но вам следует "
+"составить корректное сообщение в редакторе (используя шаблон сообщения о "
+"фиксации)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1157
+msgid ""
+"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. The annotated tag gives you a chance to enter a commit message. "
+"Enter the version you are importing, along with any salient new features or "
+"fixes in that version."
+msgstr ""
+"Также важно создать аннотированный тег с помощью `git tag -a`, иначе "
+"отправка будет отклонена. Только аннотированные теги разрешены для отправки. "
+"Аннотированный тег даёт вам возможность ввести сообщение коммита. Укажите "
+"версию, которую вы импортируете, вместе с любыми важными новыми функциями "
+"или исправлениями в этой версии."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1158
+#, no-wrap
+msgid "Updating the FreeBSD Copy"
+msgstr "Обновление копии FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1161
+msgid "At this point you can push the import to `vendor` into our repo."
+msgstr "На этом этапе вы можете отправить импорт в `vendor` в наш репозиторий."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1165
+#, no-wrap
+msgid "% git push --follow-tags freebsd vendor/NetBSD/mtree\n"
+msgstr "% git push --follow-tags freebsd vendor/NetBSD/mtree\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1168
+msgid ""
+"`--follow-tags` tells `git push` to also push tags associated with the "
+"locally committed revision."
+msgstr ""
+"`--follow-tags` указывает `git push` также отправлять теги, связанные с "
+"локально зафиксированной ревизией."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1169
+#, no-wrap
+msgid "Updating the FreeBSD source tree"
+msgstr "Обновление дерева исходных кодов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1173
+msgid ""
+"Now you need to update the mtree in FreeBSD. The sources live in `contrib/"
+"mtree` since it is upstream software."
+msgstr ""
+"Теперь вам нужно обновить mtree в FreeBSD. Исходные коды находятся в "
+"`contrib/mtree`, так как это программное обеспечение из внешних источников."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1179
+msgid ""
+"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."
+msgstr ""
+"Время от времени нам может потребоваться вносить изменения в предоставленный "
+"(contrib) код, чтобы лучше соответствовать потребностям FreeBSD. По "
+"возможности, пожалуйста, старайтесь передавать локальные изменения обратно в "
+"вышестоящие проекты — это помогает им лучше поддерживать FreeBSD, а также "
+"экономит ваше время при разрешении конфликтов в будущем при импорте "
+"обновлений."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1184
+#, no-wrap
+msgid ""
+"% cd ../src\n"
+"% git subtree merge -P contrib/mtree vendor/NetBSD/mtree\n"
+msgstr ""
+"% cd ../src\n"
+"% git subtree merge -P contrib/mtree vendor/NetBSD/mtree\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1194
+msgid ""
+"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."
+msgstr ""
+"Это создаст коммит слияния поддерева `contrib/mtree` с локальной веткой "
+"`vendor/NetBSD/mtree`. Изучите разницу (diff) между результатом слияния и "
+"содержимым вышестоящей ветки. Если слияние сократило наши локальные "
+"изменения до более тривиальных различий, таких как изменения пустых строк "
+"или отступов, попробуйте исправить локальные изменения, чтобы уменьшить "
+"разницу с вышестоящей версией, или попытайтесь внести оставшиеся изменения "
+"обратно в вышестоящий проект. Если возникли конфликты, вам потребуется "
+"устранить их перед коммитом. Включите подробности об объединяемых изменениях "
+"в сообщение коммита слияния."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1208
+msgid ""
+"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."
+msgstr ""
+"Некоторое открытое программное обеспечение включает скрипт `configure`, "
+"который генерирует файлы, используемые для определения процесса сборки кода; "
+"обычно эти сгенерированные файлы, такие как `config.h`, должны обновляться "
+"как часть процесса импорта. При выполнении этого всегда помните, что эти "
+"скрипты являются исполняемым кодом, работающим под учётными данными текущего "
+"пользователя. Этот процесс всегда должен запускаться в изолированной среде, "
+"в идеале внутри клетки, не имеющей сетевого доступа, и с непривилегированной "
+"учётной записью; или, как минимум, с выделенной учётной записью, отличной от "
+"той, которую вы обычно используете для повседневных задач или для отправки "
+"изменений в репозиторий исходного кода FreeBSD. Это минимизирует риск "
+"столкновения с ошибками, которые могут привести к потере данных или, в "
+"худших случаях, к выполнению злонамеренно внедрённого кода. Использование "
+"изолированной клетки также предотвращает обнаружение скриптами configure "
+"локально установленных пакетов программного обеспечения, что может привести "
+"к неожиданным результатам."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1215
+msgid ""
+"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."
+msgstr ""
+"При тестировании ваших изменений запускайте их сначала в chroot или в "
+"клетке, или даже внутри виртуальной машины, особенно для модификаций ядра "
+"или библиотек. Этот подход помогает предотвратить неблагоприятное "
+"взаимодействие с вашей рабочей средой. Это может быть особенно полезно для "
+"изменений в библиотеках, которые используют многие компоненты базовой "
+"системы среди прочего."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1216
+#, no-wrap
+msgid "Rebasing your change against latest FreeBSD source tree"
+msgstr "Перебазирование ваших изменений относительно последней версии исходного дерева FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1219
+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 ""
+"Поскольку текущая политика рекомендует избегать слияний (merge), то, если "
+"вышестоящая ветка FreeBSD `main` продвинулась вперёд до того, как у вас "
+"появится возможность отправить изменения, вам придётся переделывать слияние."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1222
+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 ""
+"Обычный `git rebase` или `git pull --rebase` не умеет перемещать коммит "
+"слияния **как коммит слияния**, поэтому вместо этого вам придётся воссоздать "
+"коммит."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1224
+msgid ""
+"The following steps should be taken to easily recreate the merge commit as "
+"if `git rebase --merge-commits` worked properly:"
+msgstr ""
+"Следующие шаги следует выполнить, чтобы легко воссоздать коммит слияния, как "
+"если бы `git rebase --merge-commits` сработал правильно:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1226
+msgid "cd to the top of the repo"
+msgstr "Перейдите в корень репозитория"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1227
+msgid "Create a side branch `XXX` with the **contents** of the merged tree."
+msgstr "Создайте побочную ветвь `XXX` с **содержимым** дерева со слиянием."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1228
+msgid ""
+"Update this side branch `XXX` to be merged and up-to-date with FreeBSD's "
+"`main` branch."
+msgstr ""
+"Обновите эту побочную ветку `XXX` для слияния и актуализации с основной "
+"веткой FreeBSD `main`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1229
+msgid ""
+"In the worst case scenario, you would still have to resolve merge conflicts, "
+"if there was any, but this should be really rare."
+msgstr ""
+"В худшем случае вам всё равно придётся разрешать конфликты слияния, если они "
+"были, но это должно быть крайне редко."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1230
+msgid ""
+"Resolve conflicts, and collapse multiple commits down to 1 if need be "
+"(without conflicts, there's no collapse needed)"
+msgstr ""
+"Разрешите конфликты и, если необходимо, объедините (collapse) несколько "
+"коммитов в один (без конфликтов объединение не требуется)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1231
+msgid "checkout `main`"
+msgstr "извлеките (checkout) ветку `main`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1232
+msgid "create a branch `YYY` (allows for easier unwinding if things go wrong)"
+msgstr ""
+"создайте ветку `YYY` (позволяет проще откатиться, если что-то пойдет не так)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1233
+msgid "Re-do the subtree merge"
+msgstr "Повторите слияние поддерева"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1234
+msgid ""
+"Instead of resolving any conflicts from the subtree merge, checkout the "
+"contents of XXX on top of it."
+msgstr ""
+"Вместо разрешения конфликтов от слияния поддерева, извлеките (checkout) "
+"содержимое XXX поверх него."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1235
+msgid ""
+"The trailing `.` is important, as is being at the top level of the repo."
+msgstr "Завершающая `.` важна, как и нахождение на верхнем уровне репозитория."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1236
+msgid ""
+"Rather than switching branches to XXX, it splats the contents of XXX on top "
+"of the repo"
+msgstr ""
+"Вместо переключения веток на XXX, он накладывает содержимое XXX поверх "
+"репозитория"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1237
+msgid ""
+"Commit the results with the prior commit message (the example assumes "
+"there's only one merge on the XXX branch)."
+msgstr ""
+"Сделайте коммит полученному результату с предыдущим сообщением коммита "
+"(пример предполагает, что в ветке XXX была только одна операция слияния)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1238
+msgid "Make sure the branches are the same."
+msgstr "Убедитесь, что ветки одинаковые."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1239
+msgid ""
+"Do whatever review you need, including having others check it out if you "
+"think that's needed."
+msgstr ""
+"Сделайте любые необходимые проверки, включая привлечение других людей для "
+"проверки, если вы считаете, что это необходимо."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1240
+msgid ""
+"Push the commit, if you 'lost the race' again, just redo these steps again "
+"(see below for a recipe)"
+msgstr ""
+"Запишите (push) этот коммит. Если вы «снова проиграли в гонке», просто "
+"повторите эти шаги (см. рецепт ниже)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1241
+msgid "Delete the branches once the commit is upstream. They are throw-a-way."
+msgstr ""
+"Удалите ветки после того, как коммит попадёт в вышестоящий репозиторий. Они "
+"одноразовые."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1243
+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):"
+msgstr ""
+"Команды, которые можно использовать, следуя приведённому выше примеру с "
+"mtree, будут выглядеть следующим образом (символ `#` начинает комментарий, "
+"помогающий связать команды с описаниями выше):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1256
+#, 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# 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"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1259
+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:"
+msgstr ""
+"Примечание: если что-то пойдет не так с коммитом, вы можете сбросить ветку "
+"`YYY`, повторно выполнив команду checkout, которая создала её, с флагом -B, "
+"чтобы начать заново:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1262
+#, no-wrap
+msgid "% git checkout -B YYY freebsd/main # Create new throw-away YYY branch if starting over is just going to be easier\n"
+msgstr "% git checkout -B YYY freebsd/main # Создать новую временную ветку YYY, если начать заново будет проще\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1264
+#, no-wrap
+msgid "Pushing the changes"
+msgstr "Отправка (push) изменений"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1269
+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 ""
+"Когда вы считаете, что у вас есть набор изменений, и они хорошие, вы можете "
+"отправить их в форк на GitHub или GitLab для просмотра и рецензирования "
+"другими. Одна из хороших особенностей Git заключается в том, что он "
+"позволяет публиковать черновые версии вашей работы для проверки другими. "
+"Хотя Phabricator хорош для проверки содержания, публикация обновленной ветки "
+"вендора и коммитов слияния позволяет другим проверить детали, которые в "
+"конечном итоге появятся в репозитории."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1271
+msgid ""
+"After review, when you are sure it is a good change, you can push it to the "
+"FreeBSD repo:"
+msgstr ""
+"После проверки, когда вы уверены, что это хорошее изменение, вы можете "
+"отправить (push) его в репозиторий FreeBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1277
+#, no-wrap
+msgid ""
+"% git push freebsd YYY:main\t# put the commit on upstream's 'main' branch\n"
+"% git branch -D XXX\t\t# Throw away the throw-a-way branches.\n"
+"% git branch -D YYY\n"
+msgstr ""
+"% git push freebsd YYY:main\t# put the commit on upstream's 'main' branch\n"
+"% git branch -D XXX\t\t# Throw away the throw-a-way branches.\n"
+"% git branch -D YYY\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1284
+msgid ""
+"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."
+msgstr ""
+"Примечание: Я использовал `XXX` и `YYY`, чтобы было очевидно, что это "
+"ужасные имена, и они не должны покидать вашу машину. Если вы используете "
+"такие имена для другой работы, вам нужно будет выбрать другие имена или "
+"рискнуть потерять другую работу. В этих именах нет ничего волшебного. В "
+"вышестоящий репозиторий вам не разрешат их отправить, но, тем не менее, "
+"обратите внимание на точные команды выше. Некоторые команды используют "
+"синтаксис, который лишь незначительно отличается от типичного использования, "
+"и это различие в поведении критически важно для работы данного рецепта."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1285
+#, no-wrap
+msgid "How to redo things if need be"
+msgstr "Как переделать вещи, если это необходимо"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1289
+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 ""
+"Если вы попытались выполнить отправку из предыдущего раздела и она "
+"завершилась неудачей, то вам следует выполнить следующие действия для "
+"«повторного выполнения» операций. Эта последовательность сохраняет коммит с "
+"сообщением о коммите всегда на позиции XXX~1 для упрощения коммита."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1298
+#, no-wrap
+msgid ""
+"% git checkout -B XXX YYY\t# recreate that throw-away-branch XXX and switch to it\n"
+"% git merge freebsd/main\t# Merge the changes and resolve conflicts\n"
+"% git checkout -B YYY freebsd/main # Recreate 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"
+msgstr ""
+"% git checkout -B XXX YYY\t# recreate that throw-away-branch XXX and switch to it\n"
+"% git merge freebsd/main\t# Merge the changes and resolve conflicts\n"
+"% git checkout -B YYY freebsd/main # Recreate 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"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1301
+msgid "Then go check it out as above and push as above when ready."
+msgstr ""
+"Затем проверьте, как описано выше, и отправьте (push), как описано выше, "
+"когда будет готово."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1302
+#, no-wrap
+msgid "Creating a new vendor branch"
+msgstr "Создание новой ветки вендора"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1309
+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 ""
+"Существует несколько способов создания новой ветки вендора. Рекомендуемый "
+"способ — создать новый репозиторий и затем сделать его слияние с FreeBSD. "
+"Например, производится импорт `glorbnitz` версии 3.1415 в дерево FreeBSD. "
+"Для простоты мы не будем обрезать этот релиз. Это простая пользовательская "
+"команда, которая переводит устройство nitz в различные магические состояния "
+"glorb, и она достаточно мала, так что обрезка не сэкономит много."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1310
+#, no-wrap
+msgid "Create the repo"
+msgstr "Создайте репозиторий"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1319
+#, no-wrap
+msgid ""
+"% cd /some/where\n"
+"% mkdir glorbnitz\n"
+"% cd glorbnitz\n"
+"% git init\n"
+"% git checkout -b vendor/glorbnitz\n"
+msgstr ""
+"% cd /some/where\n"
+"% mkdir glorbnitz\n"
+"% cd glorbnitz\n"
+"% git init\n"
+"% git checkout -b vendor/glorbnitz\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1322
+msgid ""
+"At this point, you have a new repo, where all new commits will go on the "
+"`vendor/glorbnitz` branch."
+msgstr ""
+"На этом этапе у вас есть новый репозиторий, в котором все новые коммиты "
+"будут направляться в ветку `vendor/glorbnitz`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1324
+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."
+msgstr ""
+"Опытные пользователи Git также могут сделать это непосредственно в своей "
+"копии FreeBSD, используя `git checkout --orphan vendor/glorbnitz`, если им "
+"так удобнее."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1325
+#, no-wrap
+msgid "Copy the sources in"
+msgstr "Скопируйте себе исходники"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1329
+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 ""
+"Поскольку это новая импортированная копия, вы можете просто скопировать "
+"файлы исходного кода командой cp, либо использовать tar или даже rsync, как "
+"показано выше. И мы добавим всё, предполагая отсутствие файлов с точкой в "
+"начале имени."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1334
+#, no-wrap
+msgid ""
+"% cp -r ~/glorbnitz/* .\n"
+"% git add *\n"
+msgstr ""
+"% cp -r ~/glorbnitz/* . \n"
+"% git add *\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1337
+msgid ""
+"At this point, you should have a pristine copy of glorbnitz ready to commit."
+msgstr ""
+"На этом этапе у вас должна быть чистая копия glorbnitz, готовая к коммиту."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1341
+#, no-wrap
+msgid "% git commit -m \"Import GlorbNitz frobnosticator revision 3.1415\"\n"
+msgstr "% git commit -m \"Import GlorbNitz frobnosticator revision 3.1415\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1346
+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. "
+"Not everybody will know so, for your actual commit, you should follow the "
+"crossref:committers-guide[commit-log-message,commit log message] section "
+"instead of emulating the brief style used here."
+msgstr ""
+"Как и выше, я использовал `-m` для простоты, но вам, вероятно, следует "
+"создать сообщение коммита, которое объясняет, что такое Glorb и почему для "
+"его получения используется Nitz. Не все это знают, поэтому для вашего "
+"реального коммита вам следует руководствоваться разделом crossref:committers-"
+"guide[commit-log-message,сообщение коммита], а не имитировать краткий стиль, "
+"использованный здесь."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1347
+#, no-wrap
+msgid "Now import it into our repository"
+msgstr "Теперь импортируйте его в наш репозиторий"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1350
+msgid "Now you need to import the branch into our repository."
+msgstr "Теперь необходимо импортировать ветку в наш репозиторий."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1356
+#, no-wrap
+msgid ""
+"% cd /path/to/freebsd/repo/src\n"
+"% git remote add glorbnitz /some/where/glorbnitz\n"
+"% git fetch glorbnitz vendor/glorbnitz\n"
+msgstr ""
+"% cd /path/to/freebsd/repo/src\n"
+"% git remote add glorbnitz /some/where/glorbnitz\n"
+"% git fetch glorbnitz vendor/glorbnitz\n"
+
+#. perhaps the real treasure was the friends it made along the way...
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1360
+msgid ""
+"Note the vendor/glorbnitz branch is in the repo. At this point the `/some/"
+"where/glorbnitz` can be deleted, if you like. It was only a means to an end."
+msgstr ""
+"Обратите внимание, что ветка vendor/glorbnitz находится в репозитории. На "
+"этом этапе `/some/where/glorbnitz` можно удалить, если хотите. Это было лишь "
+"промежуточным шагом для достижения цели."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1362
+#, no-wrap
+msgid "Tag and push"
+msgstr "Сделайте тег и отправьте (push)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1365
+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: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1373
+#, no-wrap
+msgid ""
+"% git worktree add ../glorbnitz vendor/glorbnitz\n"
+"% cd ../glorbnitz\n"
+"% git tag --annotate vendor/glorbnitz/3.1415\n"
+"# Make sure the commit is good with \"git show\"\n"
+"% git push --follow-tags freebsd vendor/glorbnitz\n"
+msgstr ""
+"% git worktree add ../glorbnitz vendor/glorbnitz\n"
+"% cd ../glorbnitz\n"
+"% git tag --annotate vendor/glorbnitz/3.1415\n"
+"# Убедитесь, что коммит хороший, с помощью \"git show\"\n"
+"% git push --follow-tags freebsd vendor/glorbnitz\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1376
+msgid "By 'good' we mean:"
+msgstr "Под «хорошим» мы подразумеваем:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1378
+msgid "All the right files are present"
+msgstr "Все необходимые файлы присутствуют"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1379
+msgid "None of the wrong files are present"
+msgstr "Ни один из неправильных файлов не присутствует"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1380
+msgid "The vendor branch points at something sensible"
+msgstr "Ветка вендора указывает на что-то разумное"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1381
+msgid "The tag looks good, and is annotated"
+msgstr "Тег выглядит хорошо и имеет аннотацию"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1382
+msgid ""
+"The commit message for the tag has a quick summary of what's new since the "
+"last tag"
+msgstr ""
+"Сообщение коммита для тега содержит краткую сводку о нововведениях с момента "
+"предыдущего тега"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1383
+#, no-wrap
+msgid "Time to finally merge it into the base tree"
+msgstr "Время наконец сделать слияние этого в базовое дерево"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1392
+#, 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"
+"# Убедитесь, что коммит хороший, с помощью \"git show\"\n"
+"% git commit --amend # one last sanity check on commit message\n"
+"% git push freebsd\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1395
+msgid "Here 'good' means:"
+msgstr "Здесь «хороший» означает:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1397
+msgid ""
+"All the right files, and none of the wrong ones, were merged into contrib/"
+"glorbnitz."
+msgstr ""
+"Все правильные файлы и ни одного неправильного были объединены слиянием в "
+"contrib/glorbnitz."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1398
+msgid "No other changes are in the tree."
+msgstr "В дереве нет других изменений."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1399
+msgid ""
+"The commit messages look crossref:committers-guide[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."
+msgstr ""
+"Сообщения коммитов должны выглядеть crossref:committers-guide[commit-log-"
+"message,хорошо]. Они должны содержать сводку изменений с момента последнего "
+"слияния с основной веткой FreeBSD `main` и любые предостережения."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1400
+msgid ""
+"UPDATING should be updated if there is anything of note, such as user "
+"visible changes, important upgrade concerns, etc."
+msgstr ""
+"UPDATING должен быть обновлен, если есть что-то важное, например, заметные "
+"пользователям изменения, важные аспекты обновления и т.д."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1405
+msgid ""
+"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."
+msgstr ""
+"Это еще не подключило `glorbnitz` к сборке. Способ сделать это зависит от "
+"конкретного импортируемого программного обеспечения и выходит за рамки "
+"данного руководства."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1407
+#, no-wrap
+msgid "Keeping current"
+msgstr "Сохраняя актуальность"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1413
+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 ""
+"Итак, время идёт. Пришло время обновить дерево до последних изменений из "
+"вышестоящего репозитория. При переходе на ветку `main` (при checkout) "
+"убедитесь, что у вас нет незакоммиченных изменений. Намного проще "
+"закоммитить их в отдельную ветку (или использовать `git stash`) перед "
+"выполнением следующих действий."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1416
+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 ""
+"Если вы привыкли к `git pull`, мы настоятельно рекомендуем использовать "
+"опцию `--ff-only` и дополнительно установить её в качестве опции по "
+"умолчанию. В качестве альтернативы, `git pull --rebase` полезен, если у вас "
+"есть изменения, проиндексированные (stage) в ветке `main`."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1420
+#, no-wrap
+msgid "% git config --global pull.ff only\n"
+msgstr "% git config --global pull.ff only\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1423
+msgid ""
+"You may need to omit the --global if you want this setting to apply to only "
+"this repository."
+msgstr ""
+"Возможно, вам потребуется опустить --global, если вы хотите, чтобы эта "
+"настройка применялась только к этому репозиторию."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1429
+#, no-wrap
+msgid ""
+"% cd freebsd-src\n"
+"% git checkout main\n"
+"% git pull (--ff-only|--rebase)\n"
+msgstr ""
+"% cd freebsd-src\n"
+"% git checkout main\n"
+"% git pull (--ff-only|--rebase)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1433
+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. This can be harder to recover from."
+msgstr ""
+"Существует распространённая ловушка: команда `git pull` попытается выполнить "
+"слияние, что иногда создаёт коммит слияния, которого ранее не существовало. "
+"Восстановление после этого может быть затруднительно."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1435
+msgid "The longer form is also recommended."
+msgstr "Рекомендуется также использовать расширенную форму."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1442
+#, no-wrap
+msgid ""
+"% cd freebsd-src\n"
+"% git checkout main\n"
+"% git fetch freebsd\n"
+"% git merge --ff-only freebsd/main\n"
+msgstr ""
+"% cd freebsd-src\n"
+"% git checkout main\n"
+"% git fetch freebsd\n"
+"% git merge --ff-only freebsd/main\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1447
+msgid ""
+"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:"
+msgstr ""
+"Эти команды сбрасывают ваше дерево к ветке `main`, а затем обновляют его из "
+"исходного источника, откуда дерево было первоначально получено (pull). Важно "
+"переключиться на `main` перед выполнением этого, чтобы обеспечить "
+"продвижение вперёд. Теперь пришло время продвинуть изменения вперёд:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1451
+#, no-wrap
+msgid "% git rebase -i main working\n"
+msgstr "% git rebase -i main working\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1458
+msgid ""
+"This will bring up an interactive screen to change the defaults. For now, "
+"just exit the editor. Everything should just apply. If not, then you'll "
+"need to resolve the diffs. 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."
+msgstr ""
+"Это вызовет интерактивный экран для изменения настроек по умолчанию. Пока "
+"просто выйдите из редактора. Всё должно примениться автоматически. Если нет, "
+"то вам потребуется разрешить различия. https://docs.github.com/en/free-pro-"
+"team@latest/github/using-git/resolving-merge-conflicts-after-a-git-"
+"rebase[Документация GitHub] может помочь вам в этом процессе."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1460
+#, no-wrap
+msgid "Time to push changes upstream"
+msgstr "Время отправить (push) изменения вверх (upstream)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1463
+msgid ""
+"First, ensure that the push URL is properly configured for the upstream "
+"repository."
+msgstr ""
+"Сначала убедитесь, что URL для отправки (push) правильно настроен для "
+"вышестоящего репозитория."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1467
+#, no-wrap
+msgid "% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git\n"
+msgstr "% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1471
+msgid ""
+"Then, verify that user name and email are configured right. We require that "
+"they exactly match the passwd entry in FreeBSD cluster."
+msgstr ""
+"Затем убедитесь, что имя пользователя и адрес электронной почты настроены "
+"правильно. Требуется, чтобы они точно соответствовали записи passwd в "
+"кластере FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1473
+msgid "Use"
+msgstr "Используйте"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1477
+#, no-wrap
+msgid "freefall% gen-gitconfig.sh\n"
+msgstr "freefall% gen-gitconfig.sh\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1480
+msgid ""
+"on freefall.freebsd.org to get a recipe that you can use directly, assuming /"
+"usr/local/bin is in the PATH."
+msgstr ""
+"на freefall.freebsd.org (при условии, что /usr/local/bin находится в PATH), "
+"чтобы получить готовый шаблон конфигурации, который можно использовать "
+"напрямую."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1485
+msgid ""
+"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. You will "
+"only be able to do this if this results in a linear change to `main` (e.g. "
+"no merges)."
+msgstr ""
+"Следующая команда делает слияние ветки `working` в основную ветку `main` "
+"вышестоящего репозитория. Важно, чтобы вы подготовили свои изменения именно "
+"так, как хотите видеть их в исходном репозитории FreeBSD, перед выполнением "
+"этой операции. Данный синтаксис отправляет (push) ветку `working` в `main`, "
+"перемещая ветку `main` вперед. Вы сможете сделать это только в том случае, "
+"если результатом будет линейное изменение для `main` (т.е. без слияний)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1489
+#, no-wrap
+msgid "% git push freebsd working:main\n"
+msgstr "% git push freebsd working:main\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1492
+msgid ""
+"If your push is rejected due to losing a commit race, rebase your branch "
+"before trying again:"
+msgstr ""
+"Если ваша отправка (push) отклонена из-за проигрыша в гонке коммитов, "
+"перебазируйте вашу ветку перед повторной попыткой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1499
+#, no-wrap
+msgid ""
+"% git checkout working\n"
+"% git fetch freebsd\n"
+"% git rebase freebsd/main\n"
+"% git push freebsd working:main\n"
+msgstr ""
+"% git checkout working\n"
+"% git fetch freebsd\n"
+"% git rebase freebsd/main\n"
+"% git push freebsd working:main\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1502
+#, no-wrap
+msgid "Time to push changes upstream (alternative)"
+msgstr "Время отправить (push) изменения вверх (альтернативный вариант)"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1507
+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:"
+msgstr ""
+"Некоторым удобнее делать слияние своих изменений в локальную ветку `main` "
+"перед отправкой в удалённый репозиторий. Кроме того, `git arc stage` "
+"перемещает изменения из ветки в локальную `main`, когда требуется выполнить "
+"только часть изменений из ветки. Инструкции схожи с предыдущим разделом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1512
+#, no-wrap
+msgid ""
+"% git checkout main\n"
+"% git merge --ff-only `working`\n"
+"% git push freebsd\n"
+msgstr ""
+"% git checkout main\n"
+"% git merge --ff-only `working`\n"
+"% git push freebsd\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1515
+msgid "If you lose the race, then try again with"
+msgstr "Если вы проиграли гонку, попробуйте снова с"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1519
+#, no-wrap
+msgid ""
+"% git pull --rebase\n"
+"% git push freebsd\n"
+msgstr ""
+"% git pull --rebase \n"
+"% git push freebsd\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1522
+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. Note: merging vendor branch commits will not work with "
+"this technique."
+msgstr ""
+"Эти команды получат (fetch) последние изменения из `freebsd/main`, а затем "
+"перебазируют (rebase) локальные изменения `main` поверх них, что и "
+"требуется, когда вы проиграли гонку коммитов. Примечание: коммиты слияния "
+"ветки вендоров не будет работать с этой техникой."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1523
+#, no-wrap
+msgid "Finding the Subversion Revision"
+msgstr "Поиск ревизии Subversion"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1527
+msgid ""
+"You'll need to make sure that you've fetched the notes (see the "
+"crossref:committers-guide[git-mini-daily-use, Daily use]for details). Once "
+"you have these, notes will show up in the git log command like so:"
+msgstr ""
+"Вам нужно убедиться, что вы получили (fetch) примечания (подробности "
+"смотрите в разделе crossref:committers-guide[git-mini-daily-use, Ежедневное "
+"использование]). Как только вы это сделаете, примечания будут отображаться в "
+"команде git log следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1531
+#, no-wrap
+msgid "% git log\n"
+msgstr "% git log\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1534
+msgid "If you have a specific version in mind, you can use this construct:"
+msgstr ""
+"Если у вас есть конкретная версия, вы можете использовать эту конструкцию:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1538
+#, no-wrap
+msgid "% git log --grep revision=XXXX\n"
+msgstr "% git log --grep revision=XXXX\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1542
+msgid ""
+"to find the specific revision. The hex number after 'commit' is the hash "
+"you can use to refer to this commit."
+msgstr ""
+"чтобы найти конкретную ревизию. Шестнадцатеричное число после 'commit' — это "
+"хэш, который можно использовать для ссылки на этот коммит."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1544
+#, no-wrap
+msgid "Git FAQ"
+msgstr "Часто задаваемые вопросы о Git"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1547
+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:1552
+msgid ""
+"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 ""
+"Мы используем общепринятое соглашение, согласно которому источником для "
+"репозитория FreeBSD является 'freebsd', а не стандартный 'origin', чтобы "
+"позволить людям использовать его для собственной разработки и минимизировать "
+"случайные отправки (push) в неправильный репозиторий."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1554
+#, no-wrap
+msgid "Users"
+msgstr "Пользователи"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1556
+#, no-wrap
+msgid "How do I track -current and -stable with only one copy of the repository?"
+msgstr "Как отслеживать -current и -stable, имея только одну копию репозитория?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1561
+#, fuzzy
+#| 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"
+msgid ""
+"**Q:** Although disk space is not a huge issue, it's more efficient to use "
+"only one copy of the repository. With SVN mirroring, I could checkout "
+"multiple trees from the same repository. How do I do this with Git?"
+msgstr ""
+"**В:** Хотя место на диске не является большой проблемой, эффективнее "
+"использовать только одну копию репозитория.\n"
+"При зеркалировании SVN я мог извлекать несколько деревьев из одного и того "
+"же репозитория.\n"
+"Как мне сделать это с помощью Git?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1565
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** You can use Git worktrees. 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. While using a 'bare repository' has been put forward "
+"as a way to cope, it's more complicated and will not be documented here."
+msgstr ""
+"**О:** Вы можете использовать рабочие деревья Git.\n"
+"Существует несколько способов сделать это, но самый простой — использовать "
+"клон для отслеживания -current и рабочее дерево для отслеживания стабильных "
+"выпусков.\n"
+"Хотя использование «голого (bare) репозитория» предлагалось как способ "
+"справиться с этим, это более сложно и здесь документироваться не будет.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1568
+msgid ""
+"First, you need to clone the FreeBSD repository, shown here cloning into "
+"`freebsd-current` to reduce confusion. $URL is whatever mirror works best "
+"for you:"
+msgstr ""
+"Сначала необходимо клонировать репозиторий FreeBSD, здесь показано "
+"клонирование в `freebsd-current` для избежания путаницы. `$URL` — это любой "
+"зеркальный сервер, который работает для вас наилучшим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1572
+#, no-wrap
+msgid "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' $URL freebsd-current\n"
+msgstr "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' $URL freebsd-current\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1575
+msgid "then once that's cloned, you can simply create a worktree from it:"
+msgstr ""
+"после того, как он будет клонирован, вы можете просто создать рабочее дерево "
+"из него:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1580
+#, no-wrap
+msgid ""
+"% cd freebsd-current\n"
+"% git worktree add ../freebsd-stable-12 stable/12\n"
+msgstr ""
+"% cd freebsd-current\n"
+"% git worktree add ../freebsd-stable-12 stable/12\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1584
+msgid ""
+"this will checkout `stable/12` into a directory named `freebsd-stable-12` "
+"that's a peer to the `freebsd-current` directory. Once created, it's "
+"updated very similarly to how you might expect:"
+msgstr ""
+"это извлечёт `stable/12` в каталог с именем `freebsd-stable-12`, который "
+"находится на одном уровне с каталогом `freebsd-current`. После создания он "
+"обновляется очень похожим образом, как вы могли бы ожидать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1594
+#, no-wrap
+msgid ""
+"% cd freebsd-current\n"
+"% git checkout main\n"
+"% git pull --ff-only\n"
+"# changes from upstream now local and current tree updated\n"
+"% cd ../freebsd-stable-12\n"
+"% git merge --ff-only freebsd/stable/12\n"
+"# now your stable/12 is up to date too\n"
+msgstr ""
+"% cd freebsd-current\n"
+"% git checkout main\n"
+"% git pull --ff-only\n"
+"# changes from upstream now local and current tree updated\n"
+"% cd ../freebsd-stable-12\n"
+"% git merge --ff-only freebsd/stable/12\n"
+"# now your stable/12 is up to date too\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1597
+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."
+msgstr ""
+"Я рекомендую использовать `--ff-only`, так как это безопаснее и позволяет "
+"избежать случайного попадания в 'кошмар слияния', когда в вашем дереве "
+"появляются дополнительные изменения, вынуждающие выполнять сложное слияние "
+"вместо простого."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1599
+msgid ""
+"Here's https://adventurist.me/posts/00296[a good writeup] that goes into "
+"more detail."
+msgstr ""
+"Вот https://adventurist.me/posts/00296[хорошая статья], в которой "
+"рассматривается этот вопрос более подробно."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1600
+#, no-wrap
+msgid "Developers"
+msgstr "Разработчики"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1602
+#, no-wrap
+msgid "Ooops! I committed to `main`, instead of another branch."
+msgstr "Ой! Я закоммитил в `main` вместо другой ветки."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1605
+#, fuzzy
+#| msgid ""
+#| "**Q:** From time to time, I goof up and mistakenly commit to the `main` "
+#| "branch. What do I do?\n"
+msgid ""
+"**Q:** From time to time, I goof up and mistakenly commit to the `main` "
+"branch. What do I do?"
+msgstr ""
+"**В:** Время от времени я ошибаюсь и по ошибке делаю коммит в ветку `main`. "
+"Что мне делать?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1607
+#, fuzzy
+#| msgid "**A:** First, don't panic.\n"
+msgid "**A:** First, don't panic."
+msgstr "**О:** Во-первых, не паникуйте.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1611
+msgid ""
+"Second, don't push. In fact, you can fix almost anything if you haven't "
+"pushed. All the answers in this section assume no push has happened."
+msgstr ""
+"Во-вторых, не отправляйте (push) изменения. На самом деле, можно исправить "
+"почти всё, если изменения не были отправлены. Все ответы в этом разделе "
+"предполагают, что отправки не произошло."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1613
+msgid ""
+"The following answer assumes you committed to `main` and want to create a "
+"branch called `issue`:"
+msgstr ""
+"Следующий ответ предполагает, что вы закоммитили в `main` и хотите создать "
+"ветку с названием `issue`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1619
+#, no-wrap
+msgid ""
+"% git checkout -b issue # Create the 'issue' branch\n"
+"% git checkout -B main freebsd/main # Reset main to upstream\n"
+"% git checkout issue # Back to where you were\n"
+msgstr ""
+"% git checkout -b issue # Create the 'issue' branch\n"
+"% git checkout -B main freebsd/main # Reset main to upstream\n"
+"% git checkout issue # Back to where you were\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1621
+#, no-wrap
+msgid "Ooops! I committed something to the wrong branch!"
+msgstr "Ой! Я закоммитил что-то не в ту ветку!"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1625
+#, fuzzy
+#| 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"
+msgid ""
+"**Q:** I was working on feature on the `wilma` branch, but accidentally "
+"committed a change relevant to the `fred` branch in 'wilma'. What do I do?"
+msgstr ""
+"**В:** Я работал над функцией в ветке `wilma`, но случайно сделал коммит "
+"изменению, относящемуся к ветке `fred`, в 'wilma'.\n"
+"Что мне делать?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1629
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** The answer is similar to the previous one, but with cherry picking. "
+"This assumes there's only one commit on wilma, but will generalize to more "
+"complicated situations. 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."
+msgstr ""
+"**О:** Ответ аналогичен предыдущему, но с использованием выборочного "
+"применением коммитов (cherry-pick).\n"
+"Предполагается, что в ветке wilma имеется всего один коммит, однако подход "
+"можно обобщить и для более сложных ситуаций.\n"
+"Также предполагается, что это последний коммит в ветке wilma (отсюда "
+"использование wilma в команде `git cherry-pick`), но и это можно обобщить.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1637
+#, no-wrap
+msgid ""
+"# We're on branch wilma\n"
+"% git checkout fred\t\t# move to fred branch\n"
+"% git cherry-pick wilma\t\t# copy the misplaced commit\n"
+"% git checkout wilma\t\t# go back to wilma branch\n"
+"% git reset --hard HEAD^\t# move what wilma refers to back 1 commit\n"
+msgstr ""
+"# We're on branch wilma\n"
+"% git checkout fred\t\t# move to fred branch\n"
+"% git cherry-pick wilma\t\t# copy the misplaced commit\n"
+"% git checkout wilma\t\t# go back to wilma branch\n"
+"% git reset --hard HEAD^\t# move what wilma refers to back 1 commit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1640
+msgid ""
+"If it is not the last commit, you can cherry-pick that one change from wilma "
+"onto fred, then use `git rebase -i` to remove the change from wilma."
+msgstr ""
+"Если это не последний коммит, вы можете выборочно применить (cherry-pick) "
+"это одно изменение из wilma к fred, затем использовать `git rebase -i`, "
+"чтобы удалить изменение из wilma."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1647
+#, no-wrap
+msgid ""
+"# We're on branch wilma\n"
+"% git checkout fred\t\t\t# move to fred branch\n"
+"% git cherry-pick HASH_OF_CHANGE\t# copy the misplaced commit\n"
+"% git rebase -i main wilma\t\t# drop the cherry-picked change\n"
+msgstr ""
+"# Мы находимся на ветке wilma\n"
+"% git checkout fred\t\t\t# перейти на ветку fred\n"
+"% git cherry-pick HASH_OF_CHANGE\t# скопировать ошибочно размещённый коммит\n"
+"% git rebase -i main wilma\t\t# удалить скопированное изменение\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1650
+#, fuzzy
+#| msgid ""
+#| "**Q:** But what if I want to commit a few changes to `main`, but keep the "
+#| "rest in `wilma` for some reason?\n"
+msgid ""
+"**Q:** But what if I want to commit a few changes to `main`, but keep the "
+"rest in `wilma` for some reason?"
+msgstr ""
+"**В:** Но что, если я хочу сделать коммит нескольким изменениям в `main`, но "
+"оставить остальные в `wilma` по какой-то причине?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1656
+#, fuzzy
+#| 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"
+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). 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!"
+msgstr ""
+"**О:** Тот же метод, описанный выше, также работает, если вы хотите "
+"«приземлить» части ветки, над которой работаете, в `main` до того, как вся "
+"ветка будет готова (скажем, вы заметили несвязанную опечатку или исправили "
+"случайную ошибку).\n"
+"Вы можете выборочно применить (cherry-pick) эти изменения в `main`, а затем "
+"отправить их в родительский репозиторий.\n"
+"После того, как вы это сделаете, очистка не может быть проще: просто "
+"выполните `git rebase -i`.\n"
+"Git заметит, что вы это сделали, и автоматически пропустит общие изменения "
+"(даже если вам пришлось изменить сообщение коммита или слегка "
+"подкорректировать коммит).\n"
+"Нет необходимости переключаться обратно на wilma, чтобы её поправить: просто "
+"делайте rebase!\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1658
+#, fuzzy
+#| msgid ""
+#| "**Q:** I want to split off some changes from branch `wilma` into branch "
+#| "`fred`\n"
+msgid ""
+"**Q:** I want to split off some changes from branch `wilma` into branch "
+"`fred`"
+msgstr ""
+"**В:** Я хочу выделить некоторые изменения из ветки `wilma` в ветку `fred`\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1664
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** The more general answer would be the same as the previous. 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. `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`. If all goes well, and there are no conflicts, you're done. If not, "
+"you'll need to resolve the conflicts as you go."
+msgstr ""
+"**О:** Более общий ответ будет таким же, как и предыдущий.\n"
+"Вы должны выгрузить(checkout)/создать ветку `fred`, выборочно применить "
+"(cherry-pick) нужные изменения из ветки `wilma` по одному, а затем "
+"перебазировать (rebase) `wilma`, чтобы удалить те изменения, которые вы "
+"выборочно применили.\n"
+"`git rebase -i main wilma` перенесёт вас в редактор, где нужно удалить "
+"строки `pick`, соответствующие коммитам, которые вы скопировали в `fred`.\n"
+"Если всё пройдёт хорошо и не будет конфликтов, вы закончили.\n"
+"Если нет, вам нужно будет разрешать конфликты по мере их появления.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1669
+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. 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. "
+"Some people would create a tag/branch called `pre-split` before starting in "
+"case something goes wrong in the split. You can undo it with the following "
+"sequence:"
+msgstr ""
+"Другой способ сделать это — выгрузить `wilma`, а затем создать ветку `fred`, "
+"указывающую на ту же точку в дереве. Затем вы можете выполнить `git rebase "
+"-i` для обеих этих веток, выбирая изменения, которые вы хотите видеть в "
+"`fred` или `wilma`, оставляя строки с `pick` и удаляя остальные в редакторе. "
+"Некоторые предпочитают создать тег/ветку с названием `pre-split` перед "
+"началом, на случай если что-то пойдет не так при разделении. Вы можете "
+"отменить это следующей последовательностью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1676
+#, no-wrap
+msgid ""
+"% git checkout pre-split\t# Go back\n"
+"% git branch -D fred\t\t# delete the fred branch\n"
+"% git checkout -B wilma\t\t# reset the wilma branch\n"
+"% git branch -d pre-split\t# Pretend it didn't happen\n"
+msgstr ""
+"% git checkout pre-split\t# Go back\n"
+"% git branch -D fred\t\t# delete the fred branch\n"
+"% git checkout -B wilma\t\t# reset the wilma branch\n"
+"% git branch -d pre-split\t# Pretend it didn't happen\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1680
+msgid ""
+"The last step is optional. If you are going to try again to split, you'd "
+"omit it."
+msgstr ""
+"Последний шаг необязателен. Если вы собираетесь повторить попытку "
+"разделения, его можно пропустить."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1684
+#, fuzzy
+#| 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"
+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. How "
+"do I find what `wilma` was before I started. I don't know how many times I "
+"moved things around."
+msgstr ""
+"**В:** Но я делал всё по мере прочтения и не увидел ваш совет в конце "
+"создать ветку, и теперь `fred` и `wilma` полностью испорчены.\n"
+"Как мне найти, чем `wilma` была до того, как я начал.\n"
+"Я не знаю, сколько раз я всё переставлял.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1686
+#, fuzzy
+#| 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"
+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)."
+msgstr ""
+"**О:** Не всё потеряно. Вы можете разобраться с этим, если прошло не слишком "
+"много времени или не было сделано слишком много коммитов (сотни).\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1690
+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. Nothing weird happened "
+"when I did that, but let's say it did. The way to look at what you've done "
+"is with the `git reflog`:"
+msgstr ""
+"Итак, я создал ветку wilma и закоммитил в неё пару изменений, затем решил "
+"разделить её на fred и wilma. Ничего странного при этом не произошло, но "
+"предположим, что произошло. Способ посмотреть, что вы сделали, — это "
+"использовать `git reflog`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1705
+#, no-wrap
+msgid ""
+"% git reflog\n"
+"6ff9c25 (HEAD -> wilma) HEAD@{0}: rebase -i (finish): returning to refs/heads/wilma\n"
+"6ff9c25 (HEAD -> wilma) HEAD@{1}: rebase -i (start): checkout main\n"
+"869cbd3 HEAD@{2}: rebase -i (start): checkout wilma\n"
+"a6a5094 (fred) HEAD@{3}: rebase -i (finish): returning to refs/heads/fred\n"
+"a6a5094 (fred) HEAD@{4}: rebase -i (pick): Encourage contributions\n"
+"1ccd109 (freebsd/main, main) HEAD@{5}: rebase -i (start): checkout main\n"
+"869cbd3 HEAD@{6}: rebase -i (start): checkout fred\n"
+"869cbd3 HEAD@{7}: checkout: moving from wilma to fred\n"
+"869cbd3 HEAD@{8}: commit: Encourage contributions\n"
+"...\n"
+"%\n"
+msgstr ""
+"% git reflog\n"
+"6ff9c25 (HEAD -> wilma) HEAD@{0}: rebase -i (finish): returning to refs/heads/wilma\n"
+"6ff9c25 (HEAD -> wilma) HEAD@{1}: rebase -i (start): checkout main\n"
+"869cbd3 HEAD@{2}: rebase -i (start): checkout wilma\n"
+"a6a5094 (fred) HEAD@{3}: rebase -i (finish): returning to refs/heads/fred\n"
+"a6a5094 (fred) HEAD@{4}: rebase -i (pick): Encourage contributions\n"
+"1ccd109 (freebsd/main, main) HEAD@{5}: rebase -i (start): checkout main\n"
+"869cbd3 HEAD@{6}: rebase -i (start): checkout fred\n"
+"869cbd3 HEAD@{7}: checkout: moving from wilma to fred\n"
+"869cbd3 HEAD@{8}: commit: Encourage contributions\n"
+"...\n"
+"%\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1713
+msgid ""
+"Here we see the changes I've made. You can use it to figure out where "
+"things went wrong. I'll just point out a few things here. The first one is "
+"that HEAD@{X} is a 'commitish' thing, so you can use that as an argument to "
+"a command. Although if that command commits anything to the repository, the "
+"X numbers change. You can also use the hash (first column)."
+msgstr ""
+"Здесь мы видим изменения, которые я внес. Вы можете использовать это, чтобы "
+"понять, где что-то пошло не так. Я лишь укажу на несколько моментов. Первый "
+"из них — HEAD@{X} является 'коммитоподобной' сущностью, поэтому вы можете "
+"использовать это в качестве аргумента команды. Хотя если эта команда вносит "
+"что-либо в репозиторий, номера X изменяются. Вы также можете использовать "
+"хэш (первый столбец)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1721
+msgid ""
+"Next, 'Encourage contributions' was the last commit I made to `wilma` before "
+"I decided to split things up. You can also see the same hash is there when "
+"I created the `fred` branch to do that. I started by rebasing `fred` and "
+"you see the 'start', each step, and the 'finish' for that process. While we "
+"don't need it here, you can figure out exactly what happened. Fortunately, "
+"to fix this, you can follow the prior answer's steps, but with the hash "
+"`869cbd3` instead of `pre-split`. While that seems a bit verbose, it's easy "
+"to remember since you're doing one thing at a time. You can also stack:"
+msgstr ""
+"Далее, 'Encourage contributions' был последним коммитом, который я сделал в "
+"`wilma` перед тем, как решил разделить всё. Вы также можете видеть, что тот "
+"же хэш присутствует, когда я создал ветку `fred` для этого. Я начал с "
+"перебазирования `fred`, и вы видите 'начало', каждый шаг и 'завершение' "
+"этого процесса. Хотя нам это здесь не нужно, вы можете точно понять, что "
+"произошло. К счастью, чтобы исправить это, вы можете выполнить шаги из "
+"предыдущего ответа, но с хэшом `869cbd3` вместо `pre-split`. Хотя это "
+"кажется немного многословным, это легко запомнить, поскольку вы делаете одно "
+"действие за раз. Вы также можете последовательно применить команды одну за "
+"другой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1726
+#, no-wrap
+msgid ""
+"% git checkout -B wilma 869cbd3\n"
+"% git branch -D fred\n"
+msgstr ""
+"% git checkout -B wilma 869cbd3\n"
+"% git branch -D fred\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1733
+msgid ""
+"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. 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:"
+msgstr ""
+"и вы готовы попробовать снова. Команда `checkout -B` с хэшем объединяет "
+"извлечение (checkout) и создание ветки для него. Использование `-B` вместо "
+"`-b` принудительно перемещает уже существующую ветку. В любом случае это "
+"работает, что и прекрасно (и ужасно) в Git. Одна из причин, по которой я "
+"склонен использовать `git checkout -B xxxx хэш` вместо извлечения (checkout) "
+"хэша, а затем создания / перемещения ветки, — это чисто чтобы избежать "
+"слегка тревожного сообщения об отделённом HEAD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1739
+#, no-wrap
+msgid ""
+"% git checkout 869cbd3\n"
+"M\tfaq.md\n"
+"Note: checking out '869cbd3'.\n"
+msgstr ""
+"% git checkout 869cbd3\n"
+"M\tfaq.md\n"
+"Note: checking out '869cbd3'.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1743
+#, no-wrap
+msgid ""
+"You are in '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 '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:1751
+#, no-wrap
+msgid ""
+"HEAD is now at 869cbd3 Encourage contributions\n"
+"% git checkout -B wilma\n"
+msgstr ""
+"HEAD is now at 869cbd3 Encourage contributions\n"
+"% git checkout -B wilma\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1754
+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."
+msgstr ""
+"это производит тот же эффект, но мне приходится читать гораздо больше, а "
+"отрубленные головы (прим перев.: detached HEAD — отрубленная голова) — не "
+"тот образ, который мне нравится созерцать."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1755
+#, no-wrap
+msgid "Ooops! I did a `git pull` and it created a merge commit, what do I do?"
+msgstr "Ой! Я выполнил `git pull`, и это создало коммит слияния, что мне делать?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1759
+#, fuzzy
+#| 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"
+msgid ""
+"**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?"
+msgstr ""
+"**В:** Я действовал на автопилоте и сделал `git pull` для своего дерева "
+"разработки, что создало коммит слияния в `main`.\n"
+"Как мне восстановиться?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1761
+#, fuzzy
+#| msgid ""
+#| "**A:** This can happen when you invoke the pull with your development "
+#| "branch checked out.\n"
+msgid ""
+"**A:** This can happen when you invoke the pull with your development branch "
+"checked out."
+msgstr ""
+"**О:** Это может произойти, когда вы выполняете извлечение (checkout) с "
+"выбранной веткой разработки.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1763
+msgid "Many developers use `git pull --rebase` to avoid this situation."
+msgstr ""
+"Многие разработчики используют `git pull --rebase`, чтобы избежать этой "
+"ситуации."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1766
+msgid ""
+"Right after the pull, you will have the new merge commit checked out. Git "
+"supports a `HEAD^#` syntax to examine the parents of a merge commit:"
+msgstr ""
+"Сразу после получения и слияния (pull) у вас в рабочую копию будет извлечен "
+"новый коммит слияния. Git поддерживает синтаксис `HEAD^#` для определения "
+"родителей коммита слияния:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1771
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1775
+msgid ""
+"From those logs, you can easily identify which commit is your development "
+"work. Then you simply reset your branch to the corresponding `HEAD^#`:"
+msgstr ""
+"Из этих журналов вы можете легко определить, какой коммит является вашей "
+"разработкой. Затем вы просто сбрасываете свою ветку к соответствующему "
+"`HEAD^#`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1779
+#, no-wrap
+msgid "git reset --hard HEAD^1\n"
+msgstr "git reset --hard HEAD^1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1782
+msgid ""
+"In addition, a `git pull --rebase` at this stage will rebase your changes to "
+"'main' to the latest 'freebsd/main'."
+msgstr ""
+"Кроме того, команда `git pull --rebase` на этом этапе перебазирует ваши "
+"изменения из ветки 'main' на последнюю версию 'freebsd/main'."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1784
+#, fuzzy
+#| msgid "**Q:** But I also need to fix my `main` branch. How do I do that?\n"
+msgid "**Q:** But I also need to fix my `main` branch. How do I do that?"
+msgstr ""
+"**В:** Но мне также нужно исправить мою ветку `main`. Как мне это сделать?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1787
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** Git keeps track of the remote repository branches in a `freebsd/` "
+"namespace. To fix your `main` branch, just make it point to the remote's "
+"`main`:"
+msgstr ""
+"**О:** Git отслеживает ветки удалённого репозитория в пространстве имён "
+"`freebsd/`.\n"
+"Чтобы исправить вашу ветку `main`, просто заставьте её указывать на "
+"удалённую ветку `main`:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1791
+#, no-wrap
+msgid "git branch -f main freebsd/main\n"
+msgstr "git branch -f main freebsd/main\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1796
+msgid ""
+"There's nothing magical about branches in Git: they are just labels on a "
+"graph that are automatically moved forward by making commits. So the above "
+"works because you're just moving a label. There's no metadata about the "
+"branch that needs to be preserved due to this."
+msgstr ""
+"Ветви в Git не имеют ничего магического: они всего лишь метки на графе, "
+"которые автоматически перемещаются вперед при создании коммитов. Так что "
+"вышеописанное работает, потому что вы просто перемещаете метку. Из-за этого "
+"нет никаких метаданных о ветке, которые нужно было бы сохранять."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1797
+#, no-wrap
+msgid "Mixing and matching branches"
+msgstr "Смешивание и сопоставление веток"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1801
+#, fuzzy
+#| 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"
+msgid ""
+"**Q:** So I have two branches `worker` and `async` that I'd like to combine "
+"into one branch called `feature` while maintaining the commits in both."
+msgstr ""
+"**В:** Итак, у меня есть две ветки `worker` и `async`, которые я хочу "
+"объединить в одну ветку под названием `feature`\n"
+"с сохранением коммитов в обеих.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1803
+#, fuzzy
+#| msgid "**A:** This is a job for cherry pick.\n"
+msgid "**A:** This is a job for cherry pick."
+msgstr "**О:** Это задача для выборочного применения (cherry-pick).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1809
+#, no-wrap
+msgid ""
+"% git checkout worker\n"
+"% git checkout -b feature\t# create a new branch\n"
+"% git cherry-pick main..async\t# bring in the changes\n"
+msgstr ""
+"% git checkout worker\n"
+"% git checkout -b feature\t# create a new branch\n"
+"% git cherry-pick main..async\t# bring in the changes\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1814
+msgid ""
+"You now have a new branch called `feature`. This branch combines commits "
+"from both branches. You can further curate it with `git rebase`."
+msgstr ""
+"Теперь у вас есть новая ветка под названием `feature`. Эта ветка объединяет "
+"коммиты из обеих веток. Вы можете далее работать с ней с помощью `git "
+"rebase`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1816
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"**В:** У меня есть ветка под названием `driver`, и я хочу разделить её на "
+"`kernel` и `userland`, чтобы развивать их отдельно и коммитить каждую ветку "
+"по мере её готовности.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1819
+#, fuzzy
+#| msgid ""
+#| "**A:** This takes a little bit of prep work, but `git rebase` will do the "
+#| "heavy\n"
+#| "lifting here.\n"
+msgid ""
+"**A:** This takes a little bit of prep work, but `git rebase` will do the "
+"heavy lifting here."
+msgstr ""
+"**О:** Это требует небольшой подготовительной работы, но `git rebase`\n"
+"выполнит здесь основную часть работы.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1825
+#, no-wrap
+msgid ""
+"% git checkout driver\t\t# Checkout the driver\n"
+"% git checkout -b kernel\t# Create kernel branch\n"
+"% git checkout -b userland\t# Create userland branch\n"
+msgstr ""
+"% git checkout driver\t\t# Checkout the driver\n"
+"% git checkout -b kernel\t# Create kernel branch\n"
+"% git checkout -b userland\t# Create userland branch\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1830
+msgid ""
+"Now you have two identical branches. So, it's time to separate out the "
+"commits. We'll assume first that all the commits in `driver` go into either "
+"the `kernel` or the `userland` branch, but not both."
+msgstr ""
+"Теперь у вас есть две идентичные ветки. Значит, пришло время разделить "
+"коммиты. Мы предположим, что сначала все коммиты в ветке `driver` попадут "
+"либо в ветку `kernel`, либо в ветку `userland`, но не в обе одновременно."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1834
+#, no-wrap
+msgid "% git rebase -i main kernel\n"
+msgstr "% git rebase -i main kernel\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1837
+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)."
+msgstr ""
+"и просто включите изменения, которые вы хотите (строкой 'p' или 'pick'), и "
+"удалите коммиты, которые не нужны (это звучит пугающе, но в худшем случае вы "
+"всегда можете всё отбросить и начать заново с ветки `driver`, если вы только "
+"её не переместили)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1841
+#, no-wrap
+msgid "% git rebase -i main userland\n"
+msgstr "% git rebase -i main userland\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1844
+msgid "and do the same thing you did with the `kernel` branch."
+msgstr "и сделайте то же самое, что вы сделали с веткой `kernel `."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1847
+#, fuzzy
+#| msgid ""
+#| "**Q:** Oh great! I followed the above and forgot a commit in the `kernel` "
+#| "branch.\n"
+#| "How do I recover?\n"
+msgid ""
+"**Q:** Oh great! I followed the above and forgot a commit in the `kernel` "
+"branch. How do I recover?"
+msgstr ""
+"**В:** Отлично! Я выполнил указанные выше шаги и забыл сделать коммит в "
+"ветке `kernel`.\n"
+"Как мне восстановиться?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1850
+#, fuzzy
+#| msgid ""
+#| "**A:** You can use the `driver` branch to find the hash of the commit is "
+#| "missing and\n"
+#| "cherry pick it.\n"
+msgid ""
+"**A:** You can use the `driver` branch to find the hash of the commit is "
+"missing and cherry pick it."
+msgstr ""
+"**О:** Вы можете использовать ветку `driver`, чтобы найти хэш коммита, "
+"который отсутствует, и\n"
+"выборочно применить его (cherry-pick).\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1856
+#, no-wrap
+msgid ""
+"% git checkout kernel\n"
+"% git log driver\n"
+"% git cherry-pick $HASH\n"
+msgstr ""
+"% git checkout kernel\n"
+"% git log driver\n"
+"% git cherry-pick $HASH\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1862
+#, fuzzy
+#| 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"
+msgid ""
+"**Q:** OK. I have the same situation as the above, but my commits are all "
+"mixed up. I need parts of one commit to go to one branch and the rest to go "
+"to the other. In fact, I have several. Your rebase method to select sounds "
+"tricky."
+msgstr ""
+"**В:** Хорошо. У меня такая же ситуация, как и выше, но мои коммиты все "
+"перемешаны.\n"
+"Мне нужно, чтобы части одного коммита попали в одну ветку, а остальные — в "
+"другую.\n"
+"На самом деле, у меня их несколько.\n"
+"Ваш метод перебазирования с выбором кажется сложным.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1865
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** In this situation, you'd be better off to curate the original branch "
+"to separate out the commits, and then use the above method to split the "
+"branch."
+msgstr ""
+"**О:** В этой ситуации вам лучше обработать исходную ветку, чтобы отделить\n"
+"коммиты, а затем использовать вышеуказанный метод для разделения ветки.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1870
+msgid ""
+"So let's assume that there's just one commit with a clean tree. You can "
+"either use `git rebase` with an `edit` line, or you can use this with the "
+"commit on the tip. The steps are the same either way. The first thing we "
+"need to do is to back up one commit while leaving the changes uncommitted in "
+"the tree:"
+msgstr ""
+"Итак, предположим, что есть всего один коммит с чистым деревом. Вы можете "
+"использовать либо `git rebase` со строкой `edit`, либо это с коммитом на "
+"острие. В любом случае шаги одинаковы. Первое, что нам нужно сделать, — это "
+"откатиться на один коммит назад, оставив изменения незакоммиченными в дереве:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1874
+#, no-wrap
+msgid "% git reset HEAD^\n"
+msgstr "% git reset HEAD^\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1877
+msgid ""
+"Note: Do not, repeat do not, add `--hard` here since that also removes the "
+"changes from your tree."
+msgstr ""
+"Примечание: НЕ, повторяю, НЕ добавляйте здесь `--hard`, так как это также "
+"удалит изменения из вашего дерева."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1881
+msgid ""
+"Now, if you are lucky, the change needing to be split up falls entirely "
+"along file lines. In that case you can just do the usual `git add` for the "
+"files in each group than do a `git commit`. 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)."
+msgstr ""
+"Теперь, если вам повезёт, изменения, которые нужно разделить, полностью "
+"укладываются по границам файлов. В этом случае вы можете просто выполнить "
+"обычный `git add` для файлов в каждой группе, а затем сделать `git commit`. "
+"Примечание: при этом вы потеряете сообщение коммита при выполнении сброса, "
+"поэтому если оно вам по какой-то причине нужно, следует сохранить копию "
+"(хотя `git log $HASH` может его восстановить)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1884
+msgid ""
+"If you are not lucky, you'll need to split apart files. There's another "
+"tool to do that which you can apply one file at a time."
+msgstr ""
+"Если вам не повезло, вам придётся разделять файлы. Для этого существует ещё "
+"один инструмент, который можно применять по одному файлу за раз."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1888
+#, no-wrap
+msgid "git add -i foo/bar.c\n"
+msgstr "git add -i foo/bar.c\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1894
+msgid ""
+"will step through the diffs, prompting you, one at time, whether to include "
+"or exclude the hunk. Once you're done, `git commit` and you'll have the "
+"remainder in your tree. 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 and "
+"use the `git rebase -i` to fold the related commits together)."
+msgstr ""
+"будет последовательно проходить через различия, предлагая вам включить или "
+"исключить каждый фрагмент. После завершения, выполните `git commit`, и "
+"оставшиеся изменения окажутся в вашем дереве. Вы также можете запускать эту "
+"команду несколько раз, даже для нескольких файлов (хотя я считаю удобнее "
+"работать с одним файлом за раз и использовать `git rebase -i` для "
+"объединения связанных коммитов)."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1895
+#, no-wrap
+msgid "Joining the FreeBSD GitHub oranization."
+msgstr "Присоединение к организации FreeBSD на GitHub."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1898
+#, fuzzy
+#| msgid "**Q:** How do I join the FreeBSD GitHub organization?\n"
+msgid "**Q:** How do I join the FreeBSD GitHub organization?"
+msgstr "**В:** Как присоединиться к организации FreeBSD на GitHub?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1902
+#, fuzzy
+#| msgid ""
+#| "**A:** Please see https://wiki.freebsd.org/"
+#| "GitHub#Joining_the_Organisation[our GitHub Wiki Info] page for details.\n"
+#| "Briefly, all FreeBSD committers may join.\n"
+#| "Those who are not committers who request joining will be considered on a "
+#| "case by case basis.\n"
+msgid ""
+"**A:** Please see https://wiki.freebsd.org/"
+"GitHub#Joining_the_Organisation[our GitHub Wiki Info] page for details. "
+"Briefly, all FreeBSD committers may join. Those who are not committers who "
+"request joining will be considered on a case by case basis."
+msgstr ""
+"**О:** Подробности смотрите на странице https://wiki.freebsd.org/"
+"GitHub#Joining_the_Organisation[нашей вики GitHub].\n"
+"Вкратце, присоединиться могут все коммиттеры FreeBSD.\n"
+"Лица, не являющиеся коммиттерами, которые запрашивают присоединение, будут "
+"рассматриваться в индивидуальном порядке.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1903
+#, no-wrap
+msgid "Cloning and Mirroring"
+msgstr "Клонирование и зеркалирование"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1906
+#, fuzzy
+#| msgid ""
+#| "**Q:** I'd like to mirror the entire Git repository, how do I do that?\n"
+msgid "**Q:** I'd like to mirror the entire Git repository, how do I do that?"
+msgstr ""
+"**В:** Я хочу создать полную зеркальную копию репозитория Git, как мне это "
+"сделать?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1908
+#, fuzzy
+#| msgid "**A:** If all you want to do is mirror, then\n"
+msgid "**A:** If all you want to do is mirror, then"
+msgstr "**О:** Если вам нужно только зеркалирование, то\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1912
+#, no-wrap
+msgid "% git clone --mirror $URL\n"
+msgstr "% git clone --mirror $URL\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1916
+msgid ""
+"will do the trick. However, there are two disadvantages to this if you want "
+"to use it for anything other than a mirror you'll reclone."
+msgstr ""
+"сработает. Однако, у этого есть два недостатка, если вы хотите использовать "
+"это для чего-то кроме зеркала, которое вы будете переклонировать."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1920
+msgid ""
+"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`:"
+msgstr ""
+"Во-первых, это 'голый репозиторий', который содержит базу данных "
+"репозитория, но не имеет извлеченного рабочего дерева. Это отлично подходит "
+"для зеркалирования, но ужасно для повседневной работы. Существует несколько "
+"способов обойти это с помощью `git worktree`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1928
+#, no-wrap
+msgid ""
+"% git clone --mirror https://git.freebsd.org/ports.git ports.git\n"
+"% cd ports.git\n"
+"% git worktree add ../ports main\n"
+"% git worktree add ../quarterly branches/2020Q4\n"
+"% cd ../ports\n"
+msgstr ""
+"% git clone --mirror https://git.freebsd.org/ports.git ports.git\n"
+"% cd ports.git\n"
+"% git worktree add ../ports main\n"
+"% git worktree add ../quarterly branches/2020Q4\n"
+"% cd ../ports\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1931
+msgid ""
+"But if you aren't using your mirror for further local clones, then it's a "
+"poor match."
+msgstr ""
+"Но если вы не используете свой зеркальный репозиторий для дальнейшего "
+"локального клонирования, то это неподходящий выбор."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1934
+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. This means that you'll lose changes if you are committing to this "
+"repository on anything other than private project branches."
+msgstr ""
+"Второй недостаток заключается в том, что Git обычно перезаписывает ссылки из "
+"вышестоящего репозитория (названия веток, теги и т.д.) , чтобы ваши "
+"локальные ссылки могли изменяться независимо от вышестоящего репозитория. "
+"Это означает, что вы потеряете изменения, если будете коммитить в свой "
+"репозиторий куда-либо, кроме веток приватных проектов."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1936
+#, fuzzy
+#| msgid "**Q:** So what can I do instead?\n"
+msgid "**Q:** So what can I do instead?"
+msgstr "**В:** Так что же я могу сделать вместо этого?\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1939
+#, fuzzy
+#| 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"
+msgid ""
+"**A:** Well, you can stuff all of the upstream repository's refs into a "
+"private namespace in your local repository. Git clones everything via a "
+"'refspec' and the default refspec is:"
+msgstr ""
+"**О:** Ну, вы можете поместить все ссылки (refs) вышестоящего репозитория в "
+"приватное пространство имён вашего локального репозитория.\n"
+"Git клонирует всё через 'refspec', и refspec по умолчанию выглядит так:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1943
+#, no-wrap
+msgid " fetch = +refs/heads/*:refs/remotes/freebsd/*\n"
+msgstr " fetch = +refs/heads/*:refs/remotes/freebsd/*\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1946
+msgid "which says just fetch the branch refs."
+msgstr "что говорит просто получить (fetch) ссылки веток."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1950
+msgid ""
+"However, the FreeBSD repository has a number of other things in it. To see "
+"those, you can add explicit refspecs for each ref namespace, or you can "
+"fetch everything. To setup your repository to do that:"
+msgstr ""
+"Однако в репозитории FreeBSD есть и ряд других элементов. Чтобы увидеть их, "
+"вы можете добавить явные спецификации ссылок для каждого пространства имен "
+"ссылок или получить всё. Чтобы настроить ваш репозиторий для этого:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1954
+#, no-wrap
+msgid "git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'\n"
+msgstr "git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1958
+msgid ""
+"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."
+msgstr ""
+"что поместит всё из вышестоящего репозитория в пространство имён `refs/"
+"freebsd/` вашего локального репозитория. Обратите внимание, что это также "
+"захватывает все несконвертированные ветки вендоров, а количество связанных с "
+"ними ссылок довольно велико."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1960
+msgid ""
+"You'll need to refer to these 'refs' with their full name because they "
+"aren't in and of Git's regular namespaces."
+msgstr ""
+"Вам потребуется ссылаться на эти ссылки с их полными именами, поскольку они "
+"не входят в обычные пространства имён Git."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1964
+#, no-wrap
+msgid "git log refs/freebsd/vendor/zlib/1.2.10\n"
+msgstr "git log refs/freebsd/vendor/zlib/1.2.10\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1967
+msgid ""
+"would look at the log for the vendor branch for zlib starting at 1.2.10."
+msgstr ""
+"будет просматривать журнал ветки вендора для zlib, начиная с версии 1.2.10."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1968
+#, no-wrap
+msgid "Collaborating with others"
+msgstr "Сотрудничество с другими"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1972
+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 ""
+"Одним из ключевых моментов качественной разработки программного обеспечения "
+"в таком крупном проекте, как FreeBSD, является возможность сотрудничать с "
+"другими участниками до отправки своих изменений в дерево исходного кода. "
+"Репозитории Git проекта FreeBSD пока не позволяют отправлять "
+"пользовательские ветки в репозиторий, поэтому если вы хотите поделиться "
+"своими изменениями с другими, вам необходимо использовать другой механизм, "
+"например, репозиторий, размещённый в GitLab или GitHub, для обмена "
+"изменениями в ветке, созданной пользователем."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1974
+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 ""
+"Следующие инструкции показывают, как создать пользовательскую ветку на "
+"основе ветки FreeBSD `main` и отправить её в GitHub."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1977
+msgid ""
+"Before you begin, make sure that your local Git repo is up to date and has "
+"the correct origins set crossref:committers-guide[keeping_current,as shown "
+"above]."
+msgstr ""
+"Прежде чем начать, убедитесь, что ваш локальный репозиторий Git актуален и "
+"имеет правильно настроенные источники, как показано в разделе "
+"crossref:committers-guide[keeping_current,выше]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1984
+msgid ""
+"```` % git remote -v freebsd https://git.freebsd.org/src.git (fetch) "
+"freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````"
+msgstr ""
+"```` % git remote -v freebsd https://git.freebsd.org/src.git (fetch) "
+"freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1987
+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 ""
+"Первым шагом является создание форка https://github.com/freebsd/freebsd-"
+"src[FreeBSD] на GitHub, следуя этим https://docs.github.com/en/github/"
+"getting-started-with-github/fork-a-repo[инструкциям]. Назначением форка "
+"должен быть ваш собственный, личный аккаунт на GitHub (в моём случае gvnn3)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1989
+msgid "Now add a remote on your local system that points to your fork:"
+msgstr ""
+"Теперь добавьте удаленный репозиторий в вашей локальной системе, который "
+"указывает на ваш форк:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1997
+#, no-wrap
+msgid ""
+"% git remote add github git@github.com:gvnn3/freebsd-src.git\n"
+"% git remote -v\n"
+"github\tgit@github.com:gvnn3/freebsd-src.git (fetch)\n"
+"github\tgit@github.com:gvnn3/freebsd-src.git (push)\n"
+"freebsd\thttps://git.freebsd.org/src.git (fetch)\n"
+"freebsd\tssh://git@gitrepo.freebsd.org/src.git (push)\n"
+msgstr ""
+"% git remote add github git@github.com:gvnn3/freebsd-src.git\n"
+"% git remote -v\n"
+"github\tgit@github.com:gvnn3/freebsd-src.git (fetch)\n"
+"github\tgit@github.com:gvnn3/freebsd-src.git (push)\n"
+"freebsd\thttps://git.freebsd.org/src.git (fetch)\n"
+"freebsd\tssh://git@gitrepo.freebsd.org/src.git (push)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2000
+msgid ""
+"With this in place you can create a branch crossref:committers-"
+"guide[keeping_a_local_branch,as shown above]."
+msgstr ""
+"В этом репозитории вы можете создать ветку crossref:committers-"
+"guide[keeping_a_local_branch,как показано выше]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2004
+#, no-wrap
+msgid "% git checkout -b gnn-pr2001-fix\n"
+msgstr "% git checkout -b gnn-pr2001-fix\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2008
+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. 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:"
+msgstr ""
+"Вносите любые изменения в своей ветке. Собирайте, тестируйте, и как только "
+"будете готовы к совместной работе с другими, настанет время отправить свои "
+"изменения в ветку, размещённую в GitHub. Прежде чем отправить изменения, вам "
+"нужно будет установить соответствующую вышестоящую ветку (upstream), о чём "
+"Git сообщит при первой попытке отправки в ваш удалённый репозиторий +github+:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2014
+#, no-wrap
+msgid ""
+"% git push github\n"
+"fatal: The current branch gnn-pr2001-fix has no upstream branch.\n"
+"To push the current branch and set the remote as upstream, use\n"
+msgstr ""
+"% git push github\n"
+"fatal: The current branch gnn-pr2001-fix has no upstream branch.\n"
+"To push the current branch and set the remote as upstream, use\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2016
+#, no-wrap
+msgid " git push --set-upstream github gnn-pr2001-fix\n"
+msgstr " git push --set-upstream github gnn-pr2001-fix\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2019
+msgid "Setting the push as +git+ advises allows it to succeed:"
+msgstr ""
+"Если установить параметры отправки (push) так, как советует +git+, то это "
+"позволяет ему успешно выполниться:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2037
+#, 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"
+" * [new branch] gnn-feature -> gnn-feature\n"
+"Branch 'gnn-feature' set up to track remote branch 'gnn-feature' from 'github'.\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"
+" * [new branch] gnn-feature -> gnn-feature\n"
+"Branch 'gnn-feature' set up to track remote branch 'gnn-feature' from 'github'.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2040
+msgid "Subsequent changes to the same branch will push correctly by default:"
+msgstr ""
+"Последующие изменения в той же ветке будут по умолчанию отправляться "
+"корректно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2053
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2057
+msgid ""
+"At this point your work is now in your branch on +GitHub+ and you can share "
+"the link with other collaborators."
+msgstr ""
+"На этом этапе ваша работа находится в вашей ветке на +GitHub+, и вы можете "
+"поделиться ссылкой с другими участниками."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2059
+#, no-wrap
+msgid "Landing a github pull request"
+msgstr "Обработка запросов на принятие изменений (pull request) на github"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2064
+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 ""
+"В этом разделе описано, как интегрировать запрос на принятие изменений (pull "
+"request) из GitHub, отправленный на зеркала FreeBSD в Git на GitHub. Хотя на "
+"данный момент это не официальный способ отправки исправлений, иногда таким "
+"образом приходят хорошие правки, и проще всего просто перенести их в дерево "
+"коммиттера и оттуда отправить (push) в дерево FreeBSD. Аналогичные шаги "
+"можно использовать для получать и сливать (pull) ветки из других "
+"репозиториев и их использовать их. При коммите запросов на принятие "
+"изменений от других следует проявлять особую осторожность, чтобы проверить "
+"все изменения и убедиться, что они в точности соответствуют заявленным."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2068
+msgid ""
+"Before beginning, make sure that the local Git repo is up to date and has "
+"the correct origins set crossref:committers-guide[keeping_current,as shown "
+"above]. In addition, make sure to have the following origins:"
+msgstr ""
+"Прежде чем начать, убедитесь, что локальный репозиторий Git актуален и имеет "
+"правильно настроенные источники, как показано в разделе crossref:committers-"
+"guide[keeping_current,выше]. Кроме того, убедитесь, что у вас есть следующие "
+"источники:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2075
+#, no-wrap
+msgid ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/src.git (fetch)\n"
+"freebsd ssh://git@gitrepo.freebsd.org/src.git (push)\n"
+"github https://github.com/freebsd/freebsd-src (fetch)\n"
+"github https://github.com/freebsd/freebsd-src (fetch)\n"
+msgstr ""
+"% git remote -v\n"
+"freebsd https://git.freebsd.org/src.git (fetch)\n"
+"freebsd ssh://git@gitrepo.freebsd.org/src.git (push)\n"
+"github https://github.com/freebsd/freebsd-src (fetch)\n"
+"github https://github.com/freebsd/freebsd-src (fetch)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2090
+msgid ""
+"Often pull requests are simple: requests that contain only a single commit. "
+"In this case, a streamlined approach may be used, though the approach in the "
+"prior section will also work. Here, a branch is created, the change is "
+"cherry picked, the commit message adjusted, and sanity-checked before being "
+"pushed. The branch `staging` is used in this example but it can be any "
+"name. This technique works for any number of commits in the pull request, "
+"especially when the changes apply cleanly to the FreeBSD tree. However, "
+"when there's multiple commits, especially when minor adjustments are needed, "
+"`git rebase -i` works better than `git cherry-pick`. 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`. The PR number is `$PR` below. When adjusting the message, add "
+"`Pull Request: https://github.com/freebsd-src/pull/$PR`. All pull requests "
+"committed to the FreeBSD repository should be reviewed by at least one "
+"person. 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. 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. Add anybody that reviews and "
+"approves the commit on github to `Reviewed by:` as well. As always, care "
+"should be taken to ensure the change does what it is supposed to, and that "
+"no malicious code is present."
+msgstr ""
+"Часто запросы на принятие изменений просты: это запросы, содержащие всего "
+"один коммит. В этом случае можно использовать упрощённый подход, хотя подход "
+"из предыдущего раздела также будет работать. Здесь создаётся ветка, "
+"изменения выборочно применяются, сообщение коммита корректируется и "
+"проверяется на адекватность перед отправкой. В этом примере используется "
+"ветка `staging`, но она может иметь любое имя. Эта техника работает для "
+"любого количества коммитов в запросе на принятие изменений, особенно когда "
+"изменения чисто применяются к дереву FreeBSD. Однако, когда коммитов "
+"несколько, особенно когда требуются незначительные корректировки, `git "
+"rebase -i` работает лучше, чем `git cherry-pick`. Вкратце, эти команды "
+"создают ветку; выборочно применяют изменения из запроса на принятие "
+"изменений; тестируют их; корректируют сообщения коммитов; и выполняют "
+"слияние перемоткой (fast-forward) обратно в `main`. Номер PR ниже обозначен "
+"как `$PR`. При корректировке сообщения добавьте `Pull Request: https://"
+"github.com/freebsd-src/pull/$PR`. Все запросы на принятие изменений, "
+"зафиксированные в репозитории FreeBSD, должны быть проверены как минимум "
+"одним человеком. Это не обязательно должен быть тот, кто их фиксирует, но в "
+"этом случае тот, кто фиксирует, должен доверять компетентности других "
+"рецензентов в проверке коммита. Коммиттеры, которые проводят рецензирование "
+"кода у запросов на принятие изменений перед их отправкой в репозиторий, "
+"должны добавить строку `Reviewed by:` к коммиту, потому что в этом случае "
+"это не подразумевается. Добавьте всех, кто просматривает и одобряет коммит "
+"на github, также в `Reviewed by:`. Как всегда, следует позаботиться о том, "
+"чтобы изменение делало то, что предполагается, и чтобы в нём не было "
+"вредоносного кода."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2094
+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 ""
+"Кроме того, пожалуйста, убедитесь, что имя автора запроса на принятие "
+"изменений не является анонимным. Веб-интерфейс редактирования Github "
+"генерирует имена вида:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2097
+#, 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: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2100
+msgid ""
+"A polite request to the author for a better name and/or email should be "
+"made. Extra care should be taken to ensure no style issue or malicious code "
+"is introduced."
+msgstr ""
+"Автору следует отправить вежливую просьбу предоставить более подходящее имя "
+"и/или адрес электронной почты. Следует проявлять особую осторожность, чтобы "
+"не допустить ошибок стиля или внедрения вредоносного кода."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2113
+#, no-wrap
+msgid ""
+"% git fetch github pull/$PR/head:staging\n"
+"% git rebase -i main staging\t# to move the staging branch forward, adjust commit message here\n"
+"<do testing here, as needed>\n"
+"% git checkout main\n"
+"% git pull --ff-only\t\t# to get the latest if time has passed\n"
+"% git checkout main\n"
+"% git merge --ff-only staging\n"
+"<test again if needed>\n"
+"% git push freebsd --push-option=confirm-author\n"
+msgstr ""
+"% git fetch github pull/$PR/head:staging\n"
+"% git rebase -i main staging\t# to move the staging branch forward, adjust commit message here\n"
+"<do testing here, as needed>\n"
+"% git checkout main\n"
+"% git pull --ff-only\t\t# to get the latest if time has passed\n"
+"% git checkout main\n"
+"% git merge --ff-only staging\n"
+"<test again if needed>\n"
+"% git push freebsd --push-option=confirm-author\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2118
+msgid ""
+"For complicated pull requests that have multiple commits with conflicts, "
+"follow the following outline."
+msgstr ""
+"Для сложных запросов на принятие изменений с несколькими коммитами, "
+"содержащими конфликты, следуйте приведённой ниже схеме."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2120
+msgid "checkout the pull request `git checkout github/pull/XXX`"
+msgstr "извлеките запрос на принятие изменений `git checkout github/pull/XXX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2121
+msgid "create a branch to rebase `git checkout -b staging`"
+msgstr "создайте ветку для перебазирования `git checkout -b staging`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2122
+msgid ""
+"rebase the `staging` branch to the latest `main` with `git rebase -i main "
+"staging`"
+msgstr ""
+"перебазируйте ветку `staging` на последнюю версию `main` с помощью `git "
+"rebase -i main staging`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2123
+msgid "resolve conflicts and do whatever testing is needed"
+msgstr "разрешите конфликты и проведите все необходимые тестирования"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2124
+msgid "fast forward the `staging` branch into `main` as above"
+msgstr "перемотайте (fast-forward) ветку `staging` в `main`, как описано выше"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2125
+msgid "final sanity check of changes to make sure all is well"
+msgstr ""
+"сделайте финальную проверку изменений, чтобы убедиться, что всё в порядке"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2126
+msgid "push to FreeBSD's Git repository."
+msgstr "отправьте в репозиторий Git FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2128
+msgid ""
+"This will also work when bringing branches developed elsewhere into the "
+"local tree for committing."
+msgstr ""
+"Это также будет работать при внесении веток, разработанных в другом месте, в "
+"локальное дерево для коммита."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2131
+msgid ""
+"Once finished with the pull request, close it using GitHub's web interface. "
+"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."
+msgstr ""
+"После завершения работы с запросом на принятие изменений (pull request), "
+"закройте его с помощью веб-интерфейса GitHub. Стоит отметить, что если ваш "
+"источник `github` использует `https://`, единственным шагом, для которого "
+"потребуется учетная запись GitHub, будет закрытие запроса на принятие "
+"изменений."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2133
+#, no-wrap
+msgid "Version Control History"
+msgstr "История системы контроля версий"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2136
+msgid "The project has moved to crossref:committers-guide[git-primer,git]."
+msgstr "Проект перешёл на crossref:committers-guide[git-primer,git]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2142
+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 ""
+"Репозиторий исходных кодов FreeBSD перешёл с CVS на Subversion 31 мая 2008 "
+"года. Первый настоящий коммит SVN — __r179447__. Репозиторий исходных кодов "
+"перешёл с Subversion на Git 23 декабря 2020 года. Последний настоящий коммит "
+"svn — __r368820__. Хеш первого настоящего коммита git — "
+"__5ef5f51d2bef80b0ede9b10ad5b0e9440b60518c__."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2148
+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 ""
+"Репозиторий `doc/www` FreeBSD перешёл с CVS на Subversion 19 мая 2012 года. "
+"Первый настоящий коммит SVN — __r38821__. Репозиторий документации перешёл с "
+"Subversion на Git 8 декабря 2020 года. Последний коммит SVN — __r54737__. "
+"Первый настоящий хэш коммита git — "
+"__3be01a475855e7511ad755b2defd2e0da5d58bbe__."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2154
+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 ""
+"Репозиторий `ports` FreeBSD перешел с CVS на Subversion 14 июля 2012 года. "
+"Первый настоящий коммит SVN — __r300894__. Репозиторий ports перешел с "
+"Subversion на Git 6 апреля 2021 года. Последний коммит SVN — __r569609__. "
+"Первый настоящий хэш коммита git — "
+"__ed8d3eda309dd863fb66e04bccaa513eee255cbf__."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2156
+#, no-wrap
+msgid "Setup, Conventions, and Traditions"
+msgstr "Настройка, соглашения и традиции"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2161
+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: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2163
+#, no-wrap
+msgid "For New Committers"
+msgstr "Для новых коммиттеров"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2166
+msgid ""
+"Those who have been given commit rights to the FreeBSD repositories must "
+"follow these steps."
+msgstr ""
+"Те, кому предоставлены права на коммит в репозитории FreeBSD, должны "
+"выполнить следующие шаги."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2168
+msgid "Get mentor approval before committing each of these changes!"
+msgstr ""
+"Получите одобрение наставника перед внесением каждого из этих изменений!"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2169
+msgid ""
+"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."
+msgstr ""
+"Все коммиты в [.filename]#src# сначала попадают в FreeBSD-CURRENT, прежде "
+"чем быть слитыми в FreeBSD-STABLE. Ветка FreeBSD-STABLE должна сохранять "
+"совместимость ABI и API с предыдущими версиями этой ветки. Не делайте "
+"слияние изменений, нарушающих эту совместимость."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2174
+#, fuzzy
+#| msgid "*Steps for New Committers*\n"
+msgid "*Steps for New Committers*"
+msgstr "*Шаги для новых коммиттеров*\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2176
+msgid "Add an Author Entity"
+msgstr "Добавить автора"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2178
+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# - Добавить информацию об авторе. "
+"Последующие шаги зависят от этой информации, и пропуск этого шага приведёт к "
+"сбою сборки [.filename]#doc/#. Это относительно простая задача, но она "
+"остаётся хорошим первым испытанием навыков работы с системой контроля версий."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2179
+msgid "Update the List of Developers and Contributors"
+msgstr "Обновить список разработчиков и участников"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2181
+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# - Добавьте запись, которая "
+"затем появится в разделе \"Разработчики\" extref:{contributors}[Списка "
+"контрибьюторов, staff-committers]. Записи сортируются по фамилии."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2183
+msgid ""
+"[.filename]#doc/shared/contrib-additional.adoc# - _Remove_ the entry. "
+"Entries are sorted by first name."
+msgstr ""
+"[.filename]#doc/shared/contrib-additional.adoc# - _Удалить_ запись. Записи "
+"отсортированы по имени."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2184
+msgid "Add a News Item"
+msgstr "Добавление статьи в Новости"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2186
+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."
+msgstr ""
+"[.filename]#doc/website/data/en/news/news.toml# - Добавьте запись. Найдите "
+"другие записи, объявляющие о новых коммиттерах, и следуйте формату. "
+"Используйте дату из письма об утверждении коммиттерских прав."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2187
+msgid "Add a PGP Key"
+msgstr "Добавить PGP-ключ"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2189
+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}` написал сценарий оболочки ([.filename]#doc/documentation/tools/"
+"addkey.sh#) для упрощения этого процесса. Для получения дополнительной "
+"информации обратитесь к файлу https://cgit.freebsd.org/doc/plain/"
+"documentation/static/pgpkeys/README[README]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2191
+msgid ""
+"Use [.filename]#doc/documentation/tools/checkkey.sh# to verify that keys "
+"meet minimal best-practices standards."
+msgstr ""
+"Используйте [.filename]#doc/documentation/tools/checkkey.sh# для проверки, "
+"что ключи соответствуют как минимум минимальным стандартам лучших практик."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2193
+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 ""
+"После добавления и проверки ключа добавьте оба обновленных файла в систему "
+"контроля версий и затем зафиксируйте (commit) их. Записи в этом файле "
+"отсортированы по фамилии."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2197
+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 ""
+"Очень важно иметь актуальный PGP/GnuPG ключ в репозитории. Ключ может "
+"потребоваться для подтверждения личности коммиттера. Например, `{admins}` "
+"используют его для восстановления учетной записи. Полный набор ключей "
+"пользователей `FreeBSD.org` доступен для скачивания по ссылке link:https://"
+"docs.FreeBSD.org/pgpkeys/pgpkeys.txt[https://docs.FreeBSD.org/pgpkeys/"
+"pgpkeys.txt]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2199
+msgid "Update Mentor and Mentee Information"
+msgstr "Обновление информации о наставнике и подопечном"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2201
+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# - Добавить запись в "
+"раздел текущих коммиттеров, где _repository_ - это `doc`, `ports` или `src`, "
+"в зависимости от предоставленных прав коммита."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2203
+msgid ""
+"Add an entry for each additional mentor/mentee relationship in the bottom "
+"section."
+msgstr ""
+"Добавьте запись для каждого дополнительного отношения наставник/подопечный в "
+"нижнем разделе."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2204
+msgid "Generate a Kerberos Password"
+msgstr "Сгенерировать пароль Kerberos"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2206
+msgid ""
+"See crossref:committers-guide[kerberos-ldap, Kerberos and LDAP web Password "
+"for FreeBSD Cluster] 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 ""
+"См. crossref:committers-guide[kerberos-ldap, Kerberos и LDAP веб-пароль для "
+"кластера FreeBSD] для генерации или настройки учётной записи Kerberos для "
+"использования с другими сервисами FreeBSD, такими как link:https://"
+"bugs.freebsd.org/bugzilla/[база данных отслеживания ошибок] (вы получаете "
+"учётную запись для отслеживания ошибок как часть этого шага)."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2207
+msgid "Optional: Enable Wiki Account"
+msgstr "Необязательно: Включить учётную запись Вики"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2211
+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 ""
+"Учётная запись link:https://wiki.freebsd.org[FreeBSD Wiki] — учётная запись "
+"на вики позволяет делиться проектами и идеями. Те, у кого ещё нет учётной "
+"записи, могут следовать инструкциям на странице link:https://"
+"wiki.freebsd.org/Wiki/About[Wiki/About], чтобы её получить. Свяжитесь с "
+"mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org], если вам нужна помощь "
+"с вашей учётной записью на Вики."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2212
+msgid "Optional: Update Wiki Information"
+msgstr "Необязательно: Обновить информацию в Вики"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2214
+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 ""
+"Информация в вики — получив доступ к вики, некоторые добавляют записи на "
+"страницы https://wiki.freebsd.org/HowWeGotHere[Как мы сюда попали], https://"
+"wiki.freebsd.org/IRC/Nicknames[IRC-псевдонимы], https://wiki.freebsd.org/"
+"Community/Dogs[Собаки FreeBSD] и/или https://wiki.freebsd.org/Community/"
+"Cats[Кошки FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2215
+msgid "Optional: Update Ports with Personal Information"
+msgstr "Необязательно: Обновить порты с личной информацией"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2217
+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# и "
+"[.filename]#src/usr.bin/calendar/calendars/calendar.freebsd# — Некоторые "
+"люди добавляют в эти файлы записи о себе, чтобы указать своё местоположение "
+"или дату своего дня рождения."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2218
+msgid "Optional: Prevent Duplicate Mailings"
+msgstr "Необязательно: Предотвращение повторных рассылок"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2220
+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 ""
+"Подписчики {dev-commits-doc-all}, {dev-commits-ports-all} или {dev-commits-"
+"src-all}, возможно, захотят отписаться, чтобы избежать получения дубликатов "
+"сообщений о коммитах и ответов на них."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2223
+#, no-wrap
+msgid "For Everyone"
+msgstr "Для всех"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2229
+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 ""
+"Представьтесь другим разработчикам, иначе никто не будет иметь "
+"представления, кто вы и над чем работаете. Представление не должно быть "
+"исчерпывающей биографией — просто напишите абзац или два о том, кто вы, чем "
+"планируете заниматься как разработчик в FreeBSD, и кто будет вашим "
+"наставником. Отправьте это по электронной почте на {developers-name}, и вы "
+"начнёте свой путь!"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2230
+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 ""
+"Войдите на `freefall.FreeBSD.org` и создайте файл [.filename]#/var/forward/"
+"пользователь# (где _пользователь_ — это ваше имя пользователя), содержащий "
+"адрес электронной почты, на который должны перенаправляться письма, "
+"адресованные на _вашеимяпользователя_@FreeBSD.org. Это включает все "
+"сообщения о коммитах, а также любую другую почту, адресованную {committers-"
+"name} и {developers-name}. Очень большие почтовые ящики, которые заняли "
+"постоянное место на `freefall`, могут быть усечены без предупреждения, если "
+"потребуется освободить место, поэтому перенаправляйте или сохраняйте их в "
+"другом месте."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2234
+msgid ""
+"If your e-mail system uses SPF with strict rules, you should exclude "
+"`mx2.FreeBSD.org` from SPF checks."
+msgstr ""
+"Если ваша система электронной почты использует SPF со строгими правилами, "
+"вам следует исключить `mx2.FreeBSD.org` из проверок SPF."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2237
+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 ""
+"Из-за высокой нагрузки, которую обработка СПАМа создает на центральных "
+"почтовых серверах, обрабатывающих почтовые рассылки, фронтенд-сервер "
+"выполняет базовые проверки и может отбрасывать некоторые сообщения на их "
+"основе. В настоящее время единственной активной проверкой является наличие "
+"корректной DNS-информации для подключающегося хоста, но это может "
+"измениться. Некоторые пользователи связывают эти проверки с ложным "
+"отбрасыванием легитимной почты. Для отключения данных проверок для вашей "
+"почты создайте файл с именем [.filename]#~/.spam_lover# на "
+"`freefall.FreeBSD.org`."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2241
+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 ""
+"Те, кто являются разработчиками, но не коммиттерами, не будут подписаны на "
+"рассылки коммиттеров или разработчиков. Подписки определяются правами "
+"доступа."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2245
+#, no-wrap
+msgid "SMTP Access Setup"
+msgstr "Настройка доступа SMTP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2248
+msgid ""
+"For those willing to send e-mail messages through the FreeBSD.org "
+"infrastructure, follow the instructions below:"
+msgstr ""
+"Для тех, кто желает отправлять электронные письма через инфраструктуру "
+"FreeBSD.org, следуйте приведенным ниже инструкциям:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2252
+msgid "Point your mail client at `smtp.FreeBSD.org:587`."
+msgstr "Направьте ваш почтовый клиент на `smtp.FreeBSD.org:587`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2253
+msgid "Enable STARTTLS."
+msgstr "Включить STARTTLS."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2254
+msgid "Ensure your `From:` address is set to `_yourusername_@FreeBSD.org`."
+msgstr ""
+"Убедитесь, что ваш адрес `From:` установлен как "
+"`_вашеимяпользователя_@FreeBSD.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2256
+msgid ""
+"For authentication, you can use your FreeBSD Kerberos username and password "
+"(see crossref:committers-guide[kerberos-ldap, Kerberos and LDAP web Password "
+"for FreeBSD Cluster]). The `_yourusername_/mail` principal is preferred, as "
+"it is only valid for authenticating to mail resources."
+msgstr ""
+"Для аутентификации можно использовать ваше имя пользователя и пароль FreeBSD "
+"Kerberos (см. crossref:committers-guide[kerberos-ldap, Kerberos и LDAP веб-"
+"пароль для кластера FreeBSD]). Предпочтительнее использовать принципал "
+"`_вашеимяпользователя_/mail`, так как он действителен только для "
+"аутентификации к почтовым ресурсам."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2260
+msgid "Do not include `@FreeBSD.org` when entering in your username."
+msgstr "При вводе имени пользователя не включайте `@FreeBSD.org`."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2262
+#, no-wrap
+msgid "Additional Notes"
+msgstr "Дополнительные заметки"
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2266
+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 ""
+"Будет принимать почту только от `_вашеимяпользователя_@FreeBSD.org`. Если вы "
+"аутентифицированы как один пользователь, вам не разрешено отправлять почту "
+"от другого."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2267
+msgid ""
+"A header will be appended with the SASL username: (`Authenticated sender: "
+"_username_`)."
+msgstr ""
+"Будет добавлен заголовок сообщения с именем пользователя SASL: "
+"(`Authenticated sender: _имя_пользователя_`)."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2268
+msgid ""
+"Host has various rate limits in place to cut down on brute force attempts."
+msgstr ""
+"На хосте действуют различные ограничения по скорости для сокращения попыток "
+"взлома перебором паролей."
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2272
+#, no-wrap
+msgid "Using a Local MTA to Forward Emails to the FreeBSD.org SMTP Service"
+msgstr "Использование локального MTA для пересылки электронной почты в SMTP-сервис FreeBSD.org"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2275
+msgid ""
+"It is also possible to use a local MTA to forward locally sent emails to the "
+"FreeBSD.org SMTP servers."
+msgstr ""
+"Также возможно использовать локальный MTA для пересылки локально "
+"отправленных писем на SMTP-серверы FreeBSD.org."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2277
+#, no-wrap
+msgid "Using Postfix"
+msgstr "Использование Postfix"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2282
+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 ""
+"Чтобы сообщить локальному экземпляру Postfix, что любое письмо от "
+"`_вашеимяпользователя_@FreeBSD.org` должно быть перенаправлено на серверы "
+"FreeBSD.org, добавьте это в ваш [.filename]#main.cf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2290
+#, no-wrap
+msgid ""
+"sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/relayhost_maps\n"
+"smtp_sasl_auth_enable = yes\n"
+"smtp_sasl_security_options = noanonymous\n"
+"smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd\n"
+"smtp_use_tls = yes\n"
+msgstr ""
+"sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/relayhost_maps\n"
+"smtp_sasl_auth_enable = yes\n"
+"smtp_sasl_security_options = noanonymous\n"
+"smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd\n"
+"smtp_use_tls = yes\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2293
+msgid ""
+"Create [.filename]#/usr/local/etc/postfix/relayhost_maps# with the following "
+"content:"
+msgstr ""
+"Создайте файл [.filename]#/usr/local/etc/postfix/relayhost_maps# со "
+"следующим содержимым:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2297
+#, no-wrap
+msgid "yourusername@FreeBSD.org [smtp.freebsd.org]:587\n"
+msgstr "вашеимяпользователя@FreeBSD.org [smtp.freebsd.org]:587\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2300
+msgid ""
+"Create [.filename]#/usr/local/etc/postfix/sasl_passwd# with the following "
+"content:"
+msgstr ""
+"Создайте [.filename]#/usr/local/etc/postfix/sasl_passwd# со следующим "
+"содержимым:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2304
+#, no-wrap
+msgid "[smtp.freebsd.org]:587 yourusername:yourpassword\n"
+msgstr "[smtp.freebsd.org]:587 вашеимяпользователя:вашпароль\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2307
+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#:"
+msgstr ""
+"Если почтовый сервер используется другими людьми, вы можете захотеть "
+"предотвратить отправку ими писем с вашего адреса. Для достижения этой цели "
+"добавьте это в ваш [.filename]#main.cf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2312
+#, no-wrap
+msgid ""
+"smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps\n"
+"smtpd_sender_restrictions = reject_known_sender_login_mismatch\n"
+msgstr ""
+"smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps\n"
+"smtpd_sender_restrictions = reject_known_sender_login_mismatch\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2315
+msgid ""
+"Create [.filename]#/usr/local/etc/postfix/sender_login_maps# with the "
+"following content:"
+msgstr ""
+"Создайте файл [.filename]#/usr/local/etc/postfix/sender_login_maps# со "
+"следующим содержимым:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2319
+#, no-wrap
+msgid "yourusername@FreeBSD.org yourlocalusername\n"
+msgstr "вашеимяпользователя@FreeBSD.org вашеимялокальногопользователя\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2322
+msgid ""
+"Where _yourlocalusername_ is the SASL username used to connect to the local "
+"instance of Postfix."
+msgstr ""
+"Где _вашеимялокальногопользователя_ — это имя пользователя SASL, "
+"используемое для подключения к локальному экземпляру Postfix."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2325
+#, no-wrap
+msgid "Using OpenSMTPD"
+msgstr "Использование OpenSMTPD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2330
+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#:"
+msgstr ""
+"Чтобы указать локальному экземпляру OpenSMTPD, что все письма от "
+"`_вашеимяпользователя_@FreeBSD.org` должны быть перенаправлены на серверы "
+"FreeBSD.org, добавьте это в ваш [.filename]#smtpd.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2335
+#, no-wrap
+msgid ""
+"action \"freebsd\" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth <secrets>\n"
+"match from any auth yourlocalusername mail-from \"_yourusername_@freebsd.org\" for any action \"freebsd\"\n"
+msgstr ""
+"action \"freebsd\" relay host smtp+tls://freebsd@smtp.freebsd.org:587 auth <secrets>\n"
+"match from any auth вашеимялокальногопользователя mail-from \"_вашеимяпользователя_@freebsd.org\" for any action \"freebsd\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2338
+msgid ""
+"Where _yourlocalusername_ is the SASL username used to connect to the local "
+"instance of OpenSMTPD."
+msgstr ""
+"Где _вашеимялокальногопользователя_ — это имя пользователя SASL, "
+"используемое для подключения к локальному экземпляру OpenSMTPD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2340
+msgid ""
+"Create [.filename]#/usr/local/etc/mail/secrets# with the following content:"
+msgstr ""
+"Создайте файл [.filename]#/usr/local/etc/mail/secrets# со следующим "
+"содержимым:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2344
+#, no-wrap
+msgid "freebsd\tyourusername:yourpassword\n"
+msgstr "freebsd\tвашеимяпользователя:вашпароль\n"
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2348
+#, no-wrap
+msgid "Using Exim"
+msgstr "Использование Exim"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2354
+#, 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 ""
+"Чтобы направить локальный экземпляр Exim для пересылки всей почты от\n"
+"`_example_@FreeBSD.org` на серверы FreeBSD.org, добавьте это в [.filename]#конфигурацию# Exim:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2363
+#, 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: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2375
+#, 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: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2382
+#, no-wrap
+msgid ""
+"Authenticators:\n"
+"freebsd_plain:\n"
+" driver = plaintext\n"
+" public_name = PLAIN\n"
+" client_send = ^example/mail^examplePassword\n"
+" client_condition = ${if eq{$host}{smtp.freebsd.org}}\n"
+msgstr ""
+"Authenticators:\n"
+"freebsd_plain:\n"
+" driver = plaintext\n"
+" public_name = PLAIN\n"
+" client_send = ^example/mail^examplePassword\n"
+" client_condition = ${if eq{$host}{smtp.freebsd.org}}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2385
+msgid ""
+"Create [.filename]#/usr/local/etc/exim/freebsd_send# with the following "
+"content:"
+msgstr ""
+"Создайте файл [.filename]#/usr/local/etc/exim/freebsd_send# со следующим "
+"содержимым:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2389
+#, no-wrap
+msgid "example@freebsd.org:smtp.freebsd.org::587\n"
+msgstr "example@freebsd.org:smtp.freebsd.org::587\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2394
+#, no-wrap
+msgid "Mentors"
+msgstr "Наставники"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2399
+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:2402
+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 ""
+"Для коммиттеров: не коммитьте ничего без предварительного одобрения ментора. "
+"Задокументируйте это одобрение строкой `Approved by:` в сообщении коммита."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2407
+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 crossref:committers-guide[admin-branch, \"admin\" branch]."
+msgstr ""
+"Когда наставник решает, что подопечный освоил основы и готов к "
+"самостоятельной фиксации изменений, наставник объявляет об этом, выполняя "
+"коммит в [.filename]#mentors#. Этот файл находится в сиротской ветке "
+"[.filename]#admin# каждого репозитория. Подробная информация о том, как "
+"получить доступ к этим веткам, доступна в crossref:committers-guide[admin-"
+"branch, ветке \"admin\"]."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2409
+#, no-wrap
+msgid "Pre-Commit Review"
+msgstr "Предварительная проверка перед коммитом"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2414
+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 ""
+"Рецензирование кода — один из способов повышения качества программного "
+"обеспечения. Следующие рекомендации применимы к коммитам в ветку `main` (-"
+"CURRENT) репозитория `src`. Другие ветки, а также деревья `ports` и `docs` "
+"имеют собственные политики проверки и рецензирования, но данные рекомендации "
+"в целом применимы к коммитам, требующим рецензии:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2416
+msgid ""
+"All non-trivial changes should be reviewed before they are committed to the "
+"repository."
+msgstr ""
+"Все нетривиальные изменения должны быть проверены перед их фиксацией в "
+"репозитории."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2417
+msgid ""
+"Reviews may be conducted by email, in Bugzilla, in Phabricator, or by "
+"another mechanism. Where possible, reviews should be public."
+msgstr ""
+"Рецензирование может проводиться по электронной почте, в Bugzilla, в "
+"Phabricator или с помощью другого механизма. По возможности рецензирование "
+"должно быть публичным."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2418
+msgid ""
+"The developer responsible for a code change is also responsible for making "
+"all necessary review-related changes."
+msgstr ""
+"Разработчик, ответственный за изменение кода, также обязан вносить все "
+"необходимые изменения, связанные с проверкой."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2419
+msgid ""
+"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."
+msgstr ""
+"Рецензирование кода может быть итеративным процессом, который продолжается "
+"до тех пор, пока патч не будет готов к коммиту. В частности, после отправки "
+"патча на рецензирование, он должен получить явное подтверждение \"выглядит "
+"хорошо\" перед коммитом. Оно должно быть явным, и это может принимать любую "
+"форму, которая имеет смысл для метода резензирования."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2420
+msgid "Timeouts are not a substitute for review."
+msgstr "Тайм-ауты не являются заменой проверке."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2422
+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:"
+msgstr ""
+"Иногда проверка кода занимает больше времени, чем хотелось бы, особенно для "
+"большого по объему функционала. Принятые способы ускорить проверку ваших "
+"патчей:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2424
+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 ""
+"Проверяйте патчи других людей. Если вы помогаете, все будут более охотно "
+"делать то же самое для вас; доброжелательность — наша валюта."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2425
+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 ""
+"Пингуйте патч. Если он срочный, укажите причины, почему для вас важно, чтобы "
+"этот патч был принят, и пингуйте каждые пару дней. Если он не срочный, "
+"общепринятая вежливая частота пинга — одна неделя. Помните, что вы просите у "
+"других профессиональных разработчиков их ценное время."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2426
+msgid ""
+"Ask for help on mailing lists, IRC, etc. Others may be able to either help "
+"you directly, or suggest a reviewer."
+msgstr ""
+"Обратитесь за помощью в списки рассылки, IRC и т.д. Другие могут либо помочь "
+"вам напрямую, либо предложить рецензента."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2427
+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 ""
+"Разделите ваш патч на несколько меньших патчей, которые основываются друг на "
+"друге. Чем меньше ваш патч, тем выше вероятность, что кто-то бегло его "
+"просмотрит."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2429
+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 ""
+"При внесении крупных изменений полезно держать это в уме с самого начала "
+"работы, поскольку разбиение крупных изменений на более мелкие часто бывает "
+"затруднительно постфактум."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2434
+msgid ""
+"Developers should participate in code reviews as both reviewers and "
+"reviewees. If someone is kind enough to review your code, you should return "
+"the favor for someone else. Note that while anyone is welcome to review and "
+"give feedback on a patch, only an appropriate subject-matter expert can "
+"approve a change. This will usually be a committer who works with the code "
+"in question on a regular basis."
+msgstr ""
+"Разработчикам следует участвовать в проверках кода как в роли авторов, так и "
+"в роли рецензентов. Если кто-то любезно проверил ваш код, вы должны ответить "
+"тем же для кого-то другого. Обратите внимание, что хотя любой может "
+"проверить и дать обратную связь по патчу, только соответствующий эксперт по "
+"теме может одобрить изменение. Обычно это коммиттер, который регулярно "
+"работает с рассматриваемым кодом."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2437
+msgid ""
+"In some cases, no subject-matter expert may be available. In those cases, a "
+"review by an experienced developer is sufficient when coupled with "
+"appropriate testing."
+msgstr ""
+"В некоторых случаях может не оказаться эксперта по предметной области. В "
+"таких случаях достаточно проверки опытным разработчиком в сочетании с "
+"соответствующим тестированием."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2439
+#, no-wrap
+msgid "Commit Log Messages"
+msgstr "Журнал сообщений о коммитах"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2442
+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:2443
+#, no-wrap
+msgid "Why are commit messages important?"
+msgstr "Почему важны сообщения коммитов?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2447
+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 ""
+"При фиксации изменения в Git, Subversion или другой системе контроля версий "
+"(СКВ) вам предлагается написать текст с описанием коммита — сообщение о "
+"коммите. Насколько важно это сообщение о коммите? Стоит ли прилагать "
+"значительные усилия для его написания? Имеет ли значение, если вы просто "
+"напишете `исправлена ошибка`?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2450
+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:2453
+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 сотни активных разработчиков и сотни тысяч коммитов, охватывающих "
+"десятилетия истории. За это время сообщество разработчиков осознало, "
+"насколько ценны хорошие сообщения к коммитам; иногда эти уроки давались "
+"тяжело."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2455
+msgid "Commit messages serve at least three purposes:"
+msgstr "Сообщения коммитов служат как минимум трем целям:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2457
+msgid "Communicating with other developers"
+msgstr "Сотрудничество с другими"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2462
+msgid ""
+"FreeBSD commits generate email to various mailing lists. These include the "
+"commit message along with a copy of the patch itself. Commit messages are "
+"also viewed through commands like git log. 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."
+msgstr ""
+"Коммиты FreeBSD генерируют письма для различных списков рассылки. Они "
+"включают сообщение коммита вместе с копией самого патча. Сообщения коммитов "
+"также просматриваются с помощью команд, таких как `git log`. Это служит для "
+"информирования других разработчиков об изменениях, которые происходят; "
+"другой разработчик может захотеть протестировать изменение, может быть "
+"заинтересован в теме и захочет просмотреть более подробно, или может иметь "
+"свои собственные проекты, которые выиграют от взаимодействия."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2464
+msgid "Making Changes Discoverable"
+msgstr "Обеспечение возможности обнаружения изменений"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2468
+msgid ""
+"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. Verbose, "
+"detailed commit messages allow searches for changes that might be relevant. "
+"For example, `git log --since 1year --grep 'USB timeout'`."
+msgstr ""
+"В большом проекте с долгой историей может быть сложно найти интересующие "
+"изменения при расследовании проблемы или изменения в поведении. Подробные, "
+"детальные сообщения о коммитах позволяют искать изменения, которые могут "
+"быть релевантны. Например, `git log --since 1year --grep 'USB timeout'`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2470
+msgid "Providing historical documentation"
+msgstr "Предоставление исторической документации"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2474
+msgid ""
+"Commit messages serve to document changes for future developers, perhaps "
+"years or decades later. This future developer may even be you, the original "
+"author. A change that seems obvious today may be decidedly not so much "
+"later on."
+msgstr ""
+"Сообщения о фиксации служат для документирования изменений для будущих "
+"разработчиков, возможно, спустя годы или десятилетия. Этот будущий "
+"разработчик может оказаться даже вами, первоначальным автором. Изменение, "
+"которое кажется очевидным сегодня, может оказаться совсем не таким в будущем."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2476
+msgid ""
+"The `git blame` command annotates each line of a source file with the change "
+"(hash and subject line) that brought it in."
+msgstr ""
+"Команда `git blame` аннотирует каждую строку исходного файла информацией о "
+"изменении (хэш и тема коммита), которое её добавило."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2478
+msgid ""
+"Having established the importance, here are elements of a good FreeBSD "
+"commit message:"
+msgstr ""
+"Теперь, когда важность хорошего сообщения о коммите в FreeBSD несомненна, "
+"вот его элементы:"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2479
+#, no-wrap
+msgid "Start with a subject line"
+msgstr "Начните со строки темы"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2483
+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:2484
+#, no-wrap
+msgid "Keep subject lines short"
+msgstr "Сохраняйте заголовки краткими"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2489
+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 67 characters, and "
+"aim for about 50 or fewer if possible."
+msgstr ""
+"Строка темы должна быть максимально короткой, но при этом сохранять "
+"необходимую информацию. Это повышает эффективность просмотра журнала Git и "
+"позволяет команде `git log --oneline` отображать короткий хэш и тему на "
+"одной 80-символьной строке. Хорошим эмпирическим правилом является удержание "
+"длины ниже 67 символов, а по возможности — около 50 или меньше."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2490
+#, 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:2494
+msgid ""
+"If the change relates to a specific component the subject line may be "
+"prefixed with that component name and a colon (:). If applicable, try to "
+"use the same prefix used in previous commits to the same files."
+msgstr ""
+"Если изменение относится к определённому компоненту, строка темы может быть "
+"предварена именем этого компонента и двоеточием (:). По возможности "
+"используйте тот же префикс, который применялся в предыдущих коммитах к тем "
+"же файлам."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2496
+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:2498
+msgid ""
+"Include the prefix in the 67-character limit suggested above, so that `git "
+"log --oneline` avoids wrapping."
+msgstr ""
+"Включите префикс в лимит 67 символов, чтобы `git log --oneline` избегал "
+"переноса."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2499
+#, no-wrap
+msgid "Capitalize the first letter of the subject"
+msgstr "Напишите первую букву темы с заглавной буквы"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2503
+msgid ""
+"Capitalize the first letter of the subject itself. The prefix, if any, is "
+"not capitalized unless necessary (e.g., `USB:` is capitalized)."
+msgstr ""
+"Первая буква темы должна быть заглавной. Префикс, если он есть, с заглавной "
+"буквы не пишется, если это не требуется (например, `USB:` пишется с "
+"заглавной буквы)."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2504
+#, no-wrap
+msgid "Do not end the subject line with punctuation"
+msgstr "Не заканчивайте строку темы знаками препинания"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2508
+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:2509
+#, 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:2512
+msgid "Separate the body from the subject with a blank line."
+msgstr "Отделите тело от темы пустой строкой."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2514
+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:2516
+msgid "✓ `ls: Fix typo in usage text`"
+msgstr "✓ `ls: Fix typo in usage text`"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2517
+#, no-wrap
+msgid "Limit messages to 72 columns"
+msgstr "Ограничьте сообщения до 72 колонок"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2523
+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` и `git format-patch` делают отступ в сообщении коммита на четыре "
+"пробела. Перенос строк на 72-й колонке обеспечивает соответствующий отступ "
+"по правому краю. Ограничение сообщений 72 символами также удерживает "
+"сообщение коммита в форматированных патчах ниже рекомендованного RFC 2822 "
+"ограничения длины строки электронной почты в 78 символов. Это ограничение "
+"хорошо работает с различными инструментами, которые могут отображать "
+"сообщения коммитов; перенос строк может быть непоследовательным при большей "
+"длине строки."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2524
+#, no-wrap
+msgid "Use the present tense, imperative mood"
+msgstr "Используйте настоящее время, повелительное наклонение"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2529
+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 ""
+"Это способствует краткости тем и обеспечивает единообразие, включая "
+"автоматически генерируемые сообщения коммитов (например, создаваемые `git "
+"revert`). Это важно при чтении списка тем коммитов. Думайте о теме как о "
+"завершении фразы «при применении это изменение позволит...(when applied, "
+"this change will ...)»."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2534
+#, 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:2535
+#, no-wrap
+msgid "Focus on what and why, not how"
+msgstr "Сосредоточьтесь на том, что и почему, а не на том, как"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2538
+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:2542
+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:2544
+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:2545
+#, 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:2548
+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:2549
+#, no-wrap
+msgid "Write commit messages for your future self"
+msgstr "Напишите сообщения коммитов для себя в будущем"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2553
+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:2554
+#, no-wrap
+msgid "Commit messages should stand alone"
+msgstr "Сообщения о коммитах должны быть самодостаточными"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2558
+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:2562
+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 ""
+"Аналогично, коммит может ссылаться на предыдущий коммит, например, в случае "
+"исправления ошибки или отката. Помимо идентификатора коммита (ревизии или "
+"хеша), включите строку темы из упомянутого коммита (или другую подходящую "
+"краткую ссылку). С каждой миграцией системы контроля версий (от CVS к "
+"Subversion и затем к Git) идентификаторы ревизий из предыдущих систем могут "
+"становиться трудными для отслеживания."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2563
+#, no-wrap
+msgid "Include appropriate metadata in a footer"
+msgstr "Укажите необходимые метаданные в нижней части"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2566
+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:2568
+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:2570
+msgid ""
+"For key words where multiple values make sense (e.g., `PR:` with a comma-"
+"separated list of PRs), it is permitted to use the same keyword multiple "
+"times to avoid ambiguity or improve readability."
+msgstr ""
+"Для ключевых слов, где допустимы множественные значения (например, `PR:` со "
+"списком PR через запятую), разрешается использовать одно и то же ключевое "
+"слово несколько раз, чтобы избежать неоднозначности или улучшить читаемость."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2572
+msgid "The key words or phrases are:"
+msgstr "Ключевые слова или фразы:"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2578
+#, no-wrap
+msgid "`PR:`"
+msgstr "`PR:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2580
+#, 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 "Номер отчета о проблеме (если есть), на который влияет данный коммит (обычно путем закрытия). Можно указать несколько номеров PR в одной строке, разделяя их запятыми или пробелами."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2581
+#, no-wrap
+msgid "`Reported by:`"
+msgstr "`Reported by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2585
+#, 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 ""
+"Имя и адрес электронной почты лица, сообщившего о проблеме; для разработчиков — только имя пользователя в кластере FreeBSD.\n"
+"Обычно используется, когда нет PR, например, если проблема была сообщена в\n"
+"почтовой рассылке."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2587
+#, no-wrap
+msgid ""
+"`Submitted by:` +\n"
+"(deprecated)"
+msgstr ""
+"`Submitted by:` +\n"
+"(deprecated)"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2589
+#, 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 "Это устарело в git; отправляемые патчи должны указывать автора с помощью `git commit --author` с указанием полного имени и действительного email."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2590
+#, no-wrap
+msgid "`Reviewed by:`"
+msgstr "`Reviewed by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2605
+#, 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 ""
+"Имя и адрес электронной почты человека или людей, которые проверили изменение; для разработчиков достаточно указать имя пользователя в кластере FreeBSD. Если патч был отправлен в список рассылки для проверки и получил положительный отзыв, то укажите только название списка. Если рецензент не является участником проекта, укажите имя, электронную почту и, если это порт, внешнюю роль, например, сопровождающего:\n"
+"\n"
+"Проверено разработчиком:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: username\n"
+"....\n"
+"\n"
+"Проверено сопровождающим портов, не являющимся разработчиком:\n"
+"[source,shell]\n"
+"....\n"
+"Reviewed by: Full Name <valid@email> (maintainer)\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2606
+#, no-wrap
+msgid "`Tested by:`"
+msgstr "`Tested by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2608
+#, 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 "Имя и адрес электронной почты человека или людей, которые проверили изменение; для разработчиков — просто имя пользователя в кластере FreeBSD."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2609
+#, no-wrap
+msgid "`Discussed with:`"
+msgstr "`Discussed with:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2612
+#, no-wrap
+msgid ""
+"The name and e-mail address of the person or people that contributed to the patch by providing meaningful feedback; for developers, just the username on the FreeBSD cluster.\n"
+"Typically used to credit those who did not explicitly review, test, or approve the change, but nevertheless contributed to the discussion surrounding the change, which led to improvements and a better understanding of its impact on the FreeBSD project."
+msgstr ""
+"Имя и адрес электронной почты человека или людей, которые внесли вклад в исправление, предоставив содержательную обратную связь; для разработчиков — просто имя пользователя в кластере FreeBSD.\n"
+"Обычно используется для упоминания тех, кто не проводил явного рецензирования, тестирования или одобрения изменения, но тем не менее участвовал в обсуждении, связанном с изменением, что привело к улучшениям и лучшему пониманию его влияния на проект FreeBSD."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2613
+#, no-wrap
+msgid "`Approved by:`"
+msgstr "`Approved by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2639
+#, 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 ""
+"Имя и адрес электронной почты лица или лиц, утвердивших изменение; для разработчиков — просто имя пользователя в кластере FreeBSD.\n"
+"\n"
+"Есть несколько случаев, когда утверждение является обычной практикой:\n"
+"\n"
+"* когда новый коммиттер находится под наставничеством\n"
+"* коммиты в область дерева, указанную в файле LOCKS (src)\n"
+"* во время цикла выпуска\n"
+"* коммиты в репозиторий, где у вас нет права на коммит (например, коммиттер src делает коммит в docs)\n"
+"* коммиты в порт, поддерживаемый кем-то другим\n"
+"\n"
+"Во время наставничества получите одобрение наставника перед коммитом. Укажите имя пользователя наставника в этом поле и отметьте, что он является наставником:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: имя-пользователя-наставника (mentor)\n"
+"....\n"
+"\n"
+"Если коммиты были утверждены командой, укажите название команды, за которым в скобках следует имя пользователя утверждающего. Например:\n"
+"\n"
+"[source,shell]\n"
+"....\n"
+"Approved by: re (имя-пользователя)\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2640
+#, no-wrap
+msgid "`Obtained from:`"
+msgstr "`Obtained from:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2642
+#, 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:2643
+#, no-wrap
+msgid "`Fixes:`"
+msgstr "`Fixes:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2646
+#, 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 --pretty=format:'%h (\"%s\")' GIT-COMMIT-HASH`.\n"
+"We include the commit title so that the referenced commit can be located even in the case that a future VCS migration invalidates hash references."
+msgstr ""
+"Короткий хэш Git и заголовок коммита, который исправлен этим изменением, как возвращается командой `git log -n 1 --pretty=format:'%h (\"%s\")' GIT-COMMIT-HASH`.\n"
+"Мы включаем заголовок коммита, чтобы можно было найти указанный коммит даже в случае, если будущая миграция системы контроля версий сделает ссылки по хэшу недействительными."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2647
+#, no-wrap
+msgid "`MFC after:`"
+msgstr "`MFC after:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2649
+#, 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 "Чтобы получить напоминание по электронной почте о запланированном MFC через определенное время, укажите количество дней, недель или месяцев, после которых планируется выполнить MFC."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2650
+#, no-wrap
+msgid "`MFC to:`"
+msgstr "`MFC to:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2652
+#, 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:2653
+#, no-wrap
+msgid "`MFH:`"
+msgstr "`MFH:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2655
+#, no-wrap
+msgid "If the commit is to be merged into a ports quarterly branch name, specify the quarterly branch. For example `2021Q2`."
+msgstr "Если коммиту должено быть сделано слияние в квартальную ветку портов, укажите квартальную ветку. Например, `2021Q2`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2656
+#, no-wrap
+msgid "`Relnotes:`"
+msgstr "`Relnotes:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2658
+#, 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 "Если изменение является кандидатом для включения в примечания к выпуску следующей версии из ветки, установите значение `yes`."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2659
+#, no-wrap
+msgid "`Security:`"
+msgstr "`Security:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2661
+#, 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 "Если изменение связано с уязвимостью или угрозой безопасности, укажите одну или несколько ссылок либо описание проблемы. По возможности включите URL VuXML или идентификатор CVE."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2662
+#, no-wrap
+msgid "`Event:`"
+msgstr "`Event:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2664
+#, 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 "Описание события, в рамках которого был выполнен этот коммит. Если это повторяющееся событие, добавьте год или даже месяц. Например, это может быть `FooBSDcon 2019`. Идея этой строки — отдать должное конференциям, встречам и другим подобным мероприятиям, а также показать, что их проведение полезно. Пожалуйста, не используйте строку `Sponsored by:` для этого, так как она предназначена для организаций, спонсирующих определённые функции, или разработчиков, работающих над ними."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2665
+#, no-wrap
+msgid "`Sponsored by:`"
+msgstr "`Sponsored by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2667
+#, 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 "Организации, спонсировавшие это изменение (если есть). Разделяйте несколько организаций запятыми. Если только часть работы была спонсирована или разные суммы спонсорской поддержки были предоставлены разным авторам, укажите соответствующую информацию в скобках после каждого имени спонсора. Например, `Example.com (alice, code refactoring), Wormulon (bob), Momcorp (cindy)` показывает, что Alice была спонсирована Example.com для рефакторинга кода, в то время как Wormulon спонсировал работу Bob, а Momcorp спонсировал работу Cindy. Другие авторы либо не были спонсированы, либо решили не указывать спонсорство."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2668
+#, no-wrap
+msgid "`Pull Request:`"
+msgstr "`Pull Request:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2672
+#, 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 ""
+"Это изменение было отправлено как запрос на принятие изменений (pull request) или запрос на слияние (merge request) в один из публичных Git-репозиториев FreeBSD только для чтения.\n"
+"Оно должно включать полный URL запроса на включение изменений, так как они часто выполняют роль рецензий кода.\n"
+"Например: `https://github.com/freebsd/freebsd-src/pull/745`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2673
+#, no-wrap
+msgid "`Co-authored-by:`"
+msgstr "`Co-authored-by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2676
+#, 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 ""
+"Имя и адрес электронной почты дополнительного автора коммита.\n"
+"GitHub содержит подробное описание трейлера Co-authored-by по адресу https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors."
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2677
+#, no-wrap
+msgid "`Signed-off-by:`"
+msgstr "`Signed-off-by:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2679
+#, no-wrap
+msgid "ID certifies compliance with https://developercertificate.org/"
+msgstr "ID подтверждает соответствие требованиям https://developercertificate.org/"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2680
+#, no-wrap
+msgid "`Differential Revision:`"
+msgstr "`Differential Revision:`"
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2682
+#, 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 "Полный URL обзора в Phabricator. Эта строка __должна быть последней строкой__. Например: `https://reviews.freebsd.org/D1708`."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2684
+#, no-wrap
+msgid "Commit Log for a Commit Based on a PR"
+msgstr "Журнал изменений для коммита на основе PR"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2690
+msgid ""
+"The commit is based on a patch from a PR submitted by John Smith. The "
+"commit message \"PR\" field is filled."
+msgstr ""
+"Коммит основан на патче из PR, предоставленного Джоном Смитом. Поле \"PR\" в "
+"сообщении коммита заполнено."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2694
+#: documentation/content/en/articles/committers-guide/_index.adoc:2712
+#: documentation/content/en/articles/committers-guide/_index.adoc:2727
+#: documentation/content/en/articles/committers-guide/_index.adoc:2743
+#: documentation/content/en/articles/committers-guide/_index.adoc:2758
+#, no-wrap
+msgid "...\n"
+msgstr "...\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2696
+#, no-wrap
+msgid "PR:\t\t12345\n"
+msgstr "PR:\t\t12345\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2699
+msgid ""
+"The committer sets the author of the patch with `git commit --author \"John "
+"Smith <John.Smith@example.com>\"`."
+msgstr ""
+"Участник устанавливает автора патча с помощью `git commit --author \"John "
+"Smith <John.Smith@example.com>\"`."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2702
+#, no-wrap
+msgid "Commit Log for a Commit Needing Review"
+msgstr "Журнал изменений для коммита, требующего проверки"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2708
+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 ""
+"Вносятся изменения в систему виртуальной памяти. После отправки патчей в "
+"соответствующий список рассылки (в данном случае, `freebsd-arch`) и "
+"утверждения изменений."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2714
+#, 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:2718
+#, no-wrap
+msgid "Commit Log for a Commit Needing Approval"
+msgstr "Журнал изменений для коммита, требующего одобрения"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2723
+msgid ""
+"Commit a port, after working with the listed MAINTAINER, who said to go "
+"ahead and commit."
+msgstr ""
+"Закоммитить порт после согласования с указанным MAINTAINER, который дал "
+"добро на коммит."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2729
+#, 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:2732
+msgid "Where _abc_ is the account name of the person who approved."
+msgstr "Где _abc_ — имя учётной записи лица, одобрившего коммит."
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2734
+#, no-wrap
+msgid "Commit Log for a Commit Bringing in Code from OpenBSD"
+msgstr "Журнал изменений для коммита, вносящего код из OpenBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2739
+msgid "Committing some code based on work done in the OpenBSD project."
+msgstr ""
+"Коммит некоторого кода на основе работы, выполненной в проекте OpenBSD."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2745
+#, no-wrap
+msgid "Obtained from:\tOpenBSD\n"
+msgstr "Obtained from:\tOpenBSD\n"
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2749
+#, 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 "Журнал коммитов для правки в FreeBSD-CURRENT с запланированным коммитом в FreeBSD-STABLE в последующее время."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2754
+msgid ""
+"Committing some code which will be merged from FreeBSD-CURRENT into the "
+"FreeBSD-STABLE branch after two weeks."
+msgstr ""
+"Коммит некоторого кода, которому будет сделано слияние из ветки FreeBSD-"
+"CURRENT в ветку FreeBSD-STABLE через две недели."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2760
+#, 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:2763
+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 ""
+"Где _2_ — количество дней, недель или месяцев, после которых запланировано "
+"MFC. Вариант _weeks_ может быть — `day`, `days`, `week`, `weeks`, `month`, "
+"`months`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2766
+msgid "It is often necessary to combine these."
+msgstr "Часто необходимо комбинировать их."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2770
+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 ""
+"Рассмотрим ситуацию, когда пользователь отправил PR с кодом из проекта "
+"NetBSD. Разработчик, просматривая PR, видит, что это не та часть дерева, с "
+"которой он обычно работает, поэтому он отправляет изменение на "
+"рецензирование в список рассылки `arch`. Поскольку изменение сложное, "
+"разработчик решает отложить MFC на месяц, чтобы обеспечить достаточное "
+"тестирование."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2772
+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:2773
+#, no-wrap
+msgid "Example Combined Commit Log"
+msgstr "Пример объединённого журнала коммитов"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2784
+#, 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:2789
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr "Предпочтительная лицензия для новых файлов"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2795
+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 ""
+"Полная политика лицензирования проекта FreeBSD доступна по ссылке "
+"link:https://www.FreeBSD.org/internal/software-license/[https://"
+"www.FreeBSD.org/internal/software-license]. Остальная часть этого раздела "
+"предназначена для того, чтобы помочь вам начать работу. Как правило, если "
+"сомневаетесь — спрашивайте. Дать совет гораздо проще, чем исправлять дерево "
+"исходного кода."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2797
+msgid ""
+"The FreeBSD Project suggests and uses this text as the preferred license "
+"scheme:"
+msgstr ""
+"Проект FreeBSD предлагает и использует следующий текст в качестве "
+"предпочтительной схемы лицензирования:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2828
+#, 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:2834
+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 ""
+"Проект FreeBSD настоятельно не рекомендует использовать так называемую "
+"«рекламную оговорку» в новом коде. Из-за большого числа участников проекта "
+"FreeBSD соблюдение этой оговорки стало затруднительным для многих "
+"коммерческих вендоров. Если ваш код в дереве содержит рекламную оговорку, "
+"пожалуйста, рассмотрите возможность её удаления. Более того, пожалуйста, "
+"рассмотрите возможность использования вышеуказанной лицензии для вашего кода."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2838
+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 ""
+"Проект FreeBSD не приветствует полностью новые лицензии и вариации "
+"стандартных лицензий. Новые лицензии требуют одобрения {core-email} для "
+"размещения в репозитории `src`. Чем больше различных лицензий используется в "
+"дереве, тем больше проблем это создаёт для тех, кто желает использовать этот "
+"код, обычно из-за непредвиденных последствий плохо сформулированной лицензии."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2842
+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 ""
+"Политика проекта требует, чтобы код под некоторыми не-BSD лицензиями "
+"размещался только в определённых разделах репозитория, а в некоторых случаях "
+"компиляция должна быть условной или даже отключена по умолчанию. Например, "
+"ядро GENERIC должно компилироваться только под лицензиями, идентичными или "
+"существенно схожими с лицензией BSD. Программное обеспечение под лицензиями "
+"GPL, APSL, CDDL и т.п. не должно компилироваться в GENERIC."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2845
+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:2847
+#, no-wrap
+msgid "Keeping Track of Licenses Granted to the FreeBSD Project"
+msgstr "Отслеживание лицензий, предоставленных проекту FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2852
+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 ""
+"Различное программное обеспечение или данные существуют в репозиториях, где "
+"проект FreeBSD получил специальную лицензию для их использования. Примером "
+"могут служить шрифты Terminus для использования с man:vt[4]. Здесь автор "
+"Димитар Жеков разрешил нам использовать шрифт \"Terminus BSD Console\" под "
+"лицензией BSD с двумя пунктами, а не под обычной Open Font License, которую "
+"он обычно применяет."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2857
+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 ""
+"Очевидно, разумно вести учет всех подобных разрешений лицензий. С этой целью "
+"{core-email} решил сохранять их архив. Каждый раз, когда проекту FreeBSD "
+"предоставляется специальная лицензия, мы требуем уведомлять {core-email}. "
+"Разработчики, участвующие в организации такого разрешения, пожалуйста, "
+"присылайте детали на {core-email}, включая:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2859
+msgid ""
+"Contact details for people or organizations granting the special license."
+msgstr ""
+"Контактные данные лиц или организаций, предоставляющих специальную лицензию."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2860
+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:2861
+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:2862
+msgid "The license text."
+msgstr "Текст лицензии."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2863
+msgid ""
+"A note of any restrictions, limitations or exceptions that apply "
+"specifically to FreeBSD's usage of the licensed material."
+msgstr ""
+"Примечание о любых ограничениях, исключениях или особых условиях, которые "
+"применяются конкретно к использованию лицензионных материалов в FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2864
+msgid "Any other relevant information."
+msgstr "Любая другая соответствующая информация."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2867
+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 ""
+"Как только {core-email} убедится, что собраны все необходимые данные и они "
+"корректны, секретарь отправит подтверждение о получении, подписанное PGP, "
+"включая детали лицензии. Это подтверждение будет постоянно архивироваться и "
+"служить нашим постоянным свидетельством о предоставлении лицензии."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2870
+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 ""
+"Архив лицензий должен содержать только сведения о предоставленных лицензиях; "
+"это не место для обсуждений вопросов лицензирования или других тем. Доступ к "
+"данным в архиве лицензий будет предоставляться по запросу в {core-email}."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2872
+#, no-wrap
+msgid "SPDX Tags in the tree"
+msgstr "Теги SPDX в дереве"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2883
+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/v2.2.2/[SPDX Specification, Version 2.2]. How to mark source files and "
+"valid algebraic expressions are found in https://spdx.github.io/spdx-spec/"
+"v2.2.2/SPDX-license-expressions/[Annex D] and https://spdx.github.io/spdx-"
+"spec/v2.2.2/using-SPDX-short-identifiers-in-source-files/[Annex E]. 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 ""
+"Проект использует теги https://spdx.dev[SPDX] в нашей исходной базе. На "
+"данный момент эти теги выделены отступами, чтобы автоматизированные средства "
+"могли программно извлекать лицензионные условия. Все теги _SPDX-License-"
+"Identifier_ в дереве следует считать информативными. Все файлы в дереве "
+"исходных кодов FreeBSD с этими тегами также содержат копию лицензии, "
+"регулирующей использование данного файла. Если возникает противоречие, "
+"руководствоваться следует дословным текстом лицензии. Проект старается "
+"следовать https://spdx.github.io/spdx-spec/v2.2.2/[Спецификации SPDX, версия "
+"2.2]. Инструкцию, как помечать исходные файлы, и допустимые алгебраические "
+"выражения можно найти в https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-"
+"expressions/[Приложении D] и https://spdx.github.io/spdx-spec/v2.2.2/using-"
+"SPDX-short-identifiers-in-source-files/[Приложении E]. Проект берет "
+"идентификаторы из списка допустимых https://spdx.org/licenses/[кратких "
+"лицензионных идентификаторов] SPDX. Проект использует только тег _SPDX-"
+"License-Identifier_."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2885
+msgid ""
+"As of March 2021, approximately 25,000 out of 90,000 files in the tree have "
+"been marked."
+msgstr ""
+"По состоянию на март 2021 года примерно 25 000 из 90 000 файлов в дереве "
+"были помечены."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2886
+#, no-wrap
+msgid "Developer Relations"
+msgstr "Отношения с разработчиками"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2892
+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 ""
+"При работе непосредственно с вашим собственным кодом или с кодом, который "
+"уже хорошо зарекомендовал себя как ваша зона ответственности, вероятно, нет "
+"особой необходимости согласовывать действия с другими коммиттерами перед "
+"внесением изменений. Это же относится и к исправлению ошибок в явно "
+"заброшенных частях системы (к сожалению, такие области существуют). При "
+"изменении частей системы, которые поддерживаются (формально или "
+"неформально), рассмотрите возможность запроса рецензирования, как это делал "
+"бы разработчик до получения прав коммиттера. Для портов свяжитесь с "
+"сопровождающим, указанным в переменной `MAINTAINER` в файле "
+"[.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2896
+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 ""
+"Чтобы определить, поддерживается ли определённая часть дерева, проверьте "
+"файл MAINTAINERS в корне дерева. Если там никого не указано, просмотрите "
+"историю изменений, чтобы увидеть, кто вносил изменения в прошлом. Чтобы "
+"вывести список имён и адресов электронной почты всех авторов коммитов для "
+"заданного файла за последние 2 года, а также количество коммитов каждого "
+"автора, отсортированных по убыванию количества коммитов, используйте:"
+
+#. type: delimited block - 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2900
+#, 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:2903
+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:2908
+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:2914
+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:2918
+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 ""
+"Не оспаривайте намерения других. Если они видят иное решение проблемы или "
+"даже иную проблему, скорее всего, это не потому, что они глупы, имеют "
+"сомнительное происхождение или пытаются разрушить чужой труд, личный имидж "
+"или FreeBSD, а просто потому, что у них иной взгляд на мир. Разное — это "
+"хорошо."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2921
+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:2927
+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:2931
+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:2933
+#, no-wrap
+msgid "If in Doubt..."
+msgstr "Если сомневаетесь..."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2937
+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:2941
+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:2943
+msgid "For project specific or administrative questions ask, in order:"
+msgstr ""
+"Для административных вопросов и вопросов, связанных с конкретным проектом, "
+"обращайтесь в следующем порядке:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2945
+msgid "Your mentor or former mentor."
+msgstr "Ваш наставник или бывший наставник."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2946
+msgid "An experienced committer on IRC, email, etc."
+msgstr "Опытный коммиттер — по IRC, электронной почте и т.д."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2947
+msgid "Any team with a \"hat\", as they can give you a definitive answer."
+msgstr ""
+"Любая команда с ролью (\"hat\"), так как в ней вам могут дать окончательный "
+"ответ."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2948
+msgid "If still not sure, ask on {developers-name}."
+msgstr "Если всё ещё не уверены, спросите на {developers-name}."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2950
+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:2952
+#, no-wrap
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2957
+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 ""
+"Проект FreeBSD использует Bugzilla для отслеживания ошибок и запросов на "
+"изменения. Если вы исправили проблему или реализовали предложение из базы "
+"данных PR, обязательно закройте PR. Также будет вежливо, если вы найдёте "
+"время закрыть другие PR, связанные с вашими коммитами."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2959
+msgid ""
+"Committers with non-``FreeBSD.org`` Bugzilla accounts can have the old "
+"account merged with the `FreeBSD.org` account by following these steps:"
+msgstr ""
+"Коммиттеры с учётными записями Bugzilla не на ``FreeBSD.org`` могут "
+"объединить старую учётную запись с учётной записью `FreeBSD.org`, выполнив "
+"следующие шаги:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2963
+msgid "Log in using your old account."
+msgstr "Войдите, используя старую учетную запись."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2964
+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 ""
+"Открыть новую ошибку. Выбрать `Services` в качестве продукта и `Bug Tracker` "
+"в качестве компонента. В описании ошибки перечислите аккаунты, которые нужно "
+"объединить."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2966
+msgid ""
+"Log in using `FreeBSD.org` account and post comment to newly opened bug to "
+"confirm ownership. See crossref:committers-guide[kerberos-ldap, Kerberos and "
+"LDAP web Password for FreeBSD Cluster] for more details on how to generate "
+"or set a password for your `FreeBSD.org` account."
+msgstr ""
+"Войдите, используя учетную запись `FreeBSD.org`, и оставьте комментарий к "
+"только что созданной ошибке, чтобы подтвердить владение. Дополнительные "
+"сведения о том, как сгенерировать или установить пароль для вашей учетной "
+"записи `FreeBSD.org`, см. в crossref:committers-guide[kerberos-ldap, "
+"Kerberos и LDAP веб-пароль для кластера FreeBSD]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2967
+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:2970
+msgid "You can find out more about Bugzilla at:"
+msgstr "Вы можете узнать больше о Bugzilla на:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2972
+msgid "extref:{pr-guidelines}[FreeBSD Problem Report Handling Guidelines]"
+msgstr ""
+"extref:{pr-guidelines}[Рекомендации по работе с сообщениями о проблемах "
+"FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2973
+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:2975
+#, no-wrap
+msgid "Phabricator"
+msgstr "Phabricator"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2979
+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 ""
+"Проект FreeBSD использует https://reviews.freebsd.org[Phabricator] для "
+"запросов на рецензирование кода. Подробности можно найти на https://"
+"wiki.freebsd.org/Phabricator[странице Phabricator в вики]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2982
+msgid ""
+"Please use the `git arc` command provided by `devel/freebsd-git-devtools` "
+"(install the port or package, then type `git help arc` for documentation) to "
+"create and update Phabricator reviews. This will make it easier for others "
+"to review and test your patches."
+msgstr ""
+"Пожалуйста, используйте команду `git arc`, предоставляемую `devel/freebsd-"
+"git-devtools` (установите порт или пакет, затем введите `git help arc` для "
+"получения документации), для создания и обновления рецензий в Phabricator. "
+"Это упростит другим процесс проверки и тестирования ваших патчей."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2984
+msgid ""
+"Committers with non-``FreeBSD.org`` Phabricator accounts can have the old "
+"account renamed to the ``FreeBSD.org`` account by following these steps:"
+msgstr ""
+"Коммиттеры с учётными записями Phabricator не на ``FreeBSD.org`` могут "
+"переименовать старую учётную запись в ``FreeBSD.org``, выполнив следующие "
+"шаги:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2988
+msgid "Change your Phabricator account email to your `FreeBSD.org` email."
+msgstr ""
+"Измените адрес электронной почты вашей учетной записи Phabricator на ваш "
+"`FreeBSD.org` email."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2990
+msgid ""
+"Open new bug on our bug tracker using your `FreeBSD.org` account, see "
+"crossref:committers-guide[bugzilla, 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 ""
+"Открыть новую ошибку в нашем трекере ошибок, используя вашу учетную запись "
+"`FreeBSD.org`, см. crossref:committers-guide[bugzilla, Bugzilla] для "
+"получения дополнительной информации. Выберите `Services` в качестве продукта "
+"и `Code Review` в качестве компонента. В описании ошибки запросите "
+"переименование вашей учетной записи Phabricator и укажите ссылку на вашего "
+"пользователя Phabricator. Например, `https://reviews.freebsd.org/p/"
+"bob_example.com/`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2995
+msgid ""
+"Phabricator accounts cannot be merged, please do not open a new account."
+msgstr ""
+"Учетные записи Phabricator не могут быть объединены, пожалуйста, не "
+"создавайте новую учетную запись."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2998
+#, no-wrap
+msgid "Who's Who"
+msgstr "Кто есть кто"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3001
+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 ""
+"Помимо хранителей репозиториев, есть и другие участники проекта FreeBSD и "
+"команды, с которыми вам, скорее всего, предстоит познакомиться в роли "
+"коммиттера. Кратко и далеко не исчерпывающе, вот они:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:3002
+#, no-wrap
+msgid "`{doceng}`"
+msgstr "`{doceng}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3008
+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 — это группа, ответственная за инфраструктуру сборки документации, "
+"утверждение новых коммиттеров документации и обеспечение актуальности веб-"
+"сайта FreeBSD и документации на FTP-сайте в соответствии с деревом "
+"Subversion. Она не является органом по разрешению конфликтов. Подавляющее "
+"большинство обсуждений, связанных с документацией, происходит в рассылке "
+"{freebsd-doc}. Подробнее о команде doceng можно узнать в её https://"
+"www.FreeBSD.org/internal/doceng/[уставе]. Коммиттеры, заинтересованные в "
+"работе над документацией, должны ознакомиться с руководством extref:{fdp-"
+"primer}[Проект документации FreeBSD: введение для новых участников]."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:3009
+#, no-wrap
+msgid "`{re-members}`"
+msgstr "`{re-members}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3014
+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 ""
+"Вот члены команды `{re}`. Эта команда отвечает за установку сроков выпуска и "
+"контроль процесса выпуска. Во время заморозки кода, инженеры выпуска "
+"обладают окончательным правом принятия решений по всем изменениям в системе "
+"для ветки, ожидающей статуса выпуска. Если у вас есть что-то, что вы хотите "
+"влить (merge) из FreeBSD-CURRENT в FreeBSD-STABLE (какими бы ни были их "
+"значения в любой момент времени), именно с этими людьми нужно обсудить этот "
+"вопрос."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:3015
+#, no-wrap
+msgid "`{so}`"
+msgstr "`{so}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3017
+msgid ""
+"`{so-name}` is the link:https://www.FreeBSD.org/security/[FreeBSD Security "
+"Officer] and oversees the `{security-officer}`."
+msgstr ""
+"`{so-name}` — это link:https://www.FreeBSD.org/security/[ответственный за "
+"безопасность FreeBSD], который курирует работу `{security-officer}`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:3018
+#, no-wrap
+msgid "{committers-name}"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3022
+#, fuzzy
+#| 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."
+msgid ""
+"{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} и {dev-doc-all} — это "
+"списки рассылки, которые система управления версиями использует для отправки "
+"сообщений о коммитах. _Никогда_ не отправляйте письма напрямую в эти списки. "
+"Отправляйте ответы в этот список только в том случае, если они короткие и "
+"непосредственно связаны с коммитом."
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:3023
+#, fuzzy, no-wrap
+#| msgid "Developers"
+msgid "{developers-name}"
+msgstr "Разработчики"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3027
+#, fuzzy
+#| 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."
+msgid ""
+"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}:: Все коммиттеры подписаны на список рассылки -developers. "
+"Этот список был создан для обсуждения вопросов, связанных с сообществом "
+"коммиттеров. Примеры включают голосования Core, объявления и т.д."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3031
+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 ""
+"`{developers-name}` предназначен исключительно для использования "
+"коммиттерами FreeBSD. Для разработки FreeBSD коммиттеры должны иметь "
+"возможность открыто обсуждать вопросы, которые будут решены до их публичного "
+"объявления. Откровенные обсуждения работы в процессе не подходят для "
+"открытой публикации и могут навредить FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3035
+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 ""
+"Все коммиттеры FreeBSD обязаны не публиковать и не пересылать сообщения из "
+"{developers-name} за пределы списка рассылки без разрешения всех авторов. "
+"Нарушители будут удалены из {developers-name}, что приведёт к приостановке "
+"привилегий на коммит. Повторные или вопиющие нарушения могут привести к "
+"постоянному лишению привилегий на коммит."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3041
+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 ""
+"Этот список _не_ предназначен для обзора кода или каких-либо технических "
+"обсуждений. На самом деле, использование его в таком качестве вредит проекту "
+"FreeBSD, так как создаёт впечатление закрытого списка, где общие решения, "
+"затрагивающие всех пользователей FreeBSD, принимаются без \"открытости\". И "
+"последнее, но не менее важное: __никогда, ни при каких обстоятельствах, не "
+"отправляйте письмо на {developers-name} с копией (CC:/BCC:) на другой список "
+"FreeBSD__. Никогда не отправляйте письмо на другой список рассылки FreeBSD с "
+"копией (CC:/BCC:) на {developers-name}. Это может значительно снизить пользу "
+"от данного списка."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3042
+#, no-wrap
+msgid "SSH Quick-Start Guide"
+msgstr "Руководство по быстрому началу работы с SSH"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3047
+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 ""
+"Если вы не хотите каждый раз вводить пароль при использовании man:ssh[1] и "
+"используете ключи для аутентификации, man:ssh-agent[1] создан для вашего "
+"удобства. Если вы хотите использовать man:ssh-agent[1], убедитесь, что "
+"запускаете его перед запуском других приложений. Например, пользователи X "
+"обычно делают это в [.filename]#.xsession# или [.filename]#.xinitrc#. "
+"Подробности см. в man:ssh-agent[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3048
+msgid ""
+"Generate a key pair using man:ssh-keygen[1]. The key pair will wind up in "
+"your [.filename]#$HOME/.ssh/# directory."
+msgstr ""
+"Сгенерируйте пару ключей с помощью man:ssh-keygen[1]. Пара ключей окажется в "
+"вашем каталоге [.filename]#$HOME/.ssh/#."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3052
+msgid "Only ECDSA, Ed25519 or RSA keys are supported."
+msgstr "Поддерживаются только ключи ECDSA, Ed25519 или RSA."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3054
+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 ""
+"Отправьте ваш открытый ключ ([.filename]#$HOME/.ssh/id_ecdsa.pub#, "
+"[.filename]#$HOME/.ssh/id_ed25519.pub# или [.filename]#$HOME/.ssh/"
+"id_rsa.pub#) человеку, который настраивает вас как коммиттера, чтобы его "
+"можно было добавить в [.filename]#yourlogin# в [.filename]#/etc/ssh-keys/# "
+"на `freefall`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3059
+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 ""
+"Теперь man:ssh-add[1] можно использовать для аутентификации один раз за "
+"сеанс. Он запрашивает парольную фразу для закрытого ключа и затем сохраняет "
+"её в агенте аутентификации (man:ssh-agent[1]). Используйте `ssh-add -d` для "
+"удаления ключей, сохранённых в агенте."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3061
+msgid "Test with a simple remote command: `ssh freefall.FreeBSD.org ls /usr`."
+msgstr ""
+"Проверка с помощью простой удалённой команды: `ssh freefall.FreeBSD.org ls /"
+"usr`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3063
+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 ""
+"Для получения дополнительной информации см. package:security/openssh-"
+"portable[], man:ssh[1], man:ssh-add[1], man:ssh-agent[1], man:ssh-keygen[1] "
+"и man:scp[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3065
+msgid ""
+"For information on adding, changing, or removing man:ssh[1] keys, see "
+"https://wiki.freebsd.org/clusteradm/ssh-keys[this article]."
+msgstr ""
+"Для информации о добавлении, изменении или удалении ключей man:ssh[1], см. "
+"https://wiki.freebsd.org/clusteradm/ssh-keys[эту статью]."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3067
+#, no-wrap
+msgid "Coverity(R) Availability for FreeBSD Committers"
+msgstr "Доступность Coverity(R) для коммиттеров FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3071
+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 ""
+"Все разработчики FreeBSD могут получить доступ к результатам анализа "
+"Coverity для всего программного обеспечения проекта FreeBSD. Все, кто "
+"заинтересован в доступе к результатам автоматического анализа Coverity, "
+"могут зарегистрироваться на http://scan.coverity.com/[Coverity Scan]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3074
+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 ""
+"В вики FreeBSD есть мини-руководство для разработчиков, которые "
+"заинтересованы в работе с отчетами анализа Coverity(R): https://"
+"wiki.freebsd.org/CoverityPrevent[https://wiki.freebsd.org/CoverityPrevent]. "
+"Обратите внимание, что это мини-руководство доступно только разработчикам "
+"FreeBSD, поэтому если вы не можете открыть эту страницу, вам нужно будет "
+"попросить добавить вас в соответствующий список доступа к вики."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3076
+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 ""
+"Наконец, все разработчики FreeBSD, которые собираются использовать "
+"Coverity(R), всегда могут запросить дополнительные детали и информацию об "
+"использовании, задав любые вопросы в списке рассылки разработчиков FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3078
+#, no-wrap
+msgid "The FreeBSD Committers' Big List of Rules"
+msgstr "Большой список правил коммиттеров FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3083
+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 ""
+"Все участники проекта FreeBSD должны соблюдать _Кодекс поведения_, доступный "
+"по ссылке link:https://www.FreeBSD.org/internal/code-of-conduct/[https://"
+"www.FreeBSD.org/internal/code-of-conduct]. Как коммиттеры, вы представляете "
+"публичное лицо проекта, и ваше поведение оказывает существенное влияние на "
+"его общественное восприятие. Это руководство расширяет разделы _Кодекса "
+"поведения_, относящиеся к коммиттерам."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3085
+#: documentation/content/en/articles/committers-guide/_index.adoc:3115
+msgid "Respect other committers."
+msgstr "Уважайте других коммиттеров."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3086
+#: documentation/content/en/articles/committers-guide/_index.adoc:3131
+msgid "Respect other contributors."
+msgstr "Уважайте других участников."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3087
+#: documentation/content/en/articles/committers-guide/_index.adoc:3146
+msgid "Discuss any significant change _before_ committing."
+msgstr "Обсудите любые значительные изменения _перед_ коммитом."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3088
+msgid ""
+"Respect existing maintainers (if listed in the `MAINTAINER` field in "
+"[.filename]#Makefile# or in [.filename]#MAINTAINER# in the top-level "
+"directory)."
+msgstr ""
+"Уважайте существующих сопровождающих (если они указаны в поле `MAINTAINER` в "
+"файле [.filename]#Makefile# или в файле [.filename]#MAINTAINER# в корневом "
+"каталоге)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3089
+#: documentation/content/en/articles/committers-guide/_index.adoc:3161
+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:3090
+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 ""
+"Изменения попадают в FreeBSD-CURRENT до FreeBSD-STABLE, если только это явно "
+"не разрешено инженером выпуска или если они не применимы к FreeBSD-CURRENT. "
+"Любое нетривиальное или не срочное изменение, которое применимо, также "
+"должно оставаться в FreeBSD-CURRENT как минимум 3 дня перед слиянием, чтобы "
+"его можно было достаточно протестировать. Инженер выпуска имеет те же "
+"полномочия в отношении ветки FreeBSD-STABLE, что и сопровождающий, согласно "
+"правилу №5."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3091
+#: documentation/content/en/articles/committers-guide/_index.adoc:3176
+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:3092
+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 ""
+"Соблюдайте все периоды заморозки кода и своевременно читайте рассылки "
+"`committers` и `developers`, чтобы знать, когда действует заморозка кода."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3093
+#: documentation/content/en/articles/committers-guide/_index.adoc:3191
+msgid "When in doubt on any procedure, ask first!"
+msgstr "Если сомневаетесь в каком-либо действии — сначала спросите!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3094
+#: documentation/content/en/articles/committers-guide/_index.adoc:3196
+msgid "Test your changes before committing them."
+msgstr "Проверьте свои изменения перед их применением."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3095
+#: documentation/content/en/articles/committers-guide/_index.adoc:3206
+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:3106
+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 ""
+"Как уже отмечалось, нарушение некоторых из этих правил может стать "
+"основанием для временного лишения прав на коммиты или, при повторных "
+"нарушениях, для их постоянного отзыва. Отдельные члены Основной Команды "
+"(Core Team) имеют право временно приостановить права на коммиты до тех пор, "
+"пока основная команда в полном составе не рассмотрит вопрос. В случае "
+"«чрезвычайной ситуации» (например, если коммиттер наносит ущерб "
+"репозиторию), временное лишение прав может также быть осуществлено "
+"хранителями репозитория. Только Основная Команда 2/3 большинства голосов "
+"имеет право приостановить права на коммиты сроком более чем на неделю или "
+"отозвать их полностью. Это правило существует не для того, чтобы сделать "
+"основную команду сборищем жестоких диктаторов, которые могут избавляться от "
+"коммиттеров так же легко, как от пустых банок из-под газировки, а чтобы дать "
+"проекту своего рода предохранительный клапан. Если кто-то выходит из-под "
+"контроля, важно иметь возможность немедленно принять меры, а не быть "
+"парализованными дискуссией. Во всех случаях коммиттер, чьи права "
+"приостановлены или отозваны, имеет право на «слушание» в основной команде, "
+"где определяется общая продолжительность приостановки. Коммиттер, чьи права "
+"приостановлены, также может запросить пересмотр решения через 30 дней и "
+"каждые 30 дней после этого (если общий срок приостановки не менее 30 дней). "
+"Коммиттер, чьи права были полностью отозваны, может запросить пересмотр по "
+"истечении 6 месяцев. Эта политика пересмотра _строго неформальна_, и во всех "
+"случаях основная команда оставляет за собой право как удовлетворить, так и "
+"проигнорировать запрос на пересмотр, если считает первоначальное решение "
+"правильным."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3110
+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:3111
+#, no-wrap
+msgid "Details"
+msgstr "Подробности"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3119
+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:3121
+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:3127
+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:3130
+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:3143
+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:3145
+msgid ""
+"Consider the points raised under crossref:committers-guide[respect,Respect "
+"other committers] and apply them also to contributors."
+msgstr ""
+"Учитывайте моменты, поднятые в разделе crossref:committers-"
+"guide[respect,Уважайте других коммиттеров], и применяйте их также к "
+"контрибьюторам."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3152
+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 ""
+"Репозиторий — это не место, где изменения первоначально отправляются на "
+"проверку корректности или обсуждаются, сначала это происходит в почтовых "
+"рассылках или с помощью сервиса Phabricator. Коммит произойдет только после "
+"того, как будет достигнуто некое подобие консенсуса. Это не означает, что "
+"требуется разрешение для исправления каждой очевидной синтаксической ошибки "
+"или опечатки на странице руководства, просто полезно развить чутьё, когда "
+"предлагаемое изменение не столь очевидно и требует предварительного "
+"обсуждения. Люди действительно не против масштабных изменений, если "
+"результат явно лучше того, что было раньше, им просто не нравится, когда эти "
+"изменения становятся _неожиданностью_. Самый лучший способ убедиться, что "
+"всё идёт по правильному пути, — это провести рецензирование кода одним или "
+"несколькими другими коммиттерами."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3154
+msgid "When in doubt, ask for review!"
+msgstr "Если сомневаетесь, запросите рецензию!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3155
+msgid "Respect existing maintainers if listed."
+msgstr "Уважайте существующих сопровождающих, если они указаны."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3160
+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 ""
+"Многие части FreeBSD не \"являются чьей-то собственностью\" в том смысле, "
+"что конкретный человек вскочит и начнёт кричать, если вы внесёте изменения в "
+"\"его\" область, но всё же лучше сначала проверить. Одно из используемых "
+"соглашений — добавление строки `maintainer` в [.filename]#Makefile# для "
+"любого пакета или поддерева, за которые активно отвечает один или несколько "
+"людей; см. extref:{developers-handbook}policies[Рекомендации и политики "
+"дерева исходного кода, policies] для документации по этому поводу. Если у "
+"участков кода есть несколько сопровождающих, изменения в затронутых "
+"областях, внесённые одним сопровождающим, должны быть проверены хотя бы "
+"одним другим сопровождающим. В случаях, когда \"сопровождение\" чего-либо "
+"неясно, посмотрите логи репозитория для соответствующих файлов и проверьте, "
+"работал ли кто-то недавно или преимущественно в этой области."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3166
+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:3167
+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 ""
+"Изменения вносятся в FreeBSD-CURRENT до FreeBSD-STABLE, если это не "
+"разрешено специально инженером выпуска или если они не применимы к FreeBSD-"
+"CURRENT. Любое нетривиальное или несрочное изменение, которое применимо, "
+"также должно оставаться в FreeBSD-CURRENT как минимум 3 дня перед слиянием, "
+"чтобы его можно было достаточно протестировать. Инженер выпуска имеет те же "
+"полномочия в отношении ветки FreeBSD-STABLE, как указано в правиле №5."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3173
+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 ""
+"Это ещё один вопрос, о котором не стоит спорить, поскольку инженер выпуска "
+"несёт окончательную ответственность (и получает по шапке), если изменение "
+"окажется неудачным. Пожалуйста, уважайте это и оказывайте инженеру выпуска "
+"полное сотрудничество, когда дело касается ветки FreeBSD-STABLE. Управление "
+"FreeBSD-STABLE может часто казаться излишне консервативным для случайного "
+"наблюдателя, но также стоит помнить, что консерватизм — это отличительная "
+"черта FreeBSD-STABLE, и там действуют другие правила, чем в FreeBSD-CURRENT. "
+"Также нет смысла в том, чтобы FreeBSD-CURRENT был испытательным полигоном, "
+"если изменения немедленно переносятся в FreeBSD-STABLE. Изменения должны "
+"быть протестированы разработчиками FreeBSD-CURRENT, поэтому дайте некоторое "
+"время перед слиянием, если только исправление в FreeBSD-STABLE не является "
+"критическим, срочным или настолько очевидным, что дальнейшее тестирование не "
+"требуется (исправления опечаток в руководствах, очевидные исправления ошибок/"
+"опечаток и т.д.). Другими словами, руководствуйтесь здравым смыслом."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3175
+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 ""
+"Изменения в ветках безопасности (например, `releng/9.3`) должны быть "
+"одобрены членом группы — `{security-officer}` или, в некоторых случаях, "
+"членом группы — `{re}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3186
+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 ""
+"Этот проект поддерживает публичный имидж, который очень важен для всех нас, "
+"особенно если мы хотим продолжать привлекать новых участников. Бывают "
+"случаи, когда, несмотря на все усилия сохранять самообладание, люди теряют "
+"терпение и обмениваются резкими словами. Лучшее, что можно сделать в таких "
+"ситуациях, — минимизировать последствия, пока все не остынут. Не выносите "
+"гневные слова на публику и не пересылайте личную переписку или другие "
+"частные сообщения в публичные списки рассылки, почтовые алиасы, каналы "
+"мгновенных сообщений или социальные сети. То, что люди говорят один на один, "
+"часто менее приукрашено, чем их публичные высказывания, и такие сообщения не "
+"имеют места в публичном пространстве — они только усугубляют и без того "
+"сложную ситуацию. Если человек, отправляющий гневное сообщение, хотя бы "
+"проявил такт и отправил его лично, проявите такт и вы — оставьте это в "
+"тайне. Если вы чувствуете, что другой разработчик относится к вам "
+"несправедливо, и это причиняет вам страдания, обратитесь к Основной команде "
+"(Core team), а не выносите это на публику. Основная команда постарается "
+"выступить в роли миротворцев и вернуть ситуацию в разумное русло. Если спор "
+"касается изменений в кодовой базе и участники не могут прийти к согласию, "
+"основная команда может назначить третью сторону, устраивающую всех, для "
+"разрешения спора. Все вовлечённые стороны должны согласиться с решением, "
+"принятым этой третьей стороной."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3187
+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 ""
+"Соблюдайте все периоды заморозки кода и своевременно читайте рассылки "
+"`committers` и `developers`, чтобы знать, когда действует заморозка кода."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3190
+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 ""
+"Внесение неподтверждённых изменений во время заморозки кода — это серьёзная "
+"ошибка, и от коммиттеров ожидается, что они будут в курсе происходящего, "
+"прежде чем, вернувшись после долгого отсутствия, закоммитить 10 мегабайт "
+"накопленных изменений. Те, кто злоупотребляет этим на регулярной основе, "
+"будут лишены прав на коммиты до возвращения из Лагеря весёлого "
+"перевоспитания FreeBSD, который мы проводим в Гренландии."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3195
+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:3205
+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 compile userspace via `make buildworld`. 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 crossref:committers-guide[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 ""
+"Если ваши изменения касаются ядра, убедитесь, что вы по-прежнему можете "
+"компилировать как GENERIC, так и LINT. Если ваши изменения касаются других "
+"частей системы, убедитесь, что вы по-прежнему можете компилировать "
+"пользовательское пространство с помощью `make buildworld`. Если ваши "
+"изменения относятся к ветке, убедитесь, что тестирование проводится на "
+"машине, которая работает с этим кодом. Если ваше изменение может нарушить "
+"работу другой архитектуры, обязательно протестируйте его на всех "
+"поддерживаемых архитектурах. Пожалуйста, убедитесь, что ваше изменение "
+"работает для crossref:committers-guide[compilers,поддерживаемых инструментов "
+"сборки]. Пожалуйста, обратитесь к https://www.FreeBSD.org/internal/"
+"[Внутренней странице FreeBSD] для получения списка доступных ресурсов. По "
+"мере добавления других архитектур в список поддерживаемых платформ FreeBSD "
+"будут предоставлены соответствующие общие ресурсы для тестирования."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3208
+msgid ""
+"Contributed software is anything under the [.filename]#src/contrib#, "
+"[.filename]#src/crypto#, or [.filename]#src/sys/contrib# trees."
+msgstr ""
+"Предоставленное программное обеспечение — это всё, что находится в деревьях "
+"каталогов [.filename]#src/contrib#, [.filename]#src/crypto# или "
+"[.filename]#src/sys/contrib#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3213
+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 ""
+"Упомянутые выше деревья предназначены для предоставленного программного "
+"обеспечения, обычно импортируемого в ветку вендора. Фиксация изменений там "
+"может вызвать ненужные проблемы при импорте более новых версий программного "
+"обеспечения. В общем случае рекомендуется отправлять исправления напрямую "
+"вендору. Исправления могут быть сначала зафиксированы в FreeBSD с разрешения "
+"сопровождающего."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3217
+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:3220
+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 ""
+"Если конкретное программное обеспечение не имеет сопровождающего, вам "
+"предлагается взять на себя ответственность за него. Если вы не уверены в "
+"текущем сопровождении, напишите на {freebsd-arch} и уточните."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3221
+#, no-wrap
+msgid "Policy on Multiple Architectures"
+msgstr "Политика поддержки нескольких архитектур"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3224
+msgid ""
+"In an effort to make it easier to keep FreeBSD portable across the platforms "
+"we support, core has developed this mandate:"
+msgstr ""
+"В попытке упростить поддержку переносимости FreeBSD на платформы, которые мы "
+"поддерживаем, ядро системы разработало следующее предписание:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3227
+msgid ""
+"Major design work (including major API and ABI changes) must prove itself on "
+"at least one Tier 1 platform before it may be committed to the source tree."
+msgstr ""
+"Основные проектные работы (включая значительные изменения API и ABI) должны "
+"подтвердить свою работоспособность как минимум на одной платформе Уровня 1 "
+"перед тем, как они могут быть включены в дерево исходного кода."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3231
+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:3233
+#, no-wrap
+msgid "Policy on Multiple Compilers"
+msgstr "Политика по использованию нескольких компиляторов"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3247
+msgid ""
+"The FreeBSD base system 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 ""
+"Базовая система FreeBSD собирается как с Clang, так и с GCC. Проект делает "
+"это тщательно и контролируемо, чтобы максимизировать преимущества от этой "
+"дополнительной работы, сводя эту работу к минимуму. Поддержка обоих "
+"компиляторов повышает гибкость для наших пользователей. У этих компиляторов "
+"разные сильные и слабые стороны, и их совместная поддержка позволяет "
+"пользователям выбирать наиболее подходящий для их задач. Clang и GCC "
+"поддерживают схожие диалекты C и C++, что требует относительно небольшого "
+"количества условного кода. Проект получает улучшенное покрытие кода и "
+"повышает его качество, используя возможности обоих компиляторов. Поддержка "
+"этого диапазона позволяет проекту собираться в большем количестве "
+"пользовательских окружений и задействовать больше CI-окружений, увеличивая "
+"удобство для пользователей и предоставляя им больше инструментов для "
+"тестирования. Тщательно ограничивая диапазон поддерживаемых версий "
+"современными версиями этих компиляторов, проект избегает чрезмерного "
+"увеличения матрицы тестирования. Устаревшие и малоизвестные компиляторы, а "
+"также старые диалекты языков, имеют крайне ограниченную поддержку, "
+"позволяющую собирать пользовательские программы, но без ограничений на "
+"сборку базовой системы с их помощью. Точный баланс продолжает развиваться, "
+"чтобы гарантировать, что преимущества дополнительной работы остаются выше "
+"накладываемых ею затрат. Раньше проект поддерживал очень старые компиляторы "
+"Intel или старые версии GCC, но мы заменили поддержку этих устаревших "
+"компиляторов на тщательно выбранный диапазон современных компиляторов. В "
+"этом разделе описано, где мы используем разные компиляторы и какие ожидания "
+"с этим связаны."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3252
+msgid ""
+"The FreeBSD base system includes 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 ""
+"Базовая система FreeBSD включает в себя компилятор Clang, входящий в дерево "
+"исходного кода. Поскольку он является частью дерева, этот компилятор "
+"обладает наибольшей поддержкой. Все изменения должны компилироваться с ним "
+"перед коммитом. Полное тестирование, соответствующее изменениям, должно "
+"проводиться с этим компилятором."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3267
+msgid ""
+"The FreeBSD base system also supports various versions of Clang and GCC as "
+"out-of-tree compilers. For large or risky changes, committers should do a "
+"test build with a supported version of GCC. Out of tree compilers are "
+"available as packages. GCC compilers are available as `${TARGET_ARCH}-gcc$"
+"{VERSION}` packages, such as package:devel/freebsd-gcc14@aarch64[aarch64-"
+"gcc14]. Clang compilers are available as `llvm${VERSION}` packages, such as "
+"package:devel/llvm18[llvm18]. 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 builds of userspace or "
+"individual kernels by setting `CROSS_TOOLCHAIN` to the package name, for "
+"example `CROSS_TOOLCHAIN=aarch64-gcc14` or `CROSS_TOOLCHAIN=llvm18`. For "
+"universe or tinderbox builds, `USE_GCC_TOOLCHAINS=gcc${VERSION}` builds all "
+"architectures using the appropriate GCC compiler packages. For universe or "
+"tinderbox builds using an out-of-tree Clang, pass `CROSS_TOOLCHAIN=llvm$"
+"{VERSION}`. Note that while all architectures in the base system can be "
+"compiled by Clang, only a few architectures can be fully built by GCC."
+msgstr ""
+"Базовая система FreeBSD также поддерживает различные версии Clang и GCC в "
+"качестве компиляторов, не входящих в дерево исходного кода. Для крупных или "
+"рискованных изменений коммиттеры должны выполнить тестовую сборку с "
+"поддерживаемой версией GCC. Компиляторы, не входящие в дерево исходного "
+"кода, доступны в виде пакетов. Компиляторы GCC доступны в виде пакетов `$"
+"{TARGET_ARCH}-gcc${VERSION}`, например package:devel/freebsd-"
+"gcc14@aarch64[aarch64-gcc14]. Компиляторы Clang доступны в виде пакетов "
+"`llvm${VERSION}`, например package:devel/llvm18[llvm18]. Проект запускает "
+"автоматизированные задачи CI для сборки всего с использованием этих "
+"компиляторов. Ожидается, что коммиттеры исправят задачи, которые они сломали "
+"своими изменениями. Коммиттеры могут тестировать сборки пользовательского "
+"пространства или отдельных ядер, установив переменную `CROSS_TOOLCHAIN` в "
+"имя пакета, например `CROSS_TOOLCHAIN=aarch64-gcc14` или "
+"`CROSS_TOOLCHAIN=llvm18`. Для сборки universe или tinderbox, "
+"`USE_GCC_TOOLCHAINS=gcc${VERSION}` собирает все архитектуры с использованием "
+"соответствующих пакетов компиляторов GCC. Для сборки universe или tinderbox "
+"с использованием Clang, не входящего в дерево исходного кода, передайте "
+"`CROSS_TOOLCHAIN=llvm${VERSION}`. Обратите внимание, что хотя все "
+"архитектуры в базовой системе могут быть скомпилированы с помощью Clang, "
+"только несколько архитектур могут быть полностью собраны с помощью GCC."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3271
+msgid ""
+"The FreeBSD project also has some CI pipelines on github. For pull requests "
+"on github and some branches pushed to github forks, a number of cross "
+"compilation jobs run. These test FreeBSD building using versions of Clang "
+"that lag the in-tree compiler by one or more major versions."
+msgstr ""
+"Проект FreeBSD также имеет несколько CI-пайплайнов на GitHub. Для запросов "
+"на принятие изменений (pull request) на GitHub и некоторых веток, "
+"отправленных в форки на GitHub, выполняется ряд задач кросс-компиляции. Они "
+"тестируют сборку FreeBSD с использованием версий Clang, которые отстают от "
+"встроенного компилятора на одну или несколько основных версий."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3277
+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 ""
+"Проект FreeBSD также обновляет компиляторы. И Clang, и GCC быстро "
+"развиваются. Некоторые изменения, такие как удаление устаревших объявлений и "
+"определений функций в стиле K&R, будут внесены в дерево до появления нового "
+"компилятора. Коммиттерам следует учитывать это и быть готовыми к проверке "
+"проблем в своём коде или изменениях с этими новыми компиляторами. Кроме "
+"того, сразу после появления новой версии компилятора в дереве, может "
+"потребоваться компиляция с использованием старой версии, если есть "
+"подозрение на необнаруженную регрессию."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3281
+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 ""
+"В дополнение к компилятору, LLD от LLVM и binutils от GNU используются "
+"компилятором косвенно. Коммиттеры должны учитывать различия в синтаксисе "
+"ассемблера и особенностях компоновщиков, а также обеспечивать "
+"работоспособность обоих вариантов. Эти компоненты будут тестироваться в "
+"рамках CI-задач FreeBSD для Clang или GCC."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3287
+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 ""
+"Проект FreeBSD предоставляет заголовочные файлы и библиотеки, которые "
+"позволяют использовать другие компиляторы для сборки программного "
+"обеспечения, не входящего в базовую систему. Эти заголовочные файлы "
+"поддерживают создание среды, соответствующей стандартам, включая более "
+"ранние диалекты ANSI-C, начиная с C89, а также другие специфичные случаи, "
+"выявленные нашей обширной коллекцией портов. Эта поддержка ограничивает "
+"отказ от старых стандартов в таких местах, как заголовочные файлы, но не "
+"мешает обновлению базовой системы до более новых диалектов. Также она не "
+"требует, чтобы базовая система целиком компилировалась с использованием этих "
+"старых стандартов. Нарушение этой поддержки приведёт к сбоям в сборке "
+"пакетов из коллекции портов, поэтому по возможности этого следует избегать, "
+"а при обнаружении проблем — оперативно их исправлять."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3292
+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 ""
+"Система сборки FreeBSD в настоящее время поддерживает эти различные среды. "
+"По мере добавления новых предупреждений в компиляторы проект старается их "
+"исправлять. Однако иногда эти предупреждения требуют значительной "
+"переработки, поэтому они подавляются каким-либо образом с использованием "
+"переменных make, которые вычисляют правильное значение в зависимости от "
+"версии компилятора. Разработчики должны учитывать это и обеспечивать "
+"правильную условную обработку любых флагов, специфичных для компилятора."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3293
+#, no-wrap
+msgid "Current Compiler Versions"
+msgstr "Текущие версии компиляторов"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3296
+msgid ""
+"The versions of supported compilers for a given branch such as `main` or "
+"`stable/X` varies over time. The authoritative source for supported "
+"compiler versions are automated CI jobs tested in GitHub's cross-build "
+"actions and Jenkins."
+msgstr ""
+"Версии поддерживаемых компиляторов для конкретной ветки, такой как `main` "
+"или `stable/X`, со временем меняются. Авторитетным источником информации о "
+"поддерживаемых версиях компиляторов являются автоматизированные задачи CI, "
+"тестируемые в кросс-сборках GitHub Actions и Jenkins."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3300
+msgid ""
+"For `main`, the in-tree compiler is currently Clang 19. Currently, GCC 12, "
+"13, and 14 are tested for amd64 via CI jobs in Jenkins. Clang 14 and 18 are "
+"tested for aarch64 and arm64 in GitHub's cross-build actions."
+msgstr ""
+"Для ветки `main` встроенным компилятором в настоящее время является Clang "
+"19. В настоящее время GCC 12, 13 и 14 тестируются для amd64 через задания CI "
+"в Jenkins. Clang 14 и 18 тестируются для aarch64 и arm64 в кросс-сборках "
+"GitHub."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3301
+#, no-wrap
+msgid "Other Suggestions"
+msgstr "Другие предложения"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3305
+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 ""
+"При внесении изменений в документацию перед коммитом проверяйте орфографию. "
+"Для всех XML-документов убедитесь в корректности директив форматирования, "
+"выполнив `make lint` и package:textproc/igor[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3307
+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 ""
+"Для страниц руководства запустите package:sysutils/manck[] и "
+"package:textproc/igor[] на странице руководства, чтобы проверить, что все "
+"перекрестные ссылки и ссылки на файлы корректны, а также что страница "
+"руководства имеет все необходимые `MLINKS`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3314
+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 ""
+"Не смешивайте исправления стиля с новой функциональностью. Исправление стиля "
+"— это любое изменение, которое не меняет функциональность кода. Смешивание "
+"изменений затрудняет понимание изменений функциональности при запросе "
+"различий между версиями, что может скрыть новые ошибки. Не включайте "
+"изменения пробелов вместе с изменениями содержимого в коммитах для "
+"[.filename]#doc/#. Лишний шум в различиях значительно усложняет работу "
+"переводчиков. Вместо этого вносите исправления стиля или пробелов в "
+"отдельных коммитах, явно обозначенных как таковые в сообщении коммита."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3315
+#, no-wrap
+msgid "Deprecating Features"
+msgstr "Устаревающие функции"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3318
+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:3320
+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:3321
+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:3322
+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:3323
+#, no-wrap
+msgid "Privacy and Confidentiality"
+msgstr "Конфиденциальность и приватность"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3326
+msgid "Most FreeBSD business is done in public."
+msgstr "Большая часть работы над FreeBSD выполняется публично."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3329
+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 — это _открытый_ проект. Это означает, что не только любой может "
+"использовать исходный код, но и большая часть процесса разработки открыта "
+"для публичного изучения."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3330
+msgid "Certain sensitive matters must remain private or held under embargo."
+msgstr ""
+"Некоторые конфиденциальные вопросы должны оставаться в тайне или быть под "
+"запретом на разглашение."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3336
+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 ""
+"К сожалению, полной прозрачности быть не может. Как разработчик FreeBSD, вы "
+"будете иметь определенную степень привилегированного доступа к информации. "
+"Следовательно, от вас ожидается соблюдение определенных требований "
+"конфиденциальности. Иногда необходимость конфиденциальности исходит от "
+"внешних сотрудников или имеет конкретный временной лимит. Однако в "
+"большинстве случаев это вопрос неразглашения частных переписок."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3337
+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:3342
+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 ""
+"Где есть проблемы безопасности, затрагивающие множество различных "
+"операционных систем, FreeBSD часто зависит от раннего доступа, чтобы иметь "
+"возможность подготовить уведомления для согласованного выпуска. Если "
+"разработчики FreeBSD не могут быть доверены в вопросах поддержания "
+"безопасности, такой ранний доступ предоставлен не будет. Ответственный за "
+"безопасность контролирует доступ к информации об уязвимостях до их "
+"публикации и определяет время выпуска всех уведомлений. Он может запросить "
+"помощь при условии конфиденциальности у любого разработчика с "
+"соответствующими знаниями для подготовки исправлений безопасности."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3343
+msgid ""
+"Communications with Core are kept confidential for as long as necessary."
+msgstr ""
+"Коммуникации с Основной командой (Core Team) сохраняются в "
+"конфиденциальности столько времени, сколько необходимо."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3348
+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:3349
+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:3352
+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 ""
+"Доступ к определенным коммерчески чувствительным данным может быть "
+"предоставлен только при подписании Соглашения о неразглашении. Перед "
+"заключением каких-либо юридически обязывающих соглашений необходимо "
+"проконсультироваться с юридическим отделом Фонда FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3353
+msgid "Private communications must not be made public without permission."
+msgstr "Приватные сообщения не должны становиться публичными без разрешения."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3356
+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:3357
+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:3360
+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 ""
+"Аналогично личным сообщениям, некоторые внутренние каналы связи, включая "
+"почтовые рассылки только для коммиттеров FreeBSD и IRC-каналы с ограниченным "
+"доступом, считаются частной перепиской. Для публикации материалов из этих "
+"источников требуется разрешение."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3361
+msgid "Core may approve publication."
+msgstr "Основная команда может одобрить публикацию."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3363
+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:3365
+#, no-wrap
+msgid "Support for Multiple Architectures"
+msgstr "Поддержка множественных архитектур"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3372
+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 — это высокопортативная операционная система, предназначенная для "
+"работы на множестве различных типов аппаратных архитектур. Поддержание "
+"четкого разделения между машинно-зависимым (MD) и машинно-независимым (MI) "
+"кодом, а также минимизация MD-кода являются важной частью нашей стратегии по "
+"сохранению гибкости в отношении текущих тенденций в аппаратном обеспечении. "
+"Каждая новая аппаратная архитектура, поддерживаемая FreeBSD, существенно "
+"увеличивает затраты на поддержку кода, инструментальных средств и инжиниринг "
+"выпусков. Это также значительно повышает стоимость эффективного тестирования "
+"изменений в ядре. Таким образом, существует серьезная мотивация для "
+"разграничения уровней поддержки различных архитектур, оставаясь при этом "
+"сильными в нескольких ключевых архитектурах, которые рассматриваются как "
+"«целевая аудитория» FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3373
+#, no-wrap
+msgid "Statement of General Intent"
+msgstr "Заявление об общих намерениях"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3378
+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 ""
+"Проект FreeBSD ориентирован на \"коммерческие готовые рабочие станции, "
+"серверы и высокопроизводительные встраиваемые системы производственного "
+"уровня\". Сохраняя фокус на узком наборе архитектур, актуальных для этих "
+"сред, проект FreeBSD способен поддерживать высокий уровень качества, "
+"стабильности и производительности, а также минимизировать нагрузку на "
+"различные команды поддержки проекта, такие как команда портов, команда "
+"документации, офицер безопасности и команды разработки релизов. Разнообразие "
+"в поддержке оборудования расширяет возможности потребителей FreeBSD, "
+"предлагая новые функции и варианты использования, однако эти преимущества "
+"всегда должны тщательно оцениваться с учётом реальных затрат на поддержку "
+"дополнительных платформ."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3385
+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 ""
+"Проект FreeBSD разделяет целевые платформы на четыре уровня. Каждый уровень "
+"включает список гарантий, на которые могут рассчитывать пользователи, а "
+"также обязательства проекта и разработчиков по выполнению этих гарантий. Эти "
+"списки определяют минимальные гарантии для каждого уровня. Проект и "
+"разработчики могут предоставлять дополнительные уровни поддержки, "
+"превышающие минимальные гарантии для данного уровня, но такая дополнительная "
+"поддержка не гарантируется. Каждая целевая платформа назначается на "
+"определённый уровень для каждой стабильной ветви. В результате, целевая "
+"платформа может быть назначена на разные уровни в параллельных стабильных "
+"ветках."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3386
+#, no-wrap
+msgid "Platform Targets"
+msgstr "Целевые платформы"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3393
+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 ""
+"Поддержка аппаратной платформы состоит из двух компонентов: поддержки ядра и "
+"пользовательских двоичных интерфейсов приложений (ABI). Поддержка платформы "
+"на уровне ядра включает в себя всё необходимое для запуска ядра FreeBSD на "
+"аппаратной платформе, например, зависящее от машины управление виртуальной "
+"памятью и драйверы устройств. Пользовательский ABI определяет интерфейс для "
+"взаимодействия пользовательских процессов с ядром FreeBSD и базовыми "
+"системными библиотеками. Пользовательский ABI включает интерфейсы системных "
+"вызовов, расположение и семантику публичных структур данных, а также "
+"расположение и семантику аргументов, передаваемых подпрограммам. Некоторые "
+"компоненты ABI могут быть определены спецификациями, такими как расположение "
+"объектов исключений C++ или соглашения о вызовах для функций C."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3395
+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 ""
+"Ядро FreeBSD также использует ABI (иногда называемый Kernel Binary Interface "
+"(KBI)), который включает семантику и расположение публичных структур данных, "
+"а также расположение и семантику аргументов публичных функций внутри самого "
+"ядра."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3400
+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 ""
+"Ядро FreeBSD может поддерживать несколько пользовательских ABI. Например, "
+"ядро FreeBSD amd64 поддерживает пользовательские ABI FreeBSD amd64 и i386, а "
+"также пользовательские ABI Linux x86_64 и i386. Ядро FreeBSD должно "
+"поддерживать \"родной\" ABI в качестве ABI по умолчанию. \"Родной\" ABI, как "
+"правило, разделяет определённые свойства с ABI ядра, такие как соглашение о "
+"вызовах в C, размеры базовых типов и т.д."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3402
+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 ""
+"Уровни определены как для ядер, так и для пользовательских ABI. В общем "
+"случае ядро платформы и ABI FreeBSD назначаются на один и тот же уровень."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3403
+#, no-wrap
+msgid "Tier 1: Fully-Supported Architectures"
+msgstr "Уровень 1: Полностью поддерживаемые архитектуры"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3408
+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 ""
+"Уровень 1 включает наиболее зрелые платформы FreeBSD. Они поддерживаются "
+"офицером безопасности, инженерами выпуска и командой управления портами. "
+"Ожидается, что архитектуры Уровня 1 соответствуют производственному качеству "
+"во всех аспектах операционной системы FreeBSD, включая среды установки и "
+"разработки."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3410
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 1 "
+"platforms:"
+msgstr ""
+"Проект FreeBSD предоставляет следующие гарантии пользователям платформ "
+"Уровня 1:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3412
+msgid ""
+"Official FreeBSD release images will be provided by the release engineering "
+"team."
+msgstr ""
+"Официальные образы релизов FreeBSD будут предоставлены командой разработки "
+"релизов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3413
+msgid ""
+"Binary updates and source patches for Security Advisories and Errata Notices "
+"will be provided for supported releases."
+msgstr ""
+"Двоичные обновления и исправления исходного кода для Security Advisories и "
+"Errata Notices будут предоставляться для поддерживаемых выпусков."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3414
+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:3415
+msgid ""
+"Binary updates and source patches for cross-platform Security Advisories "
+"will typically be provided at the time of the announcement."
+msgstr ""
+"Двоичные обновления и исправления исходного кода для кросс-платформенных "
+"выпусков Security Advisories обычно предоставляются во время объявления."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3416
+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 ""
+"Изменения в пользовательских ABI, как правило, включают прослойки "
+"совместимости (shim) для обеспечения корректной работы бинарных файлов, "
+"скомпилированных для любой стабильной ветки, где платформа относится к "
+"Уровню 1. Эти прослойки могут быть отключены в стандартной установке. Если "
+"прослойки совместимости не предоставляются для изменения ABI, их отсутствие "
+"будет явно указано в примечаниях к выпуску."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3417
+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 ""
+"Изменения в определённых частях ABI ядра будут включать прослойки "
+"совместимости для обеспечения корректной работы модулей ядра, "
+"скомпилированных для самой старой поддерживаемой версии в ветке. Обратите "
+"внимание, что не все части ABI ядра защищены."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3418
+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:3419
+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:3420
+msgid ""
+"New features which are not inherently platform-specific will be fully "
+"functional on all Tier 1 architectures."
+msgstr ""
+"Новые функции, которые не являются специфичными для платформы, будут "
+"полностью работоспособны на всех архитектурах Уровня 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3421
+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:3422
+msgid ""
+"Tier 1 platforms should be fully documented. Basic operations will be "
+"documented in the FreeBSD Handbook."
+msgstr ""
+"Уровень 1 платформ должен быть полностью документирован. Основные операции "
+"будут описаны в Руководстве FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3423
+msgid "Tier 1 platforms will be included in the source tree."
+msgstr "Уровень 1 платформ будет включен в дерево исходных кодов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3424
+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 ""
+"Платформы Уровня 1 должны быть самодостаточными, используя либо встроенный "
+"инструментарий, либо внешний инструментарий. Если требуется внешний "
+"инструментарий, будут предоставлены официальные бинарные пакеты для него."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3426
+msgid ""
+"To maintain maturity of Tier 1 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+"Для обеспечения зрелости платформ Уровня 1 проект FreeBSD будет поддерживать "
+"следующие ресурсы для разработки:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3428
+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 ""
+"Сборка и автоматизация тестирования поддерживаются либо в кластере "
+"FreeBSD.org, либо в другом месте, легко доступном для всех разработчиков. "
+"Для встраиваемых платформ можно использовать эмулятор, доступный в кластере "
+"FreeBSD.org, вместо реального оборудования."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3429
+#: documentation/content/en/articles/committers-guide/_index.adoc:3459
+msgid "Inclusion in the `make universe` and `make tinderbox` targets."
+msgstr "Включение в цели `make universe` и `make tinderbox`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3430
+msgid ""
+"Dedicated hardware in one of the FreeBSD clusters for package building "
+"(either natively or via qemu-user)."
+msgstr ""
+"Выделенное оборудование в одном из кластеров FreeBSD для сборки пакетов "
+"(нативно или через qemu-user)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3432
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 1 status of a platform:"
+msgstr ""
+"Совокупно, разработчики должны обеспечить следующее для поддержания статуса "
+"платформы Уровня 1:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3434
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 1 "
+"platform."
+msgstr ""
+"Изменения в дереве исходного кода не должны заведомо нарушать сборку "
+"платформы Уровня 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3435
+msgid ""
+"Tier 1 architectures must have a mature, healthy ecosystem of users and "
+"active developers."
+msgstr ""
+"Уровень 1 архитектур должен обладать зрелой, здоровой экосистемой "
+"пользователей и активных разработчиков."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3436
+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 ""
+"Разработчики должны иметь возможность собирать пакеты на широко доступных, "
+"невстраиваемых системах Уровня 1. Это может означать как нативные сборки, "
+"если невстраиваемые системы широко доступны для рассматриваемой платформы, "
+"так и кросс-сборки, выполняемые на другой архитектуре Уровня 1."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3437
+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 ""
+"Изменения не должны нарушать ABI пользовательского пространства. Если "
+"изменение ABI необходимо, совместимость ABI для существующих бинарных файлов "
+"должна обеспечиваться с помощью версионирования символов или увеличения "
+"версий разделяемых библиотек."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3438
+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 ""
+"Изменения, которым сделано слияние в стабильные ветки, не должны нарушать "
+"защищенные части ABI ядра. Если требуется изменение ABI ядра, изменение "
+"должно быть модифицировано для сохранения функциональности существующих "
+"модулей ядра."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3439
+#, no-wrap
+msgid "Tier 2: Developmental and Niche Architectures"
+msgstr "Уровень 2: Развивающиеся и нишевые архитектуры"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3443
+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 ""
+"Уровень 2 включает в себя функциональные, но менее развитые платформы "
+"FreeBSD. Они не поддерживаются офицером безопасности, инженерами выпуска и "
+"командой управления портами."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3447
+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 ""
+"Платформы Уровня 2 могут быть кандидатами в платформы Уровня 1, которые всё "
+"ещё находятся в активной разработке. Архитектуры, достигшие конца жизненного "
+"цикла, также могут быть переведены из статуса Уровня 1 на Уровень 2 по мере "
+"сокращения доступности ресурсов для поддержания системы в состоянии "
+"производственного качества. Хорошо поддерживаемые нишевые архитектуры также "
+"могут относиться к Уровню 2."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3449
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 2 "
+"platforms:"
+msgstr ""
+"Проект FreeBSD предоставляет следующие гарантии пользователям платформ "
+"Уровня 2:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3451
+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 ""
+"Инфраструктура портов должна включать базовую поддержку архитектур Уровня 2, "
+"достаточную для сборки портов и пакетов. Это включает поддержку базовых "
+"пакетов, таких как ports-mgmt/pkg, но нет гарантии, что произвольные порты "
+"будут собираемыми или работоспособными."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3452
+msgid ""
+"New features which are not inherently platform-specific should be feasible "
+"on all Tier 2 architectures if not implemented."
+msgstr ""
+"Новые функции, которые не являются специфичными для платформы, должны быть "
+"реализуемы на всех архитектурах уровня Уровень 2, если они не реализованы."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3453
+msgid "Tier 2 platforms will be included in the source tree."
+msgstr "Уровень 2 платформ будет включен в дерево исходных кодов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3454
+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 ""
+"Платформы Уровня 2 должны быть самодостаточными, используя либо встроенный "
+"инструментарий, либо внешний инструментарий. Если требуется внешний "
+"инструментарий, будут предоставлены официальные бинарные пакеты для него."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3455
+msgid ""
+"Tier 2 platforms should provide functional kernels and userlands even if an "
+"official release distribution is not provided."
+msgstr ""
+"Уровень 2 платформ должен обеспечивать функциональные ядра и "
+"пользовательские среды, даже если официальный дистрибутив не предоставляется."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3457
+msgid ""
+"To maintain maturity of Tier 2 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+"Для поддержания зрелости платформ Уровня 2 проект FreeBSD будет поддерживать "
+"следующие ресурсы для разработки:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3461
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 2 status of a platform:"
+msgstr ""
+"Совместно разработчики должны обеспечить следующее для поддержания статуса "
+"платформы Уровня 2:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3463
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 2 "
+"platform."
+msgstr ""
+"Изменения в дереве исходного кода не должны заведомо нарушать сборку "
+"платформы Уровня 2."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3464
+msgid ""
+"Tier 2 architectures must have an active ecosystem of users and developers."
+msgstr ""
+"Уровень 2 архитектур должен иметь активную экосистему пользователей и "
+"разработчиков."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3465
+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 ""
+"Хотя изменения, нарушающие ABI пользовательского пространства, допустимы, не "
+"следует делать это без веской причины. Значительные изменения ABI "
+"пользовательского пространства должны ограничиваться основными версиями."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3466
+msgid ""
+"New features that are not yet implemented on Tier 2 architectures should "
+"provide a means of disabling them on those architectures."
+msgstr ""
+"Новые функции, которые еще не реализованы в архитектурах Уровня 2, должны "
+"предоставлять возможность их отключения на этих архитектурах."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3467
+#, no-wrap
+msgid "Tier 3: Experimental Architectures"
+msgstr "Уровень 3: Экспериментальные архитектуры"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3471
+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 ""
+"Уровень 3 включает платформы с частичной поддержкой FreeBSD. Они _не_ "
+"поддерживаются офицером безопасности, инженерами выпуска релизов и командой "
+"управления портами."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3474
+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 ""
+"Уровень 3 включает архитектуры на ранних стадиях разработки, предназначенные "
+"для неосновных аппаратных платформ или считающиеся устаревшими системами, "
+"которые вряд ли получат широкое применение в будущем. Первоначальная "
+"поддержка платформ Уровня 3 может находиться в отдельном репозитории, а не в "
+"основном репозитории исходного кода."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3477
+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 ""
+"Проект FreeBSD не предоставляет никаких гарантий пользователям платформ "
+"Уровня 3 и не обязуется выделять ресурсы для поддержки разработки. Платформы "
+"Уровня 3 могут не всегда собираться, и ни одно ABI ядра или "
+"пользовательского пространства не считается стабильным."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3478
+#, no-wrap
+msgid "Unsupported Architectures"
+msgstr "Неподдерживаемые архитектуры"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3482
+msgid ""
+"Other platforms are not supported in any form by the project. The project "
+"previously described these as Tier 4 systems."
+msgstr ""
+"Другие платформы не поддерживаются проектом в какой-либо форме. Ранее проект "
+"описывал их как системы Уровня 4."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3485
+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:3486
+#, no-wrap
+msgid "Policy on Changing the Tier of an Architecture"
+msgstr "Политика изменения уровня архитектуры"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3490
+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 ""
+"Системы могут быть перемещены с одного уровня на другой только с одобрения "
+"Основной команды FreeBSD, которая принимает это решение совместно с Security "
+"Officer, Release Engineering и командами управления портами. Для перевода "
+"платформы на более высокий уровень все недостающие гарантии поддержки должны "
+"быть выполнены до завершения повышения."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3492
+#, no-wrap
+msgid "Ports Specific FAQ"
+msgstr "Специфичные FAQ по портам"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3495
+#, no-wrap
+msgid "Adding a New Port"
+msgstr "Добавление нового порта"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3498
+#, no-wrap
+msgid "How do I add a new port?"
+msgstr "Как добавить новый порт?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3503
+msgid ""
+"Adding a port to the tree is relatively simple. Once the port is ready to be "
+"added, as explained later crossref:committers-guide[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 ""
+"Добавление порта в дерево относительно просто. Как только порт готов к "
+"добавлению, как описано далее crossref:committers-guide[ports-qa-add-new-"
+"extra,здесь], необходимо добавить запись каталога порта в "
+"[.filename]#Makefile# соответствующей категории. В этом "
+"[.filename]#Makefile# порты перечислены в алфавитном порядке и добавлены в "
+"переменную `SUBDIR`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3507
+#, no-wrap
+msgid "\tSUBDIR += newport\n"
+msgstr "\tSUBDIR += newport\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3510
+msgid ""
+"Once the port and its category's Makefile are ready, the new port can be "
+"committed:"
+msgstr ""
+"После того как порт и Makefile его категории готовы, новый порт можно "
+"закоммитить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3515
+#, 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:3519
+msgid ""
+"Don't forget to crossref:committers-guide[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 ""
+"Не забудьте crossref:committers-guide[port-commit-message-formats,настроить "
+"git-хуки для дерева портов, как описано здесь]; специальный хук был "
+"разработан для проверки [.filename]#Makefile# каждой категории."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3522
+#, 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:3525
+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:3528
+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 ""
+"В главе extref:{porters-handbook}testing[Руководства портировщика по "
+"тестированию] содержатся более подробные инструкции. См. разделы extref:"
+"{porters-handbook}testing[Portclippy / Portfmt, testing-portclippy] и extref:"
+"{porters-handbook}testing[poudriere, testing-poudriere]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3530
+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:3532
+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 ""
+"Если порт поступил от отправителя, который ранее не участвовал в Проекте, "
+"добавьте имя этого человека в раздел extref:{contributors}[Дополнительные "
+"участники, contrib-additional] списка участников FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3535
+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 ""
+"Закройте PR, если порт был отправлен как PR. Чтобы закрыть PR, измените "
+"состояние на `Issue Resolved` и установите решение как `Fixed`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3539
+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 ""
+"Если по какой-то причине использование extref:{porters-handbook}"
+"testing[poudriere, testing-poudriere] для тестирования нового порта "
+"невозможно, минимальный набор тестирования включает следующую "
+"последовательность:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3549
+#, 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:3552
+msgid ""
+"Note that poudriere is the reference for package building, it the port does "
+"not build in poudriere, it will be removed."
+msgstr ""
+"Обратите внимание, что poudriere является эталоном для сборки пакетов. Если "
+"порт не собирается в poudriere, он будет удалён."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3555
+#, no-wrap
+msgid "Removing an Existing Port"
+msgstr "Удаление существующего порта"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3558
+#, no-wrap
+msgid "How do I remove an existing port?"
+msgstr "Как удалить существующий порт?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3561
+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:3563
+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:3564
+msgid "The port's PKGNAME appears in exactly one line in a recent INDEX file."
+msgstr ""
+"Имя пакета порта (PKGNAME) появляется ровно в одной строке в последнем файле "
+"INDEX."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3565
+msgid ""
+"No other ports contains any reference to the port's directory or PKGNAME in "
+"their Makefiles"
+msgstr ""
+"Ни один другой порт не содержит ссылок на каталог порта или PKGNAME в своих "
+"Makefiles"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3569
+msgid ""
+"When using Git, consider using man:git-grep[1], it is much faster than `grep "
+"-r`."
+msgstr ""
+"При использовании Git рассмотрите возможность использования man:git-grep[1], "
+"так как он значительно быстрее, чем `grep -r`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3572
+msgid "Then, remove the port:"
+msgstr "Затем удалите порт:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3576
+msgid "Remove the port's files and directory with `git rm`."
+msgstr "Удалите файлы и каталог порта с помощью `git rm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3577
+msgid ""
+"Remove the `SUBDIR` listing of the port in the parent directory "
+"[.filename]#Makefile#."
+msgstr ""
+"Удалите указание `SUBDIR` для порта в [.filename]#Makefile# родительского "
+"каталога."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3578
+#: documentation/content/en/articles/committers-guide/_index.adoc:3593
+msgid "Add an entry to [.filename]#ports/MOVED#."
+msgstr "Добавьте запись в [.filename]#ports/MOVED#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3579
+msgid "Remove the port from [.filename]#ports/LEGAL# if it is there."
+msgstr "Удалите порт из [.filename]#ports/LEGAL#, если он там присутствует."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3584
+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 ""
+"Альтернативно, вы можете использовать скрипт rmport из [.filename]#ports/"
+"Tools/scripts#. Этот скрипт был написан {vd}. При отправке вопросов об этом "
+"скрипте в {freebsd-ports}, пожалуйста, также копируйте {crees}, текущего "
+"сопровождающего."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3586
+#, 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:3591
+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 ""
+"Выполните тщательную проверку коллекции портов на наличие зависимостей от "
+"старого расположения или имени порта и обновите их. Запуск `grep` по файлу "
+"[.filename]#INDEX# недостаточен, поскольку некоторые порты имеют "
+"зависимости, включённые через параметры компиляции. Рекомендуется выполнить "
+"полный поиск с помощью man:git-grep[1] по коллекции портов."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3592
+msgid ""
+"Remove the `SUBDIR` entry from the old category Makefile and add a `SUBDIR` "
+"entry to the new category Makefile."
+msgstr ""
+"Удалите запись `SUBDIR` из Makefile старой категории и добавьте запись "
+"`SUBDIR` в Makefile новой категории."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3594
+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 ""
+"Поищите записи в xml-файлах внутри [.filename]#ports/security/vuxml# и "
+"скорректируйте их соответствующим образом. В частности, проверьте предыдущие "
+"пакеты с новым именем, версия которых может включать новый порт."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3595
+msgid "Move the port with `git mv`."
+msgstr "Переместите порт с помощью `git mv`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3596
+#: documentation/content/en/articles/committers-guide/_index.adoc:3607
+msgid "Commit the changes."
+msgstr "Зафиксируйте изменения."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3599
+#, 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:3604
+msgid "Copy port with `cp -R old-cat/old-port new-cat/new-port`."
+msgstr "Скопируйте порт с помощью `cp -R old-cat/old-port new-cat/new-port`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3605
+msgid "Add the new port to the [.filename]#new-cat/Makefile#."
+msgstr "Добавьте новый порт в файл [.filename]#new-cat/Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3606
+msgid "Change stuff in [.filename]#new-cat/new-port#."
+msgstr "Измените содержимое в [.filename]#new-cat/new-port#."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3610
+#, no-wrap
+msgid "Ports Freeze"
+msgstr "Заморозка портов"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3613
+#, no-wrap
+msgid "What is a “ports freeze”?"
+msgstr "Что такое «заморозка портов»?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3620
+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 ""
+"«Заморозка портов» (ports freeze) — это ограниченное состояние, в которое "
+"дерево портов переводилось перед выпуском релиза. Оно использовалось для "
+"обеспечения более высокого качества пакетов, поставляемых с релизом. Обычно "
+"это длилось несколько недель. В течение этого времени исправлялись проблемы "
+"со сборкой, а также строились пакеты для релиза. Эта практика больше не "
+"применяется, так как пакеты для релизов теперь собираются из текущей "
+"стабильной квартальной ветки."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3623
+msgid ""
+"For more information on how to merge commits to the quarterly branch, see "
+"crossref:committers-guide[ports-qa-misc-request-mfh, What is the procedure "
+"to request authorization for merging a commit to the quarterly branch?]."
+msgstr ""
+"Для получения дополнительной информации о том, как делать слияние коммитов в "
+"квартальную ветку, см. crossref:committers-guide[ports-qa-misc-request-mfh, "
+"Какова процедура получения разрешения на слияние коммита с квартальной "
+"веткой?]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3625
+#, no-wrap
+msgid "Quarterly Branches"
+msgstr "Квартальные ветки"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3628
+#, 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:3631
+msgid ""
+"As of November 30, 2020, there is no need to seek explicit approval to "
+"commit to the quarterly branch."
+msgstr ""
+"По состоянию на 30 ноября 2020 года явное одобрение для внесения изменений в "
+"квартальную ветку не требуется."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3633
+#, 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:3636
+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 ""
+"Слияние коммитов в квартальную ветку (процесс, который мы по историческим "
+"причинам называем MFH) очень похоже на MFC коммитов в репозитории src, "
+"поэтому в основном:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3642
+#, 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:3646
+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 ""
+"где `$HASH` — это хэш коммита, который вы хотите скопировать в квартальную "
+"ветку. Параметр `-x` гарантирует, что хэш `$HASH` из ветки `main` будет "
+"включён в новое сообщение коммита в квартальной ветке."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3648
+#, no-wrap
+msgid "Creating a New Category"
+msgstr "Создание новой категории"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3651
+#, no-wrap
+msgid "What is the procedure for creating a new category?"
+msgstr "Какова процедура создания новой категории?"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3656
+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 ""
+"Пожалуйста, ознакомьтесь с extref:{porters-handbook}makefiles/[Предложение "
+"новой категории, proposing-categories] в Руководстве портера. После "
+"выполнения этой процедуры и назначения PR в группе — {portmgr}, решение об "
+"одобрении принимается ими. Если решение положительное, их обязанностью "
+"является:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3660
+msgid "Perform any needed moves. (This only applies to physical categories.)"
+msgstr ""
+"Выполните все необходимые перемещения. (Это применимо только к физическим "
+"категориям.)"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3661
+msgid ""
+"Update the `VALID_CATEGORIES` definition in [.filename]#ports/Mk/"
+"bsd.port.mk#."
+msgstr ""
+"Обновите определение `VALID_CATEGORIES` в файле [.filename]#ports/Mk/"
+"bsd.port.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3662
+msgid "Assign the PR back to you."
+msgstr "Назначить PR обратно на вас."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3665
+#, 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:3670
+msgid ""
+"Upgrade each moved port's [.filename]#Makefile#. Do not connect the new "
+"category to the build yet."
+msgstr ""
+"Обновите [.filename]#Makefile# каждого перемещенного порта. Пока не "
+"подключайте новую категорию к сборке."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3672
+msgid "To do this, you will need to:"
+msgstr "Для этого вам потребуется:"
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3676
+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 ""
+"Измените `CATEGORIES` порта (это была цель упражнения, помните?). Новая "
+"категория указана первой. Это поможет убедиться, что PKGORIGIN указан "
+"правильно."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3677
+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 ""
+"Выполните команду `make describe`. Поскольку команда `make index` верхнего "
+"уровня, которую вы запустите через несколько шагов, является итерацией `make "
+"describe` для всей иерархии портов, обнаружение ошибок на этом этапе "
+"сэкономит время, избавив от необходимости перезапускать этот шаг позже."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3678
+msgid ""
+"If you want to be really thorough, now might be a good time to run "
+"man:portlint[1]."
+msgstr ""
+"Если вы хотите быть действительно тщательным, сейчас может быть подходящее "
+"время запустить man:portlint[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3681
+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 ""
+"Проверьте, что значения ``PKGORIGIN`` указаны верно. Система портов "
+"использует запись `CATEGORIES` каждого порта для создания его `PKGORIGIN`, "
+"который служит для связи установленных пакетов с директорией порта, из "
+"которого они были собраны. Если эта запись неверна, такие распространённые "
+"инструменты для работы с портами, как man:pkg-version[8] и "
+"man:portupgrade[1], не будут работать."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3683
+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 ""
+"Для этого используйте инструмент [.filename]#chkorigin.sh#: `env PORTSDIR=/"
+"path/to/ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh`. Это проверит "
+"каждый порт в дереве портов, даже те, которые не связаны со сборкой, поэтому "
+"вы можете запустить его сразу после операции перемещения. Подсказка: не "
+"забудьте проверить ``PKGORIGIN`` для всех подчинённых портов (slave ports) "
+"тех портов, которые вы только что переместили!"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3684
+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 ""
+"На вашей локальной системе протестируйте предлагаемые изменения: сначала "
+"закомментируйте записи SUBDIR в файлах [.filename]##Makefile## старых "
+"категорий портов; затем включите сборку новой категории в [.filename]#ports/"
+"Makefile#. Запустите `make checksubdirs` в затронутых каталогах категорий, "
+"чтобы проверить записи SUBDIR. Затем в каталоге [.filename]#ports/# "
+"выполните `make index`. Это может занять более 40 минут даже на современных "
+"системах; однако это необходимый шаг для предотвращения проблем у других "
+"пользователей."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3685
+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 ""
+"После этого можно зафиксировать обновлённый файл [.filename]#ports/"
+"Makefile#, чтобы подключить новую категорию к сборке, а также сделать коммит "
+"изменениям в файле [.filename]#Makefile# для старой категории или категорий."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3686
+msgid "Add appropriate entries to [.filename]#ports/MOVED#."
+msgstr "Добавьте соответствующие записи в [.filename]#ports/MOVED#."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3687
+msgid "Update the documentation by modifying:"
+msgstr "Обновите документацию, изменив:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3688
+#: documentation/content/en/articles/committers-guide/_index.adoc:3697
+msgid ""
+"the extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] in the "
+"Porter's Handbook"
+msgstr ""
+"extref:{porters-handbook}makefiles/[список категорий, porting-categories] в "
+"Руководстве портера"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3690
+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:3692
+#, 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:3695
+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:3699
+#: documentation/content/en/articles/committers-guide/_index.adoc:3793
+#, no-wrap
+msgid "Miscellaneous Questions"
+msgstr "Разные вопросы"
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3702
+#, 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:3705
+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:3707
+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 ""
+"Большинство изменений инфраструктуры порта (то есть модернизация без "
+"изменения функциональности). Например, это включает переход на новые макросы "
+"`USES`, включение подробных сборок и переход на новые синтаксисы системы "
+"портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3708
+msgid "Trivial and _tested_ build and runtime fixes."
+msgstr "Тривиальные и _проверенные_ исправления для сборки и выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3709
+msgid ""
+"Documentations or metadata changes to ports, like [.filename]#pkg-descr# or "
+"`COMMENT`."
+msgstr ""
+"Документация или изменения метаданных для портов, такие как [.filename]#pkg-"
+"descr# или `COMMENT`."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3714
+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 ""
+"Исключениями являются любые компоненты, поддерживаемые {portmgr} или "
+"{security-officer}. Несанкционированные коммиты в порты, которые "
+"поддерживаются этими группами, недопустимы."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3717
+#, 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:3721
+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 ""
+"Пакеты собираются несколько раз в неделю. Если сборка порта завершается "
+"неудачно, сопровождающий получит письмо от `pkg-fallout@FreeBSD.org`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3723
+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 ""
+"Отчеты по всем сборкам пакетов (официальные, экспериментальные и без "
+"регрессии) агрегируются на link:pkg-status.FreeBSD.org[pkg-"
+"status.FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3725
+#, no-wrap
+msgid "I added a new port. Do I need to add it to the [.filename]#INDEX#?"
+msgstr "Я добавил новый порт. Нужно ли добавлять его в [.filename]#INDEX#?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3728
+msgid ""
+"No. The file can either be generated by running `make index`, or a pre-"
+"generated version can be downloaded with `make fetchindex`."
+msgstr ""
+"Нет. Файл может быть создан выполнением команды `make index`, или можно "
+"загрузить предварительно сгенерированную версию с помощью `make fetchindex`."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3730
+#, 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:3734
+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 ""
+"Любой файл непосредственно в [.filename]#ports/# или любой файл в "
+"подкаталоге, название которого начинается с заглавной буквы ([.filename]#Mk/"
+"#, [.filename]#Tools/# и т.д.). В частности, {portmgr} очень ревностно "
+"относится к [.filename]#ports/Mk/bsd.port*.mk#, поэтому не вносите изменения "
+"в эти файлы, если не хотите навлечь на себя их гнев."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3736
+#, 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 "Как правильно обновить контрольную сумму для distfile порта, если файл изменился без изменения версии?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3740
+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 ""
+"Когда контрольная сумма файла дистрибутива обновляется из-за того, что автор "
+"обновил файл без изменения ревизии порта, сообщение коммита включает сводку "
+"соответствующих различий между оригинальным и новым файлом дистрибутива, "
+"чтобы убедиться, что файл дистрибутива не был повреждён или злонамеренно "
+"изменён. Если текущая версия порта находится в дереве портов уже некоторое "
+"время, копия старого файла дистрибутива обычно доступна на FTP-серверах; в "
+"противном случае следует связаться с автором или сопровождающим, чтобы "
+"выяснить, почему файл дистрибутива изменился."
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3742
+#, no-wrap
+msgid "How can an experimental test build of the ports tree (exp-run) be requested?"
+msgstr "Как можно запросить экспериментальную тестовую сборку дерева портов (exp-run)?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3746
+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 ""
+"Перед коммитом изменений, оказывающих значительное влияние на порты, "
+"необходимо выполнить тестовый прогон (exp-run). Исправление может относиться "
+"как к дереву портов, так и к базовой системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3748
+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:3752
+msgid "Go to the link:https://bugs.freebsd.org/submit[Bugzilla new PR page]."
+msgstr ""
+"Перейдите по ссылке link:https://bugs.freebsd.org/submit[Страница создания "
+"новой PR в Bugzilla]."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3753
+msgid "Select the product your patch is about."
+msgstr "Выберите продукт, к которому относится ваш патч."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3754
+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:3755
+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 ""
+"Если вверху написано «Показать дополнительные поля (Show Advanced Fields)», "
+"нажмите на это. Теперь будет написано «Скрыть дополнительные поля (Hide "
+"Advanced Fields)». Станут доступны многие новые поля. Если уже написано "
+"«Скрыть дополнительные поля», ничего делать не нужно."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3756
+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 ""
+"В разделе «Flags» установите флаг «exp-run» в значение `?`. Для всех "
+"остальных полей при наведении курсора на любое поле отображаются "
+"дополнительные сведения."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3757
+msgid "Submit. Wait for the build to run."
+msgstr "Отправьте. Дождитесь завершения сборки."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3758
+msgid "{portmgr} will reply with a possible fallout."
+msgstr "{portmgr} ответит с информацией возможных падениях."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3759
+msgid "Depending on the fallout:"
+msgstr "В зависимости от последствий:"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3760
+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:3761
+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:3762
+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 ""
+"После этого вернитесь к шагу 6, указав, что проблема устранена, и дождитесь "
+"повторного запуска exp-run. Повторяйте, пока остаются неисправные порты."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3765
+#, no-wrap
+msgid "Issues Specific to Developers Who Are Not Committers"
+msgstr "Проблемы, характерные для разработчиков, не являющихся коммиттерами"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3770
+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 ""
+"Несколько людей, имеющих доступ к машинам FreeBSD, не обладают правами на "
+"коммиты. Почти все положения этого документа применимы и к таким "
+"разработчикам (за исключением аспектов, специфичных для коммитов и "
+"связанного с ними членства в рассылках). В частности, мы рекомендуем "
+"ознакомиться со следующим:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3772
+msgid "crossref:committers-guide[admin, Administrative Details]"
+msgstr "crossref:committers-guide[admin,Административные детали]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3773
+msgid "crossref:committers-guide[conventions-everyone, For Everyone]"
+msgstr "crossref:committers-guide[conventions-everyone, Для всех]"
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3777
+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 ""
+"Попросите вашего наставника добавить вас в список \"Дополнительные "
+"участники\" ([.filename]#doc/shared/contrib-additional.adoc#), если вас там "
+"еще нет."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3779
+msgid "crossref:committers-guide[developer.relations, Developer Relations]"
+msgstr ""
+"crossref:committers-guide[developer.relations, Отношения с разработчиками]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3780
+msgid "crossref:committers-guide[ssh.guide, SSH Quick-Start Guide]"
+msgstr ""
+"crossref:committers-guide[ssh.guide, Руководство по быстрому началу работы с "
+"SSH]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3781
+msgid ""
+"crossref:committers-guide[rules, The FreeBSD Committers' Big List of Rules]"
+msgstr ""
+"crossref:committers-guide[rules, Большой список правил коммиттеров FreeBSD]"
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3783
+#, no-wrap
+msgid "Information About Google Analytics"
+msgstr "Информация о Google Analytics"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3786
+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 ""
+"По состоянию на 12 декабря 2012 года на сайте проекта FreeBSD был включен "
+"Google Analytics для сбора анонимной статистики использования сайта."
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3790
+msgid ""
+"As of March 3, 2022, Google Analytics was removed from the FreeBSD Project."
+msgstr ""
+"По состоянию на 3 марта 2022 года Google Analytics был удалён из проекта "
+"FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3795
+#, no-wrap
+msgid "How do I access people.FreeBSD.org to put up personal or project information?"
+msgstr "Как получить доступ к people.FreeBSD.org для размещения личной или проектной информации?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3799
+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` — это то же самое, что и `freefall.FreeBSD.org`. Просто "
+"создайте каталог [.filename]#public_html#. Всё, что вы поместите в этот "
+"каталог, будет автоматически доступно по адресу https://people.FreeBSD.org/"
+"[https://people.FreeBSD.org/]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3800
+#, no-wrap
+msgid "Where are the mailing list archives stored?"
+msgstr "Где хранятся архивы списков рассылки?"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3803
+msgid ""
+"The mailing lists are archived under [.filename]#/local/mail# on "
+"`freefall.FreeBSD.org`."
+msgstr ""
+"Списки рассылки архивируются в [.filename]#/local/mail# на "
+"`freefall.FreeBSD.org`."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3804
+#, 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:3807
+msgid ""
+"See the https://www.freebsd.org/internal/new-account/[New Account Creation "
+"Procedure] document on the internal pages."
+msgstr ""
+"См. документ https://www.freebsd.org/internal/new-account/[Процедура "
+"создания новой учётной записи] на внутренних страницах."
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3809
+#, no-wrap
+msgid "Benefits and Perks for FreeBSD Committers"
+msgstr "Преимущества и привилегии для коммиттеров FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3812
+#, no-wrap
+msgid "Recognition"
+msgstr "Признание"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3816
+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:3818
+#, no-wrap
+msgid "FreeBSD Mall"
+msgstr "FreeBSD Mall"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3821
+msgid ""
+"FreeBSD committers can get a free 4-CD or DVD set at conferences from http://"
+"www.freebsdmall.com[FreeBSD Mall, Inc.]."
+msgstr ""
+"Коммиттеры FreeBSD могут бесплатно получить набор из 4 CD или DVD на "
+"конференциях через http://www.freebsdmall.com[FreeBSD Mall, Inc.]."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3823
+#, no-wrap
+msgid "`Gandi.net`"
+msgstr "`Gandi.net`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3826
+msgid ""
+"https://gandi.net[Gandi] provides website hosting, cloud computing, domain "
+"registration, and X.509 certificate services."
+msgstr ""
+"https://gandi.net[Gandi] предоставляет услуги хостинга веб-сайтов, облачных "
+"вычислений, регистрации доменов и сертификатов X.509."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3830
+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 предоставляет скидку E-rate всем разработчикам FreeBSD. Чтобы "
+"упростить процесс получения скидки, сначала создайте учетную запись Gandi, "
+"заполните платежные данные и выберите валюту. Затем отправьте письмо по "
+"адресу mailto:non-profit@gandi.net[non-profit@gandi.net] с вашего адреса "
+"`@freebsd.org`, указав ваш идентификатор Gandi."
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3832
+#, no-wrap
+msgid "`rsync.net`"
+msgstr "`rsync.net`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3835
+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] предоставляет облачное хранилище для резервного "
+"копирования вне офиса, оптимизированное для пользователей UNIX. Их сервис "
+"полностью работает на FreeBSD и ZFS."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3836
+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 предоставляет бесплатный аккаунт на 500 ГБ навсегда разработчикам "
+"FreeBSD. Просто зарегистрируйтесь по адресу https://www.rsync.net/"
+"freebsd.html[https://www.rsync.net/freebsd.html], используя ваш адрес "
+"`@freebsd.org`, чтобы получить этот бесплатный аккаунт."
+
+#~ msgid "https://ci.freebsd.org[Jenkins]"
+#~ msgstr "https://ci.freebsd.org[Jenkins]"
+
+#, no-wrap
+#~ msgid "[[mfc-with-git]]\n"
+#~ msgstr "[[mfc-with-git]]\n"
+
+#~ msgid "[source,shell]"
+#~ msgstr "[source,shell]"
+
+#, no-wrap
+#~ msgid "[source,shell]\n"
+#~ msgstr "[source,shell]\n"
+
+#~ msgid "[[vendor-import-git]]"
+#~ msgstr "[[vendor-import-git]]"
+
+#, no-wrap
+#~ msgid "[[git-push-upstream]]\n"
+#~ msgstr "[[git-push-upstream]]\n"
+
+#, no-wrap
+#~ msgid "[[git-push-upstream-alt]]\n"
+#~ msgstr "[[git-push-upstream-alt]]\n"
+
+#, no-wrap
+#~ msgid "[[git-faq]]\n"
+#~ msgstr "[[git-faq]]\n"
+
+#, no-wrap
+#~ msgid "[[github-pull-land]]\n"
+#~ msgstr "[[github-pull-land]]\n"
+
+#, no-wrap
+#~ msgid "[[vcs-history]]\n"
+#~ msgstr "[[vcs-history]]\n"
+
+#~ msgid "[[conventions]]"
+#~ msgstr "[[conventions]]"
+
+#~ msgid "[[conventions-committers]]"
+#~ msgstr "[[conventions-committers]]"
+
+#, no-wrap
+#~ msgid ""
+#~ "[[commit-steps]]\n"
+#~ "[.procedure]\n"
+#~ "====\n"
+#~ "*Steps for New Committers*\n"
+#~ msgstr ""
+#~ "[[commit-steps]]\n"
+#~ "[.procedure]\n"
+#~ "====\n"
+#~ "*Шаги для нового коммиттера*\n"
+
+#, no-wrap
+#~ msgid "[[conventions-everyone]]\n"
+#~ msgstr "[[conventions-everyone]]\n"
+
+#~ msgid "[[smtp-setup]]"
+#~ msgstr "[[smtp-setup]]"
+
+#, no-wrap
+#~ msgid "[[smtp-setup-local-mta]]\n"
+#~ msgstr "[[smtp-setup-local-mta]]\n"
+
+#~ msgid "[.programlisting]"
+#~ msgstr "[.programlisting]"
+
+#, no-wrap
+#~ msgid "[.programlisting]\n"
+#~ msgstr "[.programlisting]\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "[[smtp-setup-local-opensmtpd]]\n"
+#~ ".Using OpenSMTPD\n"
+#~ "[example]\n"
+#~ "====\n"
+#~ msgstr ""
+#~ "[[smtp-setup-local-opensmtpd]]\n"
+#~ ".Использование OpenSMTPD\n"
+#~ "[example]\n"
+#~ "====\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "====\n"
+#~ "[[smtp-setup-local-exim]]\n"
+#~ ".Using Exim\n"
+#~ "[example]\n"
+#~ "====\n"
+#~ msgstr ""
+#~ "====\n"
+#~ "[[smtp-setup-local-exim]]\n"
+#~ ".Использование Exim\n"
+#~ "[example]\n"
+#~ "====\n"
+
+#, no-wrap
+#~ msgid "====\n"
+#~ msgstr "====\n"
+
+#, no-wrap
+#~ msgid "[[mentors]]\n"
+#~ msgstr "[[mentors]]\n"
+
+#~ msgid "[[pre-commit-review]]"
+#~ msgstr "[[pre-commit-review]]"
+
+#, no-wrap
+#~ msgid "[[commit-log-message]]\n"
+#~ msgstr "[[commit-log-message]]\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "[.informaltable]\n"
+#~ "[cols=\"20%,80%\", frame=\"none\"]"
+#~ msgstr ""
+#~ "[.informaltable]\n"
+#~ "[cols=\"20%,80%\", frame=\"none\"]"
diff --git a/documentation/content/ru/articles/contributing/_index.adoc b/documentation/content/ru/articles/contributing/_index.adoc
index 16a3b6878e..605ac4d6b9 100644
--- a/documentation/content/ru/articles/contributing/_index.adoc
+++ b/documentation/content/ru/articles/contributing/_index.adoc
@@ -1,8 +1,16 @@
---
-title: Участие в проекте FreeBSD
authors:
- - author: Джордан Хаббард
+ -
+ author: 'Jordan Hubbard'
+ -
+ author: 'Sam Lawrance'
+ -
+ author: 'Mark Linimon'
+description: 'Как внести вклад в проект FreeBSD'
+tags: ["Contributing", "FreeBSD", "Non-Programmer Tasks", "Programmer Tasks"]
+title: 'Участие в проекте FreeBSD'
trademarks: ["freebsd", "ieee", "general"]
+weight: 15
---
= Участие в проекте FreeBSD
@@ -36,176 +44,168 @@ ifndef::env-beastie[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
+pass:[<!-- vale FreeBSD.Pronouns = NO -->]
+
[.abstract-title]
Аннотация
-В этой статье описаны различные способы, которыми отдельные лица и организаций могут принять участие в Проекте FreeBSD.
+В этой статье описаны различные способы, с помощью которых отдельный человек или организация могут внести вклад в проект FreeBSD.
'''
toc::[]
-Итак, вы хотите внести свой вклад во FreeBSD? Это великолепно! Жизнеспособность FreeBSD _основана_ на помощи её пользователей. Ваша помощь не только принимается, она жизненно необходима для продолжения роста FreeBSD.
+Итак, вы хотите внести свой вклад в FreeBSD? Это замечательно! FreeBSD _полагается_ на вклад своих пользователей для существования. Ваши усилия не только ценятся, они жизненно важны для дальнейшего развития FreeBSD.
+
+FreeBSD разрабатывает большое и постоянно растущее количество участников из разных стран, самого разного возраста и уровня технической экспертизы. Работы всегда больше, чем доступных людей, и любая помощь всегда приветствуется.
-Несмотря на уверения некоторых людей, вам не нужно быть гениальным программистом или персоной, лично связанной с руководящей группой FreeBSD, чтобы ваша помощь была принята. FreeBSD разрабатывает большое и увеличивающееся количество участников со всего мира, самого разного возраста и разных областей технической экспертизы. Работы, которую необходимо сделать, всегда больше, чем разработчиков, могущих её выполнить, и дополнительная помощь всегда приветствуется.
+В качестве волонтёра вы ограничены только тем, чем хотите заниматься. Однако мы просим вас учитывать ожидания других участников сообщества FreeBSD. Возможно, вам стоит принять это во внимание, прежде чем решить стать волонтёром.
-Проект FreeBSD занимается операционной системой в целом, а не только ядром или несколькими отдельными утилитами. Таким образом, в нашем [.filename]#TODO#-списке широкий спектр задач: от документации, бета-тестирования и презентаций до программы установки системы и специфических разработок уровня ядра. Люди любого уровня практически в любой области определённо смогут помочь проекту.
+Проект FreeBSD отвечает за целостную операционную среду, а не только за ядро или несколько разрозненных утилит. Таким образом, наши списки [.filename]#TODO# охватывают очень широкий спектр задач: от документации, бета-тестирования и презентаций до установщика системы и высокоспециализированных видов разработки ядра. Люди с любым уровнем навыков, практически в любой области, почти наверняка могут помочь проекту.
-Коммерческие структуры, связанные с использованием FreeBSD, также приглашаются к диалогу. Нужны ли вам особые расширения, для работы вашего продукта? Вы увидите, что мы отвечаем на ваши запросы, если они не слишком необычны. Вы работаете над дополнительными продуктами? Дайте нам знать! Мы сможем работать вместе над некоторыми его аспектами. Мир свободного программного обеспечения ставит под сомнение многие существующие представления о том, как программного обеспечение разрабатывается, продаётся и поддерживается, и мы настоятельно просим вас посмотреть на него ещё раз.
+Коммерческие организации, занятые в сферах, связанных с FreeBSD, также приглашаются к сотрудничеству. Вам нужно специальное расширение, чтобы ваш продукт работал? Вы увидите, что мы отвечаем на ваши запросы, если они не слишком экстравагантны. Вы работаете над продуктом, добавляющим ценность системе? Пожалуйста, дайте нам знать! Возможно, мы сможем сотрудничать в каких-то аспектах. Свободное программное обеспечение бросает вызов многим устоявшимся представлениям о том, как разрабатывается, продаётся и поддерживается программное обеспечение, и мы призываем вас хотя бы взглянуть на него ещё раз.
[[contrib-what]]
-== Что нужно
+== Что необходимо
-В следующем перечне представлены задачи и подпроекты, являющиеся некоторым отражением различных списков [.filename]#TODO# и запросов пользователей.
+Следующий список задач и подпроектов представляет собой своего рода объединение различных списков [.filename]#TODO# и запросов пользователей.
[[non-programmer-tasks]]
-=== Текущие задачи не для программистов
+=== Текущие задачи для непрограммистов
-Многие люди, связанные с FreeBSD, не являются программистами. В Проекте участвуют создатели документации, Web-дизайнеры и специалисты по поддержке пользователей. Все, что им нужно для участия, это своё время и желание учиться.
+Многие люди, участвующие в FreeBSD, не являются программистами. Проект включает в себя авторов документации, веб-дизайнеров и специалистов поддержки. Всё, что нужно этим людям для участия, — это вложение времени и готовность учиться.
-. Периодически читайте FAQ и Руководство. Если что-то описано плохо, устарело или даже полностью неправильно, дайте нам знать. Ещё лучше, если вы пришлёте нам исправление (выучить Docbook не так сложно, но и против посланий в формате ASCII никто возражать не будет).
-. Помогите перевести документацию FreeBSD на ваш родной язык. Если документация на вашем языке уже существует, вы можете помочь перевести дополнительные документы или проверить, не устарели ли переводы. Первым делом взгляните на extref:{fdp-primer}[FAQ по переводам, translations] в Учебнике проекта документирования FreeBSD. Вас не призывают перевести все документы FreeBSD - как доброволец, вы можете делать столько переводов, сколько захотите. Если кто-то начал перевод, другие всегда присоединятся. Если у вас есть время и желание перевести одну часть документации, пожалуйста, переведите инструкции по установке.
-. Время от времени (или даже регулярно) читайте {freebsd-questions} и news:comp.unix.bsd.freebsd.misc. Вам может понравиться делиться своим опытом и помогать людям решать их проблемы; иногда вы сможете узнать для себя что-то новое! Эти форумы могут также стать источником идей, над которыми вам стоит поработать.
+. Периодически перечитывайте FAQ и Руководство. Если что-то объяснено недостаточно ясно, неоднозначно, устарело или неверно, дайте нам знать. Ещё лучше — пришлите нам исправление (AsciiDoc несложно изучить, но можно присылать и обычный текст).
+. Помогите перевести документацию FreeBSD на ваш родной язык. Если документация уже существует на вашем языке, вы можете помочь перевести дополнительные документы или проверить, что переводы актуальны и корректны. Сначала ознакомьтесь с extref:{fdp-primer}[FAQ по переводам, translations] в Руководстве проекта документации FreeBSD. Вы не обязаны переводить каждую документацию FreeBSD — как волонтер, вы можете переводить столько, сколько пожелаете. Как только кто-то начинает переводить, к этому процессу почти всегда присоединяются другие. Если у вас есть время и силы перевести только часть документации, пожалуйста, переведите инструкции по установке.
+. Читайте {freebsd-questions} время от времени (или даже регулярно). Может быть очень приятно делиться своими знаниями и помогать людям решать их проблемы; иногда вы даже можете узнать что-то новое для себя! Эти форумы также могут быть источником идей для улучшений.
[[ongoing-programmer-tasks]]
-=== Текущие задачи для программистов
-
-Большинство задач, перечисленных здесь, требуют либо значительных затрат времени, либо глубоких знаний ядра FreeBSD, либо того и другого. Однако имеется также много полезных задач, которые подойдут для "воскресных хакеров".
-
-. Если вы работаете с FreeBSD-CURRENT и обладаете хорошим подключением к Internet, то существует машина `current.FreeBSD.org`, которая строит полный релиз ежедневно-сейчас и всегда. Попробуйте установить самый последний релиз с этой машины и сообщите обо всех обнаруженных при этом ошибках.
-. Читайте {freebsd-bugs}. Здесь может встретиться проблема, которую вы сможете конструктивно прокомментировать или патчи, которые вы можете протестировать. Либо вы можете даже попытаться исправить какую-то проблему самостоятельно.
-. Если вы знаете о существовании каких-либо исправлений ошибок, успешно применённых к -CURRENT, но ещё не перенесённых в -STABLE после достаточно большого интервала времени (обычно несколько недель), направьте коммиттеру вежливое напоминание.
-. Перенос стороннего программного обеспечения в каталог [.filename]#src/contrib# дерева исходных текстов.
-. Проверка актуальности кода в каталоге [.filename]#src/contrib#.
-. Построение из дерева исходных текстов (или её части) с включением режима дополнительных предупреждений, избавление от них.
-. Исправление предупреждений от портов, которые используют недопустимые вызовы типа `gets()` или включают файл объявлений [.filename]#malloc.h#.
-. Если вы создавали порты и вам приходилось делать специфичные для FreeBSD исправления, пошлите ваши патчи авторам оригинального программного обеспечения (это упростит вам жизнь при выпуске следующей версии).
-. Найдите копии официальных стандартов, например, POSIX(R). Вы можете найти несколько ссылок на них на странице Web-сайта link:https://www.FreeBSD.org/projects/c99/[Проекта соответствия FreeBSD стандартам C99 & POSIX]. Сравните поведение FreeBSD с тем, что определено стандартом. Если реакция отличается, особенно в незначительных или непонятных разделах спецификации, направьте об этом PR. Если можете, найдите, как исправить это и включите в PR патч. Если вы полагаете, что в стандарте есть ошибка, направьте запрос его разработчикам.
+=== Текущие задачи программистов
+
+Большинство перечисленных здесь задач может потребовать значительных временных затрат, глубоких знаний о ядре FreeBSD или того и другого. Однако, есть также множество полезных задач, подходящих для "хакеров выходного дня".
+
+. Если вы используете FreeBSD-CURRENT и имеете хорошее подключение к интернету, существует машина `current.FreeBSD.org`, которая ежедневно собирает полный релиз — время от времени пробуйте установить последний релиз с неё и сообщайте о любых сбоях в процессе.
+. Прочитайте {freebsd-bugs}. Возможно, там есть проблема, по которой вы можете конструктивно высказаться, или патчи, которые вы можете протестировать. Или вы даже можете попытаться исправить одну из проблем самостоятельно.
+. Если вам известны исправления ошибок, которые были успешно применены в -CURRENT, но не были перенесены в -STABLE в течение разумного срока (обычно пары недель), отправьте коммиттеру вежливое напоминание.
+. Переместите стороннее программное обеспечение в [.filename]#src/contrib# в дереве исходных кодов.
+. Убедитесь, что код в [.filename]#src/contrib# актуален.
+. Соберите дерево исходников (или только его часть) с включенными дополнительными предупреждениями и устраните эти предупреждения. Список предупреждений при сборке также можно найти в нашем https://ci.freebsd.org[CI], выбрав сборку и отметив "LLVM/Clang Warnings".
+. Исправление предупреждений для портов, которые используют устаревшие функции, такие как `gets()` или включают [.filename]#malloc.h#.
+. Если вы внесли свой вклад в какие-либо порты и вам пришлось внести изменения, специфичные для FreeBSD, отправьте свои исправления оригинальным авторам (это облегчит вашу жизнь, когда они выпустят следующую версию).
+. Получите копии официальных стандартов, таких как POSIX(R). Сравните поведение FreeBSD с требованиями стандарта. Если поведение отличается, особенно в сложных или малоизученных аспектах спецификации, отправьте PR об этом. Если вы можете, предложите исправление и включите патч в PR. Если вы считаете, что стандарт ошибочен, обратитесь в орган по стандартизации с просьбой рассмотреть этот вопрос.
. Предложите дополнительные задачи для этого списка!
-=== Работа с базой сообщений об ошибках PR
+=== Пройдитесь по базе данных PR
+
+https://bugs.FreeBSD.org/search/[Список PR FreeBSD] отображает все текущие активные отчёты о проблемах и запросы на улучшение, отправленные пользователями FreeBSD. База данных PR включает как задачи для программистов, так и для непрограммистов. Просмотрите открытые PR и посмотрите, есть ли среди них что-то, что вас заинтересует. Некоторые из них могут быть очень простыми задачами, которым просто нужен свежий взгляд, чтобы проверить и подтвердить, что исправление в PR является хорошим. Другие могут быть гораздо сложнее или даже не содержать исправления вовсе.
+
+Начните с PR, которые никому не назначены. Если PR назначен кому-то другому, но вам кажется, что вы можете с ним справиться, напишите этому человеку на почту и спросите, можно ли вам над ним поработать — возможно, у него уже есть готовый патч для тестирования или дополнительные идеи, которые можно обсудить.
+
+=== Текущие задачи портов
+
+Коллекция портов — это постоянный процесс. Мы стремимся предоставить нашим пользователям удобный, современный и качественный репозиторий стороннего программного обеспечения. Нам нужны люди, готовые пожертвовать своим временем и усилиями, чтобы помочь нам достичь этой цели.
-http://www.FreeBSD.org/cgi/query-pr-summary.cgi[Список сообщений об ошибках FreeBSD] содержит все актуальные сообщения о проблемах и запросы на улучшения, которые были посланы пользователями FreeBSD. База данных PR содержит задачи как для программистов, так и не для них. Просмотрите открытые PR, найдите те, что привлекут ваше внимание. Некоторые из них могут быть очень простыми, требующими лишь ещё одной пары глаз, чтобы посмотреть и подтвердить, что предлагаемое в PR исправление достаточно. Другие могут быть гораздо сложнее и даже вовсе не содержать исправления.
+Вовлечься может любой, и способов для этого множество. Участие в разработке портов — отличный способ "отдать долг" проекту. Будь то поиск постоянной роли или интересный вызов на дождливый день — мы будем рады вашей помощи!
-Начните с тех PR, которые никому ещё не назначены. Если PR уже за кем-то закреплено, но содержит проблему, которую вы можете решить, направьте по электронной почте письмо человеку, которому назначено это PR, и спросите, можете ли вы поработать над ней-у них уже может готов патч для тестирования или какие-то идеи, которые можно вместе обсудить.
+Есть несколько простых способов помочь поддерживать дерево портов в актуальном состоянии и в хорошем рабочем порядке:
-=== Выберите один из пунктов со странички "идей"
+* Найдите интересное или полезное программное обеспечение и extref:{porters-handbook}[создайте порт] для него.
+* Существует множество портов, у которых нет сопровождающего. Станьте сопровождающим и crossref:contributing[adopt-port, Возьмите на сопровождение неподдерживаемый порт].
+* Если вы создали или адаптировали порт, обратите внимание на раздел crossref:contributing[maintain-port, Задача для сопровождающих портов].
+* Если вы ищете быстрый вызов, вы можете crossref:contributing[fix-broken, Найти и исправить сломанный порт].
-http://wiki.freebsd.org/IdeasPage[Список проектов и идей для добровольцев] также доступен для людей, желающих помочь проекту FreeBSD. Список постоянно обновляется и содержит пункты, как для программистов, так и для не программистов, с информацией о каждом проекте.
+=== Выберите один из пунктов со страницы Идеи
+
+https://wiki.freebsd.org/IdeasPage[Список проектов и идей FreeBSD для волонтёров] также доступен для тех, кто хочет внести свой вклад в проект FreeBSD. Список регулярно обновляется и содержит пункты как для программистов, так и для не-программистов, с информацией о каждом проекте.
[[contrib-how]]
-== Как принять участие в работе
+== Как внести свой вклад
-Характер участия в работе над системой обычно подпадает под одну или несколько из следующих 5 категорий:
+Вклады в систему обычно относятся к одной или нескольким из следующих 5 категорий:
[[contrib-general]]
-=== Сообщения об ошибках и отзывы общего характера
+=== Отчеты об ошибках и общие комментарии
-Идеи или пожелания _общего_ технического характера должны направляться по электронной почте в адрес {freebsd-hackers}. Подобным же образом тот, кто интересуется такими вещами (и устойчив к _большому_ потоку почты!) может подписаться на список рассылки {freebsd-hackers}. Обратитесь к extref:{handbook}eresources[Руководству FreeBSD, eresources-mail] для получения дополнительной информации об этом и других списках рассылки.
+Идея или предложение, представляющие _общий_ технический интерес, должны быть отправлены на {freebsd-hackers}. Аналогично, люди, заинтересованные в подобных вещах (и готовые терпеть _высокий_ объем почты!), могут подписаться на {freebsd-hackers}. Дополнительную информацию об этом и других списках рассылки см. в extref:{handbook}[The FreeBSD Handbook, eresources-mail].
-Если вы нашли ошибку или предлагаете внести какое-то конкретное исправление, пожалуйста, отправьте сообщение при помощи программы man:send-pr[1] или её link:https://www.FreeBSD.org/send-pr/[Web-эквивалента]. Постарайтесь заполнить все поля в сообщении об ошибке. Если его размер оно не превышает 65 Кбайт, включите все патчи непосредственно в сообщение. Если патч предназначен для дерева исходных текстов, поместите `[PATCH]` в теме сообщения. При включении патчей _не используйте_ технику cut-and-paste, потому что при этом символы табуляции преобразуются в пробелы и патч становится непригодным к использованию. Если объём патчей превышает 20 Кбайт, лучше включать их в сообщение в сжатом виде, для чего упакуйте их (например, при помощи man:gzip[1] или man:bzip2[1]) и обработайте архив утилитой man:uuencode[1].
+Если вы отправляете простой патч в репозиторий src, рассмотрите возможность отправить его в зеркало проекта на GitHub как https://github.com/freebsd/freebsd-src/pulls[запрос на включение]. Подходящие отправки должны:
-После отправки сообщения вы должны получить подтверждение и номер для отслеживания. Сохраните этот номер, чтобы использовать его в дальнейшем при направлении подробностей о проблеме по электронной почте на адрес {bugfollowup}. Используйте номер в качестве темы письма, например, `"Re: kern/3377"`. Дополнительная информация о любом сообщении об ошибке должна направляться этим способом.
+* Готово или почти готово для включения. Коммиттер должен быть в состоянии применить этот патч с менее чем 10 минутами дополнительной работы.
+* Он проходит все задания GitHub CI.
+* Вы можете быстро реагировать на обратную связь.
+* Он затрагивает менее 10 файлов, а изменения составляют менее 200 строк. Изменения большего размера могут быть допустимы, или вас могут попросить отправить несколько запросов на включение более удобного размера.
+* Каждое логическое изменение — это отдельный коммит в рамках pull request. Сообщения коммитов для каждого изменения должны соответствовать extref:{committers-guide}#commit-log-message[руководству по оформлению логов коммитов].
+* Все коммиты содержат ваше имя и действительный адрес электронной почты, которые вы хотите видеть в репозитории FreeBSD в качестве автора. Поддельные адреса github.com использовать нельзя.
+* Объем pull request не должен меняться в процессе проверки. Если в ходе проверки предложены изменения, расширяющие объем, создайте отдельный pull request.
+* Исправляющие коммиты должны быть объединены (squash) с коммитом, который они исправляют. Каждый коммит в вашей ветке должен быть пригоден для репозитория FreeBSD.
+* Коммиты должны включать одну или несколько строк `Signed-off-by:` с полным именем и адресом электронной почты, подтверждающими https://developercertificate.org/[Сертификат происхождения разработчика].
-Если вы не получили подтверждения в течение разумного периода времени (от 3 дней до недели, в зависимости от вашего подключения к электронной почты) или по какой-то причине не можете воспользоваться командой man:send-pr[1], то можете попросить кого-нибудь направить сообщение за вас на адрес {freebsd-bugs}.
+При обновлении запроса на включение изменений, пожалуйста, выполняйте перебазирование с принудительной отправкой (forced push), а не слиянием через коммит (merge commit). Более сложные изменения могут быть отправлены как запросы на включение (pull request), но они могут быть отклонены и закрыты, если они слишком большие, слишком громоздкие, становятся неактивными, требуют дополнительного обсуждения в сообществе или нуждаются в значительной доработке. Пожалуйста, избегайте создания больших, широкомасштабных патчей для очистки: они слишком велики и не обладают необходимой фокусировкой для качественного рецензирования. Патчи, отправленные не по адресу, могут быть перенаправлены в более подходящий форум для их доработки.
-Прочтите также extref:{problem-reports}[эту статью], чтобы узнать, как писать хорошие сообщения о проблемах.
+Запросы на включение изменений, отправленные в репозиторий портов, могут быть обработаны или проигнорированы, в зависимости от настроения разработчиков. На данный момент, вам будет проще, если вы будете следовать процессу отправки портов crossref:contributing[ports-contributing, Вклад в порты].
-=== Изменения в документации
+Команда документации также принимает pull requests через GitHub, но пока не установила для них никакой политики.
+
+Если вы обнаружили ошибку или хотите отправить конкретное изменение, пожалуйста, сообщите об этом, используя https://bugs.FreeBSD.org/submit/[форму отправки отчёта об ошибках]. Постарайтесь заполнить каждое поле отчёта. Если патчи не превышают 65 КБ, включите их непосредственно в отчёт. Если патч подходит для применения к исходному дереву, укажите `[PATCH]` в кратком описании отчёта. При включении патчей _не_ используйте копирование и вставку, так как это превращает табуляции в пробелы и делает их непригодными. Если патчи значительно превышают 20 КБ, рассмотрите возможность их сжатия (например, с помощью man:gzip[1] или man:bzip2[1]) перед загрузкой.
-Изменения в документации обсуждаются в {freebsd-doc}. Пожалуйста, посмотрите extref:{fdp-primer}[Учебник Проекта документирования FreeBSD] для получения полных инструкций. Посылайте свои пожелания и изменения (принимаются даже самые небольшие!) при помощи man:send-pr[1], как это описано в разделе о <<contrib-general>>.
+После подачи отчета вы должны получить подтверждение вместе с номером для отслеживания. Сохраните этот номер, чтобы вы могли сообщить нам дополнительные сведения о проблеме.
+
+См. также extref:{problem-reports}[эту статью] о том, как писать хорошие отчёты о проблемах.
+
+=== Изменения в документации
-=== Изменения к имеющемуся исходному коду
+Изменения в документации контролируются {freebsd-doc}. Пожалуйста, ознакомьтесь с руководством extref:{fdp-primer}[Проект документации FreeBSD: введение для новых участников] для получения полных инструкций. Отправляйте исправления и изменения (даже небольшие правки приветствуются!) тем же способом, что и другие отчёты об ошибках.
-Добавление нового исходного кода или внесение изменений в существующий является не такой простой задачей, и зависит во многом от того, насколько вы далеки от текущего состояния разработок во FreeBSD. Существуют специальные промежуточные релизы FreeBSD, известные как "FreeBSD-CURRENT", которые доступны несколькими разными способами, удобными разработчикам, активно работающим над системой. Обратитесь к extref:{handbook}updating-upgrading[Руководству FreeBSD, current-stable] для получения дополнительной информации о получении и использовании FreeBSD-CURRENT.
+=== Изменения в существующем исходном коде
-Если вы работаете с несколько устаревшими исходными текстами, то ваши изменения иногда могут оказаться уже ненужными или слишком большими, чтобы повторно интегрировать их во FreeBSD. Уменьшить такой риск можно, подписавшись на списки рассылки {freebsd-announce} и {freebsd-current}, в которых обсуждается текущее состояние системы.
+Добавление или изменение существующего исходного кода — это несколько более сложная задача, которая во многом зависит от того, насколько сильно вы отстали от текущего состояния разработки FreeBSD. Существует специальная постоянно обновляемая версия FreeBSD, известная как "FreeBSD-CURRENT", которая доступна различными способами для удобства разработчиков, активно работающих над системой. Подробнее о получении и использовании FreeBSD-CURRENT можно узнать в extref:{handbook}[Руководстве FreeBSD, current-stable].
-Предположим, что вы смогли получить актуальные исходные тексты, на базе которых делали свои изменения. Тогда следующим шагом является создание набора файлов, отражающих ваши изменения для их посылки тем, кто отвечает за поддержку FreeBSD. Это делается при помощи команды man:diff[1].
+Работа с устаревшими исходниками, к сожалению, означает, что ваши изменения иногда могут быть слишком устаревшими или слишком расходящимися для лёгкого повторного включения в FreeBSD. Шансы на это можно несколько уменьшить, подписавшись на списки рассылки {freebsd-announce} и {freebsd-current}, где обсуждается текущее состояние системы.
-Предпочтительным форматом man:diff[1] для посылки патчей является унифицированная выдача, создаваемая командой `diff -u`.
+Предполагая, что вам удалось получить достаточно актуальные исходные коды для внесения изменений, следующий шаг — создать набор различий (diff) для отправки сопровождающим FreeBSD. Это делается с помощью команды man:diff[1].
-К примеру:
+Предпочтительным форматом man:diff[1] для отправки исправлений является унифицированный формат вывода, создаваемый командой `diff -u`.
-[source,shell]
+[source, shell]
....
% diff -u oldfile newfile
....
или
-[source,shell]
+[source, shell]
....
% diff -u -r -N olddir newdir
....
-создаст набор патчей в унифицированном формате для конкретного файла с исходным текстом или для иерархии каталогов.
+сгенерирует набор унифицированных diff-файлов для указанного исходного файла или иерархии каталогов.
-Дополнительную информацию можно найти в man:diff[1].
+См. man:diff[1] для получения дополнительной информации.
-После того, как вы получили набор diff-файлов (которые вы можете протестировать командой man:patch[1]), вы должны прислать их для включения во FreeBSD. Воспользуйтесь программой man:send-pr[1], как это описано в разделе о <<contrib-general>>. _Не посылайте_ diff-файлы в список рассылки {freebsd-hackers}, они будут потеряны! Нам очень нужна ваша помощь (это добровольный проект!); из-за нашей занятости мы не сможем рассмотреть его сразу, и он будет находиться в базе данных PR, пока мы не сделаем это. Укажите на вашу посылку, включив строку `[PATCH]` в тему сообщения.
+После того как у вас есть набор изменений (которые вы можете проверить с помощью команды man:patch[1]), вам следует отправить их для включения в FreeBSD в виде отчета об ошибке. _Не отправляйте_ изменения просто на {freebsd-hackers}, иначе они могут потеряться! Мы очень ценим ваши предложения (это добровольный проект!); поскольку мы заняты, мы не всегда можем обработать их сразу, но они останутся в базе данных PR, пока мы не дойдем до них. Укажите, что это предложение изменений, добавив `[PATCH]` в заголовок отчета.
-Если вы считаете, что это нужно (к примеру, вы добавляли, удаляли или переименовывали файлы), то объедините ваши изменения в `tar`-файл и обработайте его программой man:uuencode[1]. Принимаются также и архивы, созданные программой man:shar[1].
+Если вы считаете это уместным (например, вы добавили, удалили или переименовали файлы), упакуйте свои изменения в файл `tar`.
-Если ваше изменение потенциально может оказаться сомнительным, например, вы не уверены в отсутствии лицензионных ограничений относительно его распространения, то вы должны послать его напрямую в список рассылки {core}, а не через man:send-pr[1]. В списке рассылки {core} участвует гораздо меньшее количество людей, которые выполняют основную ежедневную работу над FreeBSD. Заметьте, что эта группа также __очень занята__, так что сюда письма нужно посылать только в случае действительной необходимости.
+Если ваше изменение носит потенциально чувствительный характер, например, если вы не уверены в вопросах авторского права, регулирующих его дальнейшее распространение, то вам следует отправить его напрямую по адресу {core-email}, а не подавать как отчёт об ошибке. Письмо на {core-email} достигает гораздо меньшей группы людей, которые выполняют большую часть повседневной работы над FreeBSD. Обратите внимание, что эта группа также _очень занята_, поэтому вам следует писать им только в случае действительной необходимости.
-Пожалуйста, обратитесь к справке по man:intro[9] и man:style[9] для получения некоторой информации о стиле кодирования. Мы надеемся, что вы хотя бы примете эту информацию к сведению перед тем, как прислать нам свой код.
+Пожалуйста, обратитесь к man:intro[9] и man:style[9] для получения информации о стиле написания кода. Мы будем признательны, если вы хотя бы ознакомитесь с этой информацией перед отправкой кода.
-=== Новый код или большие дополнительные пакеты
+=== Новый код или основные пакеты с добавленной стоимостью
-В случае значительного объёма присланного вами кода и соответствующей работы, либо добавления к FreeBSD важной новой функции, становится практически всегда необходимо посылать изменения в виде tar-файлов, обработанных uuencode, или передавать их на Web-сайт или FTP-сервер для получения другими людьми. Если у вас нет доступа к Web- или FTP-серверам, попросите в соответствующем списке рассылке FreeBSD кого-нибудь разместить изменения за вас.
+В случае значительного вклада в виде большого объёма работы или добавления важной новой функции в FreeBSD, почти всегда необходимо либо отправить изменения в виде tar-файлов, либо загрузить их на веб- или FTP-сайт для доступа других людей. Если у вас нет доступа к веб- или FTP-сайту, запросите на соответствующем списке рассылки FreeBSD, чтобы кто-то разместил изменения для вас.
-При работе с большим объёмом кода неизбежно возникает вопрос о соблюдении авторских прав. Допустимыми лицензионными соглашениями для кода, включаемого во FreeBSD, являются следующие:
+При работе с большими объемами кода неизбежно возникает деликатная тема авторских прав. FreeBSD предпочитает свободные лицензии, такие как BSD или ISC. Копилефтные лицензии, например GPLv2, иногда допускаются. Полный список можно найти на странице link:https://www.FreeBSD.org/internal/software-license/[политики лицензирования основной команды].
-. Лицензионное соглашение BSD. Оно является самым предпочтительным из-за "отсутствия дополнительных условий" и общей привлекательности для коммерческих компаний. Проект FreeBSD далёк от того, чтобы выступать против коммерческого использования, но активно популяризирует такое пересечение коммерческих интересов, которое позволит постепенно запустить механизм инвестиций во FreeBSD.
-. GNU General Public License, или "GPL". Это лицензионное соглашение не очень популярно у нас из-за объёма требований, которые нужно выполнять всем, кто собирается использовать код в коммерческих целях. Однако, учитывая абсолютное превосходство объёма этого кода (компилятор, ассемблер, инструменты форматирования текста и так далее) было бы глупо отказываться от дополнительных разработок, подпадающих под действие этой лицензии. Код, распространяемый по условиям лицензионного соглашения GPL также размещается в отдельной части дерева исходных текстов, в [.filename]#/sys/gnu# или [.filename]#/usr/src/gnu#, и поэтому легко идентифицируется всяким, для кого GPL представляет проблему.
+=== Деньги или Оборудование
-Разработки, подпадающие под действие других типов лицензионных соглашений, должны быть тщательно просмотрены перед принятием решения об их включении во FreeBSD. Разработки, на которые распространяются жёсткие ограничения коммерческих лицензионных соглашений, обычно отвергаются, а авторам всегда предлагается распространять подобные изменения по собственным каналам.
-
-Для того, чтобы на вашу работу распространялись условия лицензионного ограничения "в стиле BSD", разместите следующий текст в самом начале каждого файла с исходными текстами, которые вы хотите защитить, заменив текст между `%%` соответствующей информацией:
-
-[.programlisting]
-....
-Copyright (c) %%полные_номера_годов%%
- %%ваше_имя%%, %%ваш_штат%% %%ваш_почтовый_индекс%%.
- 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 as
- the first lines of this file unmodified.
-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 %%your_name_here%% ``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 %%your_name_here%% 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.
-
- $FreeBSD$
-....
-
-Для вашего удобства копия этого текста размещена в файле [.filename]#/usr/shared/examples/etc/bsd-style-copyright#.
-
-=== Деньги, оборудование или Internet-доступ
-
-Мы всегда с удовольствием примем материальную помощь, нужную для дальнейшего существования Проекта FreeBSD, а в добровольном проекте, типа нашего маленькая помощь может послужить долго! Безвозмездная передача вычислительной техники также очень важна для расширения списка поддерживаемого периферийного оборудования, так как обычно у нас нет средств для самостоятельного его приобретения.
+Мы всегда рады пожертвованиям для поддержки проекта FreeBSD, и в добровольческих усилиях, подобных нашим, даже небольшая помощь может иметь большое значение! Пожертвования оборудования также очень важны для расширения списка поддерживаемых периферийных устройств, поскольку у нас обычно нет средств на их приобретение.
[[donations]]
-==== Финансовая помощь
+==== Пожертвование средств
-The FreeBSD Foundation является некоммерческой организацией, освобождённой от уплаты налогов, созданной с целью реализации целей Проекта FreeBSD. Как организация типа 501(c)3, Фонд обычно освобождается от федерального налога США на прибыль. Суммы безвозмездных пожертвований таким организациям часто вычитаются из общей суммы налогооблагаемой прибыли.
+https://www.freebsdfoundation.org[FreeBSD Foundation] — это некоммерческий, освобожденный от налогов фонд, созданный для поддержки целей проекта FreeBSD. Как организация 501(c)3, Фонд, как правило, освобожден от федерального подоходного налога США, а также от подоходного налога штата Колорадо. Пожертвования освобожденным от налогов организациям часто вычитаются из налогооблагаемого федерального дохода.
-Финансовая помощь может быть направлена в виде чеков на адрес:
+Пожертвования можно отправить в виде чека по адресу:
[.address]
****
@@ -216,10 +216,257 @@ Boulder CO 80304 +
USA
****
-The FreeBSD Foundation теперь может принимать помощь через Web по системе PayPal. Для направления помощи, пожалуйста, посетите http://www.freebsdfoundation.org[Web-сайт] Фонда.
+Фонд FreeBSD также принимает https://www.freebsdfoundation.org/donate/[онлайн-пожертвования] через различные варианты оплаты.
+
+Дополнительная информация о Фонде FreeBSD доступна по ссылке https://people.FreeBSD.org/~jdp/foundation/announcement.html[Фонд FreeBSD — введение]. Чтобы связаться с Фондом по электронной почте, напишите на mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org].
+
+==== Пожертвование оборудования
+
+Проект FreeBSD с благодарностью принимает пожертвования в виде оборудования, которое может быть полезно для проекта. Если вы хотите пожертвовать оборудование, пожалуйста, свяжитесь с link:https://www.FreeBSD.org/donations/[Офисом по связям с пожертвованиями].
+
+[[ports-contributing]]
+== Вклад в порты
+
+[[adopt-port]]
+=== Принятие сопровождения неподдерживаемого порта
+
+==== Выбор неподдерживаемого порта
+
+Принятие на себя сопровождения необслуживаемых портов — это отличный способ принять участие. Необслуживаемые порты обновляются и исправляются только тогда, когда кто-то добровольно берется за работу над ними. Существует большое количество необслуживаемых портов. Хорошей идеей будет начать с порта, который вы используете регулярно.
+
+Неподдерживаемые порты имеют параметр `MAINTAINER`, установленный в `ports@FreeBSD.org`. Многие неподдерживаемые порты могут иметь ожидающие обновления, это можно увидеть на https://portscout.freebsd.org/ports@freebsd.org.html[сканере дистрибутивных файлов портов FreeBSD].
+
+На https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD.org[PortsFallout] можно увидеть список неподдерживаемых портов с ошибками.
+
+Некоторые порты влияют на большое количество других из-за зависимостей и вторичных связей между портами. Обычно мы хотим, чтобы у людей был некоторый опыт, прежде чем они начнут сопровождать такие порты.
+
+Вы можете узнать, есть ли у порта зависимости или вторичные порты, посмотрев в основной индекс портов под названием [.filename]#INDEX#. (Имя файла может различаться в зависимости от версии FreeBSD; например, [.filename]#INDEX-13#.) Некоторые порты имеют условные зависимости, которые не включены в стандартную сборку [.filename]#INDEX#. Мы ожидаем, что вы сможете распознать такие порты, просмотрев [.filename]#Makefile# других портов.
+
+==== Как принять сопровождение порта
+
+Убедитесь, что вы понимаете раздел crossref:contributing[maintain-port, Задача для сопровождающих портов]. Также прочитайте extref:{porters-handbook}[Руководство FreeBSD по созданию портов]. _Пожалуйста, не берите на себя больше, чем вам комфортно выполнять._
+
+Вы можете запросить статус сопровождающего для любого неподдерживаемого порта, как только пожелаете. Просто установите `MAINTAINER` на ваш собственный адрес электронной почты и отправьте PR (Problem Report) с этим изменением. Если порт имеет ошибки сборки или нуждается в обновлении, вы можете включить другие изменения в тот же PR. Это поможет, поскольку многие коммиттеры менее склонны назначать сопровождающего тому, у кого нет известной истории работы с FreeBSD. Отправка PR, исправляющих ошибки сборки или обновляющих порты, — лучший способ её установить.
+
+Подайте ваш PR в категорию `Порты и пакеты`. Коммиттер проверит ваш PR, закоммитит изменения и в конце закрыт PR. Иногда этот процесс может занять некоторое время (коммиттеры тоже волонтеры :).
+
+[[maintain-port]]
+=== Задача для сопровождающих портов
+
+В этом разделе вы узнаете, зачем нужно поддерживать порты, а также ознакомитесь с обязанностями сопровождающего портов.
+
+[[why-maintenance]]
+==== Почему порты требуют обслуживания
+
+Создание порта — это разовая задача. Обеспечение актуальности порта, его сборки и работы требует постоянных усилий по поддержке. Поддерживающие (maintainers) — это люди, которые посвящают часть своего времени достижению этих целей.
+
+Основная причина, по которой порты требуют обслуживания, — это предоставление новейших и лучших сторонних программных решений сообществу FreeBSD. Дополнительная задача — обеспечение работоспособности отдельных портов в рамках коллекции Ports по мере её развития.
+
+Как сопровождающему, вам потребуется управлять следующими задачами:
+
+* **Новые версии программного обеспечения и обновления.** Новые версии и обновления существующего портированного программного обеспечения появляются постоянно, и их необходимо включать в Коллекцию портов, чтобы обеспечить актуальное ПО.
+
+* *Изменения в зависимостях.* Если в зависимостях вашего порта были внесены значительные изменения, возможно, его потребуется обновить, чтобы он продолжал работать корректно.
+
+* *Изменения, затрагивающие зависимые порты.* Если другие порты зависят от порта, который вы поддерживаете, изменения в вашем порте могут потребовать согласования с другими сопровождающими.
+
+* *Взаимодействие с другими пользователями, сопровождающими и разработчиками.* Часть обязанностей сопровождающего включает в себя поддержку. От вас не ожидают предоставления общей поддержки (но мы приветствуем это, если вы решите её оказывать). Ваша задача — быть точкой координации по вопросам, связанным с вашими портами, специфичным для FreeBSD.
+
+* *Поиск ошибок.* Порт может быть подвержен ошибкам, специфичным для FreeBSD. Вам потребуется исследовать, находить и исправлять эти ошибки при их поступлении. Ещё лучше тщательно тестировать порт для выявления проблем до их попадания в Коллекцию портов.
+
+* *Изменения в инфраструктуре и политике портов.* Иногда обновляются системы, используемые для сборки портов и пакетов, или появляются новые рекомендации, влияющие на инфраструктуру. Вам следует учитывать эти изменения, если ваши порты затронуты и требуют обновления.
+
+* *Изменения в базовой системе.* FreeBSD находится в постоянной разработке. Изменения в программном обеспечении, библиотеках, ядре или даже изменения политики могут вызвать каскадные требования к изменениям в портах.
+
+==== Обязанности сопровождающего
+
+===== Поддерживайте свои порты в актуальном состоянии
+
+В этом разделе описаны шаги, которые необходимо выполнить, чтобы поддерживать ваши порты в актуальном состоянии.
+
+Это общий обзор. Дополнительная информация об обновлении порта доступна в extref:{porters-handbook}[Руководстве FreeBSD по созданию портов].
+
+[.procedure]
+====
+. Следите за обновлениями
++
+Отслеживайте у вышестоящего поставщика появление новых версий, обновлений и исправлений безопасности для программного обеспечения. Для этого полезны списки рассылки объявлений или новостные веб-страницы. Иногда пользователи могут связаться с вами и спросить, когда ваш порт будет обновлен. Если вы заняты другими делами или по какой-либо причине просто не можете обновить его в данный момент, спросите, могут ли они помочь вам, предоставив обновление.
++
+Вы также можете получать автоматические письма от `FreeBSD Ports Version Check`, уведомляющие о доступности новой версии дистрибутивного файла вашего порта. В сообщении будет предоставлена дополнительная информация об этой системе (включая инструкции по остановке будущих писем).
+. Вносите изменения
++
+Когда они станут доступны, включите изменения в порт. Вам нужно уметь создавать патч между оригинальным портом и вашим обновлённым портом.
+. Проверяйте и тестируйте
++
+Тщательно проверьте и протестируйте свои изменения:
+
+** Соберите, установите и протестируйте ваш порт на максимально возможном количестве платформ и архитектур. Часто бывает, что порт работает в одной ветке или на одной платформе, но не работает в другой.
+** Убедитесь, что зависимости вашего порта полные. Рекомендуемый способ сделать это — установить собственный tinderbox для портов. Дополнительную информацию см. в crossref:contributing[resources, Ресурсы для сопровождающих и участников разработки портов].
+** Проверьте, что список упаковки актуален. Это включает добавление новых файлов и каталогов и удаление неиспользуемых записей.
+** Проверьте ваш порт, используя man:portlint[1] в качестве помощника. См. crossref:contributing[resources, Ресурсы для сопровождающих и участников портов] для важной информации об использовании portlint.
+** Подумайте, могут ли изменения в вашем порту привести к проблемам в других портах. Если это так, согласуйте изменения с их сопровождающими. Это особенно важно, если ваше обновление изменяет версию разделяемой библиотеки; в этом случае, как минимум, зависимые порты должны получить увеличение `PORTREVISION`, чтобы автоматизированные инструменты, такие как package:ports-mgmt/poudriere[], могли их обновить.
+
+. Представляйте изменения
++
+Отправьте ваше обновление, создав PR с описанием изменений и патчем, содержащим различия между исходным портом и обновлённым. Обратитесь к статье extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD] для получения информации о том, как правильно оформить PR.
++
+[NOTE]
+======
+Пожалуйста, не отправляйте архив man:shar[1] всего порта; вместо этого используйте man:git-format-patch[1] или man:diff[1] `-ruN`. Таким образом, коммиттеры смогут гораздо проще увидеть, какие именно изменения были внесены. Раздел extref:{porters-handbook}[Обновление, port-upgrading] в Руководстве портера содержит дополнительную информацию.
+======
+. Ждите
++
+На каком-то этапе коммиттер рассмотрит ваш PR. Это может занять минуты, а может и одну-две недели — так что проявите терпение. Если это займет больше времени, обратитесь за помощью в почтовые рассылки ({freebsd-ports}), IRC: #bsdports на EFNet или #freebsd-ports на Libera, например.
+. Предоставляйте обратную связь
++
+Если участник проекта обнаружит проблему в ваших изменениях, он, скорее всего, вернёт их вам на доработку. Быстрый ответ поможет ускорить принятие вашего PR, а также упростит поддержание последовательности обсуждения при попытке разрешить возникшие проблемы.
+. И наконец
++
+Ваши изменения будут зафиксированы, и ваш порт будет обновлен. Затем PR будет закрыт коммиттером. Вот и все!
+====
+
+===== Убедитесь, что ваши порты продолжают собираться корректно
+
+Этот раздел посвящён обнаружению и исправлению проблем, которые мешают правильной сборке портов.
+
+FreeBSD гарантирует работоспособность Коллекции портов только в ветках `-STABLE`. Теоретически можно обойтись использованием последних выпусков каждой стабильной ветки (поскольку ABI не должны меняться), но если есть возможность использовать саму ветку, это ещё лучше.
+
+Поскольку большинство установок FreeBSD работают на PC-совместимых машинах (так называемая архитектура `i386`), мы ожидаем, что порт будет работать на этой архитектуре. Мы предпочитаем, чтобы порты также работали на архитектуре `amd64` в нативном режиме. Совершенно допустимо попросить о помощи, если у вас нет одной из таких машин.
+
+[NOTE]
+====
+Обычные режимы сбоя для машин не на архитектуре `x86` связаны с предположениями оригинальных программистов, например, что указатели являются `int`-ами, или что используется относительно старый и менее строгий компилятор gcc. Все чаще авторы приложений перерабатывают свой код, чтобы устранить эти предположения — но если автор не занимается активной поддержкой своего кода, вам, возможно, придется сделать это самостоятельно.
+====
+
+Вот задачи, которые необходимо выполнить, чтобы убедиться, что ваш порт может быть собран:
+
+[.procedure]
+====
+. Следите за ошибками сборки
++
+Проверьте свою почту на наличие писем от `pkg-fallout@FreeBSD.org` и http://portscout.FreeBSD.org[сканера distfiles], чтобы узнать, не устарели ли какие-либо порты, которые не собираются.
+. Собрать информацию
++
+Как только вы обнаружили проблему, соберите информацию, которая поможет её исправить. Ошибки сборки, о которых сообщает `pkg-fallout`, сопровождаются журналами, показывающими, где произошёл сбой. Если о проблеме сообщил пользователь, попросите его предоставить данные, которые могут помочь в диагностике, например:
+
+** Логи сборки
+** Команды и параметры, используемые для сборки порта (включая параметры, установленные в [.filename]#/etc/make.conf#)
+** Список пакетов, установленных в системе, как показано в man:pkg-info[8]
+** Версия FreeBSD, которую они используют, как показано в man:uname[1] `-a`
+** Когда их коллекция портов была последний раз обновлена
+** Когда их дерево портов и файл [.filename]#INDEX# были последний раз обновлены
+
+. Изучить и найти решение
++
+К сожалению, не существует прямого процесса, которому можно следовать для этого. Однако помните: если вы застряли, попросите помощи! Коллекция портов {freebsd-ports} — хорошее место для начала, и разработчики вышестоящих проектов часто очень отзывчивы.
+. Представляйте изменения
++
+Как и при обновлении порта, теперь вам следует внести изменения, проверить и протестировать их, отправить изменения в PR и, если требуется, предоставить обратную связь.
+. Отправляйте исправления авторам вышестоящих проектов
++
+В некоторых случаях потребуется внести изменения в порт, чтобы он заработал на FreeBSD. Некоторые (но не все) разработчики исходного проекта примут такие изменения в свой код для следующего выпуска. Если это произойдет, это может помочь их пользователям и на других BSD-системах, а также, возможно, сэкономит дублирующие усилия. В качестве жеста вежливости, пожалуйста, рассмотрите возможность отправки соответствующих исправлений авторам.
+====
+
+===== Изучать отчеты об ошибках и PR, связанные с вашим портом
+
+Этот раздел посвящён поиску и исправлению ошибок.
+
+Ошибки, специфичные для FreeBSD, обычно вызваны предположениями о среде сборки и выполнения, которые не применимы к FreeBSD. Вероятность столкнуться с такой проблемой меньше, но она может быть более тонкой и сложной для диагностики.
+
+Вот задачи, которые необходимо выполнить, чтобы ваш порт продолжал работать должным образом:
+
+[.procedure]
+====
+. Отвечать на отчёты об ошибках
++
+Ошибки могут быть сообщены вам по электронной почте через https://bugs.FreeBSD.org/search/[базу данных отчетов о проблемах]. Также пользователи могут сообщать об ошибках напрямую вам.
++
+Вы должны отвечать на PR и другие сообщения в течение 14 дней, но постарайтесь не затягивать так долго. Старайтесь отвечать как можно скорее, даже если это просто сообщение о том, что вам нужно ещё немного времени, прежде чем вы сможете заняться PR.
++
+Если вы не ответили в течение 14 дней, любой коммиттер может выполнить коммит из PR, на который вы не ответили, используя `maintainer-timeout`.
+. Собрать информацию
++
+Если человек, сообщивший об ошибке, также не предоставил исправление, вам необходимо собрать информацию, которая позволит вам создать исправление.
++
+Если ошибка воспроизводима, вы можете собрать большую часть необходимой информации самостоятельно. Если нет, попросите человека, сообщившего об ошибке, собрать информацию для вас, например:
+
+** Подробное описание их действий, ожидаемого поведения программы и фактического поведения
+** Копии входных данных, использованных для выявления ошибки
+** Информация о среде сборки и выполнения — например, список установленных пакетов и вывод команды man:env[1]
+** Файлы дампов ядра
+** Стеки вызовов функций
+
+. Устраните некорректные отчеты
++
+Некоторые отчеты об ошибках могут быть некорректными. Например, пользователь мог просто неправильно использовать программу; или установленные пакеты могут быть устаревшими и требовать обновления. Иногда сообщаемая ошибка не специфична для FreeBSD. В этом случае следует сообщить об ошибке разработчикам вышестоящего проекта. Если ошибка находится в пределах ваших возможностей для исправления, вы также можете исправить порт, чтобы исправление было применено до следующего релиза вышестоящего проекта.
+. Найдите решение
++
+Как и с ошибками сборки, вам потребуется найти решение проблемы. И снова, не забывайте спросить, если застряли!
+. Представить или утвердить изменения
++
+Как и при обновлении порта, теперь вам следует внести изменения, проверить и протестировать их, а затем отправить изменения в PR (или отправить дополнение, если PR для данной проблемы уже существует). Если другой пользователь отправил изменения в PR, вы также можете отправить дополнение, указав, одобряете ли вы эти изменения или нет.
+====
+
+===== Предоставление поддержки
+
+Часть обязанностей сопровождающего заключается в предоставлении поддержки — не для программного обеспечения в целом, а для порта и любых особенностей и проблем, специфичных для FreeBSD. Пользователи могут обращаться к вам с вопросами, предложениями, проблемами и патчами. В большинстве случаев их обращение будет касаться именно FreeBSD.
+
+Время от времени вам может понадобиться проявить дипломатические навыки и вежливо направить пользователей, ищущих общую поддержку, к соответствующим ресурсам. Реже вы столкнётесь с людьми, спрашивающими, почему `RPMS` не обновлены или как запустить программное обеспечение под Foo Linux. Воспользуйтесь возможностью сообщить им, что ваш порт актуален (если это так, конечно!), и предложите попробовать FreeBSD.
+
+Иногда пользователи и разработчики решают, что вы занятой человек, чьё время ценно, и выполняют часть работы за вас. Например, они могут:
+
+* отправить PR или прислать свои патчи для обновления вашего порта,
+* исследовать и, возможно, предоставить исправление для PR, или
+* иначе отправить изменения в ваш порт.
+
+В этих случаях ваша основная обязанность — своевременно отвечать. Напоминаем, что срок ожидания ответа от сопровождающего составляет 14 дней. По истечении этого периода изменения могут быть зафиксированы без одобрения. Они потрудились сделать это за вас; пожалуйста, постарайтесь хотя бы оперативно ответить. Затем как можно скорее проверьте, одобрите, измените или обсудите их изменения с ними.
+
+Если вы сможете дать им почувствовать, что их вклад ценится (а так и должно быть), у вас будет больше шансов убедить их сделать для вас больше в будущем :-).
+
+[[fix-broken]]
+=== Поиск и исправление сломанного порта
+
+Есть несколько хороших мест, где можно найти порт, требующий внимания.
+
+Вы можете использовать https://bugs.freebsd.org/search[веб-интерфейс] базы данных отчетов о проблемах для поиска и просмотра нерешенных PR. Большинство PR для портов — это обновления, но с небольшим поиском и беглым просмотром описаний вы сможете найти что-то интересное для работы.
+
+https://portsfallout.com/[PortsFallout] отображает проблемы с портами, собранные при сборке пакетов FreeBSD.
+
+Допустимо отправлять изменения и для поддерживаемого порта, но не забудьте уточнить у сопровождающего, не работает ли он уже над этой проблемой.
+
+Как только вы обнаружили ошибку или проблему, соберите информацию, изучите её и исправьте! Если уже существует PR, продолжите работу с ним. В противном случае создайте новый PR. Ваши изменения будут проверены и, если всё в порядке, приняты.
+
+[[mortal-coil]]
+=== Как прекратить сопровождение
+
+По мере изменения ваших интересов и обязательств вы можете обнаружить, что у вас больше нет времени продолжать некоторые (или все) ваши вклады в порты. Это нормально! Пожалуйста, сообщите нам, если вы больше не используете порт или у вас нет времени или интереса продолжать быть его сопровождающим. Таким образом, мы сможем позволить другим людям попытаться решить существующие проблемы с портом, не дожидаясь вашего ответа. Помните, FreeBSD — это добровольный проект, поэтому если сопровождение порта больше не приносит удовольствия, вероятно, пришло время позволить кому-то другому заняться этим!
+
+В любом случае, команда управления портами (`portmgr`) оставляет за собой право сбросить ваше право сопровождения, если вы не поддерживали свой порт в течение некоторого времени. (В настоящее время этот срок установлен в 3 месяца.) Под этим подразумевается, что есть нерешенные проблемы или ожидающие обновления, над которыми не велась работа в течение этого времени.
+
+[[resources]]
+=== Ресурсы для сопровождающих и участников портов
+
+extref:{porters-handbook}[Руководство FreeBSD по созданию портов] — это ваш путеводитель по системе портов. Держите его под рукой!
+
+Статья extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD] описывает, как лучше всего сформулировать и отправить PR. В 2005 году было подано более одиннадцати тысяч PR для портов! Следование этой статье значительно поможет нам сократить время, необходимое для обработки ваших PR.
+
+https://bugs.freebsd.org/bugzilla/query.cgi[База данных отчетов о проблемах].
+
+Сканер дистрибутивных файлов портов FreeBSD (portscout) http://portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] может показать вам порты, для которых дистрибутивные файлы недоступны для загрузки. Вы можете проверить свои собственные порты или использовать его для поиска портов, которым требуется обновление `MASTER_SITES`.
+
+package:ports-mgmt/poudriere[] — это наиболее тщательный способ проверить порт на протяжении всего цикла установки, упаковки и удаления. Документация находится в https://github.com/freebsd/poudriere[репозитории poudriere на GitHub]
+
+man:portlint[1] — это приложение, которое можно использовать для проверки соответствия вашего порта многим важным стилистическим и функциональным рекомендациям. portlint — это простое эвристическое приложение, поэтому его следует использовать __только в качестве ориентира__. Если portlint предлагает изменения, которые кажутся необоснованными, обратитесь к extref:{porters-handbook}[Руководству портировщика] или попросите совета.
+
+{freebsd-ports} предназначен для общих обсуждений, связанных с портами. Это хорошее место для поиска помощи. Вы можете link:https://lists.freebsd.org/[subscribe, читать и искать в архивах списка]. Также может быть полезно ознакомиться с архивами {freebsd-ports-bugs} и {svn-ports-head}.
+
+https://portsfallout.com/[PortsFallout] — это место для помощи в поиске по https://lists.freebsd.org/archives/freebsd-pkg-fallout/[архиву FreeBSD package-fallout].
+
+[[ideas-contributing]]
+== Начало работы в других областях
-Дополнительную информацию о Фонде FreeBSD можно найти на странице, содержащей http://people.FreeBSD.org/~jdp/foundation/announcement.html[ вводную информации о Фонде FreeBSD]. Для того, чтобы обратиться в Фонд по электронной почте, напишите письмо на адрес mailto:bod@FreeBSDFoundation.org[bod@FreeBSDFoundation.org].
+Ищете что-то интересное для начала работы, что не упоминается в этой статье? Проект FreeBSD имеет несколько страниц на Wiki, содержащих области, в которых новые участники могут найти идеи о том, как начать.
-==== Помощь в виде оборудования
+https://wiki.freebsd.org/JuniorJobs[Страница Junior Jobs] содержит список проектов, которые могут быть интересны тем, кто только начинает работать с FreeBSD и хочет попробовать свои силы в интересных задачах.
-Проект FreeBSD с удовольствие примет помощь в виде оборудования, которому он найдёт хорошее применение. Если вы заинтересованы в передаче оборудования, пожалуйста, обратитесь к link:https://www.FreeBSD.org/donations/[Руководству Центра пожертвований].
+https://wiki.freebsd.org/IdeasPage[Страница идей] содержит различные «приятные» или «интересные» вещи для работы в Проекте.
diff --git a/documentation/content/ru/articles/contributing/_index.po b/documentation/content/ru/articles/contributing/_index.po
new file mode 100644
index 0000000000..118ab6104d
--- /dev/null
+++ b/documentation/content/ru/articles/contributing/_index.po
@@ -0,0 +1,2259 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-01 20:43+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescontributing_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#, no-wrap
+msgid "How to contribute to the FreeBSD Project"
+msgstr "Как внести вклад в проект 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 "Участие в проекте FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:45
+msgid "pass:[<!-- vale FreeBSD.Pronouns = NO -->]"
+msgstr "pass:[<!-- vale FreeBSD.Pronouns = NO -->]"
+
+#. 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 ""
+"В этой статье описаны различные способы, с помощью которых отдельный человек "
+"или организация могут внести вклад в проект FreeBSD."
+
+#. 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 ""
+"Итак, вы хотите внести свой вклад в FreeBSD? Это замечательно! FreeBSD "
+"_полагается_ на вклад своих пользователей для существования. Ваши усилия не "
+"только ценятся, они жизненно важны для дальнейшего развития FreeBSD."
+
+#. 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 ""
+"FreeBSD разрабатывает большое и постоянно растущее количество участников из "
+"разных стран, самого разного возраста и уровня технической экспертизы. "
+"Работы всегда больше, чем доступных людей, и любая помощь всегда "
+"приветствуется."
+
+#. 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 ""
+"В качестве волонтёра вы ограничены только тем, чем хотите заниматься. Однако "
+"мы просим вас учитывать ожидания других участников сообщества FreeBSD. "
+"Возможно, вам стоит принять это во внимание, прежде чем решить стать "
+"волонтёром."
+
+#. 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 ""
+"Проект FreeBSD отвечает за целостную операционную среду, а не только за ядро "
+"или несколько разрозненных утилит. Таким образом, наши списки "
+"[.filename]#TODO# охватывают очень широкий спектр задач: от документации, "
+"бета-тестирования и презентаций до установщика системы и "
+"высокоспециализированных видов разработки ядра. Люди с любым уровнем "
+"навыков, практически в любой области, почти наверняка могут помочь проекту."
+
+#. 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 ""
+"Коммерческие организации, занятые в сферах, связанных с FreeBSD, также "
+"приглашаются к сотрудничеству. Вам нужно специальное расширение, чтобы ваш "
+"продукт работал? Вы увидите, что мы отвечаем на ваши запросы, если они не "
+"слишком экстравагантны. Вы работаете над продуктом, добавляющим ценность "
+"системе? Пожалуйста, дайте нам знать! Возможно, мы сможем сотрудничать в "
+"каких-то аспектах. Свободное программное обеспечение бросает вызов многим "
+"устоявшимся представлениям о том, как разрабатывается, продаётся и "
+"поддерживается программное обеспечение, и мы призываем вас хотя бы взглянуть "
+"на него ещё раз."
+
+#. 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 ""
+"Следующий список задач и подпроектов представляет собой своего рода "
+"объединение различных списков [.filename]#TODO# и запросов пользователей."
+
+#. 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 ""
+"Многие люди, участвующие в FreeBSD, не являются программистами. Проект "
+"включает в себя авторов документации, веб-дизайнеров и специалистов "
+"поддержки. Всё, что нужно этим людям для участия, — это вложение времени и "
+"готовность учиться."
+
+#. 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 ""
+"Периодически перечитывайте FAQ и Руководство. Если что-то объяснено "
+"недостаточно ясно, неоднозначно, устарело или неверно, дайте нам знать. Ещё "
+"лучше — пришлите нам исправление (AsciiDoc несложно изучить, но можно "
+"присылать и обычный текст)."
+
+#. 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 ""
+"Помогите перевести документацию FreeBSD на ваш родной язык. Если "
+"документация уже существует на вашем языке, вы можете помочь перевести "
+"дополнительные документы или проверить, что переводы актуальны и корректны. "
+"Сначала ознакомьтесь с extref:{fdp-primer}[FAQ по переводам, translations] в "
+"Руководстве проекта документации FreeBSD. Вы не обязаны переводить каждую "
+"документацию FreeBSD — как волонтер, вы можете переводить столько, сколько "
+"пожелаете. Как только кто-то начинает переводить, к этому процессу почти "
+"всегда присоединяются другие. Если у вас есть время и силы перевести только "
+"часть документации, пожалуйста, переведите инструкции по установке."
+
+#. 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 ""
+"Читайте {freebsd-questions} время от времени (или даже регулярно). Может "
+"быть очень приятно делиться своими знаниями и помогать людям решать их "
+"проблемы; иногда вы даже можете узнать что-то новое для себя! Эти форумы "
+"также могут быть источником идей для улучшений."
+
+#. 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 ""
+"Большинство перечисленных здесь задач может потребовать значительных "
+"временных затрат, глубоких знаний о ядре FreeBSD или того и другого. Однако, "
+"есть также множество полезных задач, подходящих для \"хакеров выходного "
+"дня\"."
+
+#. 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 ""
+"Если вы используете FreeBSD-CURRENT и имеете хорошее подключение к "
+"интернету, существует машина `current.FreeBSD.org`, которая ежедневно "
+"собирает полный релиз — время от времени пробуйте установить последний релиз "
+"с неё и сообщайте о любых сбоях в процессе."
+
+#. 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 ""
+"Прочитайте {freebsd-bugs}. Возможно, там есть проблема, по которой вы можете "
+"конструктивно высказаться, или патчи, которые вы можете протестировать. Или "
+"вы даже можете попытаться исправить одну из проблем самостоятельно."
+
+#. 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 ""
+"Если вам известны исправления ошибок, которые были успешно применены в "
+"-CURRENT, но не были перенесены в -STABLE в течение разумного срока (обычно "
+"пары недель), отправьте коммиттеру вежливое напоминание."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:116
+msgid ""
+"Move contributed software to [.filename]#src/contrib# in the source tree."
+msgstr ""
+"Переместите стороннее программное обеспечение в [.filename]#src/contrib# в "
+"дереве исходных кодов."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:117
+msgid "Make sure code in [.filename]#src/contrib# is up to date."
+msgstr "Убедитесь, что код в [.filename]#src/contrib# актуален."
+
+#. 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 ""
+"Соберите дерево исходников (или только его часть) с включенными "
+"дополнительными предупреждениями и устраните эти предупреждения. Список "
+"предупреждений при сборке также можно найти в нашем https://"
+"ci.freebsd.org[CI], выбрав сборку и отметив \"LLVM/Clang Warnings\"."
+
+#. 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 ""
+"Исправление предупреждений для портов, которые используют устаревшие "
+"функции, такие как `gets()` или включают [.filename]#malloc.h#."
+
+#. 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 ""
+"Если вы внесли свой вклад в какие-либо порты и вам пришлось внести "
+"изменения, специфичные для FreeBSD, отправьте свои исправления оригинальным "
+"авторам (это облегчит вашу жизнь, когда они выпустят следующую версию)."
+
+#. 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 ""
+"Получите копии официальных стандартов, таких как POSIX(R). Сравните "
+"поведение FreeBSD с требованиями стандарта. Если поведение отличается, "
+"особенно в сложных или малоизученных аспектах спецификации, отправьте PR об "
+"этом. Если вы можете, предложите исправление и включите патч в PR. Если вы "
+"считаете, что стандарт ошибочен, обратитесь в орган по стандартизации с "
+"просьбой рассмотреть этот вопрос."
+
+#. 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 "Пройдитесь по базе данных PR"
+
+#. 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 ""
+"https://bugs.FreeBSD.org/search/[Список PR FreeBSD] отображает все текущие "
+"активные отчёты о проблемах и запросы на улучшение, отправленные "
+"пользователями FreeBSD. База данных PR включает как задачи для "
+"программистов, так и для непрограммистов. Просмотрите открытые PR и "
+"посмотрите, есть ли среди них что-то, что вас заинтересует. Некоторые из них "
+"могут быть очень простыми задачами, которым просто нужен свежий взгляд, "
+"чтобы проверить и подтвердить, что исправление в PR является хорошим. Другие "
+"могут быть гораздо сложнее или даже не содержать исправления вовсе."
+
+#. 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 ""
+"Начните с PR, которые никому не назначены. Если PR назначен кому-то другому, "
+"но вам кажется, что вы можете с ним справиться, напишите этому человеку на "
+"почту и спросите, можно ли вам над ним поработать — возможно, у него уже "
+"есть готовый патч для тестирования или дополнительные идеи, которые можно "
+"обсудить."
+
+#. 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 ""
+"Найдите интересное или полезное программное обеспечение и extref:{porters-"
+"handbook}[создайте порт] для него."
+
+#. 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 crossref:contributing[adopt-port, Adopting an unmaintained "
+"port]."
+msgstr ""
+"Существует множество портов, у которых нет сопровождающего. Станьте "
+"сопровождающим и crossref:contributing[adopt-port, Возьмите на сопровождение "
+"неподдерживаемый порт]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:155
+msgid ""
+"If you have created or adopted a port, be aware of "
+"crossref:contributing[maintain-port, The challenge for port maintainers]."
+msgstr ""
+"Если вы создали или адаптировали порт, обратите внимание на раздел "
+"crossref:contributing[maintain-port, Задача для сопровождающих портов]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:156
+msgid ""
+"When you are looking for a quick challenge you could "
+"crossref:contributing[fix-broken, Finding and fixing a broken port]."
+msgstr ""
+"Если вы ищете быстрый вызов, вы можете crossref:contributing[fix-broken, "
+"Найти и исправить сломанный порт]."
+
+#. 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 ""
+"https://wiki.freebsd.org/IdeasPage[Список проектов и идей FreeBSD для "
+"волонтёров] также доступен для тех, кто хочет внести свой вклад в проект "
+"FreeBSD. Список регулярно обновляется и содержит пункты как для "
+"программистов, так и для не-программистов, с информацией о каждом проекте."
+
+#. 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 ""
+"Вклады в систему обычно относятся к одной или нескольким из следующих 5 "
+"категорий:"
+
+#. 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 ""
+"Идея или предложение, представляющие _общий_ технический интерес, должны "
+"быть отправлены на {freebsd-hackers}. Аналогично, люди, заинтересованные в "
+"подобных вещах (и готовые терпеть _высокий_ объем почты!), могут подписаться "
+"на {freebsd-hackers}. Дополнительную информацию об этом и других списках "
+"рассылки см. в extref:{handbook}[The FreeBSD Handbook, eresources-mail]."
+
+#. 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 ""
+"Если вы отправляете простой патч в репозиторий src, рассмотрите возможность "
+"отправить его в зеркало проекта на GitHub как https://github.com/freebsd/"
+"freebsd-src/pulls[запрос на включение]. Подходящие отправки должны:"
+
+#. 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 ""
+"Готово или почти готово для включения. Коммиттер должен быть в состоянии "
+"применить этот патч с менее чем 10 минутами дополнительной работы."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:180
+msgid "It passes all the GitHub CI jobs."
+msgstr "Он проходит все задания GitHub CI."
+
+#. 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 ""
+"Он затрагивает менее 10 файлов, а изменения составляют менее 200 строк. "
+"Изменения большего размера могут быть допустимы, или вас могут попросить "
+"отправить несколько запросов на включение более удобного размера."
+
+#. 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 ""
+"Каждое логическое изменение — это отдельный коммит в рамках pull request. "
+"Сообщения коммитов для каждого изменения должны соответствовать extref:"
+"{committers-guide}#commit-log-message[руководству по оформлению логов "
+"коммитов]."
+
+#. 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 ""
+"Все коммиты содержат ваше имя и действительный адрес электронной почты, "
+"которые вы хотите видеть в репозитории FreeBSD в качестве автора. Поддельные "
+"адреса github.com использовать нельзя."
+
+#. 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 ""
+"Объем pull request не должен меняться в процессе проверки. Если в ходе "
+"проверки предложены изменения, расширяющие объем, создайте отдельный pull "
+"request."
+
+#. 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 ""
+"Исправляющие коммиты должны быть объединены (squash) с коммитом, который они "
+"исправляют. Каждый коммит в вашей ветке должен быть пригоден для репозитория "
+"FreeBSD."
+
+#. 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 ""
+"Коммиты должны включать одну или несколько строк `Signed-off-by:` с полным "
+"именем и адресом электронной почты, подтверждающими https://"
+"developercertificate.org/[Сертификат происхождения разработчика]."
+
+#. 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 ""
+"При обновлении запроса на включение изменений, пожалуйста, выполняйте "
+"перебазирование с принудительной отправкой (forced push), а не слиянием "
+"через коммит (merge commit). Более сложные изменения могут быть отправлены "
+"как запросы на включение (pull request), но они могут быть отклонены и "
+"закрыты, если они слишком большие, слишком громоздкие, становятся "
+"неактивными, требуют дополнительного обсуждения в сообществе или нуждаются в "
+"значительной доработке. Пожалуйста, избегайте создания больших, "
+"широкомасштабных патчей для очистки: они слишком велики и не обладают "
+"необходимой фокусировкой для качественного рецензирования. Патчи, "
+"отправленные не по адресу, могут быть перенаправлены в более подходящий "
+"форум для их доработки."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:201
+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 "
+"crossref:contributing[ports-contributing, Contributing to ports]."
+msgstr ""
+"Запросы на включение изменений, отправленные в репозиторий портов, могут "
+"быть обработаны или проигнорированы, в зависимости от настроения "
+"разработчиков. На данный момент, вам будет проще, если вы будете следовать "
+"процессу отправки портов crossref:contributing[ports-contributing, Вклад в "
+"порты]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:203
+msgid ""
+"The docs team also accepts pull requests via GitHub, but has not established "
+"any policy for them yet."
+msgstr ""
+"Команда документации также принимает pull requests через GitHub, но пока не "
+"установила для них никакой политики."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:210
+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 ""
+"Если вы обнаружили ошибку или хотите отправить конкретное изменение, "
+"пожалуйста, сообщите об этом, используя https://bugs.FreeBSD.org/submit/"
+"[форму отправки отчёта об ошибках]. Постарайтесь заполнить каждое поле "
+"отчёта. Если патчи не превышают 65 КБ, включите их непосредственно в отчёт. "
+"Если патч подходит для применения к исходному дереву, укажите `[PATCH]` в "
+"кратком описании отчёта. При включении патчей _не_ используйте копирование и "
+"вставку, так как это превращает табуляции в пробелы и делает их "
+"непригодными. Если патчи значительно превышают 20 КБ, рассмотрите "
+"возможность их сжатия (например, с помощью man:gzip[1] или man:bzip2[1]) "
+"перед загрузкой."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:213
+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:215
+msgid ""
+"See also extref:{problem-reports}[this article] on how to write good problem "
+"reports."
+msgstr ""
+"См. также extref:{problem-reports}[эту статью] о том, как писать хорошие "
+"отчёты о проблемах."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:216
+#, no-wrap
+msgid "Changes to the Documentation"
+msgstr "Изменения в документации"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:221
+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 ""
+"Изменения в документации контролируются {freebsd-doc}. Пожалуйста, "
+"ознакомьтесь с руководством extref:{fdp-primer}[Проект документации FreeBSD: "
+"введение для новых участников] для получения полных инструкций. Отправляйте "
+"исправления и изменения (даже небольшие правки приветствуются!) тем же "
+"способом, что и другие отчёты об ошибках."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:222
+#, no-wrap
+msgid "Changes to Existing Source Code"
+msgstr "Изменения в существующем исходном коде"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:227
+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 ""
+"Добавление или изменение существующего исходного кода — это несколько более "
+"сложная задача, которая во многом зависит от того, насколько сильно вы "
+"отстали от текущего состояния разработки FreeBSD. Существует специальная "
+"постоянно обновляемая версия FreeBSD, известная как \"FreeBSD-CURRENT\", "
+"которая доступна различными способами для удобства разработчиков, активно "
+"работающих над системой. Подробнее о получении и использовании FreeBSD-"
+"CURRENT можно узнать в extref:{handbook}[Руководстве FreeBSD, current-"
+"stable]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:230
+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 ""
+"Работа с устаревшими исходниками, к сожалению, означает, что ваши изменения "
+"иногда могут быть слишком устаревшими или слишком расходящимися для лёгкого "
+"повторного включения в FreeBSD. Шансы на это можно несколько уменьшить, "
+"подписавшись на списки рассылки {freebsd-announce} и {freebsd-current}, где "
+"обсуждается текущее состояние системы."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:233
+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 ""
+"Предполагая, что вам удалось получить достаточно актуальные исходные коды "
+"для внесения изменений, следующий шаг — создать набор различий (diff) для "
+"отправки сопровождающим FreeBSD. Это делается с помощью команды man:diff[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:235
+msgid ""
+"The preferred man:diff[1] format for submitting patches is the unified "
+"output format generated by `diff -u`."
+msgstr ""
+"Предпочтительным форматом man:diff[1] для отправки исправлений является "
+"унифицированный формат вывода, создаваемый командой `diff -u`."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:239
+#, no-wrap
+msgid "% diff -u oldfile newfile\n"
+msgstr "% diff -u oldfile newfile\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:242
+msgid "or"
+msgstr "или"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:246
+#, 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:249
+msgid ""
+"would generate a set of unified diffs for the given source file or directory "
+"hierarchy."
+msgstr ""
+"сгенерирует набор унифицированных diff-файлов для указанного исходного файла "
+"или иерархии каталогов."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:251
+msgid "See man:diff[1] for more information."
+msgstr "См. man:diff[1] для получения дополнительной информации."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:255
+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 ""
+"После того как у вас есть набор изменений (которые вы можете проверить с "
+"помощью команды man:patch[1]), вам следует отправить их для включения в "
+"FreeBSD в виде отчета об ошибке. _Не отправляйте_ изменения просто на "
+"{freebsd-hackers}, иначе они могут потеряться! Мы очень ценим ваши "
+"предложения (это добровольный проект!); поскольку мы заняты, мы не всегда "
+"можем обработать их сразу, но они останутся в базе данных PR, пока мы не "
+"дойдем до них. Укажите, что это предложение изменений, добавив `[PATCH]` в "
+"заголовок отчета."
+
+#. 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."
+msgstr ""
+"Если вы считаете это уместным (например, вы добавили, удалили или "
+"переименовали файлы), упакуйте свои изменения в файл `tar`."
+
+#. 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 ""
+"Если ваше изменение носит потенциально чувствительный характер, например, "
+"если вы не уверены в вопросах авторского права, регулирующих его дальнейшее "
+"распространение, то вам следует отправить его напрямую по адресу {core-"
+"email}, а не подавать как отчёт об ошибке. Письмо на {core-email} достигает "
+"гораздо меньшей группы людей, которые выполняют большую часть повседневной "
+"работы над FreeBSD. Обратите внимание, что эта группа также _очень занята_, "
+"поэтому вам следует писать им только в случае действительной необходимости."
+
+#. 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 ""
+"Пожалуйста, обратитесь к man:intro[9] и man:style[9] для получения "
+"информации о стиле написания кода. Мы будем признательны, если вы хотя бы "
+"ознакомитесь с этой информацией перед отправкой кода."
+
+#. 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 ""
+"В случае значительного вклада в виде большого объёма работы или добавления "
+"важной новой функции в FreeBSD, почти всегда необходимо либо отправить "
+"изменения в виде tar-файлов, либо загрузить их на веб- или FTP-сайт для "
+"доступа других людей. Если у вас нет доступа к веб- или FTP-сайту, запросите "
+"на соответствующем списке рассылки FreeBSD, чтобы кто-то разместил изменения "
+"для вас."
+
+#. 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 ""
+"При работе с большими объемами кода неизбежно возникает деликатная тема "
+"авторских прав. FreeBSD предпочитает свободные лицензии, такие как BSD или "
+"ISC. Копилефтные лицензии, например GPLv2, иногда допускаются. Полный список "
+"можно найти на странице link:https://www.FreeBSD.org/internal/software-"
+"license/[политики лицензирования основной команды]."
+
+#. 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 ""
+"Мы всегда рады пожертвованиям для поддержки проекта FreeBSD, и в "
+"добровольческих усилиях, подобных нашим, даже небольшая помощь может иметь "
+"большое значение! Пожертвования оборудования также очень важны для "
+"расширения списка поддерживаемых периферийных устройств, поскольку у нас "
+"обычно нет средств на их приобретение."
+
+#. 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 ""
+"https://www.freebsdfoundation.org[FreeBSD Foundation] — это некоммерческий, "
+"освобожденный от налогов фонд, созданный для поддержки целей проекта "
+"FreeBSD. Как организация 501(c)3, Фонд, как правило, освобожден от "
+"федерального подоходного налога США, а также от подоходного налога штата "
+"Колорадо. Пожертвования освобожденным от налогов организациям часто "
+"вычитаются из налогооблагаемого федерального дохода."
+
+#. 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 ""
+"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:299
+msgid ""
+"The FreeBSD Foundation is also able to accept https://"
+"www.freebsdfoundation.org/donate/[online donations] through various payment "
+"options."
+msgstr ""
+"Фонд FreeBSD также принимает https://www.freebsdfoundation.org/donate/"
+"[онлайн-пожертвования] через различные варианты оплаты."
+
+#. 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 ""
+"Дополнительная информация о Фонде FreeBSD доступна по ссылке https://"
+"people.FreeBSD.org/~jdp/foundation/announcement.html[Фонд FreeBSD — "
+"введение]. Чтобы связаться с Фондом по электронной почте, напишите на "
+"mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+
+#. 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 ""
+"Проект FreeBSD с благодарностью принимает пожертвования в виде оборудования, "
+"которое может быть полезно для проекта. Если вы хотите пожертвовать "
+"оборудование, пожалуйста, свяжитесь с link:https://www.FreeBSD.org/donations/"
+"[Офисом по связям с пожертвованиями]."
+
+#. 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 ""
+"Неподдерживаемые порты имеют параметр `MAINTAINER`, установленный в "
+"`ports@FreeBSD.org`. Многие неподдерживаемые порты могут иметь ожидающие "
+"обновления, это можно увидеть на https://portscout.freebsd.org/"
+"ports@freebsd.org.html[сканере дистрибутивных файлов портов FreeBSD]."
+
+#. 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 ""
+"На https://portsfallout.com/fallout?"
+"port=&maintainer=ports%40FreeBSD.org[PortsFallout] можно увидеть список "
+"неподдерживаемых портов с ошибками."
+
+#. 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 ""
+"Вы можете узнать, есть ли у порта зависимости или вторичные порты, посмотрев "
+"в основной индекс портов под названием [.filename]#INDEX#. (Имя файла может "
+"различаться в зависимости от версии FreeBSD; например, "
+"[.filename]#INDEX-13#.) Некоторые порты имеют условные зависимости, которые "
+"не включены в стандартную сборку [.filename]#INDEX#. Мы ожидаем, что вы "
+"сможете распознать такие порты, просмотрев [.filename]#Makefile# других "
+"портов."
+
+#. 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 crossref:contributing[maintain-port, The "
+"challenge for port maintainers]. Also read the extref:{porters-handbook}"
+"[Porter's Handbook]. _Please do not commit yourself to more than you feel "
+"you can comfortably handle._"
+msgstr ""
+"Убедитесь, что вы понимаете раздел crossref:contributing[maintain-port, "
+"Задача для сопровождающих портов]. Также прочитайте extref:{porters-handbook}"
+"[Руководство FreeBSD по созданию портов]. _Пожалуйста, не берите на себя "
+"больше, чем вам комфортно выполнять._"
+
+#. 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 ""
+"Вы можете запросить статус сопровождающего для любого неподдерживаемого "
+"порта, как только пожелаете. Просто установите `MAINTAINER` на ваш "
+"собственный адрес электронной почты и отправьте PR (Problem Report) с этим "
+"изменением. Если порт имеет ошибки сборки или нуждается в обновлении, вы "
+"можете включить другие изменения в тот же PR. Это поможет, поскольку многие "
+"коммиттеры менее склонны назначать сопровождающего тому, у кого нет "
+"известной истории работы с FreeBSD. Отправка PR, исправляющих ошибки сборки "
+"или обновляющих порты, — лучший способ её установить."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:348
+msgid ""
+"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 :)."
+msgstr ""
+"Подайте ваш PR в категорию `Порты и пакеты`. Коммиттер проверит ваш PR, "
+"закоммитит изменения и в конце закрыт PR. Иногда этот процесс может занять "
+"некоторое время (коммиттеры тоже волонтеры :)."
+
+#. 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 ""
+"Создание порта — это разовая задача. Обеспечение актуальности порта, его "
+"сборки и работы требует постоянных усилий по поддержке. Поддерживающие "
+"(maintainers) — это люди, которые посвящают часть своего времени достижению "
+"этих целей."
+
+#. 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 ""
+"Основная причина, по которой порты требуют обслуживания, — это "
+"предоставление новейших и лучших сторонних программных решений сообществу "
+"FreeBSD. Дополнительная задача — обеспечение работоспособности отдельных "
+"портов в рамках коллекции Ports по мере её развития."
+
+#. 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
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Новые версии программного обеспечения и обновления.* Новые версии и "
+"обновления существующего портированного программного обеспечения появляются "
+"постоянно, и их необходимо включать в Коллекцию портов, чтобы обеспечить "
+"актуальное ПО.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:369
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Изменения в зависимостях.* Если в зависимостях вашего порта были внесены "
+"значительные изменения, возможно, его потребуется обновить, чтобы он "
+"продолжал работать корректно.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:371
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Изменения, затрагивающие зависимые порты.* Если другие порты зависят от "
+"порта, который вы поддерживаете, изменения в вашем порте могут потребовать "
+"согласования с другими сопровождающими.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:374
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Взаимодействие с другими пользователями, сопровождающими и разработчиками.* "
+"Часть обязанностей сопровождающего включает в себя поддержку.\n"
+"От вас не ожидают предоставления общей поддержки (но мы приветствуем это, "
+"если вы решите её оказывать). Ваша задача — быть точкой координации по "
+"вопросам, связанным с вашими портами, специфичным для FreeBSD.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:378
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Поиск ошибок.* Порт может быть подвержен ошибкам, специфичным для FreeBSD.\n"
+"Вам потребуется исследовать, находить и исправлять эти ошибки при их "
+"поступлении.\n"
+"Ещё лучше тщательно тестировать порт для выявления проблем до их попадания в "
+"Коллекцию портов.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:381
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Изменения в инфраструктуре и политике портов.* Иногда обновляются системы, "
+"используемые для сборки портов и пакетов, или появляются новые рекомендации, "
+"влияющие на инфраструктуру.\n"
+"Вам следует учитывать эти изменения, если ваши порты затронуты и требуют "
+"обновления.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:384
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*Изменения в базовой системе.* FreeBSD находится в постоянной разработке.\n"
+"Изменения в программном обеспечении, библиотеках, ядре или даже изменения "
+"политики могут вызвать каскадные требования к изменениям в портах.\n"
+
+#. 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 ""
+"Это общий обзор. Дополнительная информация об обновлении порта доступна в "
+"extref:{porters-handbook}[Руководстве FreeBSD по созданию портов]."
+
+#. 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 ""
+"Вы также можете получать автоматические письма от `FreeBSD Ports Version "
+"Check`, уведомляющие о доступности новой версии дистрибутивного файла вашего "
+"порта. В сообщении будет предоставлена дополнительная информация об этой "
+"системе (включая инструкции по остановке будущих писем)."
+
+#. 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 "
+"crossref:contributing[resources, Resources for ports maintainers and "
+"contributors] for more information."
+msgstr ""
+"Убедитесь, что зависимости вашего порта полные. Рекомендуемый способ сделать "
+"это — установить собственный tinderbox для портов. Дополнительную информацию "
+"см. в crossref:contributing[resources, Ресурсы для сопровождающих и "
+"участников разработки портов]."
+
+#. 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 "
+"crossref:contributing[resources, Resources for ports maintainers and "
+"contributors] for important information about using portlint."
+msgstr ""
+"Проверьте ваш порт, используя man:portlint[1] в качестве помощника. См. "
+"crossref:contributing[resources, Ресурсы для сопровождающих и участников "
+"портов] для важной информации об использовании portlint."
+
+#. 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 ""
+"Подумайте, могут ли изменения в вашем порту привести к проблемам в других "
+"портах. Если это так, согласуйте изменения с их сопровождающими. Это "
+"особенно важно, если ваше обновление изменяет версию разделяемой библиотеки; "
+"в этом случае, как минимум, зависимые порты должны получить увеличение "
+"`PORTREVISION`, чтобы автоматизированные инструменты, такие как "
+"package:ports-mgmt/poudriere[], могли их обновить."
+
+#. 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 ""
+"Отправьте ваше обновление, создав PR с описанием изменений и патчем, "
+"содержащим различия между исходным портом и обновлённым. Обратитесь к статье "
+"extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD] для "
+"получения информации о том, как правильно оформить PR."
+
+#. 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 ""
+"Пожалуйста, не отправляйте архив man:shar[1] всего порта; вместо этого "
+"используйте man:git-format-patch[1] или man:diff[1] `-ruN`. Таким образом, "
+"коммиттеры смогут гораздо проще увидеть, какие именно изменения были "
+"внесены. Раздел extref:{porters-handbook}[Обновление, port-upgrading] в "
+"Руководстве портера содержит дополнительную информацию."
+
+#. 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 ""
+"На каком-то этапе коммиттер рассмотрит ваш PR. Это может занять минуты, а "
+"может и одну-две недели — так что проявите терпение. Если это займет больше "
+"времени, обратитесь за помощью в почтовые рассылки ({freebsd-ports}), IRC: "
+"#bsdports на EFNet или #freebsd-ports на Libera, например."
+
+#. 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 ""
+"Если участник проекта обнаружит проблему в ваших изменениях, он, скорее "
+"всего, вернёт их вам на доработку. Быстрый ответ поможет ускорить принятие "
+"вашего PR, а также упростит поддержание последовательности обсуждения при "
+"попытке разрешить возникшие проблемы."
+
+#. 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 ""
+"Ваши изменения будут зафиксированы, и ваш порт будет обновлен. Затем PR "
+"будет закрыт коммиттером. Вот и все!"
+
+#. 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 ""
+"FreeBSD гарантирует работоспособность Коллекции портов только в ветках `-"
+"STABLE`. Теоретически можно обойтись использованием последних выпусков "
+"каждой стабильной ветки (поскольку ABI не должны меняться), но если есть "
+"возможность использовать саму ветку, это ещё лучше."
+
+#. 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 ""
+"Поскольку большинство установок FreeBSD работают на PC-совместимых машинах "
+"(так называемая архитектура `i386`), мы ожидаем, что порт будет работать на "
+"этой архитектуре. Мы предпочитаем, чтобы порты также работали на архитектуре "
+"`amd64` в нативном режиме. Совершенно допустимо попросить о помощи, если у "
+"вас нет одной из таких машин."
+
+#. 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 ""
+"Обычные режимы сбоя для машин не на архитектуре `x86` связаны с "
+"предположениями оригинальных программистов, например, что указатели являются "
+"`int`-ами, или что используется относительно старый и менее строгий "
+"компилятор gcc. Все чаще авторы приложений перерабатывают свой код, чтобы "
+"устранить эти предположения — но если автор не занимается активной "
+"поддержкой своего кода, вам, возможно, придется сделать это самостоятельно."
+
+#. 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 ""
+"Проверьте свою почту на наличие писем от `pkg-fallout@FreeBSD.org` и http://"
+"portscout.FreeBSD.org[сканера distfiles], чтобы узнать, не устарели ли какие-"
+"либо порты, которые не собираются."
+
+#. 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 ""
+"Как только вы обнаружили проблему, соберите информацию, которая поможет её "
+"исправить. Ошибки сборки, о которых сообщает `pkg-fallout`, сопровождаются "
+"журналами, показывающими, где произошёл сбой. Если о проблеме сообщил "
+"пользователь, попросите его предоставить данные, которые могут помочь в "
+"диагностике, например:"
+
+#. 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 ""
+"Команды и параметры, используемые для сборки порта (включая параметры, "
+"установленные в [.filename]#/etc/make.conf#)"
+
+#. 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 ""
+"Список пакетов, установленных в системе, как показано в man:pkg-info[8]"
+
+#. 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 ""
+"Версия FreeBSD, которую они используют, как показано в man:uname[1] `-a`"
+
+#. 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 ""
+"Когда их дерево портов и файл [.filename]#INDEX# были последний раз обновлены"
+
+#. 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 ""
+"К сожалению, не существует прямого процесса, которому можно следовать для "
+"этого. Однако помните: если вы застряли, попросите помощи! Коллекция портов "
+"{freebsd-ports} — хорошее место для начала, и разработчики вышестоящих "
+"проектов часто очень отзывчивы."
+
+#. 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 ""
+"Как и при обновлении порта, теперь вам следует внести изменения, проверить и "
+"протестировать их, отправить изменения в PR и, если требуется, предоставить "
+"обратную связь."
+
+#. 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 ""
+"В некоторых случаях потребуется внести изменения в порт, чтобы он заработал "
+"на FreeBSD. Некоторые (но не все) разработчики исходного проекта примут "
+"такие изменения в свой код для следующего выпуска. Если это произойдет, это "
+"может помочь их пользователям и на других BSD-системах, а также, возможно, "
+"сэкономит дублирующие усилия. В качестве жеста вежливости, пожалуйста, "
+"рассмотрите возможность отправки соответствующих исправлений авторам."
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:506
+#, no-wrap
+msgid "Investigate bug reports and PRs related to your port"
+msgstr "Изучать отчеты об ошибках и PR, связанные с вашим портом"
+
+#. 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 ""
+"Ошибки, специфичные для FreeBSD, обычно вызваны предположениями о среде "
+"сборки и выполнения, которые не применимы к FreeBSD. Вероятность столкнуться "
+"с такой проблемой меньше, но она может быть более тонкой и сложной для "
+"диагностики."
+
+#. 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 ""
+"Ошибки могут быть сообщены вам по электронной почте через https://"
+"bugs.FreeBSD.org/search/[базу данных отчетов о проблемах]. Также "
+"пользователи могут сообщать об ошибках напрямую вам."
+
+#. 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 ""
+"Вы должны отвечать на PR и другие сообщения в течение 14 дней, но "
+"постарайтесь не затягивать так долго. Старайтесь отвечать как можно скорее, "
+"даже если это просто сообщение о том, что вам нужно ещё немного времени, "
+"прежде чем вы сможете заняться PR."
+
+#. 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 ""
+"Если вы не ответили в течение 14 дней, любой коммиттер может выполнить "
+"коммит из PR, на который вы не ответили, используя `maintainer-timeout`."
+
+#. 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 ""
+"Информация о среде сборки и выполнения — например, список установленных "
+"пакетов и вывод команды man:env[1]"
+
+#. 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 ""
+"Некоторые отчеты об ошибках могут быть некорректными. Например, пользователь "
+"мог просто неправильно использовать программу; или установленные пакеты "
+"могут быть устаревшими и требовать обновления. Иногда сообщаемая ошибка не "
+"специфична для FreeBSD. В этом случае следует сообщить об ошибке "
+"разработчикам вышестоящего проекта. Если ошибка находится в пределах ваших "
+"возможностей для исправления, вы также можете исправить порт, чтобы "
+"исправление было применено до следующего релиза вышестоящего проекта."
+
+#. 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 ""
+"Как и при обновлении порта, теперь вам следует внести изменения, проверить и "
+"протестировать их, а затем отправить изменения в PR (или отправить "
+"дополнение, если PR для данной проблемы уже существует). Если другой "
+"пользователь отправил изменения в PR, вы также можете отправить дополнение, "
+"указав, одобряете ли вы эти изменения или нет."
+
+#. 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 ""
+"Часть обязанностей сопровождающего заключается в предоставлении поддержки — "
+"не для программного обеспечения в целом, а для порта и любых особенностей и "
+"проблем, специфичных для FreeBSD. Пользователи могут обращаться к вам с "
+"вопросами, предложениями, проблемами и патчами. В большинстве случаев их "
+"обращение будет касаться именно FreeBSD."
+
+#. 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 ""
+"Время от времени вам может понадобиться проявить дипломатические навыки и "
+"вежливо направить пользователей, ищущих общую поддержку, к соответствующим "
+"ресурсам. Реже вы столкнётесь с людьми, спрашивающими, почему `RPMS` не "
+"обновлены или как запустить программное обеспечение под Foo Linux. "
+"Воспользуйтесь возможностью сообщить им, что ваш порт актуален (если это "
+"так, конечно!), и предложите попробовать FreeBSD."
+
+#. 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 "отправить PR или прислать свои патчи для обновления вашего порта,"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
+msgid "investigate and perhaps provide a fix to a PR, or"
+msgstr "исследовать и, возможно, предоставить исправление для PR, или"
+
+#. 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 ""
+"В этих случаях ваша основная обязанность — своевременно отвечать. "
+"Напоминаем, что срок ожидания ответа от сопровождающего составляет 14 дней. "
+"По истечении этого периода изменения могут быть зафиксированы без одобрения. "
+"Они потрудились сделать это за вас; пожалуйста, постарайтесь хотя бы "
+"оперативно ответить. Затем как можно скорее проверьте, одобрите, измените "
+"или обсудите их изменения с ними."
+
+#. 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."
+msgstr ""
+"Вы можете использовать https://bugs.freebsd.org/search[веб-интерфейс] базы "
+"данных отчетов о проблемах для поиска и просмотра нерешенных PR. Большинство "
+"PR для портов — это обновления, но с небольшим поиском и беглым просмотром "
+"описаний вы сможете найти что-то интересное для работы."
+
+#. 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 ""
+"https://portsfallout.com/[PortsFallout] отображает проблемы с портами, "
+"собранные при сборке пакетов FreeBSD."
+
+#. 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 ""
+"Как только вы обнаружили ошибку или проблему, соберите информацию, изучите "
+"её и исправьте! Если уже существует PR, продолжите работу с ним. В противном "
+"случае создайте новый PR. Ваши изменения будут проверены и, если всё в "
+"порядке, приняты."
+
+#. 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 ""
+"По мере изменения ваших интересов и обязательств вы можете обнаружить, что у "
+"вас больше нет времени продолжать некоторые (или все) ваши вклады в порты. "
+"Это нормально! Пожалуйста, сообщите нам, если вы больше не используете порт "
+"или у вас нет времени или интереса продолжать быть его сопровождающим. Таким "
+"образом, мы сможем позволить другим людям попытаться решить существующие "
+"проблемы с портом, не дожидаясь вашего ответа. Помните, FreeBSD — это "
+"добровольный проект, поэтому если сопровождение порта больше не приносит "
+"удовольствия, вероятно, пришло время позволить кому-то другому заняться этим!"
+
+#. 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 ""
+"В любом случае, команда управления портами (`portmgr`) оставляет за собой "
+"право сбросить ваше право сопровождения, если вы не поддерживали свой порт в "
+"течение некоторого времени. (В настоящее время этот срок установлен в 3 "
+"месяца.) Под этим подразумевается, что есть нерешенные проблемы или "
+"ожидающие обновления, над которыми не велась работа в течение этого времени."
+
+#. 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 ""
+"extref:{porters-handbook}[Руководство FreeBSD по созданию портов] — это ваш "
+"путеводитель по системе портов. Держите его под рукой!"
+
+#. 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 ""
+"Статья extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD] "
+"описывает, как лучше всего сформулировать и отправить PR. В 2005 году было "
+"подано более одиннадцати тысяч PR для портов! Следование этой статье "
+"значительно поможет нам сократить время, необходимое для обработки ваших PR."
+
+#. 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 ""
+"https://bugs.freebsd.org/bugzilla/query.cgi[База данных отчетов о проблемах]."
+
+#. 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 ""
+"Сканер дистрибутивных файлов портов FreeBSD (portscout) http://"
+"portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] может "
+"показать вам порты, для которых дистрибутивные файлы недоступны для "
+"загрузки. Вы можете проверить свои собственные порты или использовать его "
+"для поиска портов, которым требуется обновление `MASTER_SITES`."
+
+#. 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 ""
+"package:ports-mgmt/poudriere[] — это наиболее тщательный способ проверить "
+"порт на протяжении всего цикла установки, упаковки и удаления. Документация "
+"находится в https://github.com/freebsd/poudriere[репозитории poudriere на "
+"GitHub]"
+
+#. 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 ""
+"man:portlint[1] — это приложение, которое можно использовать для проверки "
+"соответствия вашего порта многим важным стилистическим и функциональным "
+"рекомендациям. portlint — это простое эвристическое приложение, поэтому его "
+"следует использовать __только в качестве ориентира__. Если portlint "
+"предлагает изменения, которые кажутся необоснованными, обратитесь к extref:"
+"{porters-handbook}[Руководству портировщика] или попросите совета."
+
+#. 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 ""
+"{freebsd-ports} предназначен для общих обсуждений, связанных с портами. Это "
+"хорошее место для поиска помощи. Вы можете link:https://lists.freebsd.org/"
+"[subscribe, читать и искать в архивах списка]. Также может быть полезно "
+"ознакомиться с архивами {freebsd-ports-bugs} и {svn-ports-head}."
+
+#. 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 ""
+"https://portsfallout.com/[PortsFallout] — это место для помощи в поиске по "
+"https://lists.freebsd.org/archives/freebsd-pkg-fallout/[архиву FreeBSD "
+"package-fallout]."
+
+#. 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 ""
+"Ищете что-то интересное для начала работы, что не упоминается в этой статье? "
+"Проект FreeBSD имеет несколько страниц на Wiki, содержащих области, в "
+"которых новые участники могут найти идеи о том, как начать."
+
+#. 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 ""
+"https://wiki.freebsd.org/JuniorJobs[Страница Junior Jobs] содержит список "
+"проектов, которые могут быть интересны тем, кто только начинает работать с "
+"FreeBSD и хочет попробовать свои силы в интересных задачах."
+
+#. 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 ""
+"https://wiki.freebsd.org/IdeasPage[Страница идей] содержит различные "
+"«приятные» или «интересные» вещи для работы в Проекте."
diff --git a/documentation/content/ru/articles/contributors/_index.adoc b/documentation/content/ru/articles/contributors/_index.adoc
new file mode 100644
index 0000000000..47929df034
--- /dev/null
+++ b/documentation/content/ru/articles/contributors/_index.adoc
@@ -0,0 +1,283 @@
+---
+description: 'Список организаций и частных лиц, внесших вклад в FreeBSD'
+tags: ["Contributors", "FreeBSD", "individuals", "organizations"]
+title: 'Участники проекта FreeBSD'
+trademarks: ["freebsd", "sun", "general"]
+---
+
+= Участники проекта FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/contributors/
+
+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: content/{{% lang %}}/articles/contributors/
+:include-contrib-386bsd: shared/contrib-386bsd.adoc
+:include-contrib-additional: shared/contrib-additional.adoc
+:include-contrib-committers: shared/contrib-committers.adoc
+:include-contrib-corealumni: shared/contrib-corealumni.adoc
+:include-contrib-develalumni: shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: shared/contrib-portmgralumni.adoc
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+:include-path:
+:include-contrib-386bsd: ../../../../shared/contrib-386bsd.adoc
+:include-contrib-additional: ../../../../shared/contrib-additional.adoc
+:include-contrib-committers: ../../../../shared/contrib-committers.adoc
+:include-contrib-corealumni: ../../../../shared/contrib-corealumni.adoc
+:include-contrib-develalumni: ../../../../shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: ../../../../shared/contrib-portmgralumni.adoc
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+:include-path:
+:include-contrib-386bsd: ../../../../../shared/contrib-386bsd.adoc
+:include-contrib-additional: ../../../../../shared/contrib-additional.adoc
+:include-contrib-committers: ../../../../../shared/contrib-committers.adoc
+:include-contrib-corealumni: ../../../../../shared/contrib-corealumni.adoc
+:include-contrib-develalumni: ../../../../../shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: ../../../../../shared/contrib-portmgralumni.adoc
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+В этой статье перечислены люди и организации, внесшие вклад в FreeBSD. Чтобы
+увидеть текущий список коммиттеров FreeBSD, можно ознакомиться со следующим
+разделом: crossref:contributors[staff-committers, список].
+
+'''
+
+toc::[]
+
+[[staff-committers]]
+== Разработчики FreeBSD
+
+Этот список, включающий всех членов Основной Команды (Core Team), содержит
+имена всех, у кого есть права на коммит в одном или нескольких из трёх
+деревьев исходников (doc, ports и src). Текущий состав основной команды
+можно посмотреть на
+link:https://www.freebsd.org/administration/#t-core[странице администрации].
+
+(в алфавитном порядке по фамилии):
+
+include::{include-contrib-committers}[]
+
+[[contrib-corealumni]]
+== Бывшие участники основной команды (Core Team)
+
+Следующие люди были членами основной команды FreeBSD в указанные периоды. Мы
+благодарим их за прошлые усилия на благо проекта FreeBSD.
+
+_В приблизительном обратном хронологическом порядке:_
+
+include::{include-contrib-corealumni}[]
+
+[[contrib-develalumni]]
+== Бывшие участники команды разработчиков
+
+Следующие люди были членами команды разработчиков FreeBSD в указанные
+периоды. Мы благодарим их за прошлые усилия на благо проекта FreeBSD.
+
+_В приблизительном обратном хронологическом порядке:_
+
+include::{include-contrib-develalumni}[]
+
+[[contrib-portmgralumni]]
+== Команда управления портами: бывшие участники
+
+Следующие люди были членами команды portmgr FreeBSD в указанные периоды. Мы
+благодарим их за прошлые усилия на службе проекта FreeBSD.
+
+_В приблизительном обратном хронологическом порядке:_
+
+include::{include-contrib-portmgralumni}[]
+
+[[contrib-develinmemoriam]]
+== Команда разработчиков: Памяти ушедших
+
+В течение многих лет существования проекта FreeBSD, к сожалению, некоторые
+из наших разработчиков ушли из жизни. Вот несколько воспоминаний.
+
+_В приблизительном обратном хронологическом порядке их ухода:_
+
+include::{include-path}contrib-develinmemoriam.adoc[]
+
+[[contrib-derived]]
+== Участники разработки производного программного обеспечения
+
+Это программное обеспечение изначально было получено из релиза 386BSD 0.1
+Уильяма Ф. Джолитца, хотя почти ни один из оригинальных фрагментов кода,
+специфичных для 386BSD, не сохранился. Данное программное обеспечение было
+практически полностью переработано на основе релиза 4.4BSD-Lite,
+предоставленного Исследовательской группой компьютерных наук (CSRG)
+Калифорнийского университета в Беркли и связанными с ней академическими
+участниками.
+
+В FreeBSD также включены части NetBSD и OpenBSD, поэтому мы хотели бы
+поблагодарить всех участников разработки NetBSD и OpenBSD за их труд.
+
+[[contrib-additional]]
+== Дополнительные участники проекта FreeBSD
+
+(в алфавитном порядке по имени):
+
+include::{include-contrib-additional}[]
+
+[[contrib-386bsd]]
+== Участники, внесшие вклад в набор исправлений 386BSD
+
+(в алфавитном порядке по имени):
+
+include::{include-contrib-386bsd}[]
+
+[[donors]]
+== Галерея доноров
+
+Фонд FreeBSD благодарит
+https://freebsdfoundation.org/our-donors/donors/[финансовых доноров и
+доноров оборудования].
+
+https://www.freebsd.org/donations/[FreeBSD Donations Liaison] включает
+https://www.freebsd.org/donations/donors/[список пожертвованного
+оборудования].
+
+Проект FreeBSD благодарит всех предоставивших помощь!
+
+[NOTE]
+====
+По состоянию на 2010 год, приведённый ниже раздел уже несколько лет устарел.
+====
+
+=== Участники проекта центрального сервера
+
+Следующие частные лица и компании сделали возможным для проекта FreeBSD
+создание нового центрального серверного оборудования, которое в определённый
+момент заменило `freefall.FreeBSD.org`, пожертвовав следующие компоненты:
+
+* {mbarkah} и его работодатель, http://www.hemi.com/[Hemisphere Online],
+ пожертвовали процессор _Pentium Pro (P6) 200 МГц_.
+* http://www.asacomputers.com/[ASA Computers] подарили _материнскую плату Tyan
+ 1662_.
+* Джо МакГакин <mailto:joe@via.net[joe@via.net]> из http://www.via.net/[ViaNet
+ Communications] пожертвовал _контроллер Ethernet от Kingston_.
+* Джек О'Нил <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]>
+ пожертвовал _SCSI-контроллер NCR 53C875_.
+* Ульф Циммерманн <mailto:ulf@Alameda.net[ulf@Alameda.net]> из
+ http://www.Alameda.net/[Alameda Networks] пожертвовал _128 МБ памяти_, _4 ГБ
+ жёсткого диска и корпус_.
+
+=== Прямое финансирование
+
+Следующие частные лица и компании щедро внесли прямые финансовые вклады в
+проект:
+
+* 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}.
+* Кеннет П. Стокс <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]>
+ из 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] из Японии (часть прибыли от продаж их
+ различных FreeBSD CDROM идет на поддержку проекта).
+* http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] пожертвовала часть
+ прибыли от книги _Hajimete no FreeBSD_ (FreeBSD, начало работы) проектам
+ FreeBSD и XFree86.
+* http://www.ascii.co.jp/[ASCII Corp.] пожертвовала часть прибыли от
+ нескольких книг, связанных с FreeBSD, проекту FreeBSD.
+* http://www.yokogawa.co.jp/[Yokogawa Electric Corp] щедро предоставила
+ значительное финансирование проекту 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]>.
+
+=== Участники разработки аппаратного обеспечения
+
+Следующие частные лица и компании любезно предоставили оборудование для
+тестирования и разработки/поддержки драйверов устройств:
+
+* BSDi за предоставление систем Pentium P5-90 и 486/DX2-66 EISA/VL, которые
+ используются в нашей разработке, не говоря уже о сетевом доступе и других
+ пожертвованиях аппаратных ресурсов.
+* http://www.compaq.com[Compaq] пожертвовал FreeBSD Project разнообразные
+ системы Alpha. Среди множества щедрых пожертвований — 4 AlphaStation DS10,
+ AlphaServer DS20, AlphaServer 2100, AlphaServer 4100, 8 персональных рабочих
+ станций с частотой 500 МГц, 4 персональные рабочие станции с частотой 433
+ МГц и многое другое! Эти машины используются для сборки релизов, создания
+ пакетов, разработки SMP и общей разработки архитектуры Alpha.
+* TRW Financial Systems, Inc. предоставила 130 ПК, три файловых сервера по 68
+ ГБ, двенадцать сетей Ethernet, два маршрутизатора и коммутатор ATM для
+ отладки кода бездисковой системы
+* Дермот МакДоннелл предоставил привод CDROM Toshiba XM3401B, который в
+ настоящее время используется в _freefall_.
+* Чак Роби <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> предоставил свой
+ потоковый накопитель на гибких дисках для экспериментальной работы.
+* Ларри Альтной <mailto:larry@alr.com[larry@alr.com],> и {wilko} предоставили
+ стримеры Wangtek и Archive QIC-02 для улучшения драйвера [.filename]#wt#.
+* Эрнст Винтер (http://berklix.org/ewinter/[Умер]) предоставил проекту
+ дисковод на 2,88 МБ. Надеемся, это усилит внимание к необходимости
+ переписать драйвер для дискет.
+* http://www.tekram.com/[Tekram Technologies] предоставили по одному
+ экземпляру своих SCSI-адаптеров DC-390, DC-390U и DC-390F FAST и ULTRA для
+ регрессионного тестирования драйверов NCR и AMD с их картами. Также их стоит
+ похвалить за предоставление исходных кодов драйверов для свободных
+ операционных систем на их FTP-сервере
+ link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
+* Ларри М. Аугустин предоставил не только SCSI-карту Symbios Sym8751S, но и
+ набор технической документации, включая руководство по предстоящему чипу
+ Sym53c895 с поддержкой Ultra-2 и LVD, а также последнюю версию руководства
+ по программированию с информацией о безопасном использовании расширенных
+ функций новейших SCSI-чипов Symbios. Большое спасибо!
+* {kuku} пожертвовал FX120 12-скоростной Mitsumi CD-ROM привод для разработки
+ драйвера IDE CD-ROM.
+* Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> пожертвовал четыре
+ различные PCI-карты ATM для расширения поддержки этих карт, а также для
+ помощи в разработке стека netatm ATM.
+
+=== Особые участники
+
+* http://www.osd.bsdi.com/[BSDi] (ранее Walnut Creek CDROM) пожертвовали
+ больше, чем мы можем выразить (подробности см. в разделе 'О проекте FreeBSD'
+ extref:{handbook}[FreeBSD Handbook]). В частности, мы хотели бы
+ поблагодарить их за первоначальное оборудование, использованное для
+ `freefall.FreeBSD.org`, нашей основной машины разработки, и для
+ `thud.FreeBSD.org`, тестовой и сборочной системы. Мы также благодарны им за
+ финансирование различных участников на протяжении многих лет и
+ предоставление неограниченного доступа к их T1-подключению к Интернету.
+* Компания http://www.interface-business.de/[interface business GmbH, Дрезден]
+ терпеливо поддерживала {joerg}, который часто отдавал предпочтение работе с
+ FreeBSD вместо оплачиваемой работы и использовал их (довольно дорогое)
+ интернет-подключение EUnet, когда его личное соединение становилось слишком
+ медленным или ненадежным для работы.
+* http://www.bsdi.com/[Berkeley Software Design, Inc.] предоставила свой код
+ эмулятора DOS для остального мира BSD, который используется в команде
+ `doscmd`.
diff --git a/documentation/content/ru/articles/contributors/_index.po b/documentation/content/ru/articles/contributors/_index.po
new file mode 100644
index 0000000000..d8e9eed000
--- /dev/null
+++ b/documentation/content/ru/articles/contributors/_index.po
@@ -0,0 +1,655 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 20:54+0300\n"
+"PO-Revision-Date: 2025-08-11 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescontributors_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/contributors/_index.adoc:1
+#, no-wrap
+msgid "A list of organizations and individuals who have contributed to FreeBSD"
+msgstr "Список организаций и частных лиц, внесших вклад в FreeBSD"
+
+#. 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 "Участники проекта FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:62
+msgid "Abstract"
+msgstr "Аннотация"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:66
+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 crossref:contributors[staff-committers, "
+"list]."
+msgstr ""
+"В этой статье перечислены люди и организации, внесшие вклад в FreeBSD. Чтобы "
+"увидеть текущий список коммиттеров FreeBSD, можно ознакомиться со следующим "
+"разделом: crossref:contributors[staff-committers, список]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:68
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:72
+#, no-wrap
+msgid "The FreeBSD Developers"
+msgstr "Разработчики FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:76
+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 ""
+"Этот список, включающий всех членов Основной Команды (Core Team), содержит "
+"имена всех, у кого есть права на коммит в одном или нескольких из трёх "
+"деревьев исходников (doc, ports и src). Текущий состав основной команды "
+"можно посмотреть на link:https://www.freebsd.org/administration/#t-"
+"core[странице администрации]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:78
+msgid "(in alphabetical order by last name):"
+msgstr "(в алфавитном порядке по фамилии):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:82
+#, no-wrap
+msgid "Core Team Alumni"
+msgstr "Бывшие участники основной команды (Core Team)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:86
+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 ""
+"Следующие люди были членами основной команды FreeBSD в указанные периоды. Мы "
+"благодарим их за прошлые усилия на благо проекта FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:88
+#: documentation/content/en/articles/contributors/_index.adoc:98
+#: documentation/content/en/articles/contributors/_index.adoc:108
+msgid "_In rough reverse chronological order:_"
+msgstr "_В приблизительном обратном хронологическом порядке:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:92
+#, no-wrap
+msgid "Development Team Alumni"
+msgstr "Бывшие участники команды разработчиков"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:96
+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 ""
+"Следующие люди были членами команды разработчиков FreeBSD в указанные "
+"периоды. Мы благодарим их за прошлые усилия на благо проекта FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:102
+#, no-wrap
+msgid "Ports Management Team Alumni"
+msgstr "Команда управления портами: бывшие участники"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:106
+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 ""
+"Следующие люди были членами команды portmgr FreeBSD в указанные периоды. Мы "
+"благодарим их за прошлые усилия на службе проекта FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:112
+#, no-wrap
+msgid "Development Team: In Memoriam"
+msgstr "Команда разработчиков: Памяти ушедших"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:116
+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 ""
+"В течение многих лет существования проекта FreeBSD, к сожалению, некоторые "
+"из наших разработчиков ушли из жизни. Вот несколько воспоминаний."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:118
+msgid "_In rough reverse chronological order of their passing:_"
+msgstr "_В приблизительном обратном хронологическом порядке их ухода:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:122
+#, no-wrap
+msgid "Derived Software Contributors"
+msgstr "Участники разработки производного программного обеспечения"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:126
+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 ""
+"Это программное обеспечение изначально было получено из релиза 386BSD 0.1 "
+"Уильяма Ф. Джолитца, хотя почти ни один из оригинальных фрагментов кода, "
+"специфичных для 386BSD, не сохранился. Данное программное обеспечение было "
+"практически полностью переработано на основе релиза 4.4BSD-Lite, "
+"предоставленного Исследовательской группой компьютерных наук (CSRG) "
+"Калифорнийского университета в Беркли и связанными с ней академическими "
+"участниками."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:128
+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 ""
+"В FreeBSD также включены части NetBSD и OpenBSD, поэтому мы хотели бы "
+"поблагодарить всех участников разработки NetBSD и OpenBSD за их труд."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:130
+#, no-wrap
+msgid "Additional FreeBSD Contributors"
+msgstr "Дополнительные участники проекта FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:133
+#: documentation/content/en/articles/contributors/_index.adoc:140
+msgid "(in alphabetical order by first name):"
+msgstr "(в алфавитном порядке по имени):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:137
+#, no-wrap
+msgid "386BSD Patch Kit Patch Contributors"
+msgstr "Участники, внесшие вклад в набор исправлений 386BSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:144
+#, no-wrap
+msgid "Donors Gallery"
+msgstr "Галерея доноров"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:147
+msgid ""
+"The FreeBSD Foundation thanks https://freebsdfoundation.org/our-donors/"
+"donors/[financial and in-kind donors]."
+msgstr ""
+"Фонд FreeBSD благодарит https://freebsdfoundation.org/our-donors/donors/"
+"[финансовых доноров и доноров оборудования]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:149
+msgid ""
+"The https://www.freebsd.org/donations/[FreeBSD Donations Liaison] area "
+"includes a https://www.freebsd.org/donations/donors/[list of donated "
+"hardware]."
+msgstr ""
+"https://www.freebsd.org/donations/[FreeBSD Donations Liaison] включает "
+"https://www.freebsd.org/donations/donors/[список пожертвованного "
+"оборудования]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:151
+msgid "The FreeBSD Project thanks all donors!"
+msgstr "Проект FreeBSD благодарит всех предоставивших помощь!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributors/_index.adoc:155
+msgid "As of 2010, the section below was several years out-of-date."
+msgstr ""
+"По состоянию на 2010 год, приведённый ниже раздел уже несколько лет устарел."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:157
+#, no-wrap
+msgid "Contributors to the central server project"
+msgstr "Участники проекта центрального сервера"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:160
+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 ""
+"Следующие частные лица и компании сделали возможным для проекта FreeBSD "
+"создание нового центрального серверного оборудования, которое в определённый "
+"момент заменило `freefall.FreeBSD.org`, пожертвовав следующие компоненты:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:162
+msgid ""
+"{mbarkah} and his employer, http://www.hemi.com/[Hemisphere Online], donated "
+"a _Pentium Pro (P6) 200MHz CPU_."
+msgstr ""
+"{mbarkah} и его работодатель, http://www.hemi.com/[Hemisphere Online], "
+"пожертвовали процессор _Pentium Pro (P6) 200 МГц_."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:163
+msgid ""
+"http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 "
+"motherboard_."
+msgstr ""
+"http://www.asacomputers.com/[ASA Computers] подарили _материнскую плату Tyan "
+"1662_."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:164
+msgid ""
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> of http://www.via.net/[ViaNet "
+"Communications] donated a _Kingston ethernet controller_."
+msgstr ""
+"Джо МакГакин <mailto:joe@via.net[joe@via.net]> из http://www.via.net/[ViaNet "
+"Communications] пожертвовал _контроллер Ethernet от Kingston_."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:165
+msgid ""
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
+"donated an _NCR 53C875 SCSI controller card_."
+msgstr ""
+"Джек О'Нил <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
+"пожертвовал _SCSI-контроллер NCR 53C875_."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:166
+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 ""
+"Ульф Циммерманн <mailto:ulf@Alameda.net[ulf@Alameda.net]> из http://"
+"www.Alameda.net/[Alameda Networks] пожертвовал _128 МБ памяти_, _4 ГБ "
+"жёсткого диска и корпус_."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:167
+#, no-wrap
+msgid "Direct funding"
+msgstr "Прямое финансирование"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:170
+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:172
+msgid ""
+"Annelise Anderson "
+"<mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford.edu]>."
+msgstr ""
+"Annelise Anderson "
+"<mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford.edu]>."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:173
+msgid "{dillon}."
+msgstr "{dillon}."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:174
+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:175
+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:176
+msgid "{sef}."
+msgstr "{sef}."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:177
+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:178
+msgid "Don Scott Wilde."
+msgstr "Don Scott Wilde."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:179
+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:180
+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:181
+msgid "Robert T. Morris."
+msgstr "Robert T. Morris."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:182
+msgid "{chuckr}."
+msgstr "{chuckr}."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:183
+msgid ""
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"of http://www.imagescape.com/[Imaginary Landscape, LLC.]."
+msgstr ""
+"Кеннет П. Стокс <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"из http://www.imagescape.com/[Imaginary Landscape, LLC.]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:184
+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:185
+msgid ""
+"http://www.cdrom.co.jp/[Laser5] of Japan (a portion of the profits from "
+"sales of their various FreeBSD CDROMs)."
+msgstr ""
+"http://www.cdrom.co.jp/[Laser5] из Японии (часть прибыли от продаж их "
+"различных FreeBSD CDROM идет на поддержку проекта)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:186
+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 ""
+"http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] пожертвовала часть "
+"прибыли от книги _Hajimete no FreeBSD_ (FreeBSD, начало работы) проектам "
+"FreeBSD и XFree86."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:187
+msgid ""
+"http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from "
+"several FreeBSD-related books to the FreeBSD project."
+msgstr ""
+"http://www.ascii.co.jp/[ASCII Corp.] пожертвовала часть прибыли от "
+"нескольких книг, связанных с FreeBSD, проекту FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:188
+msgid ""
+"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated "
+"significant funding to the FreeBSD project."
+msgstr ""
+"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] щедро предоставила "
+"значительное финансирование проекту FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:189
+msgid "http://www.buffnet.net/[BuffNET]."
+msgstr "http://www.buffnet.net/[BuffNET]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:190
+msgid "http://www.pacificsolutions.com/[Pacific Solutions]."
+msgstr "http://www.pacificsolutions.com/[Pacific Solutions]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:191
+msgid ""
+"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]>."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:192
+msgid "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
+msgstr "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:193
+#, no-wrap
+msgid "Hardware contributors"
+msgstr "Участники разработки аппаратного обеспечения"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:196
+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:198
+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 ""
+"BSDi за предоставление систем Pentium P5-90 и 486/DX2-66 EISA/VL, которые "
+"используются в нашей разработке, не говоря уже о сетевом доступе и других "
+"пожертвованиях аппаратных ресурсов."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:199
+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 ""
+"http://www.compaq.com[Compaq] пожертвовал FreeBSD Project разнообразные "
+"системы Alpha. Среди множества щедрых пожертвований — 4 AlphaStation DS10, "
+"AlphaServer DS20, AlphaServer 2100, AlphaServer 4100, 8 персональных рабочих "
+"станций с частотой 500 МГц, 4 персональные рабочие станции с частотой 433 "
+"МГц и многое другое! Эти машины используются для сборки релизов, создания "
+"пакетов, разработки SMP и общей разработки архитектуры Alpha."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:200
+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 ""
+"TRW Financial Systems, Inc. предоставила 130 ПК, три файловых сервера по 68 "
+"ГБ, двенадцать сетей Ethernet, два маршрутизатора и коммутатор ATM для "
+"отладки кода бездисковой системы"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:201
+msgid ""
+"Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in "
+"_freefall_."
+msgstr ""
+"Дермот МакДоннелл предоставил привод CDROM Toshiba XM3401B, который в "
+"настоящее время используется в _freefall_."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:202
+msgid ""
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contributed "
+"his floppy tape streamer for experimental work."
+msgstr ""
+"Чак Роби <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> предоставил свой "
+"потоковый накопитель на гибких дисках для экспериментальной работы."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:203
+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 ""
+"Ларри Альтной <mailto:larry@alr.com[larry@alr.com],> и {wilko} предоставили "
+"стримеры Wangtek и Archive QIC-02 для улучшения драйвера [.filename]#wt#."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:204
+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 ""
+"Эрнст Винтер (http://berklix.org/ewinter/[Умер]) предоставил проекту "
+"дисковод на 2,88 МБ. Надеемся, это усилит внимание к необходимости "
+"переписать драйвер для дискет."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:205
+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 ""
+"http://www.tekram.com/[Tekram Technologies] предоставили по одному "
+"экземпляру своих SCSI-адаптеров DC-390, DC-390U и DC-390F FAST и ULTRA для "
+"регрессионного тестирования драйверов NCR и AMD с их картами. Также их стоит "
+"похвалить за предоставление исходных кодов драйверов для свободных "
+"операционных систем на их FTP-сервере link:ftp://ftp.tekram.com/scsi/FreeBSD/"
+"[ftp://ftp.tekram.com/scsi/FreeBSD/]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:206
+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 ""
+"Ларри М. Аугустин предоставил не только SCSI-карту Symbios Sym8751S, но и "
+"набор технической документации, включая руководство по предстоящему чипу "
+"Sym53c895 с поддержкой Ultra-2 и LVD, а также последнюю версию руководства "
+"по программированию с информацией о безопасном использовании расширенных "
+"функций новейших SCSI-чипов Symbios. Большое спасибо!"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:207
+msgid ""
+"{kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver "
+"development."
+msgstr ""
+"{kuku} пожертвовал FX120 12-скоростной Mitsumi CD-ROM привод для разработки "
+"драйвера IDE CD-ROM."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:208
+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 ""
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> пожертвовал четыре "
+"различные PCI-карты ATM для расширения поддержки этих карт, а также для "
+"помощи в разработке стека netatm ATM."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:209
+#, no-wrap
+msgid "Special contributors"
+msgstr "Особые участники"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:212
+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 ""
+"http://www.osd.bsdi.com/[BSDi] (ранее Walnut Creek CDROM) пожертвовали "
+"больше, чем мы можем выразить (подробности см. в разделе 'О проекте FreeBSD' "
+"extref:{handbook}[FreeBSD Handbook]). В частности, мы хотели бы "
+"поблагодарить их за первоначальное оборудование, использованное для "
+"`freefall.FreeBSD.org`, нашей основной машины разработки, и для "
+"`thud.FreeBSD.org`, тестовой и сборочной системы. Мы также благодарны им за "
+"финансирование различных участников на протяжении многих лет и "
+"предоставление неограниченного доступа к их T1-подключению к Интернету."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:213
+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 ""
+"Компания http://www.interface-business.de/[interface business GmbH, Дрезден] "
+"терпеливо поддерживала {joerg}, который часто отдавал предпочтение работе с "
+"FreeBSD вместо оплачиваемой работы и использовал их (довольно дорогое) "
+"интернет-подключение EUnet, когда его личное соединение становилось слишком "
+"медленным или ненадежным для работы."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:213
+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 ""
+"http://www.bsdi.com/[Berkeley Software Design, Inc.] предоставила свой код "
+"эмулятора DOS для остального мира BSD, который используется в команде "
+"`doscmd`."
diff --git a/documentation/content/ru/articles/contributors/contrib-develinmemoriam.adoc b/documentation/content/ru/articles/contributors/contrib-develinmemoriam.adoc
new file mode 100644
index 0000000000..83f5904632
--- /dev/null
+++ b/documentation/content/ru/articles/contributors/contrib-develinmemoriam.adoc
@@ -0,0 +1,181 @@
+* Майк Карелс (2016 - 2024; RIP 2024)
++
+Майк Карелс, изначально аспирант по микробиологии в Калифорнийском
+университете в Беркли (UCB), проявил интерес к компьютерам в соседней
+лаборатории, что привело к полной смене его карьеры. В начале 1980-х он
+присоединился к Исследовательской группе компьютерных систем (CSRG) в
+UCB. Там его вклад стал ключевым в разработке и улучшении реализации
+TCP/UDP/IP в BSD Unix, включая API интерфейса сокетов — один из наиболее
+широко используемых интерфейсов программирования приложений в истории
+Интернета.
++
+В течение следующих нескольких лет он продолжал помогать в подготовке
+выпусков Berkeley Software Distribution для 4.3BSD, 4.3BSD-Tahoe,
+4.3BSD-Reno, Networking Release 1 и Networking Release 2. В это время он был
+одним из авторов книги "The Design and Implementation of the 4.3BSD Unix
+Operating System" — важного труда в области компьютеров и операционных
+систем, опубликованного в 1989 году.
++
+После ухода из CSRG он стал одним из основателей BSD Incorporated (BSDi),
+одного из первых поставщиков программного обеспечения BSD Unix в исходных и
+бинарных форматах. Майк оставался верен своему делу, несмотря на
+многочисленные организационные изменения в Walnut Creek CDROM, Wind River
+Systems, Secure Computing, McAfee, Intel Security и Forcepoint.
++
+В 1994 году, по случаю 25-летия Unix, ассоциация USENIX удостоила Майка
+включения в Колоду карт Unix — набор игральных карт с изображениями пионеров
+раннего сообщества Unix. Он значится как Семёрка пик.
++
+Он также участвовал в проекте FreeBSD и внес значительный вклад в его
+развитие на протяжении многих лет, включая дополнения к подсистеме sysctl и
+фреймворку Mandatory Access Control (MAC), в итоге получив право на коммиты
+в src. После выхода на пенсию он активно помогал с инженерингом выпусков
+FreeBSD и был избран в состав основной команды незадолго до своей внезапной
+кончины по пути домой с конференции BSDCan 2024. Всего годом ранее он
+представил увлекательный ретроспективный доклад о своей работе с BSD на
+BSDCan 2023, который можно посмотреть на YouTube:
+https://www.youtube.com/watch?v=XSziyKlG1ws.
++
+Майк запомнился как выдающийся инженер-программист, терпеливый, скромный и
+отзывчивый к тем, кому требовалась помощь. Он наслаждался музыкой,
+фотографией и природой, а также проводил время с семьёй. Страница памяти
+Майка доступна по адресу
+https://www.gearty-delmore.com/obituaries/michael-mike-karels.
+* Ханс Петтер Селаски (2010 - 2023; RIP 2023)
++
+Сообщество FreeBSD вспоминает Ханса Петтера Селаски, который скончался в
+Лиллесанде, Норвегия, 23 июня 2023 года в возрасте 41 года. Ханс был
+невероятно талантливым и добрым человеком, внесшим множество ценных вкладов
+в FreeBSD. Он наиболее известен за переработку и поддержку стека USB и
+пакета webcamd, который обеспечивает современные телеконференции в
+FreeBSD. В последнее время он работал в Mellanox (ныне Nvidia), поддерживая
+их серию высокоскоростных сетевых карт ConnectX в FreeBSD. Работа Ханса
+включала значительный вклад в фреймворк TLS ядра, а также поддержку оффлоада
+отправки и приема kTLS на сетевых картах в драйвере mce(4).
++
+Одним из примеров улучшения была его идея сортировки входящих TCP-пакетов с
+использованием предоставленных NIC идентификаторов потоков RSS, чтобы
+представить LRO все пакеты из одного TCP-соединения подряд. Эта идея была
+ключевой для возможности Netflix обслуживать 100 Гбит/с видеотрафика с одной
+машины.
++
+Вне FreeBSD, у Ханса были увлечения музыкой и математикой. Он активно
+участвовал в жизни своей церкви и помогал команде, занимающейся звуком. Он
+был любящим и заботливым дядей для своих племянников и племянниц. Он любил
+животных, особенно своего кота Пумбу.
++
+Более полная версия воспоминаний доступна по ссылке:
+link:https://forums.freebsd.org/threads/in-memoriam-hans-petter-william-sirevag-selasky.89697/[на
+этой странице форума FreeBSD].
+* Брюс Д. Эванс (1991 - 2019; RIP 2019)
++
+Брюс был гигантом программирования, для которого FreeBSD стал домом.
++
+До FreeBSD и Linux была Minix, игрушечная «unix», написанная Энди
+Таненбаумом, выпущенная в 1987 году, продававшаяся с полными исходниками на
+трёх дискетах за $99.
++
+Брюс портировал Minix на i386 около 1989 года.
++
+Линус Торвальдс использовал Minix/386 для разработки собственного ядра, и
+Брюс был первым, кого он поблагодарил в анонсе релиза.
++
+Когда Билл Джолитц выпустил 386BSD 0.1 в 1992 году, Брюс был указан как
+участник.
++
+Брюс был одним из основателей проекта FreeBSD и входил в состав core.0, но
+он никогда не был пристрастным, и на протяжении многих лет множество других
+проектов получали пользу от его патчей, советов и мудрости.
++
+Рецензии кода от Брюса были трех видов: "мягкие", "брюсифицированные" и
+"брюсификация", но они никогда не были личными: всегда речь шла только о
+коде, ошибках, небрежном мышлении, упущенном историческом контексте,
+неоднозначных стандартах — и о нарушениях style(9).
++
+Поскольку Брюс провёл больше рецензий кода, чем кто-либо в истории проекта
+FreeBSD, журналы коммитов скрывают истинный масштаб его влияния, пока вы не
+обратите внимание на «Submitted by», «Reviewed by» и «Pointed out by».
++
+Глухой на ухо, Брюс не посещал конференции.
++
+Заметным исключением стал BSDcon в 1999 году в Калифорнии, где его коллеги
+по основной команде встретили его фразой "Мы недостойны!" в стиле "Мир
+Уэйна".
++
+Двадцать лет спустя мы всё ещё не достойны.
+* Курт Лидл (2015 - 2019; RIP 2019)
++
+Курт впервые познакомился с BSD, когда это был ещё проект в Университете
+Калифорнии в Беркли. Вскоре после того, как в Мэриленде стали доступны
+персонализированные номерные знаки, он получил «BSDWZRD».
++
+Он начал вносить вклад в FreeBSD вскоре после создания проекта. Он стал
+коммиттером исходного кода FreeBSD в октябре 2015 года.
++
+Наиболее известным проектом Курта в FreeBSD был man:blacklistd[8], который
+блокирует и освобождает порты по требованию для защиты от злоупотреблений
+типа DoS. Он также внес множество других исправлений ошибок и улучшений в
+DTrace, загрузчики и другие компоненты инфраструктуры FreeBSD.
++
+Предыдущие работы включали игру XTank, авторство в RFC 2516
+https://tools.ietf.org/html/rfc2516["Метод передачи PPP через Ethernet
+(PPPoE)"], а также доклад на конференции USENIX
+https://www.usenix.org/conference/usenix-winter-1994-technical-conference/drinking-firehose-multicast-usenet-news["Пить
+из пожарного шланга: Multicast USENET News"].
+* Фрэнк Дурда IV (1995 - 2003; RIP 2018)
++
+Фрэнк участвовал в проекте с самых ранних дней, внося код в линейку 1.x,
+прежде чем стал коммиттером.
+* Андрей А. Чернов (1993 - 2017; RIP 2017)
++
+Вклад Андрея в FreeBSD невозможно переоценить. Участвуя в проекте долгое
+время, он затронул практически все области.
+* Юрген Лок (2006 - 2015; RIP 2015)
++
+Юрген внес множество вкладов в FreeBSD, включая работу над libvirt,
+графическим стеком и QEMU. Вклад Юргена и его готовность помочь были высоко
+оценены людьми по всему миру. Эта работа продолжает улучшать жизнь тысяч
+людей каждый день.
+* {alexbl} (2006 - 2011; RIP 2012)
++
+http://www.legacy.com/obituaries/sfgate/obituary.aspx?pid=159801494[Александр]
+был наиболее известен как крупный вкладчик в порты Python для FreeBSD, один
+из основателей {python}, а также своей работой над XMMS2.
+* {jb} (1997 - 2009; RIP 2009)
++
+http://hub.opensolaris.org/bin/view/Community+Group+ogb/In+Memoriam[Джон]
+внес значительный вклад в FreeBSD, наиболее известным из которых является
+импорт кода man:dtrace[1]. Уникальное чувство юмора Джона и его
+прямолинейность либо раздражали окружающих, либо быстро делали его
+друзьями. В конце жизни он переехал в сельскую местность и пытался жить с
+минимальным воздействием на планету, продолжая при этом работать в сфере
+высоких технологий.
+* {jmz} (1994 - 2009; RIP 2009)
++
+http://www.obs-besancon.fr/article.php3?id_article=323[Жан-Марк] был
+астрофизиком, внесшим значительный вклад в моделирование атмосфер как
+планет, так и комет в http://www.obs-besancon.fr/[Обсерватории Безансона] в
+Безансоне, Франция. Там он участвовал в разработке и создании триканального
+спектрометра Vega, который изучал комету Галлея. Он также долгое время был
+участником разработки FreeBSD.
+* {itojun} (1997 - 2001; RIP 2008)
++
+Известный всем как http://astralblue.livejournal.com/350702.html[itojun],
+Дзюн-итиро Хагино был ведущим исследователем в http://www.kame.net/[проекте
+KAME], целью которого было предоставление технологий IPv6 и IPsec в свободно
+распространяемой форме. Большая часть этого кода была включена в
+FreeBSD. Без его усилий состояние IPv6 в Интернете было бы совсем другим.
+* {cg} (1999 - 2005; RIP 2005)
++
+http://www.dbsi.org/cam/[Кэмерон] был уникальным человеком, который внёс
+вклад в проект, несмотря на серьёзные физические ограничения. Он отвечал за
+полную переработку нашей звуковой системы в конце 1990-х. Многие из тех, кто
+с ним переписывался, даже не догадывались о его ограниченной подвижности
+благодаря его жизнерадостному духу и готовности помогать другим.
+* {alane} (2002 - 2003; RIP 2003)
++
+http://freebsd.kde.org/memoriam/alane.php[Алан] был одним из основных
+участников группы KDE на FreeBSD. Кроме того, он поддерживал множество
+других сложных и трудоёмких портов, таких как autoconf, CUPS и python. Путь
+Алана не был лёгким, но его страсть к FreeBSD и преданность высокому
+качеству программирования завоевали ему множество друзей.
diff --git a/documentation/content/ru/articles/contributors/contrib-develinmemoriam.po b/documentation/content/ru/articles/contributors/contrib-develinmemoriam.po
new file mode 100644
index 0000000000..c00bb8d5f2
--- /dev/null
+++ b/documentation/content/ru/articles/contributors/contrib-develinmemoriam.po
@@ -0,0 +1,515 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-03-28 20:31-0400\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescontributorscontrib-develinmemoriam/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:2
+msgid "Mike Karels (2016 - 2024; RIP 2024)"
+msgstr "Майк Карелс (2016 - 2024; RIP 2024)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:6
+msgid ""
+"Mike Karels, originally a microbiology Ph.D. degree candidate at University "
+"of California Berkeley (UCB), expressed interest in computers in a nearby "
+"lab which led him to change his entire career path. He eventually became "
+"involved in the Computer Systems Research Group (CSRG) at UCB in the early "
+"1980's. Once there, his contributions were instrumental in the development "
+"and improvement of the BSD Unix TCP/UDP/IP implementation, including the "
+"socket interface API, one of the most widely used application programming "
+"interfaces in the history of the Internet."
+msgstr ""
+"Майк Карелс, изначально аспирант по микробиологии в Калифорнийском "
+"университете в Беркли (UCB), проявил интерес к компьютерам в соседней "
+"лаборатории, что привело к полной смене его карьеры. В начале 1980-х он "
+"присоединился к Исследовательской группе компьютерных систем (CSRG) в UCB. "
+"Там его вклад стал ключевым в разработке и улучшении реализации TCP/UDP/IP в "
+"BSD Unix, включая API интерфейса сокетов — один из наиболее широко "
+"используемых интерфейсов программирования приложений в истории Интернета."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:9
+msgid ""
+"Over the next several years, he continued to help prepare the Berkeley "
+"Software Distribution releases for 4.3BSD, 4.3BSD-Tahoe, 4.3BSD-Reno, "
+"Networking Release 1, and Networking Release 2. During this time, he was "
+"one of the authors of \"The Design and Implementation of the 4.3BSD Unix "
+"Operating System\", an important book in the field of computers and "
+"operating systems, published in 1989."
+msgstr ""
+"В течение следующих нескольких лет он продолжал помогать в подготовке "
+"выпусков Berkeley Software Distribution для 4.3BSD, 4.3BSD-Tahoe, 4.3BSD-"
+"Reno, Networking Release 1 и Networking Release 2. В это время он был одним "
+"из авторов книги \"The Design and Implementation of the 4.3BSD Unix "
+"Operating System\" — важного труда в области компьютеров и операционных "
+"систем, опубликованного в 1989 году."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:12
+msgid ""
+"After leaving the CSRG, he was a founding member of BSD Incorporated (BSDi), "
+"one of the earliest purveyors of BSD Unix software in source and binary "
+"forms. Mike held steady through multiple organizational changes across "
+"Walnut Creek CDROM, Wind River Systems, Secure Computing, McAfee, Intel "
+"Security, and Forcepoint."
+msgstr ""
+"После ухода из CSRG он стал одним из основателей BSD Incorporated (BSDi), "
+"одного из первых поставщиков программного обеспечения BSD Unix в исходных и "
+"бинарных форматах. Майк оставался верен своему делу, несмотря на "
+"многочисленные организационные изменения в Walnut Creek CDROM, Wind River "
+"Systems, Secure Computing, McAfee, Intel Security и Forcepoint."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:16
+msgid ""
+"In 1994, on the occasion of the 25th anniversary of Unix, the USENIX "
+"Association honored Mike with inclusion in the Unix Deck of Cards, a set of "
+"playing cards with the faces of pioneers in the early Unix community. He is "
+"the Seven of Spades."
+msgstr ""
+"В 1994 году, по случаю 25-летия Unix, ассоциация USENIX удостоила Майка "
+"включения в Колоду карт Unix — набор игральных карт с изображениями пионеров "
+"раннего сообщества Unix. Он значится как Семёрка пик."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:20
+msgid ""
+"He also became involved with the FreeBSD Project and contributed greatly to "
+"it over the years including additions to the sysctl subsystem, and the "
+"Mandatory Access Control (MAC) framework, eventually earning a src commit "
+"bit. After his retirement, he stepped up to help with the release "
+"engineering of FreeBSD and was elected to serve on the core team shortly "
+"before his unexpected passing on his way home from the BSDCan 2024 "
+"Conference. Just the previous year, he gave a delightful retrospective talk "
+"on his work with BSD at BSDCan 2023 that can be viewed on YouTube: https://"
+"www.youtube.com/watch?v=XSziyKlG1ws."
+msgstr ""
+"Он также участвовал в проекте FreeBSD и внес значительный вклад в его "
+"развитие на протяжении многих лет, включая дополнения к подсистеме sysctl и "
+"фреймворку Mandatory Access Control (MAC), в итоге получив право на коммиты "
+"в src. После выхода на пенсию он активно помогал с инженерингом выпусков "
+"FreeBSD и был избран в состав основной команды незадолго до своей внезапной "
+"кончины по пути домой с конференции BSDCan 2024. Всего годом ранее он "
+"представил увлекательный ретроспективный доклад о своей работе с BSD на "
+"BSDCan 2023, который можно посмотреть на YouTube: https://www.youtube.com/"
+"watch?v=XSziyKlG1ws."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:24
+msgid ""
+"Mike is remembered as a brilliant software engineer, patient, humble and "
+"approachable to those needing help. He enjoyed music, photography, and "
+"nature as well as spending time with his family. A remembrance page for "
+"Mike can be found at https://www.gearty-delmore.com/obituaries/michael-mike-"
+"karels."
+msgstr ""
+"Майк запомнился как выдающийся инженер-программист, терпеливый, скромный и "
+"отзывчивый к тем, кому требовалась помощь. Он наслаждался музыкой, "
+"фотографией и природой, а также проводил время с семьёй. Страница памяти "
+"Майка доступна по адресу https://www.gearty-delmore.com/obituaries/michael-"
+"mike-karels."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:25
+msgid "Hans Petter Selasky (2010 - 2023; RIP 2023)"
+msgstr "Ханс Петтер Селаски (2010 - 2023; RIP 2023)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:31
+msgid ""
+"The FreeBSD community remembers Hans Petter Selasky who passed away in "
+"Lillesand, Norway on June 23, 2023 at the age of 41. Hans was an incredibly "
+"brilliant and kind person, and made many valuable contributions to FreeBSD. "
+"He was best known for re-writing and maintaining the USB stack and the "
+"webcamd package which enables modern teleconferencing on FreeBSD. Most "
+"recently, he worked for Mellanox (now Nvidia) to support their ConnectX "
+"series of high speed NICs on FreeBSD. Hans’s work included major "
+"contributions to the kernel TLS framework, as well as support for NIC kTLS "
+"send and receive offload in the mce(4) driver."
+msgstr ""
+"Сообщество FreeBSD вспоминает Ханса Петтера Селаски, который скончался в "
+"Лиллесанде, Норвегия, 23 июня 2023 года в возрасте 41 года. Ханс был "
+"невероятно талантливым и добрым человеком, внесшим множество ценных вкладов "
+"в FreeBSD. Он наиболее известен за переработку и поддержку стека USB и "
+"пакета webcamd, который обеспечивает современные телеконференции в FreeBSD. "
+"В последнее время он работал в Mellanox (ныне Nvidia), поддерживая их серию "
+"высокоскоростных сетевых карт ConnectX в FreeBSD. Работа Ханса включала "
+"значительный вклад в фреймворк TLS ядра, а также поддержку оффлоада отправки "
+"и приема kTLS на сетевых картах в драйвере mce(4)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:34
+msgid ""
+"One example improvement was his idea to sort incoming TCP packets using the "
+"NIC provided RSS flow identifiers in order to present LRO with all packets "
+"from the same TCP connection back to back. This idea was crucial to "
+"Netflix's ability to serve 100Gb/s of video traffic from a single machine."
+msgstr ""
+"Одним из примеров улучшения была его идея сортировки входящих TCP-пакетов с "
+"использованием предоставленных NIC идентификаторов потоков RSS, чтобы "
+"представить LRO все пакеты из одного TCP-соединения подряд. Эта идея была "
+"ключевой для возможности Netflix обслуживать 100 Гбит/с видеотрафика с одной "
+"машины."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:39
+msgid ""
+"Outside of FreeBSD, Hans’s hobbies included music and mathematics. He was "
+"active in his church, and contributed to its sound team. He was a loving "
+"and dedicated uncle to his nieces and nephews. He loved animals, especially "
+"his cat Pumba."
+msgstr ""
+"Вне FreeBSD, у Ханса были увлечения музыкой и математикой. Он активно "
+"участвовал в жизни своей церкви и помогал команде, занимающейся звуком. Он "
+"был любящим и заботливым дядей для своих племянников и племянниц. Он любил "
+"животных, особенно своего кота Пумбу."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:41
+msgid ""
+"A longer edition of this remembrance can be found on link:https://"
+"forums.freebsd.org/threads/in-memoriam-hans-petter-william-sirevag-"
+"selasky.89697/[this FreeBSD Forum page]."
+msgstr ""
+"Более полная версия воспоминаний доступна по ссылке: link:https://forums."
+"freebsd.org/threads/in-memoriam-hans-petter-william-sirevag-selasky.89697/["
+"на этой странице форума FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:42
+msgid "Bruce D. Evans (1991 - 2019; RIP 2019)"
+msgstr "Брюс Д. Эванс (1991 - 2019; RIP 2019)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:44
+msgid "Bruce was a programming giant who made FreeBSD his home."
+msgstr "Брюс был гигантом программирования, для которого FreeBSD стал домом."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:46
+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 ""
+"До FreeBSD и Linux была Minix, игрушечная «unix», написанная Энди "
+"Таненбаумом, выпущенная в 1987 году, продававшаяся с полными исходниками на "
+"трёх дискетах за $99."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:48
+msgid "Bruce ported Minix to the i386 around 1989."
+msgstr "Брюс портировал Minix на i386 около 1989 года."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:50
+msgid ""
+"Linus Torvalds used Minix/386 to develop his own kernel, and Bruce was the "
+"first person he thanked in the release-announcement."
+msgstr ""
+"Линус Торвальдс использовал Minix/386 для разработки собственного ядра, и "
+"Брюс был первым, кого он поблагодарил в анонсе релиза."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:52
+msgid ""
+"When Bill Jolitz released 386BSD 0.1 in 1992, Bruce was listed as a "
+"contributor."
+msgstr ""
+"Когда Билл Джолитц выпустил 386BSD 0.1 в 1992 году, Брюс был указан как "
+"участник."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:54
+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 ""
+"Брюс был одним из основателей проекта FreeBSD и входил в состав core.0, но "
+"он никогда не был пристрастным, и на протяжении многих лет множество других "
+"проектов получали пользу от его патчей, советов и мудрости."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:56
+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 ""
+"Рецензии кода от Брюса были трех видов: \"мягкие\", \"брюсифицированные\" и "
+"\"брюсификация\", но они никогда не были личными: всегда речь шла только о "
+"коде, ошибках, небрежном мышлении, упущенном историческом контексте, "
+"неоднозначных стандартах — и о нарушениях style(9)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:58
+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 ""
+"Поскольку Брюс провёл больше рецензий кода, чем кто-либо в истории проекта "
+"FreeBSD, журналы коммитов скрывают истинный масштаб его влияния, пока вы не "
+"обратите внимание на «Submitted by», «Reviewed by» и «Pointed out by»."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:60
+msgid "Being hard of hearing, Bruce did not attend conferences."
+msgstr "Глухой на ухо, Брюс не посещал конференции."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:62
+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 ""
+"Заметным исключением стал BSDcon в 1999 году в Калифорнии, где его коллеги "
+"по основной команде встретили его фразой \"Мы недостойны!\" в стиле \"Мир "
+"Уэйна\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:64
+msgid "Twenty years later we're still not."
+msgstr "Двадцать лет спустя мы всё ещё не достойны."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:65
+msgid "Kurt Lidl (2015 - 2019; RIP 2019)"
+msgstr "Курт Лидл (2015 - 2019; RIP 2019)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:67
+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 ""
+"Курт впервые познакомился с BSD, когда это был ещё проект в Университете "
+"Калифорнии в Беркли. Вскоре после того, как в Мэриленде стали доступны "
+"персонализированные номерные знаки, он получил «BSDWZRD»."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:69
+msgid ""
+"He began contributing to FreeBSD shortly after the conception of the "
+"project. He became a FreeBSD source committer in October 2015."
+msgstr ""
+"Он начал вносить вклад в FreeBSD вскоре после создания проекта. Он стал "
+"коммиттером исходного кода FreeBSD в октябре 2015 года."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:71
+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 ""
+"Наиболее известным проектом Курта в FreeBSD был man:blacklistd[8], который "
+"блокирует и освобождает порты по требованию для защиты от злоупотреблений "
+"типа DoS. Он также внес множество других исправлений ошибок и улучшений в "
+"DTrace, загрузчики и другие компоненты инфраструктуры FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:73
+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 ""
+"Предыдущие работы включали игру XTank, авторство в RFC 2516 https://tools."
+"ietf.org/html/rfc2516[\"Метод передачи PPP через Ethernet (PPPoE)\"], а "
+"также доклад на конференции USENIX https://www.usenix.org/conference/"
+"usenix-winter-1994-technical-conference/drinking-firehose-multicast-usenet-"
+"news[\"Пить из пожарного шланга: Multicast USENET News\"]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:74
+msgid "Frank Durda IV (1995 - 2003; RIP 2018)"
+msgstr "Фрэнк Дурда IV (1995 - 2003; RIP 2018)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:76
+msgid ""
+"Frank had been around the project since the very early days, contributing "
+"code to the 1.x line before becoming a committer."
+msgstr ""
+"Фрэнк участвовал в проекте с самых ранних дней, внося код в линейку 1.x, "
+"прежде чем стал коммиттером."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:77
+msgid "Andrey A. Chernov (1993 - 2017; RIP 2017)"
+msgstr "Андрей А. Чернов (1993 - 2017; RIP 2017)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:79
+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 ""
+"Вклад Андрея в FreeBSD невозможно переоценить. Участвуя в проекте долгое "
+"время, он затронул практически все области."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:80
+msgid "Jürgen Lock (2006 - 2015; RIP 2015)"
+msgstr "Юрген Лок (2006 - 2015; RIP 2015)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:82
+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 ""
+"Юрген внес множество вкладов в FreeBSD, включая работу над libvirt, "
+"графическим стеком и QEMU. Вклад Юргена и его готовность помочь были высоко "
+"оценены людьми по всему миру. Эта работа продолжает улучшать жизнь тысяч "
+"людей каждый день."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:83
+msgid "{alexbl} (2006 - 2011; RIP 2012)"
+msgstr "{alexbl} (2006 - 2011; RIP 2012)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:85
+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 ""
+"http://www.legacy.com/obituaries/sfgate/obituary."
+"aspx?pid=159801494[Александр] был наиболее известен как крупный вкладчик в "
+"порты Python для FreeBSD, один из основателей {python}, а также своей "
+"работой над XMMS2."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:86
+msgid "{jb} (1997 - 2009; RIP 2009)"
+msgstr "{jb} (1997 - 2009; RIP 2009)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:88
+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 ""
+"http://hub.opensolaris.org/bin/view/Community+Group+ogb/In+Memoriam[Джон] "
+"внес значительный вклад в FreeBSD, наиболее известным из которых является "
+"импорт кода man:dtrace[1]. Уникальное чувство юмора Джона и его "
+"прямолинейность либо раздражали окружающих, либо быстро делали его друзьями. "
+"В конце жизни он переехал в сельскую местность и пытался жить с минимальным "
+"воздействием на планету, продолжая при этом работать в сфере высоких "
+"технологий."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:89
+msgid "{jmz} (1994 - 2009; RIP 2009)"
+msgstr "{jmz} (1994 - 2009; RIP 2009)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:91
+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 ""
+"http://www.obs-besancon.fr/article.php3?id_article=323[Жан-Марк] был "
+"астрофизиком, внесшим значительный вклад в моделирование атмосфер как "
+"планет, так и комет в http://www.obs-besancon.fr/[Обсерватории Безансона] в "
+"Безансоне, Франция. Там он участвовал в разработке и создании триканального "
+"спектрометра Vega, который изучал комету Галлея. Он также долгое время был "
+"участником разработки FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:92
+msgid "{itojun} (1997 - 2001; RIP 2008)"
+msgstr "{itojun} (1997 - 2001; RIP 2008)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:94
+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 ""
+"Известный всем как http://astralblue.livejournal.com/350702.html[itojun], "
+"Дзюн-итиро Хагино был ведущим исследователем в http://www.kame.net/[проекте "
+"KAME], целью которого было предоставление технологий IPv6 и IPsec в свободно "
+"распространяемой форме. Большая часть этого кода была включена в FreeBSD. "
+"Без его усилий состояние IPv6 в Интернете было бы совсем другим."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:95
+msgid "{cg} (1999 - 2005; RIP 2005)"
+msgstr "{cg} (1999 - 2005; RIP 2005)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:97
+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 ""
+"http://www.dbsi.org/cam/[Кэмерон] был уникальным человеком, который внёс "
+"вклад в проект, несмотря на серьёзные физические ограничения. Он отвечал за "
+"полную переработку нашей звуковой системы в конце 1990-х. Многие из тех, кто "
+"с ним переписывался, даже не догадывались о его ограниченной подвижности "
+"благодаря его жизнерадостному духу и готовности помогать другим."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:98
+msgid "{alane} (2002 - 2003; RIP 2003)"
+msgstr "{alane} (2002 - 2003; RIP 2003)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:99
+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 ""
+"http://freebsd.kde.org/memoriam/alane.php[Алан] был одним из основных "
+"участников группы KDE на FreeBSD. Кроме того, он поддерживал множество "
+"других сложных и трудоёмких портов, таких как autoconf, CUPS и python. Путь "
+"Алана не был лёгким, но его страсть к FreeBSD и преданность высокому "
+"качеству программирования завоевали ему множество друзей."
diff --git a/documentation/content/ru/articles/cups/_index.adoc b/documentation/content/ru/articles/cups/_index.adoc
index 88ef2ee99e..c339fa33c9 100644
--- a/documentation/content/ru/articles/cups/_index.adoc
+++ b/documentation/content/ru/articles/cups/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Универсальная Система Печати Unix на FreeBSD
authors:
- - author: Chess Griffin
+ -
+ author: 'Chess Griffin'
email: chess@chessgriffin.com
+description: 'Как установить и использовать CUPS в FreeBSD'
+tags: ["CUPS", "FreeBSD", "Guide", "configuration", "introduction"]
+title: 'Универсальная Система Печати Unix на FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -60,7 +63,7 @@ toc::[]
Для установки CUPS используя пакет, запустите на выполнение такую команду:
-[source,shell]
+[source, shell]
....
# pkg install cups
....
@@ -105,10 +108,10 @@ application/octet-stream
По окончанию внесения изменений службы man:devfs[8] и CUPS необходимо перезапустить, для чего перезагрузите операционную систему или выполните от пользователя `root` следующие две команды:
-[source,shell]
+[source, shell]
....
-# /etc/rc.d/devfs restart
-# /usr/local/etc/rc.d/cupsd restart
+# service devfs restart
+# service cupsd restart
....
[[printing-cups-configuring-printers]]
@@ -126,7 +129,7 @@ application/octet-stream
После того, как сервер CUPS был настроен, принтеры добавлены и сделаны доступными в сети, следующий шаг - это настройка клиентов или машин, которые будут иметь доступ к серверу CUPS. Если у вас единственный настольный компьютер, который работает одновременно и сервером и клиентом, то в большинстве этой информации вы не нуждаетесь.
[[printing-cups-clients-unix]]
-=== UNIX(R) клиенты
+=== Клиенты UNIX(R)
На UNIX(R) клиентах также потребуется установить CUPS. После установки системы печати на клиенте, CUPS-принтеры, присутствующие в сети, чаще всего автоматически находятся менеджерами принтеров разных графических оболочек, таких как GNOME или KDE. В качестве альтернативы, вы можете воспользоваться веб-интерфейсом CUPS на клиентской машине по адресу http://localhost:631[http://localhost:631] и на странице администрирования выбрать "Add Printer". Когда перед вами предстанет выпадающий список "Device", просто выберите сетевой CUPS принтер, если он был обнаружен автоматически, или выберите `ipp` или `http` и введите IPP или HTTP адрес (URI) сетевого CUPS принтера:
@@ -150,7 +153,7 @@ ServerName server-ip
В этом случае _server-ip_ необходимо заменить на IP адрес сервера CUPS в сети.
[[printing-cups-clients-windows]]
-=== Windows(R)-клиенты
+=== Клиенты Windows(R)
Версии Windows(R), предшествующие XP, не имели встроенной поддержки протокола IPP. Однако Windows(R) XP и более поздние версии уже обладают такой возможностью. Следовательно, добавить CUPS принтер в этих версиях Windows(R) довольно просто. В большинстве случаев, администратору Windows(R) потребуется запустить мастера установки принтера (`Add Printer`) выбрать сетевой принтер (`Network Printer`), а затем ввести URI следующего формата:
@@ -217,7 +220,7 @@ DefaultEncryption Never # comment this line to allow encryption
# Set the default printer/job policies...
<Policy default>
- # Job-related operations must be done by the owner or an adminstrator...
+ # Job-related operations must be done by the owner or an administrator...
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \
Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \
Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \
@@ -226,7 +229,7 @@ CUPS-Move-Job>
Order deny,allow
</Limit>
- # All administration operations require an adminstrator to authenticate...
+ # All administration operations require an administrator to authenticate...
<Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \
Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \
Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \
diff --git a/documentation/content/ru/articles/cups/_index.po b/documentation/content/ru/articles/cups/_index.po
new file mode 100644
index 0000000000..22b4a00625
--- /dev/null
+++ b/documentation/content/ru/articles/cups/_index.po
@@ -0,0 +1,695 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-28 22:56+0300\n"
+"PO-Revision-Date: 2025-08-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlescups_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/cups/_index.adoc:1
+#, no-wrap
+msgid "How to install and use CUPS on FreeBSD"
+msgstr "Как установить и использовать CUPS в 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 "Универсальная Система Печати Unix на FreeBSD"
+
+#. 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 ""
+"Эта статья посвящена конфигурированию Универсальной Системы Печати UNIX "
+"(CUPS) на 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 "Знакомимся с Универсальной Системой Печати UNIX (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 ""
+"Универсальная Система Печати UNIX (Common Unix Printing System, или "
+"сокращенно CUPS), предоставляет переносимую среду печати для UNIX(R) и "
+"UNIX(R)-подобных операционных систем. Она была разработана компанией Easy "
+"Software Products, чтобы предоставить стандартное решение в печати для всех "
+"разработчиков и пользователей 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 ""
+"Универсальная Система Печати UNIX использует протокол межсетевой печати "
+"(Internet Printing Protocol, IPP) как основу для управления заданиями на "
+"печать и очередями. Также частично поддерживаются следующие протоколы: LPD, "
+"SMB и AppSocket (также известный как JetDirect). CUPS дает возможность "
+"обзора сетевых принтеров и использования опций, базирующихся на ПостСкрипт "
+"Описании Принтеров (PostScript Printer Definition, PPD), чтобы поддерживать "
+"в UNIX(R) общепринятые традиции печати. В результате CUPS идеально подходит "
+"для совместного использования принтеров в смешанной среде из FreeBSD, "
+"Linux(R), Mac OS(R) X или 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 ""
+"Официальный сайт Универсальной Системы Печати UNIX - 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 "Установка сервера печати CUPS"
+
+#. 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 ""
+"Для установки CUPS используя пакет, запустите на выполнение такую команду:"
+
+#. 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 ""
+"Другие необязательные, но рекомендуемые к установке пакеты это package:print/"
+"gutenprint-cups[] и package:print/hplip[], каждый из которых добавляет "
+"драйвера и утилиты для разнообразных принтеров. После установки файлы "
+"конфигурации CUPS могут быть найдены в директории [.filename]#/usr/local/etc/"
+"cups#."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:78
+#, no-wrap
+msgid "Configuring the CUPS Print Server"
+msgstr "Настройка сервера печати CUPS"
+
+#. 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 ""
+"Чтобы настроить сервер CUPS необходимо отредактировать несколько "
+"конфигурационных файлов. Для начала создайте или исправьте файл [.filename]#/"
+"etc/devfs.rules# и добавьте следующую информацию для того, чтобы установить "
+"соответствующие права на все потенциальные файлы устройств принтеров и "
+"связать принтеры с группой пользователей `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 ""
+"Замените _X_, _Y_ и _Z_ номерами соответствующего принтеру целевого "
+"устройства USB, отображаемого в каталоге [.filename]#/dev/usb#. Чтобы найти "
+"требуемые значения, просмотрите вывод man:dmesg[8] и найдите связанное с "
+"вашим принтером имя специального устройства [.filename]#ugenX.Y#, последнее "
+"будет символической ссылкой на искомое устройство в каталоге [.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 "Затем, добавьте следующие две записи в [.filename]#/etc/rc.conf#:"
+
+#. 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 ""
+"Эти две записи будут запускать сервер печати CUPS во время загрузки системы "
+"и применять локальное правило devfs, созданное выше."
+
+#. 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 ""
+"Для того, чтобы печать CUPS стала доступна для некоторых Microsoft(R) "
+"Windows(R) клиентов, необходимо раскомментировать следующую запись в "
+"[.filename]#/usr/local/etc/cups/mime.types# и [.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 ""
+"По окончанию внесения изменений службы man:devfs[8] и CUPS необходимо "
+"перезапустить, для чего перезагрузите операционную систему или выполните от "
+"пользователя `root` следующие две команды:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:121
+#, no-wrap
+msgid ""
+"# service devfs restart\n"
+"# service cupsd restart\n"
+msgstr ""
+"# service devfs restart\n"
+"# service cupsd restart\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:124
+#, no-wrap
+msgid "Configuring Printers on the CUPS Print Server"
+msgstr "Настройка принтеров на сервере печати CUPS"
+
+#. 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 ""
+"После того, как система CUPS была установлена и сконфигурирована, системный "
+"администратор может начать конфигурирование локальных принтеров, "
+"подключенных к серверу печати CUPS. Эта часть процесса очень похожа, если не "
+"идентична настройке принтеров CUPS в других UNIX(R)-подобных операционных "
+"системах, таких как дистрибутивы 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 ""
+"Основным способом управления и администрирования сервера CUPS является веб-"
+"интерфейс, на который можно попасть запустив веб-браузер и набрав http://"
+"localhost:631[http://localhost:631] в его адресной строке. Если сервер CUPS "
+"находится на другой машине в сети, замените `localhost` на IP адрес сервера. "
+"Веб-интерфейс CUPS достаточно очевиден, там есть разделы для управления "
+"принтерами и заданиями на печать, авторизацией пользователей и т.п. Кроме "
+"того, в правой части страницы администрирования есть несколько флажков "
+"(check-box), дающих удобный доступ к часто меняемым установкам, таким как "
+"разрешение публичного доступа к подключенным к системе принтерам, "
+"предоставление удаленного управления сервером CUPS, изменение уровня доступа "
+"пользователей к принтерам и их заданиям на печать."
+
+#. 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 ""
+"Добавление принтера в общем такое же простое, как нажатие \"Add Printer\" на "
+"странице администрирования веб-интерфейса сервера CUPS или как нажатие одной "
+"из кнопок \"New Printers Found\" на той же странице администрирования. Когда "
+"перед вами предстанет выпадающий список \"Device\", просто выберите "
+"требуемый локально подключенный принтер, а дальше следуйте подсказкам "
+"интерфейса. В случае если были установлены порты или пакеты package:print/"
+"gutenprint-cups[] или package:print/hplip[], как указывалось выше, "
+"дополнительные драйвера печати будут доступны на последующих страницах, что "
+"может обеспечить большую надежность и расширенные возможности."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:139
+#, no-wrap
+msgid "Configuring CUPS Clients"
+msgstr "Конфигурирование клиентов 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 ""
+"После того, как сервер CUPS был настроен, принтеры добавлены и сделаны "
+"доступными в сети, следующий шаг - это настройка клиентов или машин, которые "
+"будут иметь доступ к серверу CUPS. Если у вас единственный настольный "
+"компьютер, который работает одновременно и сервером и клиентом, то в "
+"большинстве этой информации вы не нуждаетесь."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:145
+#, no-wrap
+msgid "UNIX(R) Clients"
+msgstr "Клиенты UNIX(R)"
+
+#. 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 ""
+"На UNIX(R) клиентах также потребуется установить CUPS. После установки "
+"системы печати на клиенте, CUPS-принтеры, присутствующие в сети, чаще всего "
+"автоматически находятся менеджерами принтеров разных графических оболочек, "
+"таких как GNOME или KDE. В качестве альтернативы, вы можете воспользоваться "
+"веб-интерфейсом CUPS на клиентской машине по адресу http://"
+"localhost:631[http://localhost:631] и на странице администрирования выбрать "
+"\"Add Printer\". Когда перед вами предстанет выпадающий список \"Device\", "
+"просто выберите сетевой CUPS принтер, если он был обнаружен автоматически, "
+"или выберите `ipp` или `http` и введите IPP или HTTP адрес (URI) сетевого "
+"CUPS принтера:"
+
+#. 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 ""
+"Если CUPS клиент не находит в сети принтеры, доступные через сервер CUPS, то "
+"иногда помогает создание или изменение файла [.filename]#/usr/local/etc/cups/"
+"client.conf# с добавлением единственной записи, подобной следующей:"
+
+#. 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 ""
+"В этом случае _server-ip_ необходимо заменить на IP адрес сервера CUPS в "
+"сети."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:172
+#, no-wrap
+msgid "Windows(R) Clients"
+msgstr "Клиенты Windows(R)"
+
+#. 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 ""
+"Версии Windows(R), предшествующие XP, не имели встроенной поддержки "
+"протокола IPP. Однако Windows(R) XP и более поздние версии уже обладают "
+"такой возможностью. Следовательно, добавить CUPS принтер в этих версиях "
+"Windows(R) довольно просто. В большинстве случаев, администратору Windows(R) "
+"потребуется запустить мастера установки принтера (`Add Printer`) выбрать "
+"сетевой принтер (`Network Printer`), а затем ввести URI следующего формата:"
+
+#. 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 ""
+"Если используется версия Windows(R) без поддержки протокола IPP, то общим "
+"случаем подключения к CUPS-принтеру будет совместное использование CUPS и "
+"package:net/samba3[]. Описание этой возможности выходит за рамки данной "
+"статьи."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:187
+#, no-wrap
+msgid "CUPS Troubleshooting"
+msgstr "Устранение неполадок с 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 ""
+"Проблемы c CUPS часто возникают из-за неверных прав доступа. Сначала дважды "
+"проверьте права доступа в man:devfs[8] (сверьтесь с уже описанными выше). "
+"Затем, проверьте реальные права устройств, созданных в файловой системе. "
+"Также бывает полезным удостовериться, что ваш пользователь входит в группу "
+"`cups`. Если у вас складывается впечатление, что флажки прав доступа на "
+"странице администрирования веб-интерфейса CUPS не работают, то иным решением "
+"может быть резервное копирование конфигурационного файла [.filename]#/usr/"
+"local/etc/cups/cupsd.conf# и редактирование разных опций конфигурации с "
+"подбором их комбинаций. Ниже приведено содержимое тестового файла "
+"конфигурации [.filename]#/usr/local/etc/cups/cupsd.conf#. Пожалуйста, "
+"обратите внимание на то, что безопасность в этом примере "
+"[.filename]#cupsd.conf# была пожертвована в угоду простоте настройки; как "
+"только администратор успешно подсоединится к серверу CUPS и сконфигурирует "
+"клиентов, рекомендуется пересмотреть данную конфигурацию и добавить "
+"разграничение доступа."
+
+#. 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"
diff --git a/documentation/content/ru/articles/explaining-bsd/_index.adoc b/documentation/content/ru/articles/explaining-bsd/_index.adoc
index 9374ee2ae9..b40a42288f 100644
--- a/documentation/content/ru/articles/explaining-bsd/_index.adoc
+++ b/documentation/content/ru/articles/explaining-bsd/_index.adoc
@@ -1,9 +1,12 @@
---
-title: Что такое BSD
authors:
- - author: Greg Lehey
+ -
+ author: 'Greg Lehey'
email: grog@FreeBSD.org
-trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sparc", "sun", "unix", "general"]
+description: 'Короткое объяснение, что такое BSD'
+tags: ["Explaining BSD", "BSD", "FreeBSD", "operating system"]
+title: 'Что такое BSD'
+trademarks: ["freebsd", "amd", "apple", "git", intel", "linux", "opengroup", "sun", "unix", "general"]
---
= Что такое BSD
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Аннотация
-В мире программ с открытыми исходниками, слово "Linux" практически стало синонимом слова "Операционная Система", хотя это далеко не единственная операционная система UNIX(R), исходные коды которой доступны широкой публике. Согласно данным http://www.leb.net/hzo/ioscount/data/r.9904.txt[Internet Operating System Counter], в апреле 1999-го 31,3% всех подключённых к Internet машин работали под Linux. 14,6% использовали BSD UNIX(R). Некоторые из мировых лидеров в области Web-услуг, например http://www.yahoo.com/[Yahoo!], работают под BSD. Самый загруженный в мире FTP-сервер 1999 года (сейчас он не работает), link:ftp://ftp.cdrom.com/[ftp.cdrom.com], функционировал под управлением BSD и передавал 1,4 Тбайта данных в день. Очевидно, что это не узкий, специализированный рынок: можно сказать, что BSD - это тщательно скрываемая тайна.
+В мире программ с открытыми исходниками, слово "Linux" практически стало синонимом слова "Операционная Система", хотя это далеко не единственная операционная система UNIX(R), исходные коды которой доступны широкой публике.
Так в чём же секрет? Почему известность BSD оставляет желать лучшего? Эта публикация ставить целью ответить на эти и другие вопросы.
@@ -56,16 +59,14 @@ toc::[]
BSD означает "Berkeley Software Distribution". Так называлось программное обеспечение, распространявшееся в исходных кодах Калифорнийским Университетом в Беркли, которое сначала представляло из себя дополнения к операционной системе UNIX(R) компании AT&T. На основе версии 4.4BSD-Lite были созданы несколько операционных систем с открытыми исходными кодами. В их состав включены разработки других проектов, среди которых особо следует выделить Проект GNU. Вот что такое собственно операционная система BSD:
* Ядро BSD, отвечающее за планировку процессов, управление памятью, поддержку многопроцессорных систем (SMP), работу с устройствами и так далее.
-+
-__В отличие от Linux, существует несколько ядер BSD, отличающихся возможностями.__
* Библиотека C, основной системный интерфейс программирования.
-+
++
__Библиотека C в BSD основывается на коде из Беркли, а не из Проекта GNU.__
* Оболочки, файловые утилиты, компиляторы, редакторы связей и другие утилиты пользователя.
-+
++
__Некоторые из них базируются на коде GNU, а некоторые -- нет.__
* Система X Window, отвечающая за графический интерфейс.
-+
++
Система X Window, которая используется в большинстве версий BSD, поддерживается http://www.X.org/[проектом X.Org]. FreeBSD дает пользователю возможность выбирать из множества графических оболочек, таких как GNOME, KDE или Xfce; а также из множества легких оконных менеджеров наподобие Openbox, Fluxbox или Awesome.
* Множество разных других прикладных и системных программ.
@@ -91,13 +92,11 @@ __Некоторые из них базируются на коде GNU, а не
. Разработчики BSD часто больше заинтересованы в качестве своего кода и заняты его "шлифовкой", а не рекламой.
. По большому счёту Linux своей популярностью обязан прежде всего внешним по отношению к проекту факторам, например средствам массовой информации и компаниям, которые решили сделать бизнес на предоставлении услуг пользователям Linux.
-. Разработчики BSD, как правило, более опытны, чем разработчики Linux, и в силу этого часто уделяют меньше внимания облегчению жизни простым пользователям. Новичок чувствует себя более комфортно в среде Linux.
-. В 1992 году компания AT&T подала в суд на http://www.bsdi.com/[BSDI], компанию-поставщика ОС BSD/386. Основным пунктом обвинения было то, что BSD/386 содержала в себе закрытый код, принадлежавший AT&T. Дело вроде бы уладили за пределами суда в 1994-ом, но целая серия вторичных тяжб и по сей день отравляет жизнь многим людям. Совсем недавно, в марте 2000, в Internet была опубликована статья, утверждавшая, что судебное разбирательство окончательно завершено ("recently settled").
-+
-В результате разбирательства прояснился вопрос с названиями: если в 80-х годах BSD была известна под именем "BSD UNIX(R)", то с исключением последних следов кода, принадлежавшего AT&T, BSD потеряла право называться UNIX(R). Вы можете заметить этот факт по изменившимся заглавиям книг: "операционная система 4.3BSD UNIX(R)" и "операционная система 4.4BSD".
-. Существует мнение, что проекты BSD сильно отличаются и, в добавок, "воюют" между собой. http://interactive.wsj.com/bin/login?Tag=/&URI=/archive/retrieve.cgi%253Fid%253DSB952470579348918651.djm&[Статья в Wall Street Journal] называет это "балканизацией" среди проектов BSD. Можно утверждать, что такое мнение, как и описанная судебная тяжба, основывается прежде всего на событиях давно минувших дней.
+. В 1992 году AT&T подала в суд на http://www.bsdi.com/[BSDI], поставщика BSD/386, утверждая, что их продукт содержит код, защищённый авторскими правами AT&T. Дело было урегулировано во внесудебном порядке в 1994 году, но призрак этого судебного разбирательства продолжает преследовать людей. В марте 2000 года в интернете была опубликована статья, в которой утверждалось, что судебное дело было «недавно урегулировано».
++
+Один момент, который прояснился в ходе судебного разбирательства, касается названия: в 1980-х годах BSD была известна как «BSD UNIX(R)». Однако после удаления последних следов кода AT&T из BSD система потеряла право на использование названия UNIX(R). Поэтому в названиях книг можно встретить, например, «ОС 4.3BSD UNIX®», но уже «ОС 4.4BSD».
-[[compairing-bsd-and-linux]]
+[[comparing-bsd-and-linux]]
== Сравнение BSD и Linux
В чём заключается главная разница, к примеру, между Debian Linux и FreeBSD? Для среднего пользователя она на удивление мала: оба продукта представляют собой UNIX(R)-подобные операционные системы. Оба продукта разрабатываются на некоммерческой основе (это не относится к некоторым другим дистрибутивам Linux). В этом разделе мы рассмотрим BSD в сравнении с Linux. Всё сказанное в основном будет касаться FreeBSD, которой принадлежит около 80% всех инсталляций BSD в мире, хотя отличия от NetBSD, OpenBSD и DragonFlyBSD в рамках предмета данной статьи незначительны.
@@ -114,7 +113,7 @@ __Некоторые из них базируются на коде GNU, а не
* _Контрибуторы_ пишут код или документацию. Они не могут добавлять или изменять код непосредственно в дереве исходников проекта. Это привилегия особым образом зарегистрированных разработчиков, или __коммиттеров (committers)__, которые просматривают и тестируют присылаемый им код и включают его в дерево.
* _Коммиттеры_ являются разработчиками, которые имеют доступ на запись в дерево исходных кодов проекта. Чтобы стать коммиттером, человек должен проявить себя в той области, в которой он хочет работать.
-+
++
Каждый коммиттер по своему собственному усмотрению решает, нужно ли ему подтверждение правильности планируемых изменений от других разработчиков или нет. В общем случае опытный коммиттер может вносить очевидно выгодные изменения ни с кем не советуясь. К примеру, коммиттер проекта документации может исправлять опечатки или грамматические ошибки в документах без предварительного согласования. Напротив, далеко идущие или просто сложные изменения настоятельно рекомендуется представлять к обсуждению перед окончательным внесением в дерево. Бывают крайние случаи, когда член Core Team, выполняющий функцию архитектора проекта, может санкционировать немедленную отмену или _откат_ каких-то изменений в дереве. Все коммиттеры обязательно получают уведомление о каждом изменении в дереве по электронной почте, так что их невозможно сохранить в тайне.
* _Правление_ (Core Team). В проектах FreeBSD и NetBSD имеются управляющие советы, которые занимаются координационной деятельностью. Их роль, права и обязанности не всегда чётко определены. Необязательно (хотя в порядке вещей) быть коммиттером для того, чтобы входить в состав Core Team. Правила, которым следует Core Team, различаются между проектами, но в общем случае члены Core Team определяют общее направление развития системы в большей степени, чем все остальные разработчики.
@@ -127,7 +126,7 @@ __Некоторые из них базируются на коде GNU, а не
=== Версии BSD
-FreeBSD, NetBSD и OpenBSD предоставляет миру три различных варианта системы. Как и в Linux, версиям присваиваются номера, например 1.4.1 или 3.5. В добавок, номер версии имеет суффикс -- обозначение варианта, которое указывает на цели той или иной версии.
+FreeBSD, NetBSD и OpenBSD предоставляет миру три различных варианта системы. Как и в Linux, версиям присваиваются номера, например 1.4.1 или 3.5. В добавок, номер версии имеет суффикс -- обозначение варианта, которое указывает на цели той или иной версии:
. Версия для разработчиков носит название _CURRENT_. FreeBSD присваивает ей и номер, например FreeBSD 5.0-CURRENT. NetBSD использует чуть-чуть другую схему наименований и добавляет к номеру однобуквенный суффикс, обозначающий изменения во внутренних интерфейсах. Пример: NetBSD 1.4.3G. OpenBSD не нумерует разрабатываемую версию ("OpenBSD-current"). Все новые разработки производятся именно на этой "ветке" (branch) системы.
. Через определённые интервалы от 3 до 6 месяцев проект выпускает версию _RELEASE_, которая распространяется на CD-ROM и доступна для скачивания с серверов FTP. Примерами таких версий могут служить OpenBSD 2.6-RELEASE и NetBSD 1.4-RELEASE. Этот вариант предназначен для конечных пользователей. NetBSD также предоставляет так называемые __исправленные релизы (patch releases)__, обозначаемые третьей цифрой в номере, например NetBSD 1.4.2.
@@ -146,14 +145,14 @@ _Linux, напротив, поддерживает два различных д
* проект OpenBSD нацелен на безопасность и "чистоту" кода. С помощью комбинирования концепций открытых исходников и скрупулёзного анализа кода проект демонстрирует чудеса корректности работы системы. В силу названных причин совершенно естественно, что OpenBSD выбирают организации, для которых очень важна защита информации, например банки, фондовые биржи и различные департаменты правительства США. Также как и NetBSD, проект поддерживает целый ряд аппаратных платформ.
* Целью DragonFlyBSD является достижение высокой производительности и масштабируемости в любой ситуации-как для одиночных однопроцессорных, так и крупных кластерных систем. DragonFlyBSD ставит перед собой несколько долгосрочных технических задач, но основной упор делается на создание инфраструктуры для работы с SMP, которая была бы проста для понимания, поддержки и ведения в ней разработок.
-Следует упомянуть ещё две операционных системы BSD UNIX(R), которые не предоставляют публичного доступа к своим исходным кодам. Это BSD/OS компании BSDI и Mac OS(R) X компании Apple.
+Следует упомянуть ещё две операционных системы BSD UNIX(R), которые не предоставляют публичного доступа к своим исходным кодам. Это BSD/OS и Mac OS(R) X компании Apple:
* BSD/OS являлась самым старым из потомков 4.4BSD. Исходный код был недоступен широкой публике, хотя лицензия на него стоила относительно немного. BSD/OS во многом похожа на FreeBSD. Через два года после поглощения BSDi компанией Wind River Systems, BSD/OS перестала существовать как отдельный продукт. Поддержку и исходный код ещё можно получить у Wind River, но все новые разработки сосредоточены на встраиваемой операционной системой VxWorks.
* http://www.apple.com/macosx/server/[Mac OS(R) X] - это самая последняя версия операционной системы для линейки компьютеров Apple(R) Mac(R). Ядро этой операционной системы, http://developer.apple.com/darwin/[Darwin], построенное на коде BSD, доступно в виде полностью функциональной операционной системы с открытым кодом для компьютеров архитектур x86 и PPC. Однако код графической системы Aqua/Quartz и многих других проприетарных компонентов Mac OS(R) X остаётся закрытым. Несколько разработчиков Darwin являются также коммиттерами FreeBSD и наоборот.
=== В чём отличие между лицензией BSD и Общественной Лицензией GNU (GPL)?
-Linux распространяется на условиях лицензии http://www.fsf.org/copyleft/gpl.html[GNU General Public License] (GPL), русский перевод которой тоже http://www.gnu.org/copyleft/copyleft.ru.html[существует]. Эта лицензия имеет целью уничтожить программное обеспечение с закрытым исходным кодом. В частности, любое ПО, базирующееся на продукте, выпущенном на условиях лицензии GPL, тоже должно поставляться с исходными кодами по первому требованию. http://www.opensource.org/licenses/bsd-license.html[Лицензия BSD] не накладывает таких жёстких ограничений: разрешается распространение программного обеспечения в двоичном виде (binary-only). Этот факт привлекает разработчиков встроенных (embedded) приложений.
+Linux распространяется на условиях лицензии http://www.fsf.org/copyleft/gpl.html[GNU General Public License] (GPL). Эта лицензия имеет целью уничтожить программное обеспечение с закрытым исходным кодом. В частности, любое ПО, базирующееся на продукте, выпущенном на условиях лицензии GPL, тоже должно поставляться с исходными кодами по первому требованию. http://www.opensource.org/licenses/bsd-license.html[Лицензия BSD] не накладывает таких жёстких ограничений: разрешается распространение программного обеспечения в двоичном виде (binary-only). Этот факт привлекает разработчиков встроенных (embedded) приложений.
=== Что ещё следует знать?
diff --git a/documentation/content/ru/articles/explaining-bsd/_index.po b/documentation/content/ru/articles/explaining-bsd/_index.po
new file mode 100644
index 0000000000..c5938f02f5
--- /dev/null
+++ b/documentation/content/ru/articles/explaining-bsd/_index.po
@@ -0,0 +1,970 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-01 00:44+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesexplaining-bsd_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:1
+#, no-wrap
+msgid "Brief explanation about BSD"
+msgstr "Короткое объяснение, что такое BSD"
+
+#. 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 "Что такое BSD"
+
+#. 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 ""
+"В мире программ с открытыми исходниками, слово \"Linux\" практически стало "
+"синонимом слова \"Операционная Система\", хотя это далеко не единственная "
+"операционная система UNIX(R), исходные коды которой доступны широкой публике."
+
+#. 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 ""
+"Так в чём же секрет? Почему известность BSD оставляет желать лучшего? Эта "
+"публикация ставить целью ответить на эти и другие вопросы."
+
+#. 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 ""
+"На протяжении всего текста обращайте внимание на _выделенные_ отличия BSD от "
+"Linux."
+
+#. 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 "Что такое BSD?"
+
+#. 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 ""
+"BSD означает \"Berkeley Software Distribution\". Так называлось программное "
+"обеспечение, распространявшееся в исходных кодах Калифорнийским "
+"Университетом в Беркли, которое сначала представляло из себя дополнения к "
+"операционной системе UNIX(R) компании AT&T. На основе версии 4.4BSD-Lite "
+"были созданы несколько операционных систем с открытыми исходными кодами. В "
+"их состав включены разработки других проектов, среди которых особо следует "
+"выделить Проект GNU. Вот что такое собственно операционная система BSD:"
+
+#. 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 ""
+"Ядро BSD, отвечающее за планировку процессов, управление памятью, поддержку "
+"многопроцессорных систем (SMP), работу с устройствами и так далее."
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:66
+msgid "The C library, the base API for the system."
+msgstr "Библиотека C, основной системный интерфейс программирования."
+
+#. 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 ""
+"__Библиотека C в BSD основывается на коде из Беркли, а не из Проекта GNU.__"
+
+#. 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 "__Некоторые из них базируются на коде GNU, а некоторые -- нет.__"
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:72
+msgid "The X Window system, which handles graphical display."
+msgstr "Система X Window, отвечающая за графический интерфейс."
+
+#. 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 ""
+"Система X Window, которая используется в большинстве версий BSD, "
+"поддерживается http://www.X.org/[проектом X.Org]. FreeBSD дает пользователю "
+"возможность выбирать из множества графических оболочек, таких как GNOME, KDE "
+"или Xfce; а также из множества легких оконных менеджеров наподобие Openbox, "
+"Fluxbox или Awesome."
+
+#. 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 "Что, настоящий UNIX(R)?"
+
+#. 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 ""
+"Операционные системы BSD не являются клонами друг друга. Они лишь потомки "
+"общего предка, ОС UNIX(R) от AT&T Research, которая также дала начало "
+"современной ОС UNIX(R) System V. Это факт может удивить, если вспомнить, что "
+"AT&T никогда не открывала исходные коды своих разработок."
+
+#. 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 ""
+"Действительно, UNIX(R) никогда не был программным обеспечением с открытым "
+"исходным кодом, и в законном смысле BSD определённо _НЕ_ UNIX(R). Но с "
+"другой стороны, в AT&T активно использовали чужие разработки, например "
+"программное обеспечение, разрабатываемое Группой по Исследованиям в области "
+"Информатики (CSRG) Калифорнийского Университета в Беркли. С 1976 CSRG "
+"выпускала свой код на магнитных лентах под названием __Berkely Software "
+"Distribution__, сокращённо __BSD__."
+
+#. 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 ""
+"Изначально дистрибутивы BSD представляли собой наборы пользовательских "
+"программ, и так было до тех пор, пока CSRG не заключила контракт с "
+"Агентством по Перспективным Проектам при Министерстве Обороны США (DARPA). "
+"Целью контракта было обновление коммуникационных протоколов, на которых "
+"держалась компьютерная сеть агентства -- ARPANET. Новое семейство протоколов "
+"получило имя _Internet Protocols_ или __TCP/IP__, по названиям двух основных "
+"протоколов. Их первая широко известная реализация была выпущена в составе "
+"4.2BSD в 1982 году."
+
+#. 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 ""
+"В течение восьмидесятых годов образовалось несколько компаний по "
+"производству рабочих станций. Многие из них предпочли купить лицензию на "
+"UNIX(R), нежели разрабатывать своё ПО с нуля. Следует отметить компанию Sun, "
+"которая поступила именно таким образом и на основе 4.2BSD выпустила свою "
+"операционную систему SunOS(TM). Когда AT&T тоже решила заняться коммерческой "
+"продажей своей ОС UNIX(R), появилась на свет несколько аскетичная реализация "
+"под названием System III, за которой в скором времени последовала System V. "
+"Интересно, что эти версии не содержали в себе собственной поддержки работы в "
+"сети и использовали код BSD, в том числе реализацию TCP/IP и набор утилит, "
+"среди которых следует выделить оболочку _csh_ и текстовый редактор __vi__. "
+"Все эти \"добавки\" совместно получили название __Berkely Extensions__."
+
+#. 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 ""
+"Дистрибутив BSD содержал код, принадлежавший AT&T, и, следовательно, "
+"требовал лицензии. К 1990 году финансирование CSRG прекратилось, и группа "
+"была распущена. Кое-кто из бывших членов группы решил опубликовать код BSD "
+"отдельно от закрытого кода AT&T. В концe концов это удалось, и так появилась "
+"на свет версия _Networking Tape 2_ или __Net/2__. Net/2 не была законченной, "
+"цельной операционной системой: около 20% кода ядра отсутствовало. Один из "
+"членов CSRG, William F. Jolitz, дописал недостающий код и опубликовал "
+"результат в начале 1992 года под именем __386BSD__. В то же самое время "
+"другая группа бывших членов CSRG организовала коммерческую компанию http://"
+"www.bsdi.com/[Berkeley Software Design Inc.] и выпустила бета-версию "
+"операционной системы http://www.bsdi.com/[BSD/386], которая базировалась на "
+"том же самом коде. Позже это название было изменено на BSD/OS."
+
+#. 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 ""
+"386BSD так никогда и не стала полноценной операционной системой. Зато в 1993 "
+"году из неё выделились два проекта: http://www.NetBSD.org/[NetBSD] и "
+"link:https://www.FreeBSD.org/[FreeBSD]. Изначально разработчики разделились "
+"на два лагеря из-за расхождений во мнениях относительно того, сколько же ещё "
+"можно ждать улучшений в 386BSD. В начале года образовалась NetBSD, а первая "
+"версия FreeBSD была готова только к его концу. Время шло, и технические "
+"различия возрастали. Вдобавок проекты поставили перед собой разные цели, как "
+"будет показано ниже. В 1996 году от NetBSD отделился ещё один проект - "
+"http://www.OpenBSD.org/[OpenBSD], а в 2003 году от FreeBSD отделилась http://"
+"www.dragonflybsd.org/[DragonFlyBSD]."
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:113
+#, no-wrap
+msgid "Why is BSD not better known?"
+msgstr "Почему BSD недостаточно известна?"
+
+#. 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 ""
+"Разработчики BSD часто больше заинтересованы в качестве своего кода и заняты "
+"его \"шлифовкой\", а не рекламой."
+
+#. 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 ""
+"По большому счёту Linux своей популярностью обязан прежде всего внешним по "
+"отношению к проекту факторам, например средствам массовой информации и "
+"компаниям, которые решили сделать бизнес на предоставлении услуг "
+"пользователям Linux."
+
+#. 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 ""
+"В 1992 году AT&T подала в суд на http://www.bsdi.com/[BSDI], поставщика BSD/"
+"386, утверждая, что их продукт содержит код, защищённый авторскими правами "
+"AT&T. Дело было урегулировано во внесудебном порядке в 1994 году, но призрак "
+"этого судебного разбирательства продолжает преследовать людей. В марте 2000 "
+"года в интернете была опубликована статья, в которой утверждалось, что "
+"судебное дело было «недавно урегулировано»."
+
+#. 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 ""
+"Один момент, который прояснился в ходе судебного разбирательства, касается "
+"названия: в 1980-х годах BSD была известна как «BSD UNIX(R)». Однако после "
+"удаления последних следов кода AT&T из BSD система потеряла право на "
+"использование названия UNIX(R). Поэтому в названиях книг можно встретить, "
+"например, «ОС 4.3BSD UNIX®», но уже «ОС 4.4BSD»."
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
+#, no-wrap
+msgid "Comparing BSD and Linux"
+msgstr "Сравнение BSD и Linux"
+
+#. 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 ""
+"В чём заключается главная разница, к примеру, между Debian Linux и FreeBSD? "
+"Для среднего пользователя она на удивление мала: оба продукта представляют "
+"собой UNIX(R)-подобные операционные системы. Оба продукта разрабатываются на "
+"некоммерческой основе (это не относится к некоторым другим дистрибутивам "
+"Linux). В этом разделе мы рассмотрим BSD в сравнении с Linux. Всё сказанное "
+"в основном будет касаться FreeBSD, которой принадлежит около 80% всех "
+"инсталляций BSD в мире, хотя отличия от NetBSD, OpenBSD и DragonFlyBSD в "
+"рамках предмета данной статьи незначительны."
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:133
+#, no-wrap
+msgid "Who owns BSD?"
+msgstr "Кому принадлежит BSD?"
+
+#. 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 ""
+"Нельзя сказать, что какой-то конкретный человек или корпорация владеет BSD. "
+"Разработка и распространение ведутся группой высококвалифицированных и "
+"преданных проекту специалистов со всего мира. Некоторые компоненты BSD "
+"представляют собой отдельные проекты с открытым кодом со своими законами и "
+"коллективами разработчиков."
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
+#, no-wrap
+msgid "How is BSD developed and updated?"
+msgstr "Как выглядит процесс разработки и обновления BSD?"
+
+#. 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 ""
+"Ядра BSD используют Open Source модель разработки. Каждый проект "
+"поддерживает публично доступное _дерево исходников_ с помощью http://"
+"www.cvshome.org/[Concurrent Versions System] (CVS). Это дерево содержит "
+"абсолютно весь исходный код проекта, а также документацию и вспомогательные "
+"файлы. CVS позволяет пользователям получить копию дерева любой версии "
+"системы."
+
+#. 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 ""
+"Огромное число людей со всего мира участвуют в совершенствовании BSD. Все "
+"они разделены на три группы:"
+
+#. 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 ""
+"_Контрибуторы_ пишут код или документацию. Они не могут добавлять или "
+"изменять код непосредственно в дереве исходников проекта. Это привилегия "
+"особым образом зарегистрированных разработчиков, или __коммиттеров "
+"(committers)__, которые просматривают и тестируют присылаемый им код и "
+"включают его в дерево."
+
+#. 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 ""
+"Каждый коммиттер по своему собственному усмотрению решает, нужно ли ему "
+"подтверждение правильности планируемых изменений от других разработчиков или "
+"нет. В общем случае опытный коммиттер может вносить очевидно выгодные "
+"изменения ни с кем не советуясь. К примеру, коммиттер проекта документации "
+"может исправлять опечатки или грамматические ошибки в документах без "
+"предварительного согласования. Напротив, далеко идущие или просто сложные "
+"изменения настоятельно рекомендуется представлять к обсуждению перед "
+"окончательным внесением в дерево. Бывают крайние случаи, когда член Core "
+"Team, выполняющий функцию архитектора проекта, может санкционировать "
+"немедленную отмену или _откат_ каких-то изменений в дереве. Все коммиттеры "
+"обязательно получают уведомление о каждом изменении в дереве по электронной "
+"почте, так что их невозможно сохранить в тайне."
+
+#. 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 ""
+"_Правление_ (Core Team). В проектах FreeBSD и NetBSD имеются управляющие "
+"советы, которые занимаются координационной деятельностью. Их роль, права и "
+"обязанности не всегда чётко определены. Необязательно (хотя в порядке вещей) "
+"быть коммиттером для того, чтобы входить в состав Core Team. Правила, "
+"которым следует Core Team, различаются между проектами, но в общем случае "
+"члены Core Team определяют общее направление развития системы в большей "
+"степени, чем все остальные разработчики."
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:160
+msgid "This arrangement differs from Linux in a number of ways:"
+msgstr "Такое положение вещей отличается от принятого в Linux:"
+
+#. 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 ""
+"Не существует человека, который бы контролировал содержимое системы. На "
+"практике значение этого отличия оказывается переоценённым, так как Ведущий "
+"Архитектор может всегда потребовать откат изменений. Ко всему прочему, в "
+"проекте Linux на современном этапе изменения в код вносятся тоже не одним, а "
+"несколькими людьми."
+
+#. 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 ""
+"С другой стороны, _существует_ центральное хранилище (repository), откуда "
+"можно получить полный код всей системы, причём как современных, так и "
+"предыдущих версий."
+
+#. 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 ""
+"Проекты BSD являются цельными \"Операционными Системами\", а не просто "
+"ядрами. Это различие тоже иногда переоценивают: ни BSD, ни Linux не "
+"представляют ценности без приложений, а они порой одни и те же в обеих "
+"средах."
+
+#. 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 ""
+"В результате формализованной процедуры поддержки единого дерева исходников в "
+"CVS процесс разработки BSD является полностью открытым, и мы получаем "
+"возможность доступа к любой версии системы по номеру или по дате. CVS также "
+"очень хорошо подходит для последовательных изменений в коде: к примеру, "
+"хранилище кода FreeBSD обновляется около ста раз за день, и большинство этих "
+"изменений весьма малы и незначительны в отдельности друг от друга."
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:166
+#, no-wrap
+msgid "BSD releases"
+msgstr "Версии BSD"
+
+#. 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 ""
+"FreeBSD, NetBSD и OpenBSD предоставляет миру три различных варианта системы. "
+"Как и в Linux, версиям присваиваются номера, например 1.4.1 или 3.5. В "
+"добавок, номер версии имеет суффикс -- обозначение варианта, которое "
+"указывает на цели той или иной версии:"
+
+#. 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 ""
+"Версия для разработчиков носит название _CURRENT_. FreeBSD присваивает ей и "
+"номер, например FreeBSD 5.0-CURRENT. NetBSD использует чуть-чуть другую "
+"схему наименований и добавляет к номеру однобуквенный суффикс, обозначающий "
+"изменения во внутренних интерфейсах. Пример: NetBSD 1.4.3G. OpenBSD не "
+"нумерует разрабатываемую версию (\"OpenBSD-current\"). Все новые разработки "
+"производятся именно на этой \"ветке\" (branch) системы."
+
+#. 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 ""
+"Через определённые интервалы от 3 до 6 месяцев проект выпускает версию "
+"_RELEASE_, которая распространяется на CD-ROM и доступна для скачивания с "
+"серверов FTP. Примерами таких версий могут служить OpenBSD 2.6-RELEASE и "
+"NetBSD 1.4-RELEASE. Этот вариант предназначен для конечных пользователей. "
+"NetBSD также предоставляет так называемые __исправленные релизы (patch "
+"releases)__, обозначаемые третьей цифрой в номере, например NetBSD 1.4.2."
+
+#. 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 ""
+"По мере обнаружения ошибок в версии RELEASE необходимые исправления вносятся "
+"в дерево CVS. Получающаяся система в проекте FreeBSD носит название "
+"_STABLE_, а в NetBSD и OpenBSD продолжает называться RELEASE. Некоторые "
+"мелкие улучшения тоже иногда вносятся в эту версию после продолжительного "
+"периода тестирования в CURRENT."
+
+#. 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 ""
+"_Linux, напротив, поддерживает два различных дерева исходников, которые "
+"называются соответственно стабильной версией и версией для разработчиков. "
+"Стабильные версии имеют чётный вторичный номер, например 2.0, 2.2 или 2.4. "
+"Версии для разработчиков используют нечётные номера, такие как 2.1, 2.3 или "
+"2.5. Во обоих случаях, к двойному номеру версии добавляется ещё одно число, "
+"указывающее на конкретный релиз. Стоит также отметить, что каждый поставщик "
+"предоставляет свой собственный вариант пользовательских программ (userland), "
+"так что имя дистрибутива тоже имеет значение. Естественно, что поставщики "
+"нумеруют свои изделия каждый по-своему, и, таким образом, мы получаем что-то "
+"вроде \"TurboLinux 6.0 с ядром 2.2.14\"._"
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:183
+#, no-wrap
+msgid "What versions of BSD are available?"
+msgstr "Какие существуют варианты BSD?"
+
+#. 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 ""
+"В отличие от многочисленных дистрибутивов Linux, в мире существует лишь "
+"четыре крупных BSD проекта с открытыми исходными кодами. Каждый из них "
+"поддерживает своё собственное дерево исходников и своё собственное ядро. На "
+"практике однако оказывается, что пользовательские части (userland) различных "
+"BSD отличаются гораздо меньше, чем у разных дистрибутивов Linux."
+
+#. 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 ""
+"проект FreeBSD нацелен на повышение производительности и простоту в "
+"использовании конечными пользователями. FreeBSD очень ценят в среде web-"
+"хостеров. Эта ОС работает на link:https://www.FreeBSD.org/platforms/"
+"[нескольких аппаратных платформах], число пользователей FreeBSD значительно "
+"превышает число пользователей других проектов."
+
+#. 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 ""
+"проект NetBSD ставит целью максимальную мобильность (или переносимость) "
+"кода: девиз \"конечно NetBSD работает на этом\". NetBSD поддерживает машины "
+"от крошечных палмтопов до огромных серверов и использовалась NASA в "
+"космических миссиях. Это хороший выбор для старой не-Intel(R) аппаратуры."
+
+#. 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 ""
+"проект OpenBSD нацелен на безопасность и \"чистоту\" кода. С помощью "
+"комбинирования концепций открытых исходников и скрупулёзного анализа кода "
+"проект демонстрирует чудеса корректности работы системы. В силу названных "
+"причин совершенно естественно, что OpenBSD выбирают организации, для которых "
+"очень важна защита информации, например банки, фондовые биржи и различные "
+"департаменты правительства США. Также как и NetBSD, проект поддерживает "
+"целый ряд аппаратных платформ."
+
+#. 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 ""
+"Целью DragonFlyBSD является достижение высокой производительности и "
+"масштабируемости в любой ситуации-как для одиночных однопроцессорных, так и "
+"крупных кластерных систем. DragonFlyBSD ставит перед собой несколько "
+"долгосрочных технических задач, но основной упор делается на создание "
+"инфраструктуры для работы с SMP, которая была бы проста для понимания, "
+"поддержки и ведения в ней разработок."
+
+#. 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 ""
+"Следует упомянуть ещё две операционных системы BSD UNIX(R), которые не "
+"предоставляют публичного доступа к своим исходным кодам. Это BSD/OS и Mac "
+"OS(R) X компании Apple:"
+
+#. 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 ""
+"BSD/OS являлась самым старым из потомков 4.4BSD. Исходный код был недоступен "
+"широкой публике, хотя лицензия на него стоила относительно немного. BSD/OS "
+"во многом похожа на FreeBSD. Через два года после поглощения BSDi компанией "
+"Wind River Systems, BSD/OS перестала существовать как отдельный продукт. "
+"Поддержку и исходный код ещё можно получить у Wind River, но все новые "
+"разработки сосредоточены на встраиваемой операционной системой VxWorks."
+
+#. 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 ""
+"http://www.apple.com/macosx/server/[Mac OS(R) X] - это самая последняя "
+"версия операционной системы для линейки компьютеров Apple(R) Mac(R). Ядро "
+"этой операционной системы, http://developer.apple.com/darwin/[Darwin], "
+"построенное на коде BSD, доступно в виде полностью функциональной "
+"операционной системы с открытым кодом для компьютеров архитектур x86 и PPC. "
+"Однако код графической системы Aqua/Quartz и многих других проприетарных "
+"компонентов Mac OS(R) X остаётся закрытым. Несколько разработчиков Darwin "
+"являются также коммиттерами FreeBSD и наоборот."
+
+#. 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 "В чём отличие между лицензией BSD и Общественной Лицензией GNU (GPL)?"
+
+#. 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 ""
+"Linux распространяется на условиях лицензии http://www.fsf.org/copyleft/"
+"gpl.html[GNU General Public License] (GPL). Эта лицензия имеет целью "
+"уничтожить программное обеспечение с закрытым исходным кодом. В частности, "
+"любое ПО, базирующееся на продукте, выпущенном на условиях лицензии GPL, "
+"тоже должно поставляться с исходными кодами по первому требованию. http://"
+"www.opensource.org/licenses/bsd-license.html[Лицензия BSD] не накладывает "
+"таких жёстких ограничений: разрешается распространение программного "
+"обеспечения в двоичном виде (binary-only). Этот факт привлекает "
+"разработчиков встроенных (embedded) приложений."
+
+#. 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 ""
+"То обстоятельство, что приложений для BSD существует меньше, чем для Linux, "
+"вынудило разработчиков BSD позаботиться о создании дополнительной "
+"совместимости с Linux, которая позволяет запускать программы для Linux на "
+"компьютере, работающем под BSD. Программный пакет, обеспечивающий "
+"совместимость, включает в себя как ядерную реализацию системных вызовов "
+"Linux, так и разнообразные файлы, необходимые программам, скомпилированным "
+"для Linux, например библиотеку C. Разница в скорости выполнения Linux-"
+"приложений на машине с Linux и на такой же машине с BSD незаметна."
+
+#. 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 ""
+"Принцип \"вся система от одного поставщика\", используемый в BSD, приводит к "
+"упрощению процедур обновления системы по сравнению с многими дистрибутивами "
+"Linux. BSD предоставляет специальные модули совместимости с устаревшими "
+"версиями системных библиотек, и таким образом делает возможным запуск "
+"откомпилированных несколько лет назад программ на обновлённой системе."
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:215
+#, no-wrap
+msgid "Which should I use, BSD or Linux?"
+msgstr "Что же выбрать, BSD или Linux?"
+
+#. 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 ""
+"Во что выливается всё вышесказанное на практике? Кому предназначена BSD, и "
+"кому -- Linux?"
+
+#. 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 ""
+"\"Не тронь, пока работает\": если Вы уже успешно используете какую-нибудь "
+"Open Source ОС, и она Вас устраивает, то пожалуй не стоит ничего менять."
+
+#. 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 ""
+"Системы BSD, в особенности FreeBSD, могут демонстрировать большую по "
+"сравнению с Linux производительность. Но это вовсе не универсальное правило. "
+"Во многих случаях эта разница не заметна, если вообще есть. Иногда Linux "
+"может работать лучше, чем FreeBSD."
+
+#. 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 ""
+"В общем случае, у систем BSD очень хорошая репутация, когда дело касается "
+"надёжности. Это, в основном, связано с более \"зрелой\" базой исходных кодов."
+
+#. 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 ""
+"BSD проекты имеют более лучшую репутацию за качество и полноту документации. "
+"Различные проекты документирования ставят своей целью предоставлять активно "
+"изменяющуюся документацию, в том числе и на нескольких языках и покрывающую "
+"все аспекты системы."
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:227
+msgid "The BSD license may be more attractive than the GPL."
+msgstr "Лицензия BSD иногда может быть более привлекательной, нежели GPL."
+
+#. 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 ""
+"В BSD может работать большинство исполнимых файлов Linux, однако в Linux "
+"выполнимые файлы BSD запускаться не будут. Во многих реализациях BSD могут "
+"также выполняться двоичные файл и других UNIX(R)-подобных систем. Таким "
+"образом, BSD может предложить более простой способ перехода с других систем, "
+"чем Linux."
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:229
+#, no-wrap
+msgid "Who provides support, service, and training for BSD?"
+msgstr "Кто предоставляет техническую поддержку, обслуживание и обучение для систем BSD?"
+
+#. 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 ""
+"BSDi / http://www.freebsdmall.com[FreeBSD Mall, Inc.] уже около десяти лет "
+"предлагает контракты на поддержку FreeBSD."
+
+#. 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 ""
+"Кроме того, каждый из проектов постоянно обновляет список консультантов, "
+"которые оказывают поддержку за отдельную плату: link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[FreeBSD], http://www.NetBSD.org/gallery/"
+"consultants.html[NetBSD] и http://www.OpenBSD.org/support.html[OpenBSD]."
diff --git a/documentation/content/ru/articles/filtering-bridges/_index.adoc b/documentation/content/ru/articles/filtering-bridges/_index.adoc
new file mode 100644
index 0000000000..eb58330257
--- /dev/null
+++ b/documentation/content/ru/articles/filtering-bridges/_index.adoc
@@ -0,0 +1,235 @@
+---
+authors:
+ -
+ author: 'Alex Dupre'
+ email: ale@FreeBSD.org
+description: 'Настройка межсетевых экранов и фильтрации на хостах FreeBSD, выступающих в роли мостов, а не маршрутизаторов'
+tags: ["network", "filtering", "bridges", "FreeBSD"]
+title: 'Фильтрующие мосты'
+trademarks: ["freebsd", "3com", "intel", "general"]
+---
+
+= Фильтрующие мосты
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/filtering-bridges/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Часто бывает полезно разделить одну физическую сеть (например, Ethernet) на два отдельных сегмента без необходимости создания подсетей и использовать маршрутизатор для их соединения. Устройство, которое соединяет две сети таким образом, называется мостом. Система FreeBSD с двумя сетевыми интерфейсами достаточна для работы в качестве моста.
+
+Мост работает, сканируя адреса на MAC-уровне (Ethernet-адреса) устройств, подключённых к каждому из его сетевых интерфейсов, и затем пересылая трафик между двумя сетями только в том случае, если источник и получатель находятся в разных сегментах. Во многих аспектах мост аналогичен Ethernet-коммутатору с двумя портами.
+
+'''
+
+toc::[]
+
+[[filtering-bridges-why]]
+== Зачем использовать фильтрующий мост?
+
+Всё чаще, благодаря снижению стоимости широкополосных подключений к Интернету (xDSL), а также из-за сокращения доступных IPv4-адресов, многие компании подключены к Интернету 24 часа в сутки и имеют мало (иногда даже не степень двойки) IP-адресов. В таких ситуациях часто возникает желание иметь межсетевой экран, который фильтрует входящий и исходящий трафик из Интернета и в него, но решение для фильтрации пакетов на основе маршрутизатора может быть неприменимо — из-за проблем с подсетями, потому что маршрутизатор принадлежит поставщику услуг (ISP) или потому что он не поддерживает такие функции. В таких сценариях настоятельно рекомендуется использовать фильтрующий мост.
+
+Межсетевой экран на основе моста может быть настроен и установлен между xDSL-маршрутизатором и вашим Ethernet-концентратором/коммутатором без каких-либо проблем с IP-адресацией.
+
+[[filtering-bridges-how]]
+== Как установить
+
+Добавление функциональности моста в систему FreeBSD не является сложной задачей. Начиная с версии 4.5, появилась возможность загружать такие функции как модули, вместо необходимости пересборки ядра, что значительно упрощает процедуру. В следующих подразделах я объясню оба способа установки.
+
+[IMPORTANT]
+====
+_Не_ следуйте обеим инструкциям: одна процедура _исключает_ другую. Выберите наиболее подходящий вариант в соответствии с вашими потребностями и возможностями.
+====
+
+Прежде чем продолжить, убедитесь, что у вас есть как минимум две Ethernet-карты, поддерживающие режим promiscuous как для приёма, так и для передачи, поскольку они должны уметь отправлять Ethernet-пакеты с любым адресом, а не только с собственным. Кроме того, для обеспечения хорошей пропускной способности карты должны поддерживать управление шиной PCI. Наилучшим выбором по-прежнему остаются Intel EtherExpress(TM) Pro, за которыми следуют карты серии 3Com(R) 3c9xx. Для упрощения настройки межсетевого экрана может быть полезно иметь две карты от разных производителей (использующие разные драйверы), чтобы чётко различать, какой интерфейс подключён к маршрутизатору, а какой — к внутренней сети.
+
+[[filtering-bridges-kernel]]
+=== Настройка ядра
+
+Итак, вы решили использовать старый, но хорошо проверенный метод установки. Для начала вам нужно добавить следующие строки в файл конфигурации ядра:
+
+[.programlisting]
+....
+options BRIDGE
+options IPFIREWALL
+options IPFIREWALL_VERBOSE
+....
+
+Первая строка компилирует поддержку моста, вторая — межсетевой экран, а третья — функции логирования межсетевого экрана.
+
+Теперь необходимо собрать и установить новое ядро. Подробные инструкции можно найти в разделе extref:{handbook}[Сборка и установка пользовательского ядра, kernelconfig-building] руководства FreeBSD.
+
+[[filtering-bridges-modules]]
+=== Загрузка модулей
+
+Если вы выбрали использование нового и более простого метода установки, единственное, что нужно сделать сейчас, это добавить следующую строку в [.filename]#/boot/loader.conf#:
+
+[.programlisting]
+....
+bridge_load="YES"
+....
+
+Таким образом, во время загрузки системы модуль [.filename]#bridge.ko# будет загружен вместе с ядром. Не требуется добавлять аналогичную строку для модуля [.filename]#ipfw.ko#, так как он будет загружен автоматически после выполнения шагов из следующего раздела.
+
+[[filtering-bridges-finalprep]]
+== Окончательная подготовка
+
+Прежде чем перезагрузиться для загрузки нового ядра или необходимых модулей (в соответствии с выбранным ранее методом установки), необходимо внести некоторые изменения в конфигурационный файл [.filename]#/etc/rc.conf#. Правило по умолчанию для межсетевого экрана — отклонять все IP-пакеты. Изначально мы настроим `открытый` межсетевой экран, чтобы проверить его работу без каких-либо проблем, связанных с фильтрацией пакетов (если вы выполняете эту процедуру удалённо, такая конфигурация позволит избежать изоляции от сети). Добавьте следующие строки в [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+firewall_enable="YES"
+firewall_type="open"
+firewall_quiet="YES"
+firewall_logging="YES"
+....
+
+Первая строка включит межсетевой экран (и загрузит модуль [.filename]#ipfw.ko#, если он не встроен в ядро), вторая настроит его в режиме `open` (как описано в [.filename]#/etc/rc.firewall#), третья отключит отображение загрузки правил, а четвёртая включит поддержку логирования.
+
+О конфигурации сетевых интерфейсов: наиболее распространённый способ — назначить IP только одной из сетевых карт, но мост будет работать одинаково, даже если оба интерфейса или ни один из них не имеют настроенного IP. В последнем случае (без IP) машина с мостом останется более скрытой, так как будет недоступна из сети: для её настройки потребуется войти с консоли или через третий сетевой интерфейс, отделённый от моста. Иногда во время запуска системы некоторым программам требуется доступ к сети, например, для разрешения доменных имён: в этом случае необходимо назначить IP внешнему интерфейсу (тому, который подключён к интернету, где находится DNS-сервер), так как мост будет активирован в конце процедуры запуска. Это означает, что интерфейс [.filename]#fxp0# (в нашем случае) должен быть указан в разделе ifconfig файла [.filename]#/etc/rc.conf#, тогда как [.filename]#xl0# — нет. Назначение IP обеим сетевым картам не имеет особого смысла, за исключением случаев, когда во время запуска приложения должны получать доступ к сервисам на обоих сегментах Ethernet.
+
+Есть ещё один важный момент. При работе IP поверх Ethernet фактически используются два протокола Ethernet: один — это IP, другой — ARP. ARP выполняет преобразование IP-адреса хоста в его Ethernet-адрес (уровень MAC). Чтобы обеспечить связь между двумя хостами, разделёнными мостом, необходимо, чтобы мост передавал ARP-пакеты. Этот протокол не включён в уровень IP, так как он существует только при работе IP поверх Ethernet. Межсетевой экран FreeBSD фильтрует исключительно на уровне IP, поэтому все не-IP пакеты (включая ARP) будут передаваться без фильтрации, даже если межсетевой экран настроен на запрет всего.
+
+Вот теперь пришло время перезагрузить систему и использовать её как прежде: будут появляться некоторые новые сообщения о мосте и межсетевом экране, но мост не будет активирован, а межсетевой экран, находясь в режиме `open`, не будет препятствовать никаким операциям.
+
+Если возникли какие-либо проблемы, их следует решить сейчас, прежде чем продолжить.
+
+[[filtering-bridges-enabling]]
+== Включение моста
+
+На этом этапе, чтобы включить мост, необходимо выполнить следующие команды (с учётом замены имён двух сетевых интерфейсов [.filename]#fxp0# и [.filename]#xl0# на ваши собственные):
+
+[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
+....
+
+Первая строка указывает, какие интерфейсы должны быть активированы мостом, вторая включает межсетевой экран на мосту, а третья активирует сам мост.
+
+На этом этапе вы должны быть способны разместить машину между двумя группами хостов, не нарушая их способности к взаимодействию. Если это так, следующим шагом будет добавление строк `net.link.ether.bridge._[blah]_=_[blah]_` в файл [.filename]#/etc/sysctl.conf#, чтобы они выполнялись при запуске системы.
+
+[[filtering-bridges-ipfirewall]]
+== Настройка межсетевого экрана
+
+Время создать собственный файл с правилами межсетевого экрана для защиты внутренней сети. Это будет несколько сложно, так как не все функции межсетевого экрана доступны для мостовых пакетов. Кроме того, есть разница между пакетами, которые перенаправляются, и пакетами, которые принимаются локальной машиной. В целом, входящие пакеты проходят через межсетевой экран только один раз, а не два, как обычно; фактически они фильтруются только при получении, поэтому правила с `out` или `xmit` никогда не сработают. Лично я использую `in via` — это более старый синтаксис, но он интуитивно понятен при чтении. Ещё одно ограничение заключается в том, что для пакетов, фильтруемых мостом, можно использовать только команды `pass` или `drop`. Более сложные действия, такие как `divert`, `forward` или `reject`, недоступны. Такие опции всё ещё можно использовать, но только для трафика, направленного на саму машину моста или исходящего от неё (если у неё есть IP-адрес).
+
+В FreeBSD 4.0 появилась концепция фильтрации с сохранением состояния. Это значительное улучшение для UDP-трафика, который обычно представляет собой запрос, отправляемый наружу, за которым вскоре следует ответ с тем же набором IP-адресов и номеров портов (но, конечно, с поменянными местами источником и назначением). Для межсетевых экранов без сохранения состояния практически нет возможности обрабатывать такой трафик как единую сессию. Однако, если межсетевой экран может «запоминать» исходящий UDP-пакет и в течение нескольких минут разрешать ответ, обработка UDP-сервисов становится тривиальной. В следующем примере показано, как это сделать. То же самое можно проделать и с TCP-пакетами. Это позволяет избежать некоторых атак типа «отказ в обслуживании» и других неприятных трюков, но также обычно приводит к быстрому росту таблицы состояний.
+
+Рассмотрим пример настройки. Обратите внимание, что в начале файла [.filename]#/etc/rc.firewall# уже есть стандартные правила для loopback-интерфейса (интерфейса обратной петли) [.filename]#lo0#, поэтому нам не нужно о них заботиться. Пользовательские правила следует поместить в отдельный файл (например, [.filename]#/etc/rc.firewall.local#) и загружать его при старте системы, изменив строку в [.filename]#/etc/rc.conf#, где мы определили `open` для межсетевого экрана:
+
+[.programlisting]
+....
+firewall_type="/etc/rc.firewall.local"
+....
+
+[IMPORTANT]
+====
+Вы должны указать _полный_ путь, иначе он не будет загружен с риском остаться изолированным от сети.
+====
+
+Для нашего примера представим, что интерфейс [.filename]#fxp0# подключён к внешней сети (Интернет), а [.filename]#xl0# — к внутренней (ЛВС). У машины с мостом IP-адрес `1.2.3.4` (ваш провайдер вряд ли выдаст вам такой адрес, но для нашего примера он подходит).
+
+[.programlisting]
+....
+# Things that we have kept state on before get to go through in a hurry
+add check-state
+
+# 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
+
+# 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
+
+# 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
+
+# TCP section
+# Allow SSH
+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 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
+# Pass the "quarantine" range
+add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state
+
+# UDP section
+# Allow DNS only towards the name server
+add pass udp from any to ns 53 in via fxp0 keep-state
+# Pass the "quarantine" range
+add pass udp from any to any 49152-65535 in via fxp0 keep-state
+
+# ICMP section
+# Pass 'ping'
+add pass icmp from any to any icmptypes 8 keep-state
+# Pass error messages generated by 'traceroute'
+add pass icmp from any to any icmptypes 3
+add pass icmp from any to any icmptypes 11
+
+# Everything else is suspect
+add drop log all from any to any
+....
+
+Те из вас, кто ранее настраивал межсетевые экраны, могут заметить некоторые отсутствующие элементы. В частности, здесь нет правил защиты от спуфинга, и фактически мы _не_ добавили:
+
+[.programlisting]
+....
+add deny all from 1.2.3.4/8 to any in via fxp0
+....
+
+То есть, отбрасывать пакеты, которые поступают извне, утверждая, что они из нашей сети. Это стандартная мера для предотвращения попыток обхода межсетевого экрана путем генерации вредоносных пакетов, которые выглядят так, будто они из внутренней сети. Проблема в том, что есть _как минимум_ один хост на внешнем интерфейсе, который нельзя игнорировать: маршрутизатор. Однако обычно интернет-провайдер применяет антиспуфинг на своем маршрутизаторе, так что нам не нужно слишком беспокоиться об этом.
+
+Последнее правило кажется точной копией правила по умолчанию, то есть не пропускать ничего, что явно не разрешено. Однако есть разница: весь подозрительный трафик будет записываться в журнал.
+
+Существует два правила для пропуска SMTP и DNS-трафика к почтовому серверу и серверу имен, если они у вас есть. Очевидно, весь набор правил должен быть адаптирован под личные предпочтения — это лишь конкретный пример (формат правил подробно описан на man:ipfw[8]). Обратите внимание, что для работы "relay" и "ns" разрешение имен должно работать _до_ включения моста. Это пример того, как убедиться, что IP-адрес установлен на правильной сетевой карте. Альтернативно можно указать IP-адрес вместо имени хоста (это требуется, если у машины нет IP-адреса).
+
+Люди, привыкшие настраивать межсетевые экраны, вероятно, также привыкли использовать правило `reset` или `forward` для идентификационных пакетов (TCP-порт 113). К сожалению, это не применимо при использовании моста, поэтому лучше всего просто передавать их целевому устройству. Пока на этом устройстве не запущен идентификационный демон, это относительно безопасно. Альтернативой является сброс соединений на порту 113, что создает проблемы с такими сервисами, как IRC (запрос идентификации будет ожидать таймаута).
+
+Единственное, что может показаться немного странным — это наличие правила, разрешающего общение для мостовой машины, и другого правила для внутренних хостов. Помните, что это связано с тем, что два типа трафика проходят разные пути через ядро и попадают в пакетный фильтр. Трафик внутренней сети проходит через мост, в то время как локальная машина использует обычный IP-стек для общения. Поэтому и нужны два правила для обработки разных случаев. Правила `in via fxp0` работают для обоих путей. В общем случае, если вы используете правила `in via` во всём фильтре, вам потребуется сделать исключение для локально сгенерированных пакетов, так как они не поступают через какие-либо из наших интерфейсов.
+
+[[filtering-bridges-contributors]]
+== Участники
+
+Многие части этой статьи были взяты, обновлены и адаптированы из старого текста о мостах, отредактированного Ником Сайером. Пара вдохновений обязана введению в мосты от Стива Петерсона.
+
+Огромная благодарность Луиджи Риццо за реализацию кода моста в FreeBSD и за время, которое он уделил мне, отвечая на все мои вопросы по этой теме.
+
+Благодарность также выражается Тому Родсу, который проверил мою работу по переводу с итальянского (оригинального языка этой статьи) на английский.
diff --git a/documentation/content/ru/articles/filtering-bridges/_index.po b/documentation/content/ru/articles/filtering-bridges/_index.po
new file mode 100644
index 0000000000..5ba8d2a7b8
--- /dev/null
+++ b/documentation/content/ru/articles/filtering-bridges/_index.po
@@ -0,0 +1,824 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-23 18:56+0300\n"
+"PO-Revision-Date: 2025-09-23 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfiltering-bridges_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Настройка межсетевых экранов и фильтрации на хостах FreeBSD, выступающих в роли мостов, а не маршрутизаторов"
+
+#. 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 ""
+"Часто бывает полезно разделить одну физическую сеть (например, Ethernet) на "
+"два отдельных сегмента без необходимости создания подсетей и использовать "
+"маршрутизатор для их соединения. Устройство, которое соединяет две сети "
+"таким образом, называется мостом. Система FreeBSD с двумя сетевыми "
+"интерфейсами достаточна для работы в качестве моста."
+
+#. 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 ""
+"Мост работает, сканируя адреса на MAC-уровне (Ethernet-адреса) устройств, "
+"подключённых к каждому из его сетевых интерфейсов, и затем пересылая трафик "
+"между двумя сетями только в том случае, если источник и получатель находятся "
+"в разных сегментах. Во многих аспектах мост аналогичен Ethernet-коммутатору "
+"с двумя портами."
+
+#. 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 ""
+"Всё чаще, благодаря снижению стоимости широкополосных подключений к "
+"Интернету (xDSL), а также из-за сокращения доступных IPv4-адресов, многие "
+"компании подключены к Интернету 24 часа в сутки и имеют мало (иногда даже не "
+"степень двойки) IP-адресов. В таких ситуациях часто возникает желание иметь "
+"межсетевой экран, который фильтрует входящий и исходящий трафик из Интернета "
+"и в него, но решение для фильтрации пакетов на основе маршрутизатора может "
+"быть неприменимо — из-за проблем с подсетями, потому что маршрутизатор "
+"принадлежит поставщику услуг (ISP) или потому что он не поддерживает такие "
+"функции. В таких сценариях настоятельно рекомендуется использовать "
+"фильтрующий мост."
+
+#. 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 ""
+"Межсетевой экран на основе моста может быть настроен и установлен между xDSL-"
+"маршрутизатором и вашим Ethernet-концентратором/коммутатором без каких-либо "
+"проблем с IP-адресацией."
+
+#. 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 ""
+"Добавление функциональности моста в систему FreeBSD не является сложной "
+"задачей. Начиная с версии 4.5, появилась возможность загружать такие функции "
+"как модули, вместо необходимости пересборки ядра, что значительно упрощает "
+"процедуру. В следующих подразделах я объясню оба способа установки."
+
+#. 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 ""
+"Прежде чем продолжить, убедитесь, что у вас есть как минимум две Ethernet-"
+"карты, поддерживающие режим promiscuous как для приёма, так и для передачи, "
+"поскольку они должны уметь отправлять Ethernet-пакеты с любым адресом, а не "
+"только с собственным. Кроме того, для обеспечения хорошей пропускной "
+"способности карты должны поддерживать управление шиной PCI. Наилучшим "
+"выбором по-прежнему остаются Intel EtherExpress(TM) Pro, за которыми следуют "
+"карты серии 3Com(R) 3c9xx. Для упрощения настройки межсетевого экрана может "
+"быть полезно иметь две карты от разных производителей (использующие разные "
+"драйверы), чтобы чётко различать, какой интерфейс подключён к "
+"маршрутизатору, а какой — к внутренней сети."
+
+#. 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 ""
+"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 ""
+"Первая строка компилирует поддержку моста, вторая — межсетевой экран, а "
+"третья — функции логирования межсетевого экрана."
+
+#. 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 ""
+"Теперь необходимо собрать и установить новое ядро. Подробные инструкции "
+"можно найти в разделе extref:{handbook}[Сборка и установка пользовательского "
+"ядра, kernelconfig-building] руководства FreeBSD."
+
+#. 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 ""
+"Если вы выбрали использование нового и более простого метода установки, "
+"единственное, что нужно сделать сейчас, это добавить следующую строку в "
+"[.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 ""
+"Таким образом, во время загрузки системы модуль [.filename]#bridge.ko# будет "
+"загружен вместе с ядром. Не требуется добавлять аналогичную строку для "
+"модуля [.filename]#ipfw.ko#, так как он будет загружен автоматически после "
+"выполнения шагов из следующего раздела."
+
+#. 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 ""
+"Прежде чем перезагрузиться для загрузки нового ядра или необходимых модулей "
+"(в соответствии с выбранным ранее методом установки), необходимо внести "
+"некоторые изменения в конфигурационный файл [.filename]#/etc/rc.conf#. "
+"Правило по умолчанию для межсетевого экрана — отклонять все IP-пакеты. "
+"Изначально мы настроим `открытый` межсетевой экран, чтобы проверить его "
+"работу без каких-либо проблем, связанных с фильтрацией пакетов (если вы "
+"выполняете эту процедуру удалённо, такая конфигурация позволит избежать "
+"изоляции от сети). Добавьте следующие строки в [.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 ""
+"Первая строка включит межсетевой экран (и загрузит модуль "
+"[.filename]#ipfw.ko#, если он не встроен в ядро), вторая настроит его в "
+"режиме `open` (как описано в [.filename]#/etc/rc.firewall#), третья отключит "
+"отображение загрузки правил, а четвёртая включит поддержку логирования."
+
+#. 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 ""
+"О конфигурации сетевых интерфейсов: наиболее распространённый способ — "
+"назначить IP только одной из сетевых карт, но мост будет работать одинаково, "
+"даже если оба интерфейса или ни один из них не имеют настроенного IP. В "
+"последнем случае (без IP) машина с мостом останется более скрытой, так как "
+"будет недоступна из сети: для её настройки потребуется войти с консоли или "
+"через третий сетевой интерфейс, отделённый от моста. Иногда во время запуска "
+"системы некоторым программам требуется доступ к сети, например, для "
+"разрешения доменных имён: в этом случае необходимо назначить IP внешнему "
+"интерфейсу (тому, который подключён к интернету, где находится DNS-сервер), "
+"так как мост будет активирован в конце процедуры запуска. Это означает, что "
+"интерфейс [.filename]#fxp0# (в нашем случае) должен быть указан в разделе "
+"ifconfig файла [.filename]#/etc/rc.conf#, тогда как [.filename]#xl0# — нет. "
+"Назначение IP обеим сетевым картам не имеет особого смысла, за исключением "
+"случаев, когда во время запуска приложения должны получать доступ к сервисам "
+"на обоих сегментах 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 ""
+"Есть ещё один важный момент. При работе IP поверх Ethernet фактически "
+"используются два протокола Ethernet: один — это IP, другой — ARP. ARP "
+"выполняет преобразование IP-адреса хоста в его Ethernet-адрес (уровень MAC). "
+"Чтобы обеспечить связь между двумя хостами, разделёнными мостом, необходимо, "
+"чтобы мост передавал ARP-пакеты. Этот протокол не включён в уровень IP, так "
+"как он существует только при работе IP поверх Ethernet. Межсетевой экран "
+"FreeBSD фильтрует исключительно на уровне IP, поэтому все не-IP пакеты "
+"(включая ARP) будут передаваться без фильтрации, даже если межсетевой экран "
+"настроен на запрет всего."
+
+#. 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 ""
+"Вот теперь пришло время перезагрузить систему и использовать её как прежде: "
+"будут появляться некоторые новые сообщения о мосте и межсетевом экране, но "
+"мост не будет активирован, а межсетевой экран, находясь в режиме `open`, не "
+"будет препятствовать никаким операциям."
+
+#. 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 ""
+"На этом этапе, чтобы включить мост, необходимо выполнить следующие команды "
+"(с учётом замены имён двух сетевых интерфейсов [.filename]#fxp0# и "
+"[.filename]#xl0# на ваши собственные):"
+
+#. 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 ""
+"Первая строка указывает, какие интерфейсы должны быть активированы мостом, "
+"вторая включает межсетевой экран на мосту, а третья активирует сам мост."
+
+#. 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 ""
+"На этом этапе вы должны быть способны разместить машину между двумя группами "
+"хостов, не нарушая их способности к взаимодействию. Если это так, следующим "
+"шагом будет добавление строк `net.link.ether.bridge._[blah]_=_[blah]_` в "
+"файл [.filename]#/etc/sysctl.conf#, чтобы они выполнялись при запуске "
+"системы."
+
+#. 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 ""
+"Время создать собственный файл с правилами межсетевого экрана для защиты "
+"внутренней сети. Это будет несколько сложно, так как не все функции "
+"межсетевого экрана доступны для мостовых пакетов. Кроме того, есть разница "
+"между пакетами, которые перенаправляются, и пакетами, которые принимаются "
+"локальной машиной. В целом, входящие пакеты проходят через межсетевой экран "
+"только один раз, а не два, как обычно; фактически они фильтруются только при "
+"получении, поэтому правила с `out` или `xmit` никогда не сработают. Лично я "
+"использую `in via` — это более старый синтаксис, но он интуитивно понятен "
+"при чтении. Ещё одно ограничение заключается в том, что для пакетов, "
+"фильтруемых мостом, можно использовать только команды `pass` или `drop`. "
+"Более сложные действия, такие как `divert`, `forward` или `reject`, "
+"недоступны. Такие опции всё ещё можно использовать, но только для трафика, "
+"направленного на саму машину моста или исходящего от неё (если у неё есть 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 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 ""
+"В FreeBSD 4.0 появилась концепция фильтрации с сохранением состояния. Это "
+"значительное улучшение для UDP-трафика, который обычно представляет собой "
+"запрос, отправляемый наружу, за которым вскоре следует ответ с тем же "
+"набором IP-адресов и номеров портов (но, конечно, с поменянными местами "
+"источником и назначением). Для межсетевых экранов без сохранения состояния "
+"практически нет возможности обрабатывать такой трафик как единую сессию. "
+"Однако, если межсетевой экран может «запоминать» исходящий UDP-пакет и в "
+"течение нескольких минут разрешать ответ, обработка UDP-сервисов становится "
+"тривиальной. В следующем примере показано, как это сделать. То же самое "
+"можно проделать и с TCP-пакетами. Это позволяет избежать некоторых атак типа "
+"«отказ в обслуживании» и других неприятных трюков, но также обычно приводит "
+"к быстрому росту таблицы состояний."
+
+#. 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 ""
+"Рассмотрим пример настройки. Обратите внимание, что в начале файла "
+"[.filename]#/etc/rc.firewall# уже есть стандартные правила для loopback-"
+"интерфейса (интерфейса обратной петли) [.filename]#lo0#, поэтому нам не "
+"нужно о них заботиться. Пользовательские правила следует поместить в "
+"отдельный файл (например, [.filename]#/etc/rc.firewall.local#) и загружать "
+"его при старте системы, изменив строку в [.filename]#/etc/rc.conf#, где мы "
+"определили `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 ""
+"Вы должны указать _полный_ путь, иначе он не будет загружен с риском "
+"остаться изолированным от сети."
+
+#. 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 ""
+"Для нашего примера представим, что интерфейс [.filename]#fxp0# подключён к "
+"внешней сети (Интернет), а [.filename]#xl0# — к внутренней (ЛВС). У машины с "
+"мостом IP-адрес `1.2.3.4` (ваш провайдер вряд ли выдаст вам такой адрес, но "
+"для нашего примера он подходит)."
+
+#. 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 ""
+"Те из вас, кто ранее настраивал межсетевые экраны, могут заметить некоторые "
+"отсутствующие элементы. В частности, здесь нет правил защиты от спуфинга, и "
+"фактически мы _не_ добавили:"
+
+#. 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 ""
+"То есть, отбрасывать пакеты, которые поступают извне, утверждая, что они из "
+"нашей сети. Это стандартная мера для предотвращения попыток обхода "
+"межсетевого экрана путем генерации вредоносных пакетов, которые выглядят "
+"так, будто они из внутренней сети. Проблема в том, что есть _как минимум_ "
+"один хост на внешнем интерфейсе, который нельзя игнорировать: маршрутизатор. "
+"Однако обычно интернет-провайдер применяет антиспуфинг на своем "
+"маршрутизаторе, так что нам не нужно слишком беспокоиться об этом."
+
+#. 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 ""
+"Существует два правила для пропуска SMTP и DNS-трафика к почтовому серверу и "
+"серверу имен, если они у вас есть. Очевидно, весь набор правил должен быть "
+"адаптирован под личные предпочтения — это лишь конкретный пример (формат "
+"правил подробно описан на man:ipfw[8]). Обратите внимание, что для работы "
+"\"relay\" и \"ns\" разрешение имен должно работать _до_ включения моста. Это "
+"пример того, как убедиться, что IP-адрес установлен на правильной сетевой "
+"карте. Альтернативно можно указать IP-адрес вместо имени хоста (это "
+"требуется, если у машины нет 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 ""
+"Люди, привыкшие настраивать межсетевые экраны, вероятно, также привыкли "
+"использовать правило `reset` или `forward` для идентификационных пакетов "
+"(TCP-порт 113). К сожалению, это не применимо при использовании моста, "
+"поэтому лучше всего просто передавать их целевому устройству. Пока на этом "
+"устройстве не запущен идентификационный демон, это относительно безопасно. "
+"Альтернативой является сброс соединений на порту 113, что создает проблемы с "
+"такими сервисами, как IRC (запрос идентификации будет ожидать таймаута)."
+
+#. 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 ""
+"Единственное, что может показаться немного странным — это наличие правила, "
+"разрешающего общение для мостовой машины, и другого правила для внутренних "
+"хостов. Помните, что это связано с тем, что два типа трафика проходят разные "
+"пути через ядро и попадают в пакетный фильтр. Трафик внутренней сети "
+"проходит через мост, в то время как локальная машина использует обычный IP-"
+"стек для общения. Поэтому и нужны два правила для обработки разных случаев. "
+"Правила `in via fxp0` работают для обоих путей. В общем случае, если вы "
+"используете правила `in via` во всём фильтре, вам потребуется сделать "
+"исключение для локально сгенерированных пакетов, так как они не поступают "
+"через какие-либо из наших интерфейсов."
+
+#. 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 ""
+"Огромная благодарность Луиджи Риццо за реализацию кода моста в FreeBSD и за "
+"время, которое он уделил мне, отвечая на все мои вопросы по этой теме."
+
+#. 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/ru/articles/fonts/_index.adoc b/documentation/content/ru/articles/fonts/_index.adoc
index d67530483b..dc0c900fca 100644
--- a/documentation/content/ru/articles/fonts/_index.adoc
+++ b/documentation/content/ru/articles/fonts/_index.adoc
@@ -1,9 +1,12 @@
---
-title: Шрифты и FreeBSD
-subtitle: Пособие
authors:
- - author: Dave Bodenstab
+ -
+ author: 'Dave Bodenstab'
email: imdave@synet.net
+description: 'Обзор технологий шрифтов в FreeBSD и способы их применения в разных программах'
+subtitle: 'A Tutorial'
+tags: ["Fonts", "syscons", "X11", "Ghostscript", "Groff", "guide", "tutorial", "FreeBSD"]
+title: 'Шрифты и FreeBSD'
trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "general"]
---
@@ -58,7 +61,7 @@ toc::[]
Имеется множество различных форматов файлов шрифтов и соответствующих окончаний имен файлов. Здесь обсуждаются лишь следующие из них:
[.filename]#.pfa#, [.filename]#.pfb#::
-Файлы шрифтов PostScript(R) type 1. Файлы [.filename]#.pfa# являются текстовым ( __A__scii) представлением, а [.filename]#.pfb# - двоичным (__B__inary).
+Файлы шрифтов PostScript(R) type 1. Файлы [.filename]#.pfa# являются текстовым (__A__scii) представлением, а [.filename]#.pfb# - двоичным (__B__inary).
[.filename]#.afm#::
Параметры (метрики) соответствующих шрифтов типа type 1.
@@ -113,24 +116,23 @@ Povray:::
[.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).
....
Команда для переключения режимов называется man:vidcontrol[1]:
-[source,shell]
+[source, shell]
....
% vidcontrol VGA_80x60
....
Различные программы, ориентированные на работу с экраном, такие, как man:vi[1], должны уметь определять текущие размеры экрана. Так как это делается через вызовы `ioctl` к драйверу консоли (такому, как man:syscons[4]), то размеры будут определяться правильно.
-Чтобы это проходило более гладко, можно включить эти команды в скрипты начальной загрузки, чтобы они выполнялись при запуске системы. Чтобы это сделать, добавьте такую строчку в [.filename]#/etc/rc.conf#
+Чтобы это проходило более гладко, можно включить эти команды в скрипты начальной загрузки, чтобы они выполнялись при запуске системы. Чтобы это сделать, добавьте такую строчку в [.filename]#/etc/rc.conf#.
[.programlisting]
....
-
- allscreens_flags="VGA_80x60" # Set this vidcontrol mode for all virtual screens
+allscreens_flags="VGA_80x60" # Set this vidcontrol mode for all virtual screens
....
Справочная информация: man:rc.conf[5], man:vidcontrol[1].
@@ -142,9 +144,8 @@ X11 может использовать файлы шрифтов в форма
Существует каталог по имени [.filename]#Type1#. Самым простым способом добавить новый шрифт заключается в помещении его в этот каталог. Но лучше хранить все новые шрифты в отдельном каталоге и использовать символические ссылки для добавляемых шрифтов. Это позволяет легко управлять отдельными добавляемыми шрифтами, не путая их с изначально поставляемыми. Например:
-[source,shell]
+[source, shell]
....
-
Создаем каталог для файлов шрифтов
% mkdir -p /usr/local/shared/fonts/type1
% cd /usr/local/shared/fonts/type1
@@ -153,7 +154,7 @@ X11 может использовать файлы шрифтов в форма
Кому-то может потребоваться хранить здесь также
-сопроводительные файлы и документацию к шрифтам
+cопроводительные файлы и документацию к шрифтам
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
@@ -163,7 +164,7 @@ X11 может использовать файлы шрифтов в форма
Теперь, чтобы использовать новый шрифт с X11, нужно дать доступ к файлу шрифтов и обновить файлы и именами шрифтов. Имена шрифтов в X11 выглядят следующим образом:
-[source,shell]
+[.programlisting]
....
-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
| | | | | | | | | | | | \ \
@@ -180,7 +181,7 @@ X11 может использовать файлы шрифтов в форма
Для каждого нового файла шрифтов необходимо создать новое имя. Если у вас есть какая-либо информация из сопроводительной документации к шрифту, то она может служить основой для создания имени. Если информации нет, то можно получить некоторую информацию от использования программы man:strings[1] над файлом шрифта. Например:
-[source,shell]
+[source, shell]
....
% strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
@@ -211,7 +212,7 @@ end readonly def
Пользуясь этой информацией, можно составить возможное имя:
-[source,shell]
+[source, shell]
....
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
....
@@ -239,9 +240,9 @@ Normal, wide, condensed, extended, и так далее. Пока это не б
Spacing::
proportional или monospaced. Используется __proportional__, потому что _isFixedPitch_ равен false.
-Все эти имена произвольны, но нужно стараться следовать существующим соглашениям. В программе для X11 на шрифт ссылаются по имени с применением шаблонов, так что в выбираемом имени это должно учитываться. Можно начать с простого использования
+Все эти имена произвольны, но нужно стараться следовать существующим соглашениям. В программе для X11 на шрифт ссылаются по имени с применением шаблонов, так что в выбираемом имени это должно учитываться. Можно начать с простого использования
-[source,shell]
+[source, shell]
....
...-normal-r-normal-...-p-...
....
@@ -250,7 +251,7 @@ proportional или monospaced. Используется __proportional__, по
Итак, завершая наш пример:
-[source,shell]
+[source, shell]
....
Делаем шрифт доступным для X11
% cd /usr/X11R6/lib/X11/fonts/Type1
@@ -269,8 +270,7 @@ showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq
-fonts.scale идентичен
-fonts.dir...
+fonts.scale идентичен fonts.dir...
% cp fonts.dir fonts.scale
Указываем X11, что произошли изменения
@@ -287,7 +287,7 @@ fonts.dir...
Ghostscript ссылается на шрифт через свой файл [.filename]#Fontmap#. Он должен быть подправлен так же, как и файл [.filename]#fonts.dir# в случае X11. Ghostscript может использовать файлы шрифтов в форматах [.filename]#.pfa# или [.filename]#.pfb#. Взяв шрифт из предыдущего примера, его можно использовать с Ghostscript вот так:
-[source,shell]
+[source, shell]
....
Помещаем файл со шрифтом в каталог со шрифтами Ghostscript
% cd /usr/local/shared/ghostscript/fonts
@@ -307,10 +307,10 @@ 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<<
@@ -327,7 +327,7 @@ GS>quit
Первой утилитой является `afmtodit`. Обычно она не устанавливается, так что она должна быть получена из дистрибутива с исходными текстами. Я обнаружил, что нужно изменить первую строку файла, что я делал так:
-[source,shell]
+[source, shell]
....
% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
@@ -339,17 +339,16 @@ GS>quit
Эта утилита создаст файл шрифтов для Groff из файла метрик (с окончанием [.filename]#.afm#). Продолжая с нашим примером:
-[source,shell]
+[source, shell]
....
-Многие файлы .afm в формате Mac
-... строки разделены символом ^M. Нам нужно преобразовать их в
-разделитель ^J в стиле UNIX(R)
+Многие файлы .afm в формате Mac ... строки разделены символом ^M.
+Нам нужно преобразовать их в разделитель ^J в стиле UNIX(R)
% cd /tmp
% cat /usr/local/shared/fonts/type1/showboat.afm |
tr '\015' '\012' >showboat.afm
Теперь создаем файл шрифтов groff
-% cd /usr/shared/groff_font/devps
+% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT
....
@@ -357,15 +356,15 @@ GS>quit
Если в системе для управления принтерами используется программа Ghostscript, то больше ничего делать не нужно. Однако, если используются настоящие PostScript(R)-принтеры, то для использования шрифта его нужно загрузить в принтер (если только в принтере шрифт showboat не встроен или не имеется на диске со шрифтами). Последний шаг заключается в создании загружаемого шрифта. Утилита `pfbtops` используется для создания шрифта в формате [.filename]#.pfa#, а файл для [.filename]#загрузки# изменяется для указания нового шрифта. Файл для [.filename]#загрузки# должен ссылаться на внутреннее имя шрифта. Оно может быть легко определено из файла шрифтов groff, как это показывается здесь:
-[source,shell]
+[source, shell]
....
Создание файла шрифта .pfa
-% pfbtops /usr/local/shared/fonts/type1/showboat.pfb >showboat.pfa
+% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa
....
Конечно, если файл [.filename]#.pfa# уже имеется, для его использования создаем символическую ссылку на него.
-[source,shell]
+[source, shell]
....
Получение внутреннего имени шрифта
% fgrep internalname SHOWBOAT
@@ -380,7 +379,7 @@ Showboat showboat.pfa
Для тестирования шрифта:
-[source,shell]
+[source, shell]
....
% cd /tmp
% cat >example.t <<EOF
@@ -448,7 +447,7 @@ EOF
+
Во рабочем каталоге вам нужно построить утилиту. Просто введите такую команду:
+
-[source,shell]
+[source, shell]
....
# make -f Makefile.sub afmtodit
....
@@ -459,18 +458,18 @@ EOF
. Создайте файл [.filename]#.afm# по такой команде:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name
....
-+
++
Здесь _TTF_name_ обозначает ваш файл со шрифтом TrueType, _PS_font_name_ является именем для файла [.filename]#.pfa#, _AFM_name_ задает имя для файла [.filename]#.afm#. Если вы не укажете имена выходных файлов, для форматов [.filename]#.pfa# или [.filename]#.afm#, то по умолчанию будут использоваться имена, получаемые из имени файла со шрифтом TrueType.
-+
-При этом также будет создан файл [.filename]#.pfa#, текстовый файл с метриками PostScript-шрифта (([.filename]#.pfb# для двоичного представления). Это не не обязательно, но может быть (я думаю) полезным для сервера шрифтов.
-+
++
+При этом также будет создан файл [.filename]#.pfa#, текстовый файл с метриками PostScript-шрифта (([.filename]#.pfb# для двоичного представления). Это не будет обязательно, но может быть (я думаю) полезным для сервера шрифтов.
++
Например, для преобразования шрифта 30f9 Barcode с именами файлов по умолчанию, воспользуйтесь следующей командой:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -478,10 +477,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.
....
-+
++
Если вы хотите, чтобы преобразованные шрифты сохранялись в файлы [.filename]#A.pfa# and [.filename]#B.afm#, то выдайте такую команду:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -491,25 +490,23 @@ Converting 3of9.ttf to A.pfa and B.afm.
....
. Создайте PostScript-файл для Groff:
-+
++
Смените текущий каталог на [.filename]#/usr/shared/groff_font/devps# для облегчения запуска упоминаемых далее программ. Для этого вам может понадобиться иметь привилегии администратора системы. (Или, если вы избегаете здесь работать, обязательно посмотрите файлы [.filename]#DESC#, [.filename]#text.enc# и [.filename]#generate/textmap# в этом каталоге.)
+
-[source,shell]
+[source, shell]
....
-% afmtodit -d DESC -e text.enc file.afm \
- generate/textmap PS_font_name
+% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name
....
-+
++
Здесь [.filename]#file.afm# является файлом _AFM_name_, созданным программой `ttf2pf.ps` выше, а _PS_font_name_ является именем шрифта, используемым в той команде, так же, как и имя, которое будет использовать утилита man:groff[1] для ссылки на этот шрифт. Например, полагая, что вы использовали первую команду `tiff2pf.ps` выше, то шрифт 3of9 Barcode может быть создан при помощи такой команды:
+
-[source,shell]
+[source, shell]
....
-% afmtodit -d DESC -e text.enc 3of9.afm \
- generate/textmap 3of9
+% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9
....
-+
++
Проверьте, что полученный файл _PS_font_name_ (к примеру, [.filename]#3of9# из примера выше) расположен в каталоге [.filename]#/usr/shared/groff_font/devps#, скопировав или перенеся его сюда.
-+
++
Заметьте, что если [.filename]#ttf2pf.ps# назначает имя шрифта, используя один из найденных в файле шрифта TrueType, а вы хотите использовать другое имя, то вы должны отредактировать файл [.filename]#.afm# до запуска команды `afmtodit`. Это имя к тому же должно совпадать с тем, что используется в файле Fontmap, если вы собираетесь перенаправлять вывод man:groff[1] утилите man:gs[1].
[[truetype-for-other-programs]]
@@ -529,7 +526,7 @@ Converting 3of9.ttf to A.pfa and B.afm.
[[obtaining-additional-fonts]]
== Где можно найти дополнительные шрифты?
-Много шрифтов можно найти в сети Интернет. Они либо абсолютно бесплатны, либо условно-бесплатны. В добавок, множество шрифтов находится в категории [.filename]#x11-fonts/# Коллекции Портов.
+Много шрифтов можно найти в сети Интернет. Они либо абсолютно бесплатны, либо условно-бесплатны. В добавок, множество шрифтов находится в категории [.filename]#x11-fonts/# Коллекции Портов
[[additional-questions]]
== Дополнительные вопросы
diff --git a/documentation/content/ru/articles/fonts/_index.po b/documentation/content/ru/articles/fonts/_index.po
new file mode 100644
index 0000000000..f03f0cc098
--- /dev/null
+++ b/documentation/content/ru/articles/fonts/_index.po
@@ -0,0 +1,1592 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-02 23:31+0300\n"
+"PO-Revision-Date: 2025-10-02 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfonts_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Обзор технологий шрифтов в FreeBSD и способы их применения в разных программах"
+
+#. 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 "Шрифты и FreeBSD"
+
+#. 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 ""
+"Этот документ содержит описание различных файлов шрифтов, которые могут "
+"использоваться с FreeBSD и драйвером системной консоли, системой X11, "
+"программами Ghostscript и Groff. Даются реально работающие примеры по "
+"переключению экрана системной консоли в режим 80x60 и использованию файлов "
+"шрифтов формата Type 1 с перечисленными выше прикладными программами."
+
+#. 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 ""
+"Существует много мест, где можно найти файлы шрифтов, но встает вопрос о "
+"возможных способах их использования с FreeBSD. Ответ может быть найден в "
+"результате тщательного изучения документации по тем компонентам, которые вы "
+"собираетесь использовать. На это тратится очень много времени, и это пособие "
+"является попыткой дать готовые ответы для тех, кто заинтересуется такими "
+"вопросами."
+
+#. 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 "[.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 ""
+"Файлы шрифтов PostScript(R) type 1. Файлы [.filename]#.pfa# являются "
+"текстовым (__A__scii) представлением, а [.filename]#.pfb# - двоичным "
+"(__B__inary)."
+
+#. 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 "Параметры (метрики) соответствующих шрифтов типа 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 "Метрики для принтеров соответствующих шрифтов типа 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 "Файл шрифтов 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 ""
+"Неявная ссылка на файл шрифтов TrueType (реальной информации о шрифте здесь "
+"не содержится)"
+
+#. 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 "Файлы экранных шрифтов с побитным представлением"
+
+#. 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 ""
+"Файлы [.filename]#.fot# используются в Windows(R) в качестве некой "
+"символической ссылки на файл со шрифтом в формате TrueType(R) "
+"([.filename]#.ttf#). Файлы шрифтов [.filename]#.fon# также используются в "
+"Windows(R). Мне неизвестно, как можно использовать этот формат шрифтов во "
+"FreeBSD."
+
+#. 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 ""
+"То, файл шрифтов какого формата будет полезен, зависит от используемого "
+"приложения. Сама по себе FreeBSD шрифтов не использует. Прикладные программы "
+"и/или драйверы могут использовать файлы шрифтов. Вот краткий справочник по "
+"типам файлов шрифтов и приложениям/драйверам:"
+
+#. 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 "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 "Приложение"
+
+#. 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 ""
+"Окончание [.filename]#.fnt# используется достаточно часто. Я полагаю, что "
+"когда кто-нибудь собирается создать файл шрифтов для своего приложения, чаще "
+"всего выбирается именно это окончание. Поэтому файлы с таким окончанием не "
+"все имеют одинаковый формат; в частности, формат файлов [.filename]#.fnt#, "
+"используемых драйвером syscons во FreeBSD, может отличаться от формата "
+"файлов [.filename]#.fnt#, встречающихся в MS-DOS(R)/Windows(R). Я даже не "
+"пытался использовать другие файлы [.filename]#.fnt#, кроме тех, что "
+"поставляются с FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:123
+#, no-wrap
+msgid "Setting a Virtual Console to 80x60 Line Mode"
+msgstr "Настройка виртуальной консоли на режим работы 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 ""
+"Во-первых, должен быть загружен шрифт размера 8x8. Для этого файл "
+"[.filename]#/etc/rc.conf# должен содержать строчку (измените в ней имя файла "
+"со шрифтом на соответствующий вашей локализации):"
+
+#. 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 "Команда для переключения режимов называется 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 ""
+"Различные программы, ориентированные на работу с экраном, такие, как "
+"man:vi[1], должны уметь определять текущие размеры экрана. Так как это "
+"делается через вызовы `ioctl` к драйверу консоли (такому, как "
+"man:syscons[4]), то размеры будут определяться правильно."
+
+#. 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 ""
+"Чтобы это проходило более гладко, можно включить эти команды в скрипты "
+"начальной загрузки, чтобы они выполнялись при запуске системы. Чтобы это "
+"сделать, добавьте такую строчку в [.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 "Справочная информация: 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 "Использование шрифтов type 1 с системой X11"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:159
+msgid ""
+"X11 can use either the [.filename]#.pfa# or the [.filename]#.pfb# format "
+"fonts. The X11 fonts are located in various subdirectories under "
+"[.filename]#/usr/X11R6/lib/X11/fonts#. Each font file is cross referenced "
+"to its X11 name by the contents of [.filename]#fonts.dir# in each directory."
+msgstr ""
+"X11 может использовать файлы шрифтов в формате [.filename]#.pfa# или "
+"[.filename]#.pfb#. Шрифты для X11 располагаются в различных подкаталогах в "
+"[.filename]#/usr/X11R6/lib/X11/fonts#. На каждый файл со шрифтом имеется "
+"ссылка по его X11-имени в файле [.filename]#fonts.dir# в каждом таком "
+"каталоге."
+
+#. 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 ""
+"Существует каталог по имени [.filename]#Type1#. Самым простым способом "
+"добавить новый шрифт заключается в помещении его в этот каталог. Но лучше "
+"хранить все новые шрифты в отдельном каталоге и использовать символические "
+"ссылки для добавляемых шрифтов. Это позволяет легко управлять отдельными "
+"добавляемыми шрифтами, не путая их с изначально поставляемыми. Например:"
+
+#. 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 ""
+"Создаем каталог для файлов шрифтов\n"
+"% mkdir -p /usr/local/shared/fonts/type1\n"
+"% cd /usr/local/shared/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 "Помещаем сюда файлы .pfa, .pfb и .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 "Кому-то может потребоваться хранить здесь также\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 ""
+"cопроводительные файлы и документацию к шрифтам\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 ""
+"Обновление индексного файла со ссылками на файлы шрифтов\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 ""
+"Теперь, чтобы использовать новый шрифт с X11, нужно дать доступ к файлу "
+"шрифтов и обновить файлы и именами шрифтов. Имена шрифтов в X11 выглядят "
+"следующим образом:"
+
+#. 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"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- набор символов\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- средняя ширина\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- spacing\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- разрешение по вертикали\n"
+" | | | \\\t \\\t\\ \\ \\ +- разрешение по горизонтали\n"
+" | | | \\\t \\\t \\ \\ +- пунктов\n"
+" | | | \\ \\\t \\ +- пиксел\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 ""
+"Для каждого нового файла шрифтов необходимо создать новое имя. Если у вас "
+"есть какая-либо информация из сопроводительной документации к шрифту, то она "
+"может служить основой для создания имени. Если информации нет, то можно "
+"получить некоторую информацию от использования программы man:strings[1] над "
+"файлом шрифта. Например:"
+
+#. 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 "Пользуясь этой информацией, можно составить возможное имя:"
+
+#. 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 "Компонентами нашего имени являются:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:245
+#, no-wrap
+msgid "Foundry"
+msgstr "Foundry"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:247
+msgid "Lets just name all the new fonts `type1`."
+msgstr "Давайте называть все новые шрифты `type1`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:248
+#, no-wrap
+msgid "Family"
+msgstr "Family"
+
+#. 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 "Weight"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:254
+msgid ""
+"Normal, bold, medium, semibold, etc. From the man:strings[1] output above, "
+"it appears that this font has a weight of __medium__."
+msgstr ""
+"Normal, bold, medium, semibold, и так далее. Из результата работы команды "
+"man:strings[1] похоже, что этот шрифт имеет ширину __medium__."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:255
+#, no-wrap
+msgid "Slant"
+msgstr "Slant"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:258
+msgid ""
+"__r__oman, __i__talic, __o__blique, etc. Since the _ItalicAngle_ is zero, "
+"_roman_ will be used."
+msgstr ""
+"__r__oman, __i__talic, __o__blique, и так далее. Так как _ItalicAngle_ равен "
+"нулю, то будет использоваться __roman__."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:259
+#, no-wrap
+msgid "Width"
+msgstr "Width"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:262
+msgid ""
+"Normal, wide, condensed, extended, etc. Until it can be examined, the "
+"assumption will be __normal__."
+msgstr ""
+"Normal, wide, condensed, extended, и так далее. Пока это не будет проверено, "
+"предполагаем __normal__."
+
+#. 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 "Spacing"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:269
+msgid ""
+"proportional or monospaced. _Proportional_ is used since _isFixedPitch_ is "
+"false."
+msgstr ""
+"proportional или monospaced. Используется __proportional__, потому что "
+"_isFixedPitch_ равен false."
+
+#. 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 ""
+"Все эти имена произвольны, но нужно стараться следовать существующим "
+"соглашениям. В программе для X11 на шрифт ссылаются по имени с применением "
+"шаблонов, так что в выбираемом имени это должно учитываться. Можно начать с "
+"простого использования"
+
+#. 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 ""
+"в качестве имени, а затем использовать man:xfontsel[1] для его проверки и "
+"изменения имени на основе того, как выглядит шрифт."
+
+#. 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 ""
+"Делаем шрифт доступным для X11\n"
+"% cd /usr/X11R6/lib/X11/fonts/Type1\n"
+"% ln -s /usr/local/shared/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 ""
+"Редактируем файлы fonts.dir and fonts.scale, добавляя строку,\n"
+"описывающую шрифт и увеличивая количество шрифтов в первой строке.\n"
+"% ex fonts.dir\n"
+":1p\n"
+"25\n"
+":1c\n"
+"26\n"
+".\n"
+":$a\n"
+"showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+".\n"
+":wq\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:304
+#, no-wrap
+msgid ""
+"fonts.scale seems to be identical to fonts.dir...\n"
+"% cp fonts.dir fonts.scale\n"
+msgstr ""
+"fonts.scale идентичен 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 ""
+"Указываем X11, что произошли изменения\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 ""
+"Проверяем новый шрифт\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 ""
+"Справочная информация: 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 "Использование шрифтов type 1 с пакетом Ghostscript"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:321
+msgid ""
+"Ghostscript references a font via its [.filename]#Fontmap#. This must be "
+"modified in a similar way to the X11 [.filename]#fonts.dir#. Ghostscript "
+"can use either the [.filename]#.pfa# or the [.filename]#.pfb# format fonts. "
+"Using the font from the previous example, here is how to use it with "
+"Ghostscript:"
+msgstr ""
+"Ghostscript ссылается на шрифт через свой файл [.filename]#Fontmap#. Он "
+"должен быть подправлен так же, как и файл [.filename]#fonts.dir# в случае "
+"X11. Ghostscript может использовать файлы шрифтов в форматах "
+"[.filename]#.pfa# или [.filename]#.pfb#. Взяв шрифт из предыдущего примера, "
+"его можно использовать с 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 ""
+"Помещаем файл со шрифтом в каталог со шрифтами Ghostscript\n"
+"% cd /usr/local/shared/ghostscript/fonts\n"
+"% ln -s /usr/local/shared/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 ""
+"Редактируем Fontmap, чтобы Ghostscript знал о шрифте\n"
+"% cd /usr/local/shared/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 ""
+"Используем Ghostscript для проверки шрифта\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 ""
+"Справочная информация: [.filename]#fonts.txt# из дистрибутива Ghostscript "
+"4.01"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:356
+#, no-wrap
+msgid "Using Type 1 Fonts with Groff"
+msgstr "Использование шрифтов в формате type 1 с программой 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 ""
+"Теперь, когда новый шрифт может быть использован как с X11, так и в "
+"Ghostscript, как использовать его с программой Groff? Во-первых, так как мы "
+"имеем дело со PostScript(R)-шрифтами формата type 1, то подходящим "
+"устройством Groff является __ps__. Для каждого шрифта, который может "
+"использоваться программой Groff, должен быть создан файл шрифта. Имя шрифта "
+"для Groff является просто именем файла из каталога [.filename]#/usr/shared/"
+"groff_font/devps#. В нашем примере файлом шрифта может быть [.filename]#/usr/"
+"shared/groff_font/devps/SHOWBOAT#. Файл должен быть создан с помощью утилит, "
+"поставляемых с программой 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 ""
+"Первой утилитой является `afmtodit`. Обычно она не устанавливается, так что "
+"она должна быть получена из дистрибутива с исходными текстами. Я обнаружил, "
+"что нужно изменить первую строку файла, что я делал так:"
+
+#. 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 ""
+"Эта утилита создаст файл шрифтов для Groff из файла метрик (с окончанием "
+"[.filename]#.afm#). Продолжая с нашим примером:"
+
+#. 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 ""
+"Многие файлы .afm в формате Mac ... строки разделены символом ^M.\n"
+"Нам нужно преобразовать их в разделитель ^J в стиле UNIX(R)\n"
+"% cd /tmp\n"
+"% cat /usr/local/shared/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 ""
+"Теперь создаем файл шрифтов 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 "Теперь к шрифту можно обращаться по имени 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 ""
+"Если в системе для управления принтерами используется программа Ghostscript, "
+"то больше ничего делать не нужно. Однако, если используются настоящие "
+"PostScript(R)-принтеры, то для использования шрифта его нужно загрузить в "
+"принтер (если только в принтере шрифт showboat не встроен или не имеется на "
+"диске со шрифтами). Последний шаг заключается в создании загружаемого "
+"шрифта. Утилита `pfbtops` используется для создания шрифта в формате "
+"[.filename]#.pfa#, а файл для [.filename]#загрузки# изменяется для указания "
+"нового шрифта. Файл для [.filename]#загрузки# должен ссылаться на внутреннее "
+"имя шрифта. Оно может быть легко определено из файла шрифтов groff, как это "
+"показывается здесь:"
+
+#. 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 ""
+"Создание файла шрифта .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 ""
+"Конечно, если файл [.filename]#.pfa# уже имеется, для его использования "
+"создаем символическую ссылку на него."
+
+#. 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 ""
+"Получение внутреннего имени шрифта\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Указываем утилите groff, что шрифт должен быть загружен\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 "Для тестирования шрифта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:456
+#, no-wrap
+msgid ""
+"% cd /tmp\n"
+"% cat >example.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"This is an example of the Showboat font:\n"
+".br\n"
+".ps 48\n"
+".vs (\\n(.s+2)p\n"
+".sp\n"
+".ft SHOWBOAT\n"
+"ABCDEFGHI\n"
+".br\n"
+"JKLMNOPQR\n"
+".br\n"
+"STUVWXYZ\n"
+".sp\n"
+".ps 16\n"
+".vs (\\n(.s+2)p\n"
+".fp 5 SHOWBOAT\n"
+".ft R\n"
+"To use it for the first letter of a paragraph, it will look like:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRere is the first sentence of a paragraph that uses the\n"
+"showboat font as its first letter.\n"
+"Additional vertical space must be used to allow room for the larger\n"
+"letter.\n"
+"EOF\n"
+"% groff -Tps example.t >example.ps\n"
+msgstr ""
+"% cd /tmp\n"
+"% cat >example.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"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"
+
+#. 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 ""
+"Для использования с 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 ""
+"Для его печати\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 ""
+"Справочная информация: [.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 "Преобразование файлов шрифтов TrueType в формат groff/PostScript для использования с 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 ""
+"Потенциально это требует некоторых усилий, просто потому что зависит "
+"некоторых утилит, которые в качестве части системы не устанавливаются. Это:"
+
+#. 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 ""
+"Утилита для преобразования TrueType в PostScript. Она позволяет "
+"преобразовать шрифт TrueType в метрику шрифта в текстовом формате (файл "
+"[.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 ""
+"Доступна по адресу http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. "
+"Замечание: Эти файлы являются PostScript-программами и должны быть скачаны "
+"на диск щелчком на ссылке при нажатой клавише kbd:[Shift]. В противном "
+"случае для их просмотра ваш браузер может попытаться запустить программу "
+"ghostview."
+
+#. 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 "[.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 ""
+"Смесь верхнего/нижнего регистров присутствует из-за того, что эти файлы "
+"предназначены и для DOS. [.filename]#ttf2pf.ps# использует остальные с "
+"именами в верхнем регистре, так что при переименовании это нужно учитывать. "
+"(На самом деле [.filename]#GS_TTF.PS# и [.filename]#PFS2AFM.PS# "
+"предположительно являются частью дистрибутива Ghostscript, но их легко "
+"использовать как отдельные утилиты. В поставку FreeBSD они не включены.) Вы "
+"можете также установить их в каталог [.filename]#/usr/local/shared/"
+"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 ""
+"Создает файлы шрифтов для использования с программой Groff из текстовых "
+"файлов с метриками шрифта. Она обычно располагается в каталоге [.filename]#/"
+"usr/src/contrib/groff/afmtodit# и для ее использования требуется проделать "
+"некоторую работу."
+
+#. 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 ""
+"Если вы избегаете работать в дереве [.filename]#/usr/src#, просто скопируйте "
+"содержимое вышеупомянутого каталога во временный рабочий каталог."
+
+#. 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 "# 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 ""
+"Вам может также потребоваться скопировать [.filename]#/usr/contrib/groff/"
+"devps/generate/textmap# в [.filename]#/usr/shared/groff_font/devps/"
+"generate#, если его не существует."
+
+#. 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 "Создайте файл [.filename]#.afm# по такой команде:"
+
+#. 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 ""
+"Здесь _TTF_name_ обозначает ваш файл со шрифтом TrueType, _PS_font_name_ "
+"является именем для файла [.filename]#.pfa#, _AFM_name_ задает имя для файла "
+"[.filename]#.afm#. Если вы не укажете имена выходных файлов, для форматов "
+"[.filename]#.pfa# или [.filename]#.afm#, то по умолчанию будут "
+"использоваться имена, получаемые из имени файла со шрифтом 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 ""
+"При этом также будет создан файл [.filename]#.pfa#, текстовый файл с "
+"метриками PostScript-шрифта (([.filename]#.pfb# для двоичного "
+"представления). Это не будет обязательно, но может быть (я думаю) полезным "
+"для сервера шрифтов."
+
+#. 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 ""
+"Например, для преобразования шрифта 30f9 Barcode с именами файлов по "
+"умолчанию, воспользуйтесь следующей командой:"
+
+#. 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 ""
+"Если вы хотите, чтобы преобразованные шрифты сохранялись в файлы "
+"[.filename]#A.pfa# and [.filename]#B.afm#, то выдайте такую команду:"
+
+#. 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 "Создайте PostScript-файл для Groff:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:552
+msgid ""
+"Change directories to [.filename]#/usr/share/groff_font/devps# so as to make "
+"the following command easier to execute. You will probably need root "
+"privileges for this. (Or, if you are paranoid about working there, make "
+"sure you reference the files [.filename]#DESC#, [.filename]#text.enc# and "
+"[.filename]#generate/textmap# as being in this directory.)"
+msgstr ""
+"Смените текущий каталог на [.filename]#/usr/shared/groff_font/devps# для "
+"облегчения запуска упоминаемых далее программ. Для этого вам может "
+"понадобиться иметь привилегии администратора системы. (Или, если вы "
+"избегаете здесь работать, обязательно посмотрите файлы [.filename]#DESC#, "
+"[.filename]#text.enc# и [.filename]#generate/textmap# в этом каталоге.)"
+
+#. 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 ""
+"Здесь [.filename]#file.afm# является файлом _AFM_name_, созданным программой "
+"`ttf2pf.ps` выше, а _PS_font_name_ является именем шрифта, используемым в "
+"той команде, так же, как и имя, которое будет использовать утилита "
+"man:groff[1] для ссылки на этот шрифт. Например, полагая, что вы "
+"использовали первую команду `tiff2pf.ps` выше, то шрифт 3of9 Barcode может "
+"быть создан при помощи такой команды:"
+
+#. 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 ""
+"Проверьте, что полученный файл _PS_font_name_ (к примеру, [.filename]#3of9# "
+"из примера выше) расположен в каталоге [.filename]#/usr/shared/groff_font/"
+"devps#, скопировав или перенеся его сюда."
+
+#. 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 ""
+"Заметьте, что если [.filename]#ttf2pf.ps# назначает имя шрифта, используя "
+"один из найденных в файле шрифта TrueType, а вы хотите использовать другое "
+"имя, то вы должны отредактировать файл [.filename]#.afm# до запуска команды "
+"`afmtodit`. Это имя к тому же должно совпадать с тем, что используется в "
+"файле Fontmap, если вы собираетесь перенаправлять вывод man:groff[1] утилите "
+"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 "Можно ли использовать шрифты в формате TrueType с другими программами?"
+
+#. 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 ""
+"Формат TrueType используется в Windows, Windows 95 и на компьютерах "
+"Macintosh. Он достаточно популярен и в этом формате имеется большое "
+"количество шрифтов."
+
+#. 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 ""
+"К сожалению, я знаю лишь несколько программ, которые могут использовать этот "
+"формат: на ум приходят Ghostscript и Povray. Его поддержка в программе "
+"Ghostscript, согласно документации, находится в зачаточном состоянии и "
+"получаемый результат хуже того, что получается при использовании шрифтов "
+"type 1. Программа Povray версии 3 также может использовать шрифты TrueType, "
+"но я очень сомневаюсь, что много кто создает документы как "
+"последовательность анимированных страниц :-)."
+
+#. 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 ""
+"Такая весьма печальная ситуация может вскоре измениться. В рамках проекта "
+"http://www.freetype.org/[FreeType Project] в настоящее время разрабатывается "
+"полезный набор инструментов для работы с FreeType:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:585
+msgid ""
+"The `xfsft` font server for X11 can serve TrueType fonts in addition to "
+"regular fonts. Though currently in beta, it is said to be quite usable. See "
+"http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek's page] "
+"for further information. Porting instructions for FreeBSD can be found at "
+"http://math.missouri.edu/~stephen/software/[Stephen Montgomery's software "
+"page]."
+msgstr ""
+"Сервер шрифтов `xfsft` для X11 может работать и со шрифтами TrueType, и с "
+"обычными шрифтами. Хотя в настоящее время он еще находится в стадии отладки, "
+"но его уже можно использовать. Посмотрите http://www.dcs.ed.ac.uk/home/jec/"
+"programs/xfsft/[страницу Juliusz Chroboczek], чтобы получить более полную "
+"информацию. Указания по переносу на FreeBSD можно найти на странице http://"
+"math.missouri.edu/~stephen/software/[Стивена Монтгомери] (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 является еще одним сервером шрифтов для X11, доступный по адресу "
+"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 ""
+"Программа, которая называется `ttf2bdf`, может генерировать BDF-файлы, "
+"которые можно использовать в системе X Window, из файлов шрифтов TrueType. "
+"Выполнимые файлы Linux могут находиться по адресу 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 "и другие ..."
+
+#. 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 ""
+"Много шрифтов можно найти в сети Интернет. Они либо абсолютно бесплатны, "
+"либо условно-бесплатны. В добавок, множество шрифтов находится в категории "
+"[.filename]#x11-fonts/# Коллекции Портов"
+
+#. 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 "Для чего предназначены файлы [.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 ""
+"Можно ли получить файл [.filename]#.afm# из файла [.filename]#.pfa# или "
+"[.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 ""
+"Как получить файлы преобразования символов Groff для PostScript-шрифтов с "
+"нестандартными названиями символов?"
+
+#. 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 ""
+"Можно ли настроить xditview и устройства devX?? на работу всех новых шрифтов?"
+
+#. 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 ""
+"Хорошо бы иметь примеры использования шрифтов TrueType с программами Povray "
+"и Ghostscript."
diff --git a/documentation/content/ru/articles/freebsd-questions/_index.adoc b/documentation/content/ru/articles/freebsd-questions/_index.adoc
index d35ef1e876..c707b57c82 100644
--- a/documentation/content/ru/articles/freebsd-questions/_index.adoc
+++ b/documentation/content/ru/articles/freebsd-questions/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Как работать со списком рассылки FreeBSD-questions c максимальной отдачей
authors:
- - author: Greg Lehey
+ -
+ author: 'Greg Lehey'
email: grog@FreeBSD.org
+description: 'Как работать со списком рассылки FreeBSD-questions c максимальной отдачей'
+tags: ["questions", "mailing", "FreeBSD"]
+title: 'Как работать со списком рассылки FreeBSD-questions c максимальной отдачей'
trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
---
@@ -65,63 +68,15 @@ toc::[]
== Как подписаться на FreeBSD-questions
-FreeBSD-questions является списком рассылки, распространяемым по электронной почте, поэтому вам нужен доступ к системе электронной почты. Зайдите через ваш WWW браузер на {freebsd-questions}. В разделе "Подписка на freebsd-questions" (Subscribing to freebsd-questions) заполните поле "Ваш адрес электронной почты" (Your email address); другие поля являются опциональными.
+FreeBSD-questions является списком рассылки, распространяемым по электронной почте, поэтому вам нужен доступ к системе электронной почты. Зайдите через ваш WWW браузер на {freebsd-questions}. В разделе "Подписка на freebsd-questions" (Subscribing to freebsd-questions) заполните поле "Ваш адрес электронной почты" (Your email address); другие поля являются опциональными.
-[NOTE]
-====
-Поля для паролей в форме для подписки предоставляют только слабую защищённость, но должны предохранить других от путаницы с вашей подпиской. __Не используйте ценный пароль__, потому как он будет отослан вам по почте обратно в виде незашифрованного текста.
-====
-
-Вы получите подтверждающее письмо от mailman; следуйте включенным в него инструкциям для завершения процесса подписки.
-
-И наконец, когда вы получите приветственное письмо от mailman с подробной информацией о списке и с паролем, __пожалуйста, сохраните его__. Если вы когда-нибудь захотите покинуть список рассылки, вам нужна будет эта информация. За дополнительной информацией обращайтесь к следующему разделу.
+Вы получите подтверждающее сообщение от mlmmj; следуйте приложенным инструкциям для завершения подписки.
== Как отписаться от FreeBSD-questions
-Когда вы подписывались на список рассылки FreeBSD-questions, вы получили приглашающее сообщение от mailman. В этом сообщении, кроме всего прочего, вам рассказывалось о том, как отписаться. Вот типичное сообщение:
-
-....
-
-Welcome to the freebsd-questions@freebsd.org mailing list!
-
-To post to this list, send your email to:
-
- freebsd-questions@freebsd.org
-
-General information about the mailing list is at:
-
- http://lists.freebsd.org/mailman/listinfo/freebsd-questions
-
-If you ever want to unsubscribe or change your options (e.g., switch to
-or from digest mode, change your password, etc.), visit your
-subscription page at:
-
-http://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de
-
-You can also make such adjustments via email by sending a message to:
-
- freebsd-questions-request@freebsd.org
-
-with the word `help' in the subject or body (don't include the
-quotes), and you will get back a message with instructions.
-
-You must know your password to change your options (including changing
-the password, itself) or to unsubscribe. It is:
+Направьте ваш браузер на {freebsd-questions}. В разделе "Subscribe or unsubscribe online" заполните поле "Your email address" и нажмите "Unsubscribe". Или отправьте письмо на freebsd-questions+unsubscribe@freebsd.org.
- 12345
-
-Normally, Mailman will remind you of your freebsd.org mailing list
-passwords once every month, although you can disable this if you
-prefer. This reminder will also include instructions on how to
-unsubscribe or change your account options. There is also a button on
-your options page that will email your current password to you.
-....
-
-Используя URL, указанный в вашем приветственном сообщении, вы можете посетить "страничку по управлению учетной записью" и запросить "отписать" вас от списка рассылки FreeBSD-questions.
-
-Подтверждающее письмо будет выслано вам от mailman; следуйте включённым в него инструкциям для завершения процесса отписки.
-
-Если вы это сделали, и до сих пор не можете понять, что происходит, отправьте письмо на mailto:freebsd-questions-request@FreeBSD.org[freebsd-questions-request@FreeBSD.org], и они помогут вам разобраться. _Не_ посылайте сообщений во FreeBSD-questions: здесь вам помочь не смогут.
+Сообщение с подтверждением будет отправлено вам от mlmmj; следуйте приложенным инструкциям, чтобы завершить отмену подписки.
== Нужно задавать вопросы в `-questions` или `-hackers`?
@@ -138,10 +93,10 @@ your options page that will email your current password to you.
Вы можете (и должны) что-нибудь сделать сами перед тем, как задать вопрос в одном из списков рассылки:
-* Попытайтесь решить проблему самостоятельно. Если вы пошлёте вопрос, который покажет, что вы пытались решить проблему, ваш вопрос, как правило, привлечёт более положительное внимание со стороны людей, читающих его. Попытка решить проблему самостоятельно также увеличит уровень вашего понимания FreeBSD, и в конечном счёте позволит вам использовать ваши знания для помощи другим, отвечая на вопросы, посылаемые в списки рассылки.
-* Прочтите страницы справочника и документацию FreeBSD (установлена в [.filename]#/usr/doc# или доступна через WWW на http://www.FreeBSD.org[http://www.FreeBSD.org]), особенно extref:{handbook}[Руководство пользователя] и extref:{faq}[FAQ].
-* Просмотрите и/или поищите в архивах списка рассылки, задавился ли ваш или схожий вопрос (и возможно отвечался) в списке. Вы можете просмотреть и/или поискать в архивах списков рассылки на http://www.FreeBSD.org/mail[http://www.FreeBSD.org/mail] и http://www.FreeBSD.org/search/#mailinglists[http://www.FreeBSD.org/search#mailinglists] соответственно. Это может быть сделано также и на других WWW сайтах, к примеру, на http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
-* Используйте поисковик, например, http://www.google.com[Google] или http://www.yahoo.com[Yahoo] для поиска ответов на ваш вопрос. Google имеет даже http://www.google.com/bsd[BSD ориентированный поисковой интерфейс].
+* Попытайтесь решить проблему самостоятельно. Если вы пошлёте вопрос, который покажет, что вы пытались решить проблему, ваш вопрос, как правило, привлечёт более положительное внимание со стороны людей, читающих его. Попытка решить проблему самостоятельно также увеличит уровень вашего понимания FreeBSD, и в конечном счёте позволит вам использовать ваши знания для помощи другим, отвечая на вопросы, посылаемые в списки рассылки.
+* Прочтите страницы справочника и документацию FreeBSD (установлена в [.filename]#/usr/doc# или доступна через WWW на http://www.FreeBSD.org[http://www.FreeBSD.org]), особенно extref:{handbook}[Руководство пользователя] и extref:{faq}[FAQ].
+* Просмотрите и/или выполните поиск по архивам списка рассылки, чтобы узнать, задавался ли ваш вопрос или подобный ему в списке (и возможно, был на него ответ). Вы можете просматривать и/или искать архивы списка рассылки по адресам https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] и https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] соответственно.
+* Используйте поисковик, например, http://www.google.com[Google] или http://www.yahoo.com[Yahoo] для поиска ответов на ваш вопрос. Google имеет даже http://www.google.com/bsd[BSD ориентированный поисковой интерфейс].
== Как посылать вопрос
@@ -150,16 +105,15 @@ your options page that will email your current password to you.
* Помните, что за ответы на вопросы о FreeBSD никто денег не получает. Все делают это в свободное время. Вы можете привлечь внимание, послав четко сформулированный вопрос, содержащий как можно больше относящейся к делу информации. Вы можете не получить внимания, послав неполный, непонятный или примитивный вопрос. В действительности можно посылать сообщение в список рассылки FreeBSD-questions и не получить ответа, даже если вы следуете этим правилам. Еще более вероятно не получить ответа, если вы им не следуете. В оставшейся части документа мы рассмотрим, как получить максимум от вопроса во FreeBSD-questions.
* Не всякий человек, могущий ответить на вопрос о FreeBSD, читает все сообщения: обычно читается строка с темой письма и решается, представляет ли сообщение интерес. То есть в ваших интересах указать тему письма. "FreeBSD problem" или "Help" недостаточно. Если вы не укажете тему вообще, то многие даже не потрудятся прочесть сообщение. Если тема сообщения недостаточно конкретна, то люди, которые могут ответить, могут его не прочесть.
* Оформляйте ваше сообщение так, чтобы оно было читабельно, и ПОЖАЛУЙСТА, НЕ КРИЧИТЕ!!!!!. Мы понимаем, что для многих английский не является родным языком, и не исключаем этого, однако действительно очень трудно и мучительно читать сообщение, полное опечаток или в котором отсутствуют разделители строк.
-+
++
Не упускайте из виду эффект, который производит плохо отформатированное письмо, причем не только в списке рассылки FreeBSD-questions. По вашему почтовому сообщению люди составляют мнение о вас, и если сообщение плохо отформатировано, содержит по одной строке на абзац, неправильно разделено или полно ошибок, то о вас сложится плохое впечатление.
-+
++
Множество плохо форматированных сообщений возникает из-за http://www.lemis.com/email.html[неправильно работающих или плохо настроенных почтовых программ]. Известно, что следующие почтовые программы могут посылать неправильно отформатированные сообщения без вашего ведома об этом:
** exmh
** Microsoft(R) Exchange
-** Microsoft(R) Outlook
-
-+
+** Microsoft(R) Outlook(R)
++
Постарайтесь не использовать MIME: многие используют программы, которые не очень хорошо работают с MIME.
* Проверьте правильность настроек времени и временной зоны. Это может выглядеть немножко глупо, потому что ваши сообщения все равно будут доставляться, однако многие люди получают несколько сотен сообщений в день. Зачастую они сортируют входящие сообщения по теме и дате, и если ваше сообщение не будет предшествовать первому ответу, то они могут предположить, что оно потерялось и даже не взглянут на него.
* Не включайте не связанные друг с другом вопросы в одно и то же письмо. Во-первых, длинное сообщение отпугивает людей, а во-вторых, труднее найти людей, которые могут ответить на все вопросы, и прочитали такое сообщение.
@@ -167,8 +121,8 @@ your options page that will email your current password to you.
** Практически в любом случае важно знать версию FreeBSD, с которой вы работаете. Особенно, в частности, в случае FreeBSD-CURRENT вы должны также указать дату исходных текстов, хотя, конечно, вам не нужно посылать сообщения о -CURRENT в список рассылки FreeBSD-questions.
** В случае любой проблемы, которая _может_ быть связана с работой оборудования, расскажите о вашем аппаратном обеспечении. В случае сомнений предположите, что это, возможно, вина оборудования. Какой тип процессора используется? Насколько он быстр? Какая материнская плата? Сколько установлено памяти? Какое периферийное оборудование?
-+
-Конечно, это приговор, но вывод команды man:dmesg[8] зачастую может оказаться очень полезным, так как он говорит не только об оборудовании, с которым вы работаете, но также и о версии FreeBSD.
++
+Здесь вам стоит подумать и принять решение, конечно, но вывод команды man:dmesg[8] зачастую может оказаться очень полезным, так как он говорит не только об оборудовании, с которым вы работаете, но также и о версии FreeBSD.
** Если выдаются сообщения об ошибках, недостаточно написать "I get error messages", напишите (например) "I get the error message 'No route to host'".
** Если ваша система завершает работу аварийно, не пишите "My system panicked", напишите (к примеру) "my system panicked with the message 'free vnode isn't'".
** Если у вас возникли трудности при установке FreeBSD, пожалуйста, опишите ваше оборудование. В частности, важно знать адреса ввода/вывода и IRQ адаптеров, установленных в вашей машине.
@@ -176,13 +130,11 @@ your options page that will email your current password to you.
* Основной объем информации, который вы должны дать, представляет собой вывод программ, таких, как man:dmesg[8], или консольные сообщения, которые обычно появляются в файле [.filename]#/var/log/messages#. Не пытайтесь скопировать эту информацию, набрав ее снова; это действительно трудно, и здесь легко сделать ошибку. Чтобы послать содержимое файлов протоколов, сделайте копию файла и воспользуйтесь редактором для того, чтобы обрезать информацию, оставив только относящуюся к делу, либо скопируйте и вставьте текст в ваше сообщение. В случае вывода программ, таких, как man:dmesg[8], перенаправьте вывод в файл и включите его в письмо. Например,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
-
....
-
-+
++
Эта команда перенаправляет информацию в файл [.filename]#/tmp/dmesg.out#.
* Если вы все это сделали, и все же не можете получить ответа, этому могут быть другие причины. Например, проблема столь сложна, что никто не знает ответа, или тот, кто знает, отсутствовал. Если вы не получили ответа, скажем, в течении недели, может помочь повторная посылка сообщения. Если вы не получили ответа на свое второе послание, скорее всего, вы вовсе не получите его из этого списка рассылки. Повторная посылка того же самого сообщения снова и снова только повредит вашей репутации.
@@ -193,7 +145,6 @@ your options page that will email your current password to you.
====
....
-
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
@@ -207,13 +158,12 @@ 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
+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
+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.
....
@@ -233,7 +183,7 @@ Missing Operating System.
. Многие замечания, касающиеся посылки вопросов, относятся и к ответам на них. Прочтите эти замечания.
. Ответил ли кто-либо на вопрос? Самым простым способом проверить это является сортировка входящей почты по темам писем: тогда (надеемся) вы увидите вопрос с последующими ответами все вместе.
-+
++
Если кто-то уже ответил на вопрос, это вовсе не значит, что вы не должны посылать свой ответ. Но сначала имеет смысл прочитать все другие ответы.
. Есть ли у вас что добавить сверх того, что уже было сказано? В общем случае ответы "Yeah, me too" сильно не помогут, хотя есть и исключения, например, когда кто-нибудь описывает свою проблему и не знает, его ли это ошибка, или что-то не так с аппаратным или программным обеспечением. Если вы посылаете сообщение "me too", включите также относящуюся к делу информацию.
. Уверены ли вы, что поняли вопрос? Очень часто тот, кто задает вопрос, путается или не может все хорошо описать. Даже при самом полном понимании системы легко послать ответ, который не отвечает на вопрос. К сожалению, так вы никому не поможете, только ещё больше запутаете и разочаруете спрашивающего. Если никто больше не отвечает, или вы не очень уверены, то всегда можете запросить более подробную информацию.
@@ -244,7 +194,7 @@ Missing Operating System.
. Поместите ваш ответ в правильном месте (после текста, на который вы отвечаете). Очень трудно читать набор ответов, когда каждый из них следует перед текстом, к которому относится.
. Большинство почтовых программ меняют строку темы письма в ответе, предваряя ее текстом типа "Re: ". Если ваша почтовая программа не делает это автоматически, вы должны делать это вручную.
. Если спрашивающий не следует соглашениям по форматированию текста (слишком длинные строки, неподходящая строка темы), __пожалуйста__, исправьте эти ошибки. В случае некорректной строки темы письма (типа "HELP!!??") измените её, например, так: "Re: Difficulties with sync PPP (was: HELP!!??)". В таком случае у других людей, пытающихся отследить обсуждение, будет меньше проблем.
-+
++
В таких случаях хорошо сказать, что вы сделали и почему, но постарайтесь не грубить. Если вы чувствуете, что не можете ответить, не скатываясь на грубость, воздержитесь от ответа вообще.
-+
++
Если вы хотите ответить на сообщение лишь потому, что оно плохо оформлено, ответьте только автору, но не в список. Если хотите, то в ответ можете просто послать ему эту статью.
diff --git a/documentation/content/ru/articles/freebsd-questions/_index.po b/documentation/content/ru/articles/freebsd-questions/_index.po
new file mode 100644
index 0000000000..7921b65987
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-questions/_index.po
@@ -0,0 +1,940 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: 2025-10-02 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-questions_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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 ""
+"Как работать со списком рассылки FreeBSD-questions c максимальной отдачей"
+
+#. 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 ""
+"В этом документе содержится информация, которая будет полезна тем, кто "
+"собирается отправить письмо в список рассылки FreeBSD-questions. Даются "
+"советы и рекомендации, которые максимально увеличат шанс на получение "
+"полезных ответов."
+
+#. 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 ""
+"Этот документ регулярно публикуется в списке рассылки 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 "Введение"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:58
+msgid ""
+"`FreeBSD-questions` is a mailing list maintained by the FreeBSD project to "
+"help people who have questions about the normal use of FreeBSD. Another "
+"group, `FreeBSD-hackers`, discusses more advanced questions such as future "
+"development work."
+msgstr ""
+"`FreeBSD-questions` является списком рассылки, который поддерживается "
+"проектом FreeBSD для оказания помощи тем, у кого возникли вопросы по поводу "
+"использования FreeBSD в повседневной работе. В другом списке рассылки, "
+"`FreeBSD-hackers`, обсуждаются более сложные вопросы, такие, как направление "
+"будущей работы над системой."
+
+#. 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 ""
+"Термин \"хакер\" не имеет ничего общего с проникновением на компьютеры "
+"других людей. Правильным термином для обозначения такой деятельности "
+"является \"кракер\", однако популярная пресса этого еще не поняла. Хакеры "
+"FreeBSD нарушением защиты не занимаются. Более полное описание хакеров "
+"находится в руководстве Эрика Рэймонда (Eric Raymond) http://www.catb.org/~"
+"esr/faqs/hacker-howto.html[Как стать хакером]"
+
+#. 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 ""
+"Данный регулярно рассылаемый документ предназначен для помощи как тем, кто "
+"ищет ответов на вопросы во FreeBSD-questions (\"новички\"), так и тем, кто "
+"на эти вопросы отвечает (\"хакеры\")."
+
+#. 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 ""
+"В этом документе я постараюсь уменьшить это разочарование и помочь всем "
+"получить более хорошие результаты от FreeBSD-questions. В следующем разделе "
+"я дам рекомендации по посылке вопросов; после этого мы посмотрим, как нужно "
+"на них отвечать."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:76
+#, no-wrap
+msgid "How to Subscribe to FreeBSD-questions"
+msgstr "Как подписаться на FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:82
+msgid ""
+"FreeBSD-questions is a mailing list, so you need mail access. Point your "
+"WWW browser to the {freebsd-questions}. In the section titled \"Subscribe "
+"or unsubscribe online\" fill in the \"Your email address\" field and hit "
+"\"Subscribe\". Or send an email to freebsd-questions+subscribe@freebsd.org."
+msgstr ""
+"FreeBSD-questions является списком рассылки, распространяемым по электронной "
+"почте, поэтому вам нужен доступ к системе электронной почты. Зайдите через "
+"ваш WWW браузер на {freebsd-questions}. В разделе \"Подписка на freebsd-"
+"questions\" (Subscribing to freebsd-questions) заполните поле \"Ваш адрес "
+"электронной почты\" (Your email address); другие поля являются опциональными."
+
+#. 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 ""
+"Вы получите подтверждающее сообщение от mlmmj; следуйте приложенным "
+"инструкциям для завершения подписки."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:85
+#, no-wrap
+msgid "How to Unsubscribe from FreeBSD-questions"
+msgstr "Как отписаться от 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 ""
+"Направьте ваш браузер на {freebsd-questions}. В разделе \"Subscribe or "
+"unsubscribe online\" заполните поле \"Your email address\" и нажмите "
+"\"Unsubscribe\". Или отправьте письмо на 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 ""
+"Сообщение с подтверждением будет отправлено вам от mlmmj; следуйте "
+"приложенным инструкциям, чтобы завершить отмену подписки."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:93
+#, no-wrap
+msgid "Should I ask `-questions` or `-hackers`?"
+msgstr "Нужно задавать вопросы в `-questions` или `-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 ""
+"Общим вопросам по FreeBSD посвящены два списка рассылки, `FreeBSD-questions` "
+"и `FreeBSD-hackers`. В некоторых случаях на самом деле не ясно, в каком "
+"списке нужно задавать вопрос. Следующий критерий, однако, должен помочь в "
+"98% всех случаев:"
+
+#. 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 ""
+"Если вопрос является общим, спрашивайте во `FreeBSD-questions`. Примерами "
+"могут служить вопросы по установке FreeBSD или использованию конкретных "
+"утилит 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 ""
+"Если вы думаете, что вопрос относится к ошибке, но вы не уверены или не "
+"знаете, как ее исправить, пошлите сообщение во `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 ""
+"Если вопрос относится к ошибке и вы __уверены__, что это ошибка (например, "
+"вы можете указать место в коде, где она происходит, и, может быть, у вас "
+"есть для нее исправление), то пошлите сообщение в список рассылки `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 ""
+"Если вопрос относится к усовершенствованию FreeBSD, и вы можете дать "
+"предложения по ее реализации, то посылайте сообщение во `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 ""
+"Имеется также некоторое количество других extref:{handbook}eresources["
+"специализированных списков рассылки, eresources-mail]. Здесь также подходит "
+"указанный выше критерий, и в ваших интересах следовать ему, потому что "
+"именно так можно получить результат."
+
+#. 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 ""
+"Попытайтесь решить проблему самостоятельно. Если вы пошлёте вопрос, который "
+"покажет, что вы пытались решить проблему, ваш вопрос, как правило, привлечёт "
+"более положительное внимание со стороны людей, читающих его. Попытка решить "
+"проблему самостоятельно также увеличит уровень вашего понимания FreeBSD, и в "
+"конечном счёте позволит вам использовать ваши знания для помощи другим, "
+"отвечая на вопросы, посылаемые в списки рассылки."
+
+#. 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 ""
+"Прочтите страницы справочника и документацию FreeBSD (установлена в [."
+"filename]#/usr/doc# или доступна через WWW на http://www.FreeBSD."
+"org[http://www.FreeBSD.org]), особенно extref:{handbook}[Руководство "
+"пользователя] и 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."
+msgstr ""
+"Просмотрите и/или выполните поиск по архивам списка рассылки, чтобы узнать, "
+"задавался ли ваш вопрос или подобный ему в списке (и возможно, был на него "
+"ответ). Вы можете просматривать и/или искать архивы списка рассылки по "
+"адресам https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] и "
+"https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/"
+"#mailinglists] соответственно."
+
+#. 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 ""
+"Используйте поисковик, например, http://www.google.com[Google] или http://www"
+".yahoo.com[Yahoo] для поиска ответов на ваш вопрос. Google имеет даже "
+"http://www.google.com/bsd[BSD ориентированный поисковой интерфейс]."
+
+#. 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 ""
+"При посылке сообщения в список рассылки FreeBSD-questions, имейте в виду "
+"следующее:"
+
+#. 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 ""
+"Помните, что за ответы на вопросы о FreeBSD никто денег не получает. Все "
+"делают это в свободное время. Вы можете привлечь внимание, послав четко "
+"сформулированный вопрос, содержащий как можно больше относящейся к делу "
+"информации. Вы можете не получить внимания, послав неполный, непонятный или "
+"примитивный вопрос. В действительности можно посылать сообщение в список "
+"рассылки FreeBSD-questions и не получить ответа, даже если вы следуете этим "
+"правилам. Еще более вероятно не получить ответа, если вы им не следуете. В "
+"оставшейся части документа мы рассмотрим, как получить максимум от вопроса "
+"во 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 ""
+"Не всякий человек, могущий ответить на вопрос о FreeBSD, читает все "
+"сообщения: обычно читается строка с темой письма и решается, представляет ли "
+"сообщение интерес. То есть в ваших интересах указать тему письма. \"FreeBSD "
+"problem\" или \"Help\" недостаточно. Если вы не укажете тему вообще, то "
+"многие даже не потрудятся прочесть сообщение. Если тема сообщения "
+"недостаточно конкретна, то люди, которые могут ответить, могут его не "
+"прочесть."
+
+#. 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 ""
+"Не упускайте из виду эффект, который производит плохо отформатированное "
+"письмо, причем не только в списке рассылки FreeBSD-questions. По вашему "
+"почтовому сообщению люди составляют мнение о вас, и если сообщение плохо "
+"отформатировано, содержит по одной строке на абзац, неправильно разделено "
+"или полно ошибок, то о вас сложится плохое впечатление."
+
+#. 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 ""
+"Множество плохо форматированных сообщений возникает из-за http://www.lemis."
+"com/email.html[неправильно работающих или плохо настроенных почтовых "
+"программ]. Известно, что следующие почтовые программы могут посылать "
+"неправильно отформатированные сообщения без вашего ведома об этом:"
+
+#. 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 ""
+"Постарайтесь не использовать MIME: многие используют программы, которые не "
+"очень хорошо работают с 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 ""
+"Проверьте правильность настроек времени и временной зоны. Это может "
+"выглядеть немножко глупо, потому что ваши сообщения все равно будут "
+"доставляться, однако многие люди получают несколько сотен сообщений в день. "
+"Зачастую они сортируют входящие сообщения по теме и дате, и если ваше "
+"сообщение не будет предшествовать первому ответу, то они могут предположить, "
+"что оно потерялось и даже не взглянут на него."
+
+#. 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 ""
+"Практически в любом случае важно знать версию FreeBSD, с которой вы "
+"работаете. Особенно, в частности, в случае FreeBSD-CURRENT вы должны также "
+"указать дату исходных текстов, хотя, конечно, вам не нужно посылать "
+"сообщения о -CURRENT в список рассылки 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 ""
+"В случае любой проблемы, которая _может_ быть связана с работой "
+"оборудования, расскажите о вашем аппаратном обеспечении. В случае сомнений "
+"предположите, что это, возможно, вина оборудования. Какой тип процессора "
+"используется? Насколько он быстр? Какая материнская плата? Сколько "
+"установлено памяти? Какое периферийное оборудование?"
+
+#. 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 ""
+"Здесь вам стоит подумать и принять решение, конечно, но вывод команды "
+"man:dmesg[8] зачастую может оказаться очень полезным, так как он говорит не "
+"только об оборудовании, с которым вы работаете, но также и о версии 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 ""
+"Если выдаются сообщения об ошибках, недостаточно написать \"I get error "
+"messages\", напишите (например) \"I get the error message '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 ""
+"Если ваша система завершает работу аварийно, не пишите \"My system panicked\""
+", напишите (к примеру) \"my system panicked with the message '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 ""
+"Если у вас возникли трудности при установке FreeBSD, пожалуйста, опишите "
+"ваше оборудование. В частности, важно знать адреса ввода/вывода и IRQ "
+"адаптеров, установленных в вашей машине."
+
+#. 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 ""
+"Если у вас возникли трудности в настройке PPP, опишите настройку. Какую "
+"версию PPP вы используете? Какой тип аутентификации? У вас используется "
+"статическое или динамическое выделение адресов IP? Какие сообщения вы "
+"получили в файле протокола?"
+
+#. 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 ""
+"Основной объем информации, который вы должны дать, представляет собой вывод "
+"программ, таких, как man:dmesg[8], или консольные сообщения, которые обычно "
+"появляются в файле [.filename]#/var/log/messages#. Не пытайтесь скопировать "
+"эту информацию, набрав ее снова; это действительно трудно, и здесь легко "
+"сделать ошибку. Чтобы послать содержимое файлов протоколов, сделайте копию "
+"файла и воспользуйтесь редактором для того, чтобы обрезать информацию, "
+"оставив только относящуюся к делу, либо скопируйте и вставьте текст в ваше "
+"сообщение. В случае вывода программ, таких, как man:dmesg[8], перенаправьте "
+"вывод в файл и включите его в письмо. Например,"
+
+#. 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 ""
+"Эта команда перенаправляет информацию в файл [.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 ""
+"Если вы все это сделали, и все же не можете получить ответа, этому могут "
+"быть другие причины. Например, проблема столь сложна, что никто не знает "
+"ответа, или тот, кто знает, отсутствовал. Если вы не получили ответа, "
+"скажем, в течении недели, может помочь повторная посылка сообщения. Если вы "
+"не получили ответа на свое второе послание, скорее всего, вы вовсе не "
+"получите его из этого списка рассылки. Повторная посылка того же самого "
+"сообщения снова и снова только повредит вашей репутации."
+
+#. 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 "Сообщение 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 ""
+"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"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:174
+#, no-wrap
+msgid "Message 2"
+msgstr "Сообщение 2"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:180
+#, no-wrap
+msgid "Subject: Problems installing FreeBSD\n"
+msgstr "Subject: Problems installing 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 ""
+"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"
+
+#. 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 ""
+"Ссылочные номера сообщений в заголовке будут указывать на предыдущее "
+"сообщение. Некоторые почтовые программы, такие, как http://www.mutt.org/"
+"[mutt], могут _упорядочивать_ сообщения, показывая точную связь между ними."
+
+#. 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 ""
+"Перед тем, как отвечать на вопрос в списке рассылки FreeBSD-questions, "
+"имейте в виду:"
+
+#. 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 ""
+"Есть ли у вас что добавить сверх того, что уже было сказано? В общем случае "
+"ответы \"Yeah, me too\" сильно не помогут, хотя есть и исключения, например, "
+"когда кто-нибудь описывает свою проблему и не знает, его ли это ошибка, или "
+"что-то не так с аппаратным или программным обеспечением. Если вы посылаете "
+"сообщение \"me too\", включите также относящуюся к делу информацию."
+
+#. 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 ""
+"Уверены ли вы, что ваш ответ корректен? Если нет, то подождите пару дней. "
+"Если никого больше не появится с лучшим ответом, чем ваш, то вы можете "
+"ответить и сказать, например, \"I don't know if this is correct, but since "
+"nobody else has replied, why don't you try replacing your ATAPI CDROM with a "
+"frog?\"."
+
+#. 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 ""
+"Если нет причин поступить как-то иначе, то ответьте отправителю и в список "
+"рассылки FreeBSD-questions. Многие подписчики FreeBSD-questions \"таятся\": "
+"они учатся на чтении сообщений, посланных и отвеченных другими. Если вы "
+"пошлете сообщение, представляющее интерес для всех, минуя список рассылки, "
+"то лишите этих людей их информации. Будьте внимательны при ответе всем; "
+"многие посылают сообщения с сотнями CC-адресатов. В таких случаях удалите "
+"лишние строки Cc:."
+
+#. 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 ""
+"Большинство почтовых программ меняют строку темы письма в ответе, предваряя "
+"ее текстом типа \"Re: \". Если ваша почтовая программа не делает это "
+"автоматически, вы должны делать это вручную."
+
+#. 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 ""
+"Если спрашивающий не следует соглашениям по форматированию текста (слишком "
+"длинные строки, неподходящая строка темы), __пожалуйста__, исправьте эти "
+"ошибки. В случае некорректной строки темы письма (типа \"HELP!!??\") "
+"измените её, например, так: \"Re: Difficulties with sync PPP (was: HELP!!??)"
+"\". В таком случае у других людей, пытающихся отследить обсуждение, будет "
+"меньше проблем."
+
+#. 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/ru/articles/freebsd-releng/_index.adoc b/documentation/content/ru/articles/freebsd-releng/_index.adoc
new file mode 100644
index 0000000000..d02aebc780
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-releng/_index.adoc
@@ -0,0 +1,952 @@
+---
+authors:
+ -
+ author: 'Glen Barber'
+ email: gjb@FreeBSD.org
+description: 'Описывает подход, используемый командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества. В нем описаны инструменты, доступные тем, кто заинтересован в создании настраиваемых релизов FreeBSD для корпоративного внедрения или коммерческой продуктивизации'
+organizations:
+ -
+ organization: 'The FreeBSD Foundation'
+ webpage: https://www.freebsdfoundation.org/
+ -
+ organization: 'Rubicon Communications, LLC (Netgate)'
+ webpage: https://www.netgate.com/
+tags: ["releases", "engineering", "process", "FreeBSD"]
+title: 'Подготовка релизов FreeBSD'
+trademarks: ["freebsd", "intel", "general", "git"]
+---
+
+= Подготовка релизов FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:teamBugmeister: FreeBSD Bugmeister Team
+:teamDoceng: FreeBSD Documentation Engineering Team
+:teamPortmgr: FreeBSD Ports Management Team
+:teamPostmaster: FreeBSD Postmaster Team
+:teamRe: FreeBSD Release Engineering Team
+:teamSecteam: FreeBSD Security Team
+:branchHead: main
+:branchStable: stable/
+:branchStablex: stable/13
+:branchReleng: releng/
+:branchRelengx: releng/13.0
+:tagReleasex: release/13.0.0
+:branchRevision: 13.0
+
+:images-path: articles/freebsd-releng/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+В этой статье описывается процесс разработки релизов проекта FreeBSD.
+
+'''
+
+toc::[]
+
+[[introduction]]
+== Введение в процесс разработки релизов FreeBSD
+
+Разработка FreeBSD следует очень специфичному рабочему процессу. В общем
+случае все изменения в базовой системе FreeBSD вносятся в ветку
+{branchHead}, которая отражает вершину дерева исходного кода.
+
+После достаточного периода тестирования изменения могут быть объединены в
+ветки {branchStable}. Минимальный срок по умолчанию перед объединением в
+ветки {branchStable} составляет три (3) дня.
+
+Хотя общее правило предписывает выждать минимум три дня перед слиянием из
+{branchHead}, существуют особые обстоятельства, при которых может
+потребоваться немедленное слияние, например, критическое исправление
+безопасности или исправление ошибки, напрямую блокирующей процесс сборки
+выпуска.
+
+Через несколько месяцев, когда количество изменений в ветке {branchStable}
+значительно увеличилось, наступает время выпуска следующей версии
+FreeBSD. Исторически такие выпуски называются релизами "с точкой".
+
+Между выпусками из ветвей {branchStable}, примерно каждые два (2) года,
+выпуск будет создаваться напрямую из {branchHead}. Исторически такие выпуски
+назывались выпуском «точка-ноль (dot-zero)».
+
+Эта статья освещает рабочий процесс и обязанности команды {teamRe} как для
+выпуска "точка-ноль", так и для "промежуточных" выпусков.
+
+Следующие разделы этой статьи описывают:
+
+crossref:freebsd-releng[releng-prep, Общая информация и подготовка]::
+Общая информация и подготовка перед началом цикла выпуска.
+
+crossref:freebsd-releng[releng-website, Изменения на веб-сайте в течение цикла выпуска]::
+Изменения на веб-сайте в течение цикла выпуска
+
+crossref:freebsd-releng[releng-terms, Терминология выпуска релизов]::
+Терминология и общая информация, такие как "мягкая заморозка кода (code
+slush)" и "заморозка кода (code freeze)", используемые в этом документе.
+
+crossref:freebsd-releng[releng-head, Выпуск релиза от {branchHead}]::
+Процесс Release Engineering для релиза "точка-ноль".
+
+crossref:freebsd-releng[releng-stable, Выпуск релиза от {branchStable}]::
+Процесс Release Engineering для "точечного" выпуска.
+
+crossref:freebsd-releng[releng-building, Создание установочных носителей FreeBSD]::
+Информация, относящаяся к конкретным процедурам создания установочного
+носителя.
+
+crossref:freebsd-releng[releng-mirrors, Публикация установочных носителей FreeBSD на зеркалах проекта]::
+Процедуры публикации установочного носителя.
+
+crossref:freebsd-releng[releng-wrapup, Завершение цикла выпуска]::
+Завершение цикла выпуска.
+
+[[releng-prep]]
+== Общая информация и подготовка
+
+Примерно за два месяца до начала цикла выпуска команда {teamRe} определяет
+график выпуска. График включает в себя различные этапы цикла выпуска, такие
+как даты заморозки, даты ветвления и даты сборки. Например:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Веха
+| Предполагаемая дата
+
+|мягкая заморозка {branchHead}:
+|May 27, 2016
+
+|заморозка {branchHead}:
+|June 10, 2016
+
+|заморозка {branchHead} KBI:
+|June 24, 2016
+
+|мягкая заморозка дерева `doc/` [1]:
+|June 24, 2016
+
+|Ежеквартальная ветка Ports [2]:
+|July 1, 2016
+
+|Ветка {branchStablex}:
+|July 8, 2016
+
+|`doc/` tree tag [3]:
+|July 8, 2016
+
+|Начало сборки BETA1:
+|July 8, 2016
+
+|Разморозка {branchHead}:
+|July 9, 2016
+
+|Сборка BETA2 начинается:
+|July 15, 2016
+
+|Сборка BETA3 начинается [*]:
+|July 22, 2016
+
+|Ветка `{branchRelengx}`:
+|July 29, 2016
+
+|Сборка RC1 начинается:
+|July 29, 2016
+
+|Разморозка {branchStablex}:
+|July 30, 2016
+
+|Сборка RC2 начинается:
+|August 5, 2016
+
+|Окончательные сборки пакетов Ports [4]:
+|August 6, 2016
+
+|Метка релиза портов:
+|12 августа 2016
+
+|Сборка RC3 начинается [*]:
+|12 августа 2016
+
+|Сборка RELEASE начинается:
+|August 19, 2016
+
+|Объявление о ВЫПУСКЕ:
+|September 2, 2016
+|===
+
+[NOTE]
+====
+Отметка "[*]" у элементов означает "по мере необходимости".
+====
+
+. Мягкая заморозка дерева `doc/` координируется командой {teamDoceng}.
+. Используемая квартальная ветка Ports определяется по дате запланированной
+ окончательной сборки `RC`. Новая квартальная ветка создаётся в первый день
+ квартала, поэтому этот показатель следует учитывать, принимая во внимание
+ этапы цикла выпуска. Квартальная ветка создаётся командой {teamPortmgr}.
+. Для дерева исходного кода `doc/` tag делается командой {teamDoceng}.
+. Окончательная сборка пакета Ports выполняется командой {teamPortmgr} после
+ финальной (или ожидаемой финальной) сборки `RC`.
+
+[NOTE]
+====
+Если выпуск создаётся из существующей ветки {branchStable}, дату заморозки
+KBI можно исключить, так как KBI уже считается замороженным в устоявшихся
+ветках {branchStable}.
+====
+
+При написании графика цикла выпуска необходимо учитывать ряд факторов,
+особенно этапы, на которые целевая дата зависит от предопределенных этапов,
+от которых существует зависимость. Например, тег выпуска коллекции портов
+берется из активной квартальной ветки на момент последнего `RC`. Это
+частично определяет, какая квартальная ветка используется, когда может быть
+создан тег выпуска и какая версия дерева портов используется для финальной
+сборки `RELEASE`.
+
+После общего согласования расписания команда {teamRe} отправляет расписание
+разработчикам FreeBSD по электронной почте.
+
+Вполне типично, что многие разработчики сообщают команде {teamRe} о
+различных работах в процессе выполнения. В некоторых случаях может быть
+запрошено продление для работы в процессе, а в других случаях может быть
+сделан запрос на "общее одобрение" для определенного подмножества дерева.
+
+При таких запросах важно убедиться, что обсуждаются сроки (даже если они
+приблизительные). Для общих одобрений следует четко указать
+продолжительность действия такого одобрения. Например, разработчик FreeBSD
+может запросить общее одобрение с начала периода мягкой заморозки кода до
+начала сборок `RC`.
+
+[NOTE]
+====
+Для отслеживания общих одобрений команда {teamRe} использует внутренний
+репозиторий, в котором ведется журнал таких запросов. В нем указывается
+область, на которую распространяется общее одобрение, автор(ы), срок
+действия одобрения и причина его выдачи. Например, может быть предоставлено
+общее одобрение для [.filename]#release/doc/# всем членам {teamRe} до
+финального `RC` для обновления примечаний к выпуску и другой связанной с
+выпуском документации.
+====
+
+[NOTE]
+====
+Команда {teamRe} также использует этот репозиторий для отслеживания
+ожидающих одобрения запросов, полученных непосредственно перед началом
+различных сборок во время цикла выпуска, при этом Инженер по выпускам
+указывает срок отсечки с помощью электронного письма разработчикам FreeBSD.
+====
+
+В зависимости от рассматриваемого набора кода и общего влияния этого набора
+кода на FreeBSD в целом, такие запросы могут быть одобрены или отклонены
+командой {teamRe}.
+
+То же самое относится к расширениям для незавершённых работ. Например,
+незавершённая работа над новым драйвером устройства, который в остальном
+изолирован от остального дерева, может получить расширение. Однако новый
+планировщик может оказаться неосуществимым, особенно если такие значительные
+изменения отсутствуют в другой ветке.
+
+Расписание также добавляется на сайт проекта в репозитории `doc/`, в файле
+[.filename]#~/website/content/en/releases/{branchRevision}R/schedule.adoc#.
+Этот файл постоянно обновляется по мере прохождения цикла выпуска.
+
+[NOTE]
+====
+В большинстве случаев файл [.filename]#schedule.adoc# можно скопировать из
+предыдущего релиза и обновить соответствующим образом.
+====
+
+В дополнение к добавлению [.filename]#schedule.adoc# на веб-сайт, файл
+[.filename]#~/shared/releases.adoc# также обновляется, чтобы добавить ссылку
+на расписание на различные подстраницы, а также включить ссылку на
+расписание на главной странице веб-сайта проекта.
+
+Расписание также доступно по ссылке из файла
+[.filename]#~/website/content/en/releng/_index.adoc#.
+
+Примерно за месяц до запланированной "мягкой заморозки кода" команда
+{teamRe} отправляет напоминание разработчикам FreeBSD.
+
+[[releng-terms]]
+== Терминология выпуска релизов
+
+В этом разделе описана часть терминологии, используемой в остальной части
+данного документа.
+
+[[releng-terms-code-slush]]
+=== Мягкая заморозка кода
+
+Хотя мягкая заморозка кода не является полной заморозкой дерева, команда
+{teamRe} просит отдавать приоритет исправлению ошибок в существующей кодовой
+базе перед добавлением новых функций.
+
+Мягкая заморозка кода не требует подтверждений коммитов в ветку.
+
+[[releng-terms-code-freeze]]
+=== Заморозка кода
+
+Замораживание кода означает момент времени, когда все коммиты в ветку
+требуют явного одобрения от {teamRe}.
+
+Репозиторий FreeBSD Git содержит несколько хуков для выполнения проверок
+перед тем, как изменения будут зафиксированы в дереве. Один из этих хуков
+проверяет, требуются ли специальные разрешения для фиксации изменений в
+определённой ветке.
+
+Для обеспечения утверждения коммитов командой {teamRe}, команда Release
+Engineering должна утверждать любые изменения в ветке. В этом случае журнал
+коммитов должен содержать строку `Approved by: re (логин)`, где "логин" —
+это идентификатор утверждающего.
+
+[NOTE]
+====
+Во время заморозки кода участники проекта FreeBSD должны следовать
+link:https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Рекомендациям
+по запросам изменений].
+====
+
+[[releng-terms-kbi-freeze]]
+=== Замораживание KBI/KPI
+
+KBI/KPI стабильность подразумевает, что вызов функции в двух разных релизах
+программного обеспечения, реализующего эту функцию, приводит к одинаковому
+конечному состоянию. Вызывающая сторона, будь то процесс, поток или функция,
+ожидает, что функция будет работать определённым образом, в противном случае
+стабильность KBI/KPI на ветке нарушается.
+
+[[releng-website]]
+== Изменения на веб-сайте в течение цикла выпуска
+
+Этот раздел описывает изменения на веб-сайте, которые должны происходить по
+мере развития цикла выпуска.
+
+[NOTE]
+====
+Файлы, указанные в этом разделе, относятся к ветке `{branchHead}`
+репозитория `doc`.
+====
+
+[[releng-website-prerelease]]
+=== Изменения на веб-сайте перед началом цикла выпуска
+
+Когда график цикла выпуска становится доступным, эти файлы необходимо
+обновить, чтобы включить различные функции на веб-сайте проекта FreeBSD:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#~/shared/releases.adoc#
+|Изменить `beta-upcoming` с `IGNORE` на `INCLUDE`
+
+|[.filename]#~/shared/releases.adoc#
+|Изменить `beta-testing` с `IGNORE` на `INCLUDE`
+
+|===
+
+[[releng-website-beta-rc]]
+=== Изменения на веб-сайте в период `BETA` или `RC`
+
+При переходе от `PRERELEASE` к `BETA` эти файлы необходимо обновить, чтобы
+включить блок "Help Test (Помогите протестировать)" на странице
+загрузки. Все файлы указаны относительно [.filename]#head/# в репозитории
+`doc`:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#~/shared/releases.adoc#
+|Обновите `betarel-vers` до `BETA__1__`
+
+|[.filename]#~/website/data/en/news/news.toml#
+|Добавьте запись, объявляющую о `BETA`
+
+|[.filename]#~/website/static/security/advisory-template.txt#
+|Добавьте новую `BETA`, `RC` или финальную `RELEASE` в шаблон
+
+|[.filename]#~/website/static/security/errata-template.txt#
+|Добавьте новую `BETA`, `RC` или финальную `RELEASE` в шаблон
+|===
+
+После создания ветки {branchRelengx} необходимо добавить различные
+документы, связанные с выпуском, в репозиторий `doc/`.
+
+[NOTE]
+====
+Соответствующие документы, связанные с выпусками, находятся в репозитории
+[.filename]#doc# для FreeBSD 12.x и более поздних версий.
+====
+
+[[releng-ports-beta-rc]]
+=== Изменения в портах во время `BETA`, `RC` и финального `RELEASE`
+
+Для каждой сборки в течение цикла выпуска файлы `MANIFEST`, содержащие
+`SHA256` для различных наборов дистрибутива, таких как `base.txz`,
+`kernel.txz` и других, добавляются в порт
+package:misc/freebsd-release-manifests[]. Это позволяет другим утилитам,
+кроме , таким как package:ports-mgmt/poudriere[], безопасно использовать эти
+наборы дистрибутива, предоставляя механизм для проверки контрольных сумм.
+
+[[releng-head]]
+== Выпуск релиза от {branchHead}
+
+Этот раздел описывает общие процедуры цикла выпуска FreeBSD из ветки
+{branchHead}.
+
+[[releng-head-builds-alpha]]
+=== FreeBSD "`ALPHA`" сборки
+
+Начиная с цикла выпуска FreeBSD 10.0-RELEASE, было введено понятие сборок
+"`ALPHA`". В отличие от сборок `BETA` и `RC`, сборки `ALPHA` не включены в
+график выпуска FreeBSD.
+
+Идея сборок `ALPHA` заключается в предоставлении регулярных сборок FreeBSD
+до создания ветки {branchStable}.
+
+Снимки состояния `ALPHA` FreeBSD должны собираться примерно раз в неделю.
+
+Для первой сборки `ALPHA` значение `BRANCH` в
+[.filename]#sys/conf/newvers.sh# необходимо изменить с `CURRENT` на
+`ALPHA1`. Для последующих сборок `ALPHA` увеличивайте каждое значение
+`ALPHA__N__` на единицу.
+
+См. crossref:freebsd-releng[releng-building, Сборка установочных носителей
+FreeBSD] для получения информации о сборке образов `ALPHA`.
+
+[[releng-head-branching]]
+=== Создание ветки {branchStablex}
+
+При создании ветки {branchStable} необходимо внести несколько изменений как
+в новой ветке {branchStable}, так и в ветке {branchHead}. Указанные файлы
+относятся к корню репозитория. Чтобы создать новую ветку {branchStablex} в
+Git:
+
+[NOTE]
+====
+Убедитесь, что вы находитесь в ветке {branchHead}
+====
+
+[source, shell, subs="attributes"]
+....
+% git checkout -b {branchStablex}
+....
+
+После создания ветки {branchStablex} внесите следующие изменения:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#UPDATING#
+|Обновите версию FreeBSD и удалите уведомление о `WITNESS`
+
+|[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#
+a|
+
+[source,shell,subs="attributes"]
+....
+#ifndef MALLOC_PRODUCTION
+#define MALLOC_PRODUCTION
+#endif
+....
+
+|[.filename]#lib/clang/llvm.build.mk#
+|Раскомментируйте `-DNDEBUG`
+
+|[.filename]#sys/\*/conf/GENERIC*#
+|Удалите поддержку отладки
+
+|[.filename]#sys/*/conf/MINIMAL#
+|Удалите поддержку отладки
+
+|[.filename]#release/release.conf.sample#
+|Обновите `SRCBRANCH`
+
+|[.filename]#sys/*/conf/GENERIC-NODEBUG#
+|Удалите следующие параметры конфигурации ядра
+
+|[.filename]#sys/arm/conf/std.arm*#
+|Удалите отладочные опции
+
+|[.filename]#sys/conf/newvers.sh#
+|Обновите значение `BRANCH`, чтобы оно соответствовало `BETA1`
+
+|[.filename]#share/mk/src.opts.mk#
+|Переместите `REPRODUCIBLE_BUILD` из `\__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS`
+
+|[.filename]#share/mk/src.opts.mk#
+|Переместите `LLVM_ASSERTIONS` из `\__DEFAULT_YES_OPTIONS` в `__DEFAULT_NO_OPTIONS`
+
+|[.filename]#libexec/rc/rc.conf#
+|Установите `dumpdev` с `AUTO` на `NO` (это настраивается для тех, кто хочет включить его по умолчанию)
+
+|[.filename]#release/Makefile#
+|Удалите записи `debug.witness.trace`
+|===
+
+Затем в ветке {branchHead}, которая теперь станет новой основной версией:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#UPDATING#
+|Обновите версию FreeBSD
+
+|[.filename]#sys/conf/newvers.sh#
+|Обновите значение `BRANCH`, чтобы оно соответствовало `CURRENT`, и увеличьте `REVISION`
+
+|[.filename]#Makefile.inc1#
+|Обновите `TARGET_TRIPLE` и `MACHINE_TRIPLE`
+
+|[.filename]#sys/sys/param.h#
+|Обновите `__FreeBSD_version`
+
+|[.filename]#gnu/usr.bin/cc/cc_tools/freebsd-native.h#
+|Обновите `FBSD_MAJOR` и `FBSD_CC_VER`
+
+|[.filename]#contrib/gcc/config.gcc#
+|Добавьте раздел `freebsdversion.h`
+
+|[.filename]#lib/clang/llvm.build.mk#
+|Обновите значение `OS_VERSION`
+
+|[.filename]#lib/clang/freebsd_cc_version.h#
+|Обновите `FREEBSD_CC_VERSION`
+
+|[.filename]#lib/clang/include/lld/Common/Version.inc#
+|Обновите `LLD_REVISION_STRING`
+
+|[.filename]#Makefile.libcompat#
+|Обновите `LIB32CPUFLAGS`
+|===
+
+[[releng-stable]]
+== Выпуск релиза от {branchStable}
+
+Этот раздел описывает общие процедуры цикла выпуска FreeBSD из установленной
+ветки {branchStable}.
+
+[[releng-stable-slush]]
+=== Мягкая заморозка кода ветки `stable` FreeBSD
+
+В рамках подготовки к заморозке кода в ветке `stable` необходимо обновить
+несколько файлов, чтобы отразить официальное начало цикла выпуска. Эти файлы
+находятся в корневом каталоге ветки stable:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#sys/conf/newvers.sh#
+|Обновите значение `BRANCH`, чтобы отразить `PRERELEASE`
+
+|[.filename]#Makefile.inc1#
+|Обновите `TARGET_TRIPLE`
+
+|[.filename]#lib/clang/llvm.build.mk#
+|Обновите `OS_VERSION`
+
+|[.filename]#Makefile.libcompat#
+|Обновите `LIB32CPUFLAGS`
+|===
+
+[[releng-stable-builds-beta]]
+=== Сборки FreeBSD `BETA`
+
+После периода мягкой заморозки следующая фаза цикла выпуска — это заморозка
+кода. На этом этапе все коммиты в стабильную ветку требуют явного одобрения
+от {teamRe}. Это контролируется {git-admin-email}, который управляет
+репозиторием.
+
+[NOTE]
+====
+Существует два общих исключения, когда не требуется подтверждение коммита во
+время цикла выпуска. Первое — любые изменения, которые необходимо
+закоммитить инженеру выпуска для продолжения ежедневной работы цикла
+выпуска. Второе — исправления безопасности, которые могут возникнуть во
+время цикла выпуска.
+====
+
+После вступления в силу заморозки кода следующая сборка из ветки помечается
+как `BETA1`. Это делается путём изменения значения `BRANCH` в файле
+[.filename]#sys/conf/newvers.sh# с `PRERELEASE` на `BETA1`.
+
+После этого начинается первая сборка `BETA`. Последующие сборки `BETA` не
+требуют обновления каких-либо файлов, кроме
+[.filename]#sys/conf/newvers.sh#, с увеличением номера сборки `BETA`.
+
+[[releng-stable-branching]]
+=== Создание ветки {branchRelengx}
+
+Когда первая сборка `RC` (Release Candidate) готова к началу, создается
+ветка {branchReleng}. Это многоэтапный процесс, который должен выполняться в
+определенном порядке, чтобы избежать аномалий, таких как пересечения
+значений `__FreeBSD_version`, например. Указанные ниже пути относятся к
+корню репозитория. Порядок коммитов и что нужно изменить:
+
+[NOTE]
+====
+Убедитесь, что вы находитесь в ветке {branchStablex}
+====
+
+[source, shell, subs="attributes"]
+....
+% git checkout -b {branchRelengx}
+....
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#sys/conf/newvers.sh#
+|Измените `BETA__X__` на `RC1`
+
+|[.filename]#sys/sys/param.h#
+|Обновите `__FreeBSD_version`
+
+|[.filename]#sys/conf/kern.opts.mk#
+|Переместите `REPRODUCIBLE_BUILD` из `__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS`
+
+|[.filename]#etc/pkg/FreeBSD.conf#
+|Замените `latest` на `quarterly` в качестве расположения репозитория пакетов по умолчанию
+
+|[.filename]#release/pkg_repos/release-dvd.conf#
+|Замените `latest` на `quarterly` в качестве расположения репозитория пакетов по умолчанию
+
+|[.filename]#sys/conf/newvers.sh#
+|Обновите `BETA__X__` на `PRERELEASE`
+
+|[.filename]#sys/sys/param.h#
+|Обновите `__FreeBSD_version`
+|===
+
+Затем {git-admin-email} добавляет новых утверждающих для ветки releng, как
+это было сделано для ветки stable.
+
+[source, shell, subs="attributes"]
+....
+% git add .
+% git commit
+....
+
+Теперь, когда существуют два новых значения `__FreeBSD_version`, также
+обновите файл
+[.filename]#~/documentation/content/en/books/porters-handbook/versions/chapter.adoc#
+в репозитории проекта документации.
+
+После завершения первой сборки `RC` и её тестирования ветку {branchStable}
+можно «разморозить» с помощью {git-admin-email}.
+
+После появления первой версии `RC` необходимо отправить письмо команде
+{teamBugmeister}, чтобы добавить новую версию FreeBSD `-RELEASE` в список
+`versions`, доступный в выпадающем меню трекера ошибок.
+
+[[releng-building]]
+== Создание установочных носителей FreeBSD
+
+Этот раздел описывает общие процедуры создания снимков разработки и выпусков
+FreeBSD.
+
+[[releng-build-scripts]]
+=== Скрипты сборки релизов
+
+До выхода FreeBSD 9.0-RELEASE файл [.filename]#src/release/Makefile# был
+обновлен для поддержки , а скрипт
+[.filename]#src/release/generate-release.sh# был добавлен в качестве обертки
+для автоматизации вызова целей.
+
+До выхода FreeBSD 9.2-RELEASE был представлен
+[.filename]#src/release/release.sh#, который, основываясь на
+[.filename]#src/release/generate-release.sh#, включал поддержку указания
+конфигурационных файлов для переопределения различных опций и переменных
+окружения. Поддержка конфигурационных файлов обеспечила возможность
+кросс-сборки каждого архитектурного варианта для релиза путем указания
+отдельного конфигурационного файла для каждого вызова.
+
+В качестве краткого примера использования
+[.filename]#src/release/release.sh# для сборки одного релиза в
+[.filename]#/scratch#:
+
+[source, shell, subs="attributes"]
+....
+# /bin/sh /usr/src/release/release.sh
+....
+
+В качестве краткого примера использования
+[.filename]#src/release/release.sh# для сборки единого кросс-собранного
+выпуска с использованием другого целевого каталога, создайте
+пользовательский [.filename]#release.conf#, содержащий:
+
+[.programlisting, subs="attributes"]
+....
+# release.sh configuration for powerpc/powerpc64
+CHROOTDIR="/scratch-powerpc64"
+TARGET="powerpc"
+TARGET_ARCH="powerpc64"
+KERNEL="GENERIC64"
+....
+
+Затем выполните [.filename]#src/release/release.sh# следующим образом:
+
+[source, shell, subs="attributes"]
+....
+# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf
+....
+
+См. [.filename]#src/release/release.conf.sample# для получения
+дополнительных сведений и примеров использования.
+
+[[releng-build-release]]
+=== Сборка релизов FreeBSD
+
+В течение цикла выпуска копии файлов [.filename]#CHECKSUM.SHA512# и
+[.filename]#CHECKSUM.SHA256# для каждой архитектуры сохраняются во
+внутреннем репозитории {teamRe}, а также включаются в различные рассылки с
+объявлениями. Каждый файл [.filename]#MANIFEST#, содержащий хеши
+[.filename]#base.txz#, [.filename]#kernel.txz# и других, также добавляется в
+пакет package:misc/freebsd-release-manifests[] в Коллекции портов.
+
+В подготовке к сборке выпуска необходимо обновить несколько файлов:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл для редактирования
+| Что изменить
+
+|[.filename]#sys/conf/newvers.sh#
+|Обновите значение `BRANCH` на `RELEASE`
+
+|[.filename]#UPDATING#
+|Добавьте предполагаемую дату объявления
+
+|[.filename]#lib/csu/common/crtbrand.S#
+|Замените `__FreeBSD_version` на значение из [.filename]#sys/sys/param.h#
+|===
+
+После сборки окончательного `RELEASE`, ветка {branchRelengx} помечается как
+{tagReleasex}, используя ревизию, из которой был собран
+`RELEASE`. Аналогично созданию веток {branchStablex} и {branchRelengx}, это
+делается с помощью `git tag`. Из корня репозитория:
+
+[NOTE]
+====
+Убедитесь, что вы находитесь в ветке {branchRelengx}
+====
+
+[source, shell, subs="attributes"]
+....
+% git tag {tagReleasex}
+....
+
+[[releng-mirrors]]
+== Публикация установочных носителей FreeBSD на зеркалах проекта
+
+Этот раздел описывает процедуру публикации снимков разработки FreeBSD и
+выпусков на зеркала Проекта.
+
+[[releng-mirrors-staging]]
+=== Подготовка образов установочных носителей FreeBSD
+
+Этап подготовки (staging) снимков и выпусков FreeBSD — это двухэтапный
+процесс:
+
+* Создание структуры каталогов, соответствующей иерархии на `ftp-master`
++
+Если `EVERYTHINGISFINE` определено в конфигурационных файлах сборки,
+[.filename]#main.conf# в случае скриптов сборки, упомянутых выше, это
+происходит автоматически после завершения сборки, создавая структуру
+каталогов в [.filename]#${DESTDIR}/R/ftp-stage# с путями, соответствующими
+ожидаемым на `ftp-master`. Это эквивалентно выполнению следующего в
+директории:
++
+[source, shell, subs="attributes"]
+....
+# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage
+....
++
+После сборки каждой архитектуры скрипт [.filename]#thermite.sh# выполнит
+синхронизацию [.filename]#${DESTDIR}/R/ftp-stage# с билда в директории
+[.filename]#/snap/ftp/snapshots# или [.filename]#/snap/ftp/releases# на
+хосте сборки, соответственно.
+* Копирование файлов в промежуточный каталог на `ftp-master` перед
+ перемещением файлов в [.filename]#pub/# для начала распространения на
+ зеркала Проекта
++
+После завершения всех сборок каталог [.filename]#/snap/ftp/snapshots# (или
+[.filename]#/snap/ftp/releases# для релиза) опрашивается `ftp-master`-ом с
+использованием rsync для передачи в [.filename]#/archive/tmp/snapshots# или
+[.filename]#/archive/tmp/releases#, соответственно.
++
+[NOTE]
+====
+На `ftp-master` в инфраструктуре проекта FreeBSD этот шаг требует доступа
+уровня `root`, так как он должен выполняться от имени пользователя
+`archive`.
+====
+
+[[releng-mirrors-publishing]]
+=== Публикация установочных носителей FreeBSD
+
+Как только образы размещены в [.filename]#/archive/tmp/#, они готовы к
+публикации путем размещения в [.filename]#/archive/pub/FreeBSD#. Для
+уменьшения времени распространения используются жесткие ссылки из
+[.filename]#/archive/tmp# в [.filename]#/archive/pub/FreeBSD#.
+
+[NOTE]
+====
+Для эффективной работы и [.filename]#/archive/tmp#, и
+[.filename]#/archive/pub# должны находиться в одной логической файловой
+системе.
+====
+
+Однако есть оговорка: после этого необходимо использовать rsync для
+исправления символических ссылок в
+[.filename]#pub/FreeBSD/snapshots/ISO-IMAGES#, которые будут заменены на
+жёсткие ссылки, что увеличит время распространения.
+
+[NOTE]
+====
+Как и на этапе подготовки, это требует доступа уровня `root`, так как данный
+шаг должен быть выполнен от имени пользователя `archive`.
+====
+
+Как пользователь `archive`:
+
+[source, shell, subs="attributes"]
+....
+% cd /archive/tmp/snapshots
+% pax -r -w -l . /archive/pub/FreeBSD/snapshots
+% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/
+....
+
+Замените _снимки_ на _релизы_ там, где это уместно.
+
+[[releng-wrapup]]
+== Завершение цикла выпуска
+
+Этот раздел описывает общие задачи после выпуска.
+
+[[releng-wrapup-en]]
+=== Уведомления об исправлениях после выпуска
+
+По мере приближения цикла выпуска к завершению часто появляются несколько
+кандидатов в EN (Errata Notice — уведомления об ошибках) для устранения
+проблем, обнаруженных на поздних этапах цикла. После выпуска {teamRe} и
+{teamSecteam} пересматривают изменения, которые не были одобрены до
+финального выпуска, и, в зависимости от масштаба рассматриваемого изменения,
+могут выпустить EN.
+
+[NOTE]
+====
+Фактический процесс выпуска EN обрабатывается командой {teamSecteam}.
+====
+
+Для запроса уведомления об ошибке после завершения цикла выпуска разработчик
+должен заполнить https://www.freebsd.org/security/errata-template.txt[шаблон
+уведомления об ошибке], в частности разделы `Предыстория`, `Описание
+проблемы`, `Последствия` и, если применимо, `Обходное решение`.
+
+Заполненный шаблон уведомления об ошибке следует отправить по электронной
+почте вместе с патчем для ветки {branchReleng} или списком ревизий из ветки
+{branchStable}.
+
+Для запросов на уведомления об ошибках (Errata Notice), поступающих сразу
+после выпуска, запрос следует отправлять по электронной почте как в
+{teamRe}, так и в {teamSecteam}. После того как ветка {branchReleng}
+передана {teamSecteam}, как описано в
+crossref:freebsd-releng[releng-wrapup-handoff, Передача {teamSecteam}],
+запросы на уведомления об ошибках следует направлять в {teamSecteam}.
+
+[[releng-wrapup-handoff]]
+=== Передача в {teamSecteam}
+
+Примерно через две недели после выпуска релиза инженер по релизам обновляет
+репозиторий Git, изменяя утверждающего с команды инженеров по релизам на
+офицера безопасности для ветки `{branchRelengx}`.
+
+[[releng-eol]]
+== Конец срока поддержки выпуска
+
+Этот раздел описывает файлы, связанные с веб-сайтом, которые необходимо
+обновить, когда выпуск достигает EoL (End-of-Life).
+
+[[releng-eol-website]]
+=== Обновления веб-сайта для прекращения поддержки
+
+Когда выпуск достигает конца жизненного цикла, ссылки на этот выпуск должны
+быть удалены и/или обновлены на веб-сайте:
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Файл
+| Что изменить
+
+|[.filename]#~/website/themes/beastie/layouts/index.html#
+|Удалите ссылки на `u-relXXX-announce` и `u-relXXX-announce`.
+
+|[.filename]#~/website/content/en/releases/_index.adoc#
+|Переместите переменные `u-relXXX-*` из списка поддерживаемых выпусков в список Устаревших выпусков.
+
+|[.filename]#~/website/content/en/releng/_index.adoc#
+|Обновите соответствующую ветку releng, чтобы отразить, что ветка больше не поддерживается.
+
+|[.filename]#~/website/content/en/security/_index.adoc#
+|Удалить ветку из списка поддерживаемых веток.
+
+|[.filename]#~/website/content/en/security/unsupported.adoc#
+|Добавить ветку в список неподдерживаемых веток.
+
+|[.filename]#~/website/content/en/where.adoc#
+|Удалите URL-адреса для выпуска.
+
+|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#
+|Удалите ссылки на `u-relXXX-announce` и `u-relXXX-announce`.
+
+|[.filename]#~/website/static/security/advisory-template.txt#
+|Удалите ссылки на ветку release и releng.
+
+|[.filename]#~/website/static/security/errata-template.txt#
+|Удалите ссылки на ветку release и releng.
+|===
diff --git a/documentation/content/ru/articles/freebsd-releng/_index.po b/documentation/content/ru/articles/freebsd-releng/_index.po
new file mode 100644
index 0000000000..5b923d0260
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-releng/_index.po
@@ -0,0 +1,2163 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 22:37+0300\n"
+"PO-Revision-Date: 2025-08-08 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-releng_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Описывает подход, используемый командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества. В нем описаны инструменты, доступные тем, кто заинтересован в создании настраиваемых релизов FreeBSD для корпоративного внедрения или коммерческой продуктивизации"
+
+#. 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 "Подготовка релизов FreeBSD"
+
+#. 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 "В этой статье описывается процесс разработки релизов проекта FreeBSD."
+
+#. 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 "Введение в процесс разработки релизов FreeBSD"
+
+#. 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 ""
+"Разработка FreeBSD следует очень специфичному рабочему процессу. В общем "
+"случае все изменения в базовой системе FreeBSD вносятся в ветку "
+"{branchHead}, которая отражает вершину дерева исходного кода."
+
+#. 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 ""
+"После достаточного периода тестирования изменения могут быть объединены в "
+"ветки {branchStable}. Минимальный срок по умолчанию перед объединением в "
+"ветки {branchStable} составляет три (3) дня."
+
+#. 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 ""
+"Хотя общее правило предписывает выждать минимум три дня перед слиянием из "
+"{branchHead}, существуют особые обстоятельства, при которых может "
+"потребоваться немедленное слияние, например, критическое исправление "
+"безопасности или исправление ошибки, напрямую блокирующей процесс сборки "
+"выпуска."
+
+#. 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 ""
+"Через несколько месяцев, когда количество изменений в ветке {branchStable} "
+"значительно увеличилось, наступает время выпуска следующей версии FreeBSD. "
+"Исторически такие выпуски называются релизами \"с точкой\"."
+
+#. 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 ""
+"Между выпусками из ветвей {branchStable}, примерно каждые два (2) года, "
+"выпуск будет создаваться напрямую из {branchHead}. Исторически такие выпуски "
+"назывались выпуском «точка-ноль (dot-zero)»."
+
+#. 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 ""
+"Эта статья освещает рабочий процесс и обязанности команды {teamRe} как для "
+"выпуска \"точка-ноль\", так и для \"промежуточных\" выпусков."
+
+#. 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 "crossref:freebsd-releng[releng-prep, General Information and Preparation]"
+msgstr "crossref:freebsd-releng[releng-prep, Общая информация и подготовка]"
+
+#. 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 "crossref:freebsd-releng[releng-website, Website Changes During the Release Cycle]"
+msgstr "crossref:freebsd-releng[releng-website, Изменения на веб-сайте в течение цикла выпуска]"
+
+#. 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 "crossref:freebsd-releng[releng-terms, Release Engineering Terminology]"
+msgstr "crossref:freebsd-releng[releng-terms, Терминология выпуска релизов]"
+
+#. 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 ""
+"Терминология и общая информация, такие как \"мягкая заморозка кода (code "
+"slush)\" и \"заморозка кода (code freeze)\", используемые в этом документе."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:100
+#, no-wrap
+msgid "crossref:freebsd-releng[releng-head, Release from {branchHead}]"
+msgstr "crossref:freebsd-releng[releng-head, Выпуск релиза от {branchHead}]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:102
+msgid "The Release Engineering process for a \"dot-zero\" release."
+msgstr "Процесс Release Engineering для релиза \"точка-ноль\"."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:103
+#, no-wrap
+msgid "crossref:freebsd-releng[releng-stable, Release from {branchStable}]"
+msgstr "crossref:freebsd-releng[releng-stable, Выпуск релиза от {branchStable}]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:105
+msgid "The Release Engineering process for a \"point\" release."
+msgstr "Процесс Release Engineering для \"точечного\" выпуска."
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:106
+#, no-wrap
+msgid "crossref:freebsd-releng[releng-building, Building FreeBSD Installation Media]"
+msgstr "crossref:freebsd-releng[releng-building, Создание установочных носителей FreeBSD]"
+
+#. 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 "crossref:freebsd-releng[releng-mirrors, Publishing FreeBSD Installation Media to Project Mirrors]"
+msgstr "crossref:freebsd-releng[releng-mirrors, Публикация установочных носителей FreeBSD на зеркалах проекта]"
+
+#. 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 "crossref:freebsd-releng[releng-wrapup, Wrapping up the Release Cycle]"
+msgstr "crossref:freebsd-releng[releng-wrapup, Завершение цикла выпуска]"
+
+#. 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 ""
+"Примерно за два месяца до начала цикла выпуска команда {teamRe} определяет "
+"график выпуска. График включает в себя различные этапы цикла выпуска, такие "
+"как даты заморозки, даты ветвления и даты сборки. Например:"
+
+#. 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 "мягкая заморозка {branchHead}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:131
+#, no-wrap
+msgid "May 27, 2016"
+msgstr "May 27, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:132
+#, no-wrap
+msgid "{branchHead} freeze:"
+msgstr "заморозка {branchHead}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:134
+#, no-wrap
+msgid "June 10, 2016"
+msgstr "June 10, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:135
+#, no-wrap
+msgid "{branchHead} KBI freeze:"
+msgstr "заморозка {branchHead} KBI:"
+
+#. 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 "June 24, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:138
+#, no-wrap
+msgid "`doc/` tree slush [1]:"
+msgstr "мягкая заморозка дерева `doc/` [1]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:141
+#, no-wrap
+msgid "Ports quarterly branch [2]:"
+msgstr "Ежеквартальная ветка Ports [2]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:143
+#, no-wrap
+msgid "July 1, 2016"
+msgstr "July 1, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:144
+#, no-wrap
+msgid "{branchStablex} branch:"
+msgstr "Ветка {branchStablex}:"
+
+#. 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 "July 8, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:147
+#, no-wrap
+msgid "`doc/` tree tag [3]:"
+msgstr "`doc/` tree tag [3]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:150
+#, no-wrap
+msgid "BETA1 build starts:"
+msgstr "Начало сборки BETA1:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:153
+#, no-wrap
+msgid "{branchHead} thaw:"
+msgstr "Разморозка {branchHead}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:155
+#, no-wrap
+msgid "July 9, 2016"
+msgstr "July 9, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:156
+#, no-wrap
+msgid "BETA2 build starts:"
+msgstr "Сборка BETA2 начинается:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:158
+#, no-wrap
+msgid "July 15, 2016"
+msgstr "July 15, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:159
+#, no-wrap
+msgid "BETA3 build starts [*]:"
+msgstr "Сборка BETA3 начинается [*]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:161
+#, no-wrap
+msgid "July 22, 2016"
+msgstr "July 22, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:162
+#, no-wrap
+msgid "{branchRelengx} branch:"
+msgstr "Ветка `{branchRelengx}`:"
+
+#. 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 "July 29, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:165
+#, no-wrap
+msgid "RC1 build starts:"
+msgstr "Сборка RC1 начинается:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:168
+#, no-wrap
+msgid "{branchStablex} thaw:"
+msgstr "Разморозка {branchStablex}:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:170
+#, no-wrap
+msgid "July 30, 2016"
+msgstr "July 30, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:171
+#, no-wrap
+msgid "RC2 build starts:"
+msgstr "Сборка RC2 начинается:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:173
+#, no-wrap
+msgid "August 5, 2016"
+msgstr "August 5, 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:174
+#, no-wrap
+msgid "Final Ports package builds [4]:"
+msgstr "Окончательные сборки пакетов Ports [4]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:176
+#, no-wrap
+msgid "August 6, 2016"
+msgstr "August 6, 2016"
+
+#. 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 "12 августа 2016"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:180
+#, no-wrap
+msgid "RC3 build starts [*]:"
+msgstr "Сборка RC3 начинается [*]:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:183
+#, no-wrap
+msgid "RELEASE build starts:"
+msgstr "Сборка RELEASE начинается:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:185
+#, no-wrap
+msgid "August 19, 2016"
+msgstr "August 19, 2016"
+
+#. 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 "September 2, 2016"
+
+#. 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 "Мягкая заморозка дерева `doc/` координируется командой {teamDoceng}."
+
+#. 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 ""
+"Используемая квартальная ветка Ports определяется по дате запланированной "
+"окончательной сборки `RC`. Новая квартальная ветка создаётся в первый день "
+"квартала, поэтому этот показатель следует учитывать, принимая во внимание "
+"этапы цикла выпуска. Квартальная ветка создаётся командой {teamPortmgr}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:197
+msgid "The `doc/` tree is tagged by the {teamDoceng}."
+msgstr "Для дерева исходного кода `doc/` tag делается командой {teamDoceng}."
+
+#. 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 ""
+"Окончательная сборка пакета Ports выполняется командой {teamPortmgr} после "
+"финальной (или ожидаемой финальной) сборки `RC`."
+
+#. 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 ""
+"Если выпуск создаётся из существующей ветки {branchStable}, дату заморозки "
+"KBI можно исключить, так как KBI уже считается замороженным в устоявшихся "
+"ветках {branchStable}."
+
+#. 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 ""
+"При написании графика цикла выпуска необходимо учитывать ряд факторов, "
+"особенно этапы, на которые целевая дата зависит от предопределенных этапов, "
+"от которых существует зависимость. Например, тег выпуска коллекции портов "
+"берется из активной квартальной ветки на момент последнего `RC`. Это "
+"частично определяет, какая квартальная ветка используется, когда может быть "
+"создан тег выпуска и какая версия дерева портов используется для финальной "
+"сборки `RELEASE`."
+
+#. 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 ""
+"После общего согласования расписания команда {teamRe} отправляет расписание "
+"разработчикам FreeBSD по электронной почте."
+
+#. 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 ""
+"Вполне типично, что многие разработчики сообщают команде {teamRe} о "
+"различных работах в процессе выполнения. В некоторых случаях может быть "
+"запрошено продление для работы в процессе, а в других случаях может быть "
+"сделан запрос на \"общее одобрение\" для определенного подмножества дерева."
+
+#. 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 ""
+"При таких запросах важно убедиться, что обсуждаются сроки (даже если они "
+"приблизительные). Для общих одобрений следует четко указать "
+"продолжительность действия такого одобрения. Например, разработчик FreeBSD "
+"может запросить общее одобрение с начала периода мягкой заморозки кода до "
+"начала сборок `RC`."
+
+#. 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 ""
+"Для отслеживания общих одобрений команда {teamRe} использует внутренний "
+"репозиторий, в котором ведется журнал таких запросов. В нем указывается "
+"область, на которую распространяется общее одобрение, автор(ы), срок "
+"действия одобрения и причина его выдачи. Например, может быть предоставлено "
+"общее одобрение для [.filename]#release/doc/# всем членам {teamRe} до "
+"финального `RC` для обновления примечаний к выпуску и другой связанной с "
+"выпуском документации."
+
+#. 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 ""
+"Команда {teamRe} также использует этот репозиторий для отслеживания "
+"ожидающих одобрения запросов, полученных непосредственно перед началом "
+"различных сборок во время цикла выпуска, при этом Инженер по выпускам "
+"указывает срок отсечки с помощью электронного письма разработчикам FreeBSD."
+
+#. 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 ""
+"В зависимости от рассматриваемого набора кода и общего влияния этого набора "
+"кода на FreeBSD в целом, такие запросы могут быть одобрены или отклонены "
+"командой {teamRe}."
+
+#. 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 ""
+"Расписание также добавляется на сайт проекта в репозитории `doc/`, в файле "
+"[.filename]#~/website/content/en/releases/{branchRevision}R/schedule.adoc#. "
+"Этот файл постоянно обновляется по мере прохождения цикла выпуска."
+
+#. 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 ""
+"В большинстве случаев файл [.filename]#schedule.adoc# можно скопировать из "
+"предыдущего релиза и обновить соответствующим образом."
+
+#. 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 ""
+"В дополнение к добавлению [.filename]#schedule.adoc# на веб-сайт, файл "
+"[.filename]#~/shared/releases.adoc# также обновляется, чтобы добавить ссылку "
+"на расписание на различные подстраницы, а также включить ссылку на "
+"расписание на главной странице веб-сайта проекта."
+
+#. 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 ""
+"Расписание также доступно по ссылке из файла [.filename]#~/website/content/"
+"en/releng/_index.adoc#."
+
+#. 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 ""
+"Примерно за месяц до запланированной \"мягкой заморозки кода\" команда "
+"{teamRe} отправляет напоминание разработчикам FreeBSD."
+
+#. 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 ""
+"Хотя мягкая заморозка кода не является полной заморозкой дерева, команда "
+"{teamRe} просит отдавать приоритет исправлению ошибок в существующей кодовой "
+"базе перед добавлением новых функций."
+
+#. 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 ""
+"Замораживание кода означает момент времени, когда все коммиты в ветку "
+"требуют явного одобрения от {teamRe}."
+
+#. 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 ""
+"Репозиторий FreeBSD Git содержит несколько хуков для выполнения проверок "
+"перед тем, как изменения будут зафиксированы в дереве. Один из этих хуков "
+"проверяет, требуются ли специальные разрешения для фиксации изменений в "
+"определённой ветке."
+
+#. 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 ""
+"Для обеспечения утверждения коммитов командой {teamRe}, команда Release "
+"Engineering должна утверждать любые изменения в ветке. В этом случае журнал "
+"коммитов должен содержать строку `Approved by: re (логин)`, где \"логин\" — "
+"это идентификатор утверждающего."
+
+#. 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 ""
+"Во время заморозки кода участники проекта FreeBSD должны следовать "
+"link:https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Рекомендациям "
+"по запросам изменений]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:275
+#, no-wrap
+msgid "The KBI/KPI Freeze"
+msgstr "Замораживание KBI/KPI"
+
+#. 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 ""
+"KBI/KPI стабильность подразумевает, что вызов функции в двух разных релизах "
+"программного обеспечения, реализующего эту функцию, приводит к одинаковому "
+"конечному состоянию. Вызывающая сторона, будь то процесс, поток или функция, "
+"ожидает, что функция будет работать определённым образом, в противном случае "
+"стабильность KBI/KPI на ветке нарушается."
+
+#. 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 ""
+"Файлы, указанные в этом разделе, относятся к ветке `{branchHead}` "
+"репозитория `doc`."
+
+#. 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 ""
+"Когда график цикла выпуска становится доступным, эти файлы необходимо "
+"обновить, чтобы включить различные функции на веб-сайте проекта FreeBSD:"
+
+#. 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:768
+#, 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 "[.filename]#~/shared/releases.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:304
+#, no-wrap
+msgid "Change `beta-upcoming` from `IGNORE` to `INCLUDE`"
+msgstr "Изменить `beta-upcoming` с `IGNORE` на `INCLUDE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:307
+#, no-wrap
+msgid "Change `beta-testing` from `IGNORE` to `INCLUDE`"
+msgstr "Изменить `beta-testing` с `IGNORE` на `INCLUDE`"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:310
+#, no-wrap
+msgid "Website Changes During `BETA` or `RC`"
+msgstr "Изменения на веб-сайте в период `BETA` или `RC`"
+
+#. 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 ""
+"При переходе от `PRERELEASE` к `BETA` эти файлы необходимо обновить, чтобы "
+"включить блок \"Help Test (Помогите протестировать)\" на странице загрузки. "
+"Все файлы указаны относительно [.filename]#head/# в репозитории `doc`:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:323
+#, no-wrap
+msgid "Update `betarel-vers` to `BETA__1__`"
+msgstr "Обновите `betarel-vers` до `BETA__1__`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:324
+#, 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:326
+#, no-wrap
+msgid "Add an entry announcing the `BETA`"
+msgstr "Добавьте запись, объявляющую о `BETA`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:327
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:790
+#, 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: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 "Добавьте новую `BETA`, `RC` или финальную `RELEASE` в шаблон"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:330
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:793
+#, 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:334
+msgid ""
+"Once the {branchRelengx} branch is created, the various release-related "
+"documents need to be added to the `doc/` repository."
+msgstr ""
+"После создания ветки {branchRelengx} необходимо добавить различные "
+"документы, связанные с выпуском, в репозиторий `doc/`."
+
+#. 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 ""
+"Соответствующие документы, связанные с выпусками, находятся в репозитории "
+"[.filename]#doc# для FreeBSD 12.x и более поздних версий."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:341
+#, no-wrap
+msgid "Ports Changes During `BETA`, `RC`, and the Final `RELEASE`"
+msgstr "Изменения в портах во время `BETA`, `RC` и финального `RELEASE`"
+
+#. 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 ""
+"Для каждой сборки в течение цикла выпуска файлы `MANIFEST`, содержащие "
+"`SHA256` для различных наборов дистрибутива, таких как `base.txz`, "
+"`kernel.txz` и других, добавляются в порт package:misc/freebsd-release-"
+"manifests[]. Это позволяет другим утилитам, кроме , таким как package:ports-"
+"mgmt/poudriere[], безопасно использовать эти наборы дистрибутива, "
+"предоставляя механизм для проверки контрольных сумм."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:347
+#, no-wrap
+msgid "Release from {branchHead}"
+msgstr "Выпуск релиза от {branchHead}"
+
+#. 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 ""
+"Этот раздел описывает общие процедуры цикла выпуска FreeBSD из ветки "
+"{branchHead}."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:352
+#, no-wrap
+msgid "FreeBSD \"`ALPHA`\" Builds"
+msgstr "FreeBSD \"`ALPHA`\" сборки"
+
+#. 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 ""
+"Начиная с цикла выпуска FreeBSD 10.0-RELEASE, было введено понятие сборок "
+"\"`ALPHA`\". В отличие от сборок `BETA` и `RC`, сборки `ALPHA` не включены в "
+"график выпуска FreeBSD."
+
+#. 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 ""
+"Идея сборок `ALPHA` заключается в предоставлении регулярных сборок FreeBSD "
+"до создания ветки {branchStable}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:360
+msgid "FreeBSD `ALPHA` snapshots should be built approximately once a week."
+msgstr ""
+"Снимки состояния `ALPHA` FreeBSD должны собираться примерно раз в неделю."
+
+#. 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 ""
+"Для первой сборки `ALPHA` значение `BRANCH` в [.filename]#sys/conf/"
+"newvers.sh# необходимо изменить с `CURRENT` на `ALPHA1`. Для последующих "
+"сборок `ALPHA` увеличивайте каждое значение `ALPHA__N__` на единицу."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:365
+msgid ""
+"See crossref:freebsd-releng[releng-building, Building FreeBSD Installation "
+"Media] for information on building the `ALPHA` images."
+msgstr ""
+"См. crossref:freebsd-releng[releng-building, Сборка установочных носителей "
+"FreeBSD] для получения информации о сборке образов `ALPHA`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:367
+#, no-wrap
+msgid "Creating the {branchStablex} Branch"
+msgstr "Создание ветки {branchStablex}"
+
+#. 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 ""
+"При создании ветки {branchStable} необходимо внести несколько изменений как "
+"в новой ветке {branchStable}, так и в ветке {branchHead}. Указанные файлы "
+"относятся к корню репозитория. Чтобы создать новую ветку {branchStablex} в "
+"Git:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:376
+msgid "Make sure that you are in the {branchHead} branch"
+msgstr "Убедитесь, что вы находитесь в ветке {branchHead}"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:381
+#, no-wrap
+msgid "% git checkout -b {branchStablex}\n"
+msgstr "% git checkout -b {branchStablex}\n"
+
+#. 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 "После создания ветки {branchStablex} внесите следующие изменения:"
+
+#. 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 "[.filename]#UPDATING#"
+
+#. 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 "Обновите версию FreeBSD и удалите уведомление о `WITNESS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:395
+#, no-wrap
+msgid "[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#"
+msgstr "[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#"
+
+#. 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 ""
+"[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: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 "[.filename]#lib/clang/llvm.build.mk#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:407
+#, no-wrap
+msgid "Uncomment `-DNDEBUG`"
+msgstr "Раскомментируйте `-DNDEBUG`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:408
+#, no-wrap
+msgid "[.filename]#sys/\\*/conf/GENERIC*#"
+msgstr "[.filename]#sys/\\*/conf/GENERIC*#"
+
+#. 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 "[.filename]#sys/*/conf/MINIMAL#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:414
+#, no-wrap
+msgid "[.filename]#release/release.conf.sample#"
+msgstr "[.filename]#release/release.conf.sample#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:416
+#, no-wrap
+msgid "Update `SRCBRANCH`"
+msgstr "Обновите `SRCBRANCH`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:417
+#, no-wrap
+msgid "[.filename]#sys/*/conf/GENERIC-NODEBUG#"
+msgstr "[.filename]#sys/*/conf/GENERIC-NODEBUG#"
+
+#. 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 "[.filename]#sys/arm/conf/std.arm*#"
+
+#. 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 "[.filename]#sys/conf/newvers.sh#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:425
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `BETA1`"
+msgstr "Обновите значение `BRANCH`, чтобы оно соответствовало `BETA1`"
+
+#. 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 "[.filename]#share/mk/src.opts.mk#"
+
+#. 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 "Переместите `REPRODUCIBLE_BUILD` из `\\__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS`"
+
+#. 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 "Переместите `LLVM_ASSERTIONS` из `\\__DEFAULT_YES_OPTIONS` в `__DEFAULT_NO_OPTIONS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:432
+#, no-wrap
+msgid "[.filename]#libexec/rc/rc.conf#"
+msgstr "[.filename]#libexec/rc/rc.conf#"
+
+#. 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 "Установите `dumpdev` с `AUTO` на `NO` (это настраивается для тех, кто хочет включить его по умолчанию)"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:435
+#, no-wrap
+msgid "[.filename]#release/Makefile#"
+msgstr "[.filename]#release/Makefile#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:436
+#, no-wrap
+msgid "Remove the `debug.witness.trace` entries"
+msgstr "Удалите записи `debug.witness.trace`"
+
+#. 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 ""
+"Затем в ветке {branchHead}, которая теперь станет новой основной версией:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:449
+#, no-wrap
+msgid "Update the FreeBSD version"
+msgstr "Обновите версию FreeBSD"
+
+#. 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 "Обновите значение `BRANCH`, чтобы оно соответствовало `CURRENT`, и увеличьте `REVISION`"
+
+#. 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 "[.filename]#Makefile.inc1#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:455
+#, no-wrap
+msgid "Update `TARGET_TRIPLE` and `MACHINE_TRIPLE`"
+msgstr "Обновите `TARGET_TRIPLE` и `MACHINE_TRIPLE`"
+
+#. 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 "[.filename]#sys/sys/param.h#"
+
+#. 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 "Обновите `__FreeBSD_version`"
+
+#. 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 "[.filename]#gnu/usr.bin/cc/cc_tools/freebsd-native.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:461
+#, no-wrap
+msgid "Update `FBSD_MAJOR` and `FBSD_CC_VER`"
+msgstr "Обновите `FBSD_MAJOR` и `FBSD_CC_VER`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:462
+#, no-wrap
+msgid "[.filename]#contrib/gcc/config.gcc#"
+msgstr "[.filename]#contrib/gcc/config.gcc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:464
+#, no-wrap
+msgid "Append the `freebsdversion.h` section"
+msgstr "Добавьте раздел `freebsdversion.h`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:467
+#, no-wrap
+msgid "Update the value of `OS_VERSION`"
+msgstr "Обновите значение `OS_VERSION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:468
+#, no-wrap
+msgid "[.filename]#lib/clang/freebsd_cc_version.h#"
+msgstr "[.filename]#lib/clang/freebsd_cc_version.h#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:470
+#, no-wrap
+msgid "Update `FREEBSD_CC_VERSION`"
+msgstr "Обновите `FREEBSD_CC_VERSION`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:471
+#, no-wrap
+msgid "[.filename]#lib/clang/include/lld/Common/Version.inc#"
+msgstr "[.filename]#lib/clang/include/lld/Common/Version.inc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:473
+#, no-wrap
+msgid "Update `LLD_REVISION_STRING`"
+msgstr "Обновите `LLD_REVISION_STRING`"
+
+#. 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 "[.filename]#Makefile.libcompat#"
+
+#. 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 "Обновите `LIB32CPUFLAGS`"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:478
+#, no-wrap
+msgid "Release from {branchStable}"
+msgstr "Выпуск релиза от {branchStable}"
+
+#. 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 ""
+"Этот раздел описывает общие процедуры цикла выпуска FreeBSD из установленной "
+"ветки {branchStable}."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:483
+#, no-wrap
+msgid "FreeBSD `stable` Branch Code Slush"
+msgstr "Мягкая заморозка кода ветки `stable` FreeBSD"
+
+#. 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 ""
+"В рамках подготовки к заморозке кода в ветке `stable` необходимо обновить "
+"несколько файлов, чтобы отразить официальное начало цикла выпуска. Эти файлы "
+"находятся в корневом каталоге ветки stable:"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:497
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `PRERELEASE`"
+msgstr "Обновите значение `BRANCH`, чтобы отразить `PRERELEASE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:500
+#, no-wrap
+msgid "Update `TARGET_TRIPLE`"
+msgstr "Обновите `TARGET_TRIPLE`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:503
+#, no-wrap
+msgid "Update `OS_VERSION`"
+msgstr "Обновите `OS_VERSION`"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:508
+#, no-wrap
+msgid "FreeBSD `BETA` Builds"
+msgstr "Сборки FreeBSD `BETA`"
+
+#. 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 ""
+"После периода мягкой заморозки следующая фаза цикла выпуска — это заморозка "
+"кода. На этом этапе все коммиты в стабильную ветку требуют явного одобрения "
+"от {teamRe}. Это контролируется {git-admin-email}, который управляет "
+"репозиторием."
+
+#. 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 ""
+"После вступления в силу заморозки кода следующая сборка из ветки помечается "
+"как `BETA1`. Это делается путём изменения значения `BRANCH` в файле "
+"[.filename]#sys/conf/newvers.sh# с `PRERELEASE` на `BETA1`."
+
+#. 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 ""
+"После этого начинается первая сборка `BETA`. Последующие сборки `BETA` не "
+"требуют обновления каких-либо файлов, кроме [.filename]#sys/conf/"
+"newvers.sh#, с увеличением номера сборки `BETA`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:527
+#, no-wrap
+msgid "Creating the {branchRelengx} Branch"
+msgstr "Создание ветки {branchRelengx}"
+
+#. 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 ""
+"Когда первая сборка `RC` (Release Candidate) готова к началу, создается "
+"ветка {branchReleng}. Это многоэтапный процесс, который должен выполняться в "
+"определенном порядке, чтобы избежать аномалий, таких как пересечения "
+"значений `__FreeBSD_version`, например. Указанные ниже пути относятся к "
+"корню репозитория. Порядок коммитов и что нужно изменить:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:537
+msgid "Make sure that you are in the {branchStablex} branch"
+msgstr "Убедитесь, что вы находитесь в ветке {branchStablex}"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:542
+#, no-wrap
+msgid "% git checkout -b {branchRelengx}\n"
+msgstr "% git checkout -b {branchRelengx}\n"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:553
+#, no-wrap
+msgid "Change `BETA__X__` to `RC1`"
+msgstr "Измените `BETA__X__` на `RC1`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:557
+#, no-wrap
+msgid "[.filename]#sys/conf/kern.opts.mk#"
+msgstr "[.filename]#sys/conf/kern.opts.mk#"
+
+#. 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 "Переместите `REPRODUCIBLE_BUILD` из `__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS`"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:560
+#, no-wrap
+msgid "[.filename]#etc/pkg/FreeBSD.conf#"
+msgstr "[.filename]#etc/pkg/FreeBSD.conf#"
+
+#. 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 "Замените `latest` на `quarterly` в качестве расположения репозитория пакетов по умолчанию"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:563
+#, no-wrap
+msgid "[.filename]#release/pkg_repos/release-dvd.conf#"
+msgstr "[.filename]#release/pkg_repos/release-dvd.conf#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:568
+#, no-wrap
+msgid "Update `BETA__X__` with `PRERELEASE`"
+msgstr "Обновите `BETA__X__` на `PRERELEASE`"
+
+#. 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 ""
+"Затем {git-admin-email} добавляет новых утверждающих для ветки releng, как "
+"это было сделано для ветки stable."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:578
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git commit\n"
+msgstr ""
+"% git add .\n"
+"% git commit\n"
+
+#. 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 ""
+"Теперь, когда существуют два новых значения `__FreeBSD_version`, также "
+"обновите файл [.filename]#~/documentation/content/en/books/porters-handbook/"
+"versions/chapter.adoc# в репозитории проекта документации."
+
+#. 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 ""
+"После завершения первой сборки `RC` и её тестирования ветку {branchStable} "
+"можно «разморозить» с помощью {git-admin-email}."
+
+#. 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 ""
+"После появления первой версии `RC` необходимо отправить письмо команде "
+"{teamBugmeister}, чтобы добавить новую версию FreeBSD `-RELEASE` в список "
+"`versions`, доступный в выпадающем меню трекера ошибок."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:587
+#, no-wrap
+msgid "Building FreeBSD Installation Media"
+msgstr "Создание установочных носителей FreeBSD"
+
+#. 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 ""
+"Этот раздел описывает общие процедуры создания снимков разработки и выпусков "
+"FreeBSD."
+
+#. 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 ""
+"До выхода FreeBSD 9.0-RELEASE файл [.filename]#src/release/Makefile# был "
+"обновлен для поддержки , а скрипт [.filename]#src/release/generate-"
+"release.sh# был добавлен в качестве обертки для автоматизации вызова целей."
+
+#. 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 ""
+"До выхода FreeBSD 9.2-RELEASE был представлен [.filename]#src/release/"
+"release.sh#, который, основываясь на [.filename]#src/release/generate-"
+"release.sh#, включал поддержку указания конфигурационных файлов для "
+"переопределения различных опций и переменных окружения. Поддержка "
+"конфигурационных файлов обеспечила возможность кросс-сборки каждого "
+"архитектурного варианта для релиза путем указания отдельного "
+"конфигурационного файла для каждого вызова."
+
+#. 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 ""
+"В качестве краткого примера использования [.filename]#src/release/"
+"release.sh# для сборки одного релиза в [.filename]#/scratch#:"
+
+#. 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 "# /bin/sh /usr/src/release/release.sh\n"
+
+#. 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 ""
+"В качестве краткого примера использования [.filename]#src/release/"
+"release.sh# для сборки единого кросс-собранного выпуска с использованием "
+"другого целевого каталога, создайте пользовательский "
+"[.filename]#release.conf#, содержащий:"
+
+#. 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 ""
+"# release.sh configuration for powerpc/powerpc64\n"
+"CHROOTDIR=\"/scratch-powerpc64\"\n"
+"TARGET=\"powerpc\"\n"
+"TARGET_ARCH=\"powerpc64\"\n"
+"KERNEL=\"GENERIC64\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:618
+msgid "Then invoke [.filename]#src/release/release.sh# as:"
+msgstr "Затем выполните [.filename]#src/release/release.sh# следующим образом:"
+
+#. 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 "# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf\n"
+
+#. 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 ""
+"См. [.filename]#src/release/release.conf.sample# для получения "
+"дополнительных сведений и примеров использования."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:627
+#, no-wrap
+msgid "Building FreeBSD Releases"
+msgstr "Сборка релизов FreeBSD"
+
+#. 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 ""
+"В течение цикла выпуска копии файлов [.filename]#CHECKSUM.SHA512# и "
+"[.filename]#CHECKSUM.SHA256# для каждой архитектуры сохраняются во "
+"внутреннем репозитории {teamRe}, а также включаются в различные рассылки с "
+"объявлениями. Каждый файл [.filename]#MANIFEST#, содержащий хеши "
+"[.filename]#base.txz#, [.filename]#kernel.txz# и других, также добавляется в "
+"пакет package:misc/freebsd-release-manifests[] в Коллекции портов."
+
+#. 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 "Обновите значение `BRANCH` на `RELEASE`"
+
+#. 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 "[.filename]#lib/csu/common/crtbrand.S#"
+
+#. 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 "Замените `__FreeBSD_version` на значение из [.filename]#sys/sys/param.h#"
+
+#. 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 ""
+"После сборки окончательного `RELEASE`, ветка {branchRelengx} помечается как "
+"{tagReleasex}, используя ревизию, из которой был собран `RELEASE`. "
+"Аналогично созданию веток {branchStablex} и {branchRelengx}, это делается с "
+"помощью `git tag`. Из корня репозитория:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:657
+msgid "Make sure that you are in the {branchRelengx} branch"
+msgstr "Убедитесь, что вы находитесь в ветке {branchRelengx}"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:662
+#, no-wrap
+msgid "% git tag {tagReleasex}\n"
+msgstr "% git tag {tagReleasex}\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:665
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media to Project Mirrors"
+msgstr "Публикация установочных носителей FreeBSD на зеркалах проекта"
+
+#. 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 ""
+"Этот раздел описывает процедуру публикации снимков разработки FreeBSD и "
+"выпусков на зеркала Проекта."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:670
+#, no-wrap
+msgid "Staging FreeBSD Installation Media Images"
+msgstr "Подготовка образов установочных носителей FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:673
+msgid "Staging FreeBSD snapshots and releases is a two part process:"
+msgstr ""
+"Этап подготовки (staging) снимков и выпусков FreeBSD — это двухэтапный "
+"процесс:"
+
+#. 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 "Создание структуры каталогов, соответствующей иерархии на `ftp-master`"
+
+#. 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 ""
+"Если `EVERYTHINGISFINE` определено в конфигурационных файлах сборки, "
+"[.filename]#main.conf# в случае скриптов сборки, упомянутых выше, это "
+"происходит автоматически после завершения сборки, создавая структуру "
+"каталогов в [.filename]#${DESTDIR}/R/ftp-stage# с путями, соответствующими "
+"ожидаемым на `ftp-master`. Это эквивалентно выполнению следующего в "
+"директории:"
+
+#. 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 "# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage\n"
+
+#. 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 ""
+"После сборки каждой архитектуры скрипт [.filename]#thermite.sh# выполнит "
+"синхронизацию [.filename]#${DESTDIR}/R/ftp-stage# с билда в директории "
+"[.filename]#/snap/ftp/snapshots# или [.filename]#/snap/ftp/releases# на "
+"хосте сборки, соответственно."
+
+#. 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 ""
+"Копирование файлов в промежуточный каталог на `ftp-master` перед "
+"перемещением файлов в [.filename]#pub/# для начала распространения на "
+"зеркала Проекта"
+
+#. 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 ""
+"После завершения всех сборок каталог [.filename]#/snap/ftp/snapshots# (или "
+"[.filename]#/snap/ftp/releases# для релиза) опрашивается `ftp-master`-ом с "
+"использованием rsync для передачи в [.filename]#/archive/tmp/snapshots# или "
+"[.filename]#/archive/tmp/releases#, соответственно."
+
+#. 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 ""
+"На `ftp-master` в инфраструктуре проекта FreeBSD этот шаг требует доступа "
+"уровня `root`, так как он должен выполняться от имени пользователя `archive`."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:695
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media"
+msgstr "Публикация установочных носителей FreeBSD"
+
+#. 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 ""
+"Как только образы размещены в [.filename]#/archive/tmp/#, они готовы к "
+"публикации путем размещения в [.filename]#/archive/pub/FreeBSD#. Для "
+"уменьшения времени распространения используются жесткие ссылки из "
+"[.filename]#/archive/tmp# в [.filename]#/archive/pub/FreeBSD#."
+
+#. 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 ""
+"Для эффективной работы и [.filename]#/archive/tmp#, и [.filename]#/archive/"
+"pub# должны находиться в одной логической файловой системе."
+
+#. 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 ""
+"Однако есть оговорка: после этого необходимо использовать rsync для "
+"исправления символических ссылок в [.filename]#pub/FreeBSD/snapshots/ISO-"
+"IMAGES#, которые будут заменены на жёсткие ссылки, что увеличит время "
+"распространения."
+
+#. 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 ""
+"Как и на этапе подготовки, это требует доступа уровня `root`, так как данный "
+"шаг должен быть выполнен от имени пользователя `archive`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:713
+msgid "As the `archive` user:"
+msgstr "Как пользователь `archive`:"
+
+#. 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 ""
+"% cd /archive/tmp/snapshots\n"
+"% pax -r -w -l . /archive/pub/FreeBSD/snapshots\n"
+"% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc: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 ""
+"По мере приближения цикла выпуска к завершению часто появляются несколько "
+"кандидатов в EN (Errata Notice — уведомления об ошибках) для устранения "
+"проблем, обнаруженных на поздних этапах цикла. После выпуска {teamRe} и "
+"{teamSecteam} пересматривают изменения, которые не были одобрены до "
+"финального выпуска, и, в зависимости от масштаба рассматриваемого изменения, "
+"могут выпустить EN."
+
+#. 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 "Фактический процесс выпуска EN обрабатывается командой {teamSecteam}."
+
+#. 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 ""
+"Для запроса уведомления об ошибке после завершения цикла выпуска разработчик "
+"должен заполнить https://www.freebsd.org/security/errata-template.txt[шаблон "
+"уведомления об ошибке], в частности разделы `Предыстория`, `Описание "
+"проблемы`, `Последствия` и, если применимо, `Обходное решение`."
+
+#. 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 ""
+"Заполненный шаблон уведомления об ошибке следует отправить по электронной "
+"почте вместе с патчем для ветки {branchReleng} или списком ревизий из ветки "
+"{branchStable}."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:746
+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 crossref:freebsd-releng[releng-wrapup-handoff, Handoff to the "
+"{teamSecteam}], Errata Notice requests should be sent to the {teamSecteam}."
+msgstr ""
+"Для запросов на уведомления об ошибках (Errata Notice), поступающих сразу "
+"после выпуска, запрос следует отправлять по электронной почте как в "
+"{teamRe}, так и в {teamSecteam}. После того как ветка {branchReleng} "
+"передана {teamSecteam}, как описано в crossref:freebsd-releng[releng-wrapup-"
+"handoff, Передача {teamSecteam}], запросы на уведомления об ошибках следует "
+"направлять в {teamSecteam}."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:748
+#, no-wrap
+msgid "Handoff to the {teamSecteam}"
+msgstr "Передача в {teamSecteam}"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:751
+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 ""
+"Примерно через две недели после выпуска релиза инженер по релизам обновляет "
+"репозиторий Git, изменяя утверждающего с команды инженеров по релизам на "
+"офицера безопасности для ветки `{branchRelengx}`."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:753
+#, no-wrap
+msgid "Release End-of-Life"
+msgstr "Конец срока поддержки выпуска"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:756
+msgid ""
+"This section describes the website-related files to update when a release "
+"reaches EoL (End-of-Life)."
+msgstr ""
+"Этот раздел описывает файлы, связанные с веб-сайтом, которые необходимо "
+"обновить, когда выпуск достигает EoL (End-of-Life)."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:758
+#, no-wrap
+msgid "Website Updates for End-of-Life"
+msgstr "Обновления веб-сайта для прекращения поддержки"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:761
+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:766
+#, no-wrap
+msgid "File"
+msgstr "Файл"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:769
+#, 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:771
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:789
+#, no-wrap
+msgid "Remove `u-relXXX-announce` and `u-relXXX-announce` references."
+msgstr "Удалите ссылки на `u-relXXX-announce` и `u-relXXX-announce`."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:772
+#, 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:774
+#, no-wrap
+msgid "Move the `u-relXXX-*` variables from the supported release list to the Legacy Releases list."
+msgstr "Переместите переменные `u-relXXX-*` из списка поддерживаемых выпусков в список Устаревших выпусков."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:775
+#, 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:777
+#, no-wrap
+msgid "Update the appropriate releng branch to reflect the branch is no longer supported."
+msgstr "Обновите соответствующую ветку releng, чтобы отразить, что ветка больше не поддерживается."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:778
+#, 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:780
+#, no-wrap
+msgid "Remove the branch from the supported branch list."
+msgstr "Удалить ветку из списка поддерживаемых веток."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:781
+#, no-wrap
+msgid "[.filename]#~/website/content/en/security/unsupported.adoc#"
+msgstr "[.filename]#~/website/content/en/security/unsupported.adoc#"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:783
+#, no-wrap
+msgid "Add the branch to the unsupported branch list."
+msgstr "Добавить ветку в список неподдерживаемых веток."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:784
+#, 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:786
+#, no-wrap
+msgid "Remove the URLs for the release."
+msgstr "Удалите URL-адреса для выпуска."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:787
+#, 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:792
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:794
+#, no-wrap
+msgid "Remove references to the release and releng branch."
+msgstr "Удалите ссылки на ветку release и releng."
diff --git a/documentation/content/ru/articles/freebsd-src-lsp/_index.adoc b/documentation/content/ru/articles/freebsd-src-lsp/_index.adoc
new file mode 100644
index 0000000000..67704e087c
--- /dev/null
+++ b/documentation/content/ru/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: 'Используйте языковые серверы для разработки в дереве исходного кода FreeBSD, чтобы получать точные результаты при переходах к определениям функций и переменных и при автодополнениях.'
+tags: ["FreeBSD", "Language Server", "LSP"]
+title: 'Использование разработчиками языковых серверов в дереве исходного кода FreeBSD'
+trademarks: ["freebsd"]
+---
+
+= Использование разработчиками языковых серверов в дереве исходного кода 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]]
+== Введение
+
+Это руководство посвящено настройке дерева исходных кодов FreeBSD с использованием языковых серверов для индексации исходного кода. В руководстве описаны шаги для Vim/NeoVim и VSCode. Если вы используете другой текстовый редактор, вы можете использовать это руководство в качестве справочника и найти эквивалентные команды для вашего любимого редактора.
+
+[[requirements]]
+== Требования
+
+Для следования этому руководству необходимо установить определённые требования. Нам понадобится языковой сервер, `ccls` или `clangd`, а также, опционально, база данных компиляции.
+
+Установка языкового сервера может быть выполнена через `pkg` или через порты. Если мы выберем `clangd`, нам нужно установить `llvm`.
+
+Использование `pkg` для установки `ccls`:
+
+[source, shell]
+....
+# pkg install ccls
+....
+
+Если мы хотим использовать `clangd`, нам необходимо установить `llvm` (в примере команды используется `llvm15`, но вы можете выбрать нужную версию):
+
+[source, shell]
+....
+# pkg install llvm15
+....
+
+Для установки через порты выберите предпочтительную комбинацию инструментов из каждой категории ниже:
+
+* Реализации языковых серверов
+** package:devel/ccls[]
+** package:devel/llvm12[] (Другие версии также подходят, но чем новее, тем лучше. Замените `clangd12` на clangdN в случае использования других версий.)
+* Редакторы
+** package:editors/vim[]
+** package:editors/neovim[]
+** package:editors/vscode[]
+* Генератор базы данных компиляции
+** package:devel/python[] (Для реализации scan-build-py из llvm)
+** package:devel/py-pip[] (Для реализации scan-build от rizsotto)
+** package:devel/bear[]
+
+[[editor-settings]]
+== Настройки редактора
+
+[[settings-vim]]
+=== Vim/Neovim
+
+==== Плагины клиента LSP
+
+Встроенный менеджер плагинов используется для обоих редакторов в этом примере. Плагин LSP-клиента, который используется, — это link:https://github.com/prabirshrestha/vim-lsp[prabirshrestha/vim-lsp].
+
+Для настройки клиентского плагина LSP для 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
+....
+
+и для Vim:
+
+[source, shell]
+....
+# mkdir -p ~/.vim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp
+....
+
+Чтобы включить плагин LSP-клиента в редакторе, добавьте следующий фрагмент в [.filepath]#~/.config/nvim/init.vim# при использовании Neovim или в [.filepath]#~/.vim/vimrc# при использовании Vim:
+
+.Для 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
+ \ }
+ \ }})
+....
+
+.Для 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': {},
+ \ })
+....
+
+В зависимости от установленной версии `clangd` может потребоваться обновить `server-info`, чтобы указать на правильный бинарный файл.
+
+Обратитесь к link:https://github.com/prabirshrestha/vim-lsp/blob/master/README.md#registering-servers[], чтобы узнать о настройке сочетаний клавиш и автодополнения кода. Официальный сайт clangd находится по ссылке link:https://clangd.llvm.org[], а репозиторий ccls — link:https://github.com/MaskRay/ccls/[].
+
+Ниже приведены эталонные настройки сочетаний клавиш и автодополнения кода. Поместите следующий фрагмент в [.filepath]#~/.config/nvim/init.vim# или [.filepath]#~/.vim/vimrc# для пользователей 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
+
+==== Плагины клиента LSP
+
+Для работы демона языкового сервера необходимы клиентские плагины LSP. Нажмите `Ctrl+Shift+X`, чтобы открыть панель поиска расширений в сети. Введите `llvm-vs-code-extensions.vscode-clangd` при использовании clangd или `ccls-project.ccls` при использовании ccls.
+
+Затем нажмите `Ctrl+Shift+P`, чтобы открыть палитру команд редактора. Введите `Preferences: Open Settings (JSON)` в палитру и нажмите `Enter`, чтобы открыть [.filepath]#settings.json#. В зависимости от реализации языкового сервера, добавьте одну из следующих пар ключ/значение JSON в [.filepath]#settings.json#:
+
+.Для clangd
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "clangd.arguments": [
+ "--background-index",
+ "--header-insertion=never"
+ ],
+ "clangd.path": "clangd12"
+]
+....
+
+.Для ccls
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "ccls.cache.hierarchicalPath": true
+]
+....
+
+[[cdb]]
+== База данных компиляции
+
+База данных компиляции содержит массив объектов команд компиляции. Каждый объект определяет способ компиляции исходного файла. Файл базы данных компиляции обычно называется [.filename]#compile_commands.json#. База данных используется реализациями языковых серверов для целей индексирования.
+
+Пожалуйста, обратитесь к link:https://clang.llvm.org/docs/JSONCompilationDatabase.html#format[] для получения подробностей о формате файла базы данных компиляции.
+
+[[cdb-generators]]
+=== Генераторы
+
+[[generators-scan-build-py]]
+==== Использование scan-build-py
+
+===== Установка
+
+Инструмент `intercept-build` из scan-build-py используется для создания базы данных компиляции.
+
+Установите пакет package:devel/python[], чтобы получить интерпретатор python. Для получения `intercept-build` из LLVM:
+
+[source, shell]
+....
+# git clone https://github.com/llvm/llvm-project /path/to/llvm-project
+....
+
+где [.filename]#/path/to/llvm-project/# — это желаемый путь для репозитория. Для удобства создайте алиас в файле конфигурации оболочки:
+
+[source, shell]
+....
+alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'
+....
+
+link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] можно использовать вместо LLVM's scan-build-py. LLVM's scan-build-py был объединён в дерево LLVM из rizsotto/scan-build. Эту реализацию можно установить с помощью `pip install --user scan-build`. Скрипт `intercept-build` по умолчанию находится в [.filename]#~/.local/bin#.
+
+===== Использование
+
+В корневом каталоге исходного кода FreeBSD создайте базу данных компиляции с помощью `intercept-build`:
+
+[source, shell]
+....
+# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+Флаг `--append` указывает `intercept-build` прочитать существующую базу данных компиляции (если она существует) и добавить результаты в базу данных. Записи с дублирующимися ключами команд объединяются. Сгенерированная база данных компиляции по умолчанию сохраняется в текущей рабочей директории как [.filename]#compile_commands.json#.
+
+[[generators-bear]]
+==== Использование devel/bear
+
+===== Использование
+
+В корневом каталоге исходного кода FreeBSD, чтобы создать базу данных компиляции с помощью `bear`:
+
+[source, shell]
+....
+# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+Флаг `--append` указывает `bear` прочитать существующую базу данных компиляции, если она есть, и добавить результаты в неё. Записи с дублирующимися ключами команд объединяются. Сгенерированная база данных компиляции по умолчанию сохраняется в текущей рабочей директории как [.filename]#compile_commands.json#.
+
+[[final]]
+== Последние шаги
+
+После создания базы данных компиляции откройте любой исходный файл в дереве исходного кода FreeBSD, и серверный демон LSP также запустится в фоновом режиме. Первое открытие исходных файлов в дереве src занимает значительно больше времени, прежде чем сервер LSP сможет предоставить полный результат, из-за первоначального фонового индексирования сервером LSP, который компилирует все перечисленные записи в базе данных компиляции. Однако демон языкового сервера не индексирует исходные файлы, отсутствующие в базе данных компиляции, поэтому полные результаты не отображаются для исходных файлов, которые не компилировались во время выполнения `make`.
diff --git a/documentation/content/ru/articles/freebsd-src-lsp/_index.po b/documentation/content/ru/articles/freebsd-src-lsp/_index.po
new file mode 100644
index 0000000000..fba2d1f2ad
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-src-lsp/_index.po
@@ -0,0 +1,677 @@
+# 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: 2025-09-25 18:20+0300\n"
+"PO-Revision-Date: 2025-08-02 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-src-lsp_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Используйте языковые серверы для разработки в дереве исходного кода FreeBSD, чтобы получать точные результаты при переходах к определениям функций и переменных и при автодополнениях."
+
+#. 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 "Использование разработчиками языковых серверов в дереве исходного кода FreeBSD"
+
+#. 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 ""
+"Это руководство посвящено настройке дерева исходных кодов FreeBSD с "
+"использованием языковых серверов для индексации исходного кода. В "
+"руководстве описаны шаги для Vim/NeoVim и VSCode. Если вы используете другой "
+"текстовый редактор, вы можете использовать это руководство в качестве "
+"справочника и найти эквивалентные команды для вашего любимого редактора."
+
+#. 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 ""
+"Для следования этому руководству необходимо установить определённые "
+"требования. Нам понадобится языковой сервер, `ccls` или `clangd`, а также, "
+"опционально, база данных компиляции."
+
+#. 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 ""
+"Установка языкового сервера может быть выполнена через `pkg` или через "
+"порты. Если мы выберем `clangd`, нам нужно установить `llvm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:59
+msgid "Using `pkg` to install `ccls`:"
+msgstr "Использование `pkg` для установки `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 ""
+"Если мы хотим использовать `clangd`, нам необходимо установить `llvm` (в "
+"примере команды используется `llvm15`, но вы можете выбрать нужную версию):"
+
+#. 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 ""
+"Для установки через порты выберите предпочтительную комбинацию инструментов "
+"из каждой категории ниже:"
+
+#. 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 "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[] (Другие версии также подходят, но чем новее, тем "
+"лучше. Замените `clangd12` на clangdN в случае использования других версий.)"
+
+#. 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 "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 "Генератор базы данных компиляции"
+
+#. 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[] (Для реализации scan-build-py из 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[] (Для реализации scan-build от 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 "Настройки редактора"
+
+#. 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 "Плагины клиента 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 ""
+"Встроенный менеджер плагинов используется для обоих редакторов в этом "
+"примере. Плагин LSP-клиента, который используется, — это 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 "Для настройки клиентского плагина LSP для 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 "и для 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 ""
+"Чтобы включить плагин LSP-клиента в редакторе, добавьте следующий фрагмент в "
+"[.filepath]#~/.config/nvim/init.vim# при использовании Neovim или в "
+"[.filepath]#~/.vim/vimrc# при использовании 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 "Для 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 "Для 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 ""
+"В зависимости от установленной версии `clangd` может потребоваться обновить "
+"`server-info`, чтобы указать на правильный бинарный файл."
+
+#. 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 ""
+"Обратитесь к link:https://github.com/prabirshrestha/vim-lsp/blob/master/"
+"README.md#registering-servers[], чтобы узнать о настройке сочетаний клавиш и "
+"автодополнения кода. Официальный сайт clangd находится по ссылке "
+"link:https://clangd.llvm.org[], а репозиторий 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 ""
+"Ниже приведены эталонные настройки сочетаний клавиш и автодополнения кода. "
+"Поместите следующий фрагмент в [.filepath]#~/.config/nvim/init.vim# или "
+"[.filepath]#~/.vim/vimrc# для пользователей 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 ""
+"Для работы демона языкового сервера необходимы клиентские плагины LSP. "
+"Нажмите `Ctrl+Shift+X`, чтобы открыть панель поиска расширений в сети. "
+"Введите `llvm-vs-code-extensions.vscode-clangd` при использовании clangd или "
+"`ccls-project.ccls` при использовании 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 ""
+"Затем нажмите `Ctrl+Shift+P`, чтобы открыть палитру команд редактора. "
+"Введите `Preferences: Open Settings (JSON)` в палитру и нажмите `Enter`, "
+"чтобы открыть [.filepath]#settings.json#. В зависимости от реализации "
+"языкового сервера, добавьте одну из следующих пар ключ/значение JSON в "
+"[.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 "База данных компиляции"
+
+#. 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 ""
+"База данных компиляции содержит массив объектов команд компиляции. Каждый "
+"объект определяет способ компиляции исходного файла. Файл базы данных "
+"компиляции обычно называется [.filename]#compile_commands.json#. База данных "
+"используется реализациями языковых серверов для целей индексирования."
+
+#. 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 ""
+"Пожалуйста, обратитесь к link:https://clang.llvm.org/docs/"
+"JSONCompilationDatabase.html#format[] для получения подробностей о формате "
+"файла базы данных компиляции."
+
+#. 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 "Использование scan-build-py"
+
+#. 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 ""
+"Инструмент `intercept-build` из scan-build-py используется для создания базы "
+"данных компиляции."
+
+#. 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 ""
+"Установите пакет package:devel/python[], чтобы получить интерпретатор "
+"python. Для получения `intercept-build` из 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 ""
+"где [.filename]#/path/to/llvm-project/# — это желаемый путь для репозитория. "
+"Для удобства создайте алиас в файле конфигурации оболочки:"
+
+#. 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 ""
+"link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] можно "
+"использовать вместо LLVM's scan-build-py. LLVM's scan-build-py был объединён "
+"в дерево LLVM из rizsotto/scan-build. Эту реализацию можно установить с "
+"помощью `pip install --user scan-build`. Скрипт `intercept-build` по "
+"умолчанию находится в [.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 "Использование"
+
+#. 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 ""
+"В корневом каталоге исходного кода FreeBSD создайте базу данных компиляции с "
+"помощью `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 ""
+"Флаг `--append` указывает `intercept-build` прочитать существующую базу "
+"данных компиляции (если она существует) и добавить результаты в базу данных. "
+"Записи с дублирующимися ключами команд объединяются. Сгенерированная база "
+"данных компиляции по умолчанию сохраняется в текущей рабочей директории как "
+"[.filename]#compile_commands.json#."
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:269
+#, no-wrap
+msgid "Using devel/bear"
+msgstr "Использование 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 ""
+"В корневом каталоге исходного кода FreeBSD, чтобы создать базу данных "
+"компиляции с помощью `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 keys are merged. The generated compilation database by "
+"default is saved in the current working directory as "
+"[.filename]#compile_commands.json#."
+msgstr ""
+"Флаг `--append` указывает `bear` прочитать существующую базу данных "
+"компиляции, если она есть, и добавить результаты в неё. Записи с "
+"дублирующимися ключами команд объединяются. Сгенерированная база данных "
+"компиляции по умолчанию сохраняется в текущей рабочей директории как "
+"[.filename]#compile_commands.json#."
+
+#. 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 ""
+"После создания базы данных компиляции откройте любой исходный файл в дереве "
+"исходного кода FreeBSD, и серверный демон LSP также запустится в фоновом "
+"режиме. Первое открытие исходных файлов в дереве src занимает значительно "
+"больше времени, прежде чем сервер LSP сможет предоставить полный результат, "
+"из-за первоначального фонового индексирования сервером LSP, который "
+"компилирует все перечисленные записи в базе данных компиляции. Однако демон "
+"языкового сервера не индексирует исходные файлы, отсутствующие в базе данных "
+"компиляции, поэтому полные результаты не отображаются для исходных файлов, "
+"которые не компилировались во время выполнения `make`."
diff --git a/documentation/content/ru/articles/freebsd-status-report-process/_index.adoc b/documentation/content/ru/articles/freebsd-status-report-process/_index.adoc
new file mode 100644
index 0000000000..483c34855b
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-status-report-process/_index.adoc
@@ -0,0 +1,368 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2023-2025 The FreeBSD Documentation Project'
+description: 'Инструкции для авторов и редакторов отчетов о состоянии'
+title: 'Процесс составления отчёта о состоянии FreeBSD'
+trademarks: ["freebsd", "git", "github", "general"]
+---
+
+= Процесс составления отчёта о состоянии FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Отчеты о состоянии FreeBSD публикуются ежеквартально и предоставляют широкой
+общественности обзор происходящего в проекте. Они часто дополняются
+специальными отчетами с встреч разработчиков. Поскольку это одна из самых
+заметных форм коммуникации, они очень важны.
+
+На протяжении этого документа, а также в других материалах, связанных с
+отчётами о состоянии FreeBSD, выражение _отчёт о состоянии_ используется как
+для обозначения документа, публикуемого ежеквартально, так и для отдельных
+записей, содержащихся в нём.
+
+== Инструкции для авторов
+
+Этот раздел содержит рекомендации по написанию записей в отчетах о
+состоянии. Также приведены инструкции по отправке ваших записей.
+
+_Не беспокойтесь, если вы не являетесь носителем английского языка. Команда
+mailto:status@FreeBSD.org[status team] проверит ваши записи на орфографию и
+грамматику и исправит их за вас._
+
+=== Представьте свою работу
+
+_Не предполагайте, что человек, читающий отчёт, знает о вашем проекте._
+
+Отчеты о состоянии имеют широкое распространение. Они часто становятся
+одними из главных новостей на веб-сайте FreeBSD и являются одним из первых
+материалов, которые прочитают люди, желающие узнать немного о том, что такое
+FreeBSD. Рассмотрим следующий пример:
+
+....
+abc(4) support was added, including frobnicator compatibility.
+....
+
+Читающий это, если он знаком с руководствами UNIX, поймет, что `abc(4)` —
+это какое-то устройство. Но почему это должно волновать читателя? Что это за
+устройство? Сравните с этой версией:
+
+....
+A new driver, abc(4), was added to the tree, bringing support for
+Yoyodyne's range of Frobnicator network interfaces.
+....
+
+Теперь читатель знает, что `abc` — это драйвер сетевого интерфейса. Даже
+если они не используют продукты Yoyodyne, вы сообщили, что поддержка сетевых
+устройств в FreeBSD улучшается.
+
+=== Покажите важность вашей работы
+
+_Отчеты о состоянии нужны не только для того, чтобы сообщать всем о
+выполненных задачах, но и для объяснения причин их выполнения._
+
+Продолжим предыдущий пример. Почему интересно, что мы теперь поддерживаем
+карты Yoyodyne Frobnicator? Они широко распространены? Они используются в
+каком-то конкретном популярном устройстве? Они применяются в определенной
+нише, где FreeBSD имеет (или хотела бы иметь) присутствие? Это самые быстрые
+сетевые карты на планете? В отчетах о состоянии часто встречаются такие
+фразы:
+
+....
+We imported Cyberdyne Systems T800 into the tree.
+....
+
+И затем они останавливаются. Возможно, читатель — ярый поклонник Cyberdyne и
+знает, какие захватывающие новые функции предлагает T800. Это
+маловероятно. Гораздо вероятнее, что они смутно слышали о том, что вы
+импортировали (особенно в дерево портов: помните, что там есть ещё более 35
+000 других элементов...). Перечислите некоторые новые функции или
+исправления ошибок. Объясните, почему хорошо, что у нас появилась новая
+версия.
+
+=== Расскажите нам что-то новое
+
+_Не используйте повторно одни и те же пункты отчёта о состоянии._
+
+Имейте в виду, что отчеты о состоянии — это не просто отчеты о состоянии
+проекта, это отчеты об изменении состояния проекта. Если проект
+продолжается, уделите пару предложений его представлению, но затем
+сосредоточьтесь в отчете на новой работе. Какой прогресс был достигнут с
+момента последнего отчета? Что осталось сделать? Когда он, вероятно, будет
+завершен (или, если "завершение" не совсем применимо, когда он будет готов
+для более широкого использования, тестирования, развертывания в производстве
+и так далее)?
+
+=== Спонсорство
+
+_Не забывайте о ваших спонсорах._
+
+Если вы или ваш проект получили спонсорскую поддержку, стипендию от
+кого-либо или вы уже работали подрядчиком или сотрудником компании,
+пожалуйста, укажите это. Спонсоры всегда ценят, когда их благодарят за
+финансирование, но также им выгодно показать, что они активно поддерживают
+Проект таким образом. И последнее, но не менее важное: это помогает FreeBSD
+узнать больше о своих важных потребителях.
+
+=== Открытые вопросы
+
+_Если требуется помощь, укажите это явно!_
+
+Нужна ли помощь с чем-то? Есть ли задачи, которые могут выполнить другие
+люди? Существует два способа использования раздела открытых пунктов в отчете
+о состоянии: для запроса помощи или для быстрого обзора объема оставшейся
+работы. Если над проектом уже работает достаточное количество людей или он
+находится в таком состоянии, что добавление новых участников не ускорит его,
+то лучше использовать второй вариант. Укажите крупные рабочие задачи,
+которые находятся в процессе выполнения, и, возможно, обозначьте, кто над
+каждой из них работает.
+
+Перечислите задачи с достаточной детализацией, чтобы люди могли понять,
+смогут ли они их выполнить, и предложите им связаться с вами.
+
+=== Представьте ваш отчёт
+
+Доступны следующие методы для отправки ваших отчетов:
+
+* отправить ссылку link:https://reviews.freebsd.org/[Phabricator review] и
+ добавить группу _status_ в список рецензентов. Вы должны разместить свои
+ отчёты в соответствующем подкаталоге `doc/website/content/en/status/`
+ (создайте его, если он отсутствует);
+
+* отправить запрос на включение изменений (pull request) в репозиторий
+ документации через link:https://github.com/freebsd/freebsd-doc[его зеркало
+ на GitHub]. Вы должны размещать свои отчёты в соответствующем подкаталоге
+ `doc/website/content/en/status` (создайте его, если он отсутствует);
+
+* отправить письмо на адрес status-submissions@FreeBSD.org, приложив ваш
+ отчет.
+
+Доступен link:https://www.FreeBSD.org/status/report-sample.adoc[шаблон
+отчёта в формате AsciiDoc].
+
+== Инструкции для редакторов
+
+Этот раздел описывает, как работает процесс проверки и публикации.
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|Главная веб-страница отчетов о статусе
+|link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]
+
+|Отчеты о статусе архивированного репозитория GitHub (использовались для отчетов с 2017Q4 по 2022Q4):
+|link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]
+
+|Основной адрес электронной почты команды статуса
+|link:mailto:status@FreeBSD.org[status@FreeBSD.org]
+
+|Адрес электронной почты для отправки отчетов
+|link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]
+
+|Список рассылки для получения запросов на отчеты о состоянии
+|link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]
+
+|Страница команды статуса в Phabricator
+|link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]
+|===
+
+=== Сроки
+
+Отчеты всегда принимаются командой статуса, но основной процесс сбора
+происходит в последний месяц каждого квартала, то есть в марте, июне,
+сентябре и декабре. В эти месяцы будут отправляться явные запросы на
+статусные отчеты. Месяцы январь, апрель, июль и октябрь посвящены сбору
+отчетов, представленных в предыдущем квартале; это может включать ожидание
+запоздавших отправлений. Публикация статусных отчетов происходит в те же
+месяцы, как только отчеты будут готовы.
+
+Все отправленные отчёты могут быть продлены по ссылке
+link:mailto:status-submissions@FreeBSD.org[электронной почте команды
+статуса] вплоть до продлённого срока, который составляет 8 дней после
+окончания квартала. Записи от
+link:https://www.freebsd.org/administration/#t-portmgr[команды управления
+портами] по умолчанию используют продлённый заголовок из-за пересечения
+отчётов о статусе и квартальных веток портов.
+
+Проверка представленных отчетов людьми, не входящими в команду статуса,
+должна быть в основном завершена к середине января/апреля/июля/октября (срок
+для сторонней отложенной проверки). То есть, за исключением опечаток или
+других незначительных правок, команда статуса должна быть готова начать сбор
+представленных материалов вскоре после 15-го числа. Отметим, что это не
+полный заморозка, и команда статуса все еще может принимать проверки в этот
+период.
+
+[cols="1,2,2,2,2"]
+|===
+||Первый квартал|Второй квартал|Третий квартал|Четвертый квартал
+
+|Первый запрос отчетов
+|1 марта
+|1 июня
+|1 сентября
+|1 декабря
+
+|Напоминание через 2 недели
+|15 марта
+|15 июня
+|15 сентября
+|15 декабря
+
+|Последнее напоминание
+|24 марта
+|24 июня
+|24 сентября
+|24 декабря
+
+|Стандартный срок выполнения
+|31 марта
+|30 июня
+|30 сентября
+|31 декабря
+
+|Расширенный срок выполнения
+|8 апреля
+|8 июля
+|8 октября
+|8 января
+
+|Срок проверки другими участниками
+|15 апреля
+|15 июля
+|15 октября
+|15 января
+|===
+
+=== Запрос отчетов
+
+Запросы отчетов о состоянии отправляются следующим получателям:
+
+* link:https://lists.freebsd.org/subscription/freebsd-status-calls[почтовая
+ рассылка freebsd-status-calls@FreeBSD.org];
+* всем авторам последних отчетов о состоянии (у них могут быть обновления или
+ дополнительные улучшения);
+* и, в зависимости от времени года,
+ ** Различные организаторы конференций:
+ *** link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] в марте (первый квартал);
+ *** link:mailto:info@bsdcan.org[BSDCan] в мае (второй квартал);
+ ** Различные участники конференции:
+ *** ЕвроBSDcon в сентябре - октябре (третий-четвертый квартал); организация
+ ЕвроBSDcon не заинтересована в написании отчетов для FreeBSD — по крайней
+ мере, не была заинтересована в октябре 2019 года: причина в том, что
+ конференция не ориентирована конкретно на FreeBSD. Следовательно, отчеты об
+ этом мероприятии следует запрашивать у участников сообщества FreeBSD,
+ которые присутствовали на нем.
+ ** Google Summer of Code: link:mailto:soc-students@FreeBSD.org[студенты] и их
+ link:mailto:soc-mentors@FreeBSD.org[наставники].
+
+Самый простой способ отправки запросов на отчеты о состоянии — использовать
+скрипт
+link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[[.filename]#sendcalls#
+на Perl] из каталога [.filename]#tools/sendcalls# git репозитория
+документации. Скрипт автоматически отправляет запросы всем указанным
+получателям. Его также можно использовать через задание cron, например:
+
+....
+0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && git pull && ./sendcalls -s 'Lorenzo Salvadore'
+....
+
+[IMPORTANT]
+====
+Если вы отвечаете за рассылку запросов отчетов о состоянии и используете
+задание cron, пожалуйста, запускайте его на freefall и подписывайте своим
+именем, чтобы в случае возникновения проблем можно было определить, кто
+настроил задание cron. Также, в качестве дополнительной меры
+предосторожности, обновите приведенный выше пример, указав свое имя.
+====
+
+Также может быть полезно объявить сбор отчетов на форумах, как это
+link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[делалось
+ранее].
+
+=== Построение отчета
+
+Отправленные отчеты проверяются и объединяются в соответствующем подкаталоге
+[.filename]#doc/website/content/en/status/# по мере поступления. Пока отчеты
+обновляются, люди вне команды статуса также могут просматривать отдельные
+записи и предлагать исправления.
+
+Обычно последним шагом в процессе проверки содержания является написание
+введения в файле с названием [.filename]#intro.adoc#: хорошее введение можно
+написать только после того, как собраны все отчеты. По возможности, полезно
+попросить разных людей написать введение, чтобы добавить разнообразия:
+разные люди привнесут разные точки зрения и помогут сохранить его свежим.
+
+После того как все отчеты и введение готовы, необходимо создать файл
+[.filename]#_index.adoc#: это файл, в котором отчеты распределяются по
+различным категориям и сортируются.
+
+=== Публикация отчета
+
+Когда все файлы отчета о состоянии готовы, пришло время опубликовать его.
+
+Сначала редактируется файл
+[.filename]#doc/website/content/en/status/_index.adoc#: обновляется
+следующая дата отчёта и добавляется ссылка на новый отчёт. Затем изменения
+отправляются в репозиторий, и команда статуса проверяет, что всё работает
+как ожидалось.
+
+Затем запись новости для главной страницы сайта добавляется в
+[.filename]#doc/website/data/ru/news/news.toml#.
+
+Вот пример записи новостей:
+....
+[[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."
+....
+
+После создания HTML-версии отчёта и её публикации в сети используется
+man:w3m[1] для преобразования веб-сайта в простой текст, например:
+....
+% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ > /tmp/report-2021-01-2021-03.txt
+....
+
+man:w3m[1] имеет полную поддержку юникода. Опция `-dump` просто выводит
+текстовое представление HTML-кода, из которого затем можно удалить несколько
+элементов, а `-cols` гарантирует, что всё будет перенесено на 80 колонок.
+
+Ссылка на сформированный отчет добавляется между введением и первой записью.
+
+Переключив способ доставки (отчёт должен быть в тексте письма, а не в
+приложении) и убедившись, что его кодировка в UTF-8, вы получаете
+окончательно готовый к отправке отчёт.
+
+Отправляются два письма, оба с темой в формате `FreeBSD Status Report -
+<First/Second/Third/Fourth> Quarter <year>`:
+
+* одно для
+ link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];
+
+[IMPORTANT]
+====
+Это письмо должно быть одобрено, поэтому если вы отвечаете за отправку этого
+письма, убедитесь, что кто-то сделает это одобрение (напишите
+link:mailto:postmaster@FreeBSD.org[постмастеру], если одобрение займет много
+времени).
+====
+
+* одно на
+ link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org],
+ которому добавьте
+ link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org]
+ и
+ link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org]
+ в копию (CC) и `developers@FreeBSD.org` в скрытую копию (BCC).
diff --git a/documentation/content/ru/articles/freebsd-status-report-process/_index.po b/documentation/content/ru/articles/freebsd-status-report-process/_index.po
new file mode 100644
index 0000000000..6d02cf0295
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-status-report-process/_index.po
@@ -0,0 +1,1023 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 21:02+0300\n"
+"PO-Revision-Date: 2025-08-02 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-status-report-process_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Процесс составления отчёта о состоянии 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 ""
+"Отчеты о состоянии FreeBSD публикуются ежеквартально и предоставляют широкой "
+"общественности обзор происходящего в проекте. Они часто дополняются "
+"специальными отчетами с встреч разработчиков. Поскольку это одна из самых "
+"заметных форм коммуникации, они очень важны."
+
+#. 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 ""
+"На протяжении этого документа, а также в других материалах, связанных с "
+"отчётами о состоянии FreeBSD, выражение _отчёт о состоянии_ используется как "
+"для обозначения документа, публикуемого ежеквартально, так и для отдельных "
+"записей, содержащихся в нём."
+
+#. 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. "
+"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 ""
+"_Не беспокойтесь, если вы не являетесь носителем английского языка. Команда "
+"mailto:status@FreeBSD.org[status team] проверит ваши записи на орфографию и "
+"грамматику и исправит их за вас._"
+
+#. 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 ""
+"Отчеты о состоянии имеют широкое распространение. Они часто становятся "
+"одними из главных новостей на веб-сайте FreeBSD и являются одним из первых "
+"материалов, которые прочитают люди, желающие узнать немного о том, что такое "
+"FreeBSD. Рассмотрим следующий пример:"
+
+#. 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 "abc(4) support was added, including frobnicator compatibility.\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 ""
+"Читающий это, если он знаком с руководствами UNIX, поймет, что `abc(4)` — "
+"это какое-то устройство. Но почему это должно волновать читателя? Что это за "
+"устройство? Сравните с этой версией:"
+
+#. 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 ""
+"A new driver, abc(4), was added to the tree, bringing support for\n"
+"Yoyodyne's range of Frobnicator network interfaces.\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 ""
+"Теперь читатель знает, что `abc` — это драйвер сетевого интерфейса. Даже "
+"если они не используют продукты Yoyodyne, вы сообщили, что поддержка сетевых "
+"устройств в FreeBSD улучшается."
+
+#. 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 ""
+"Продолжим предыдущий пример. Почему интересно, что мы теперь поддерживаем "
+"карты Yoyodyne Frobnicator? Они широко распространены? Они используются в "
+"каком-то конкретном популярном устройстве? Они применяются в определенной "
+"нише, где FreeBSD имеет (или хотела бы иметь) присутствие? Это самые быстрые "
+"сетевые карты на планете? В отчетах о состоянии часто встречаются такие "
+"фразы:"
+
+#. 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 "We imported Cyberdyne Systems T800 into the tree.\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 35,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 ""
+"И затем они останавливаются. Возможно, читатель — ярый поклонник Cyberdyne и "
+"знает, какие захватывающие новые функции предлагает T800. Это маловероятно. "
+"Гораздо вероятнее, что они смутно слышали о том, что вы импортировали "
+"(особенно в дерево портов: помните, что там есть ещё более 35 000 других "
+"элементов...). Перечислите некоторые новые функции или исправления ошибок. "
+"Объясните, почему хорошо, что у нас появилась новая версия."
+
+#. 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 ""
+"Если вы или ваш проект получили спонсорскую поддержку, стипендию от кого-"
+"либо или вы уже работали подрядчиком или сотрудником компании, пожалуйста, "
+"укажите это. Спонсоры всегда ценят, когда их благодарят за финансирование, "
+"но также им выгодно показать, что они активно поддерживают Проект таким "
+"образом. И последнее, но не менее важное: это помогает FreeBSD узнать больше "
+"о своих важных потребителях."
+
+#. 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 ""
+"отправить ссылку link:https://reviews.freebsd.org/[Phabricator review] и "
+"добавить группу _status_ в список рецензентов. Вы должны разместить свои "
+"отчёты в соответствующем подкаталоге `doc/website/content/en/status/` "
+"(создайте его, если он отсутствует);"
+
+#. 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 ""
+"отправить запрос на включение изменений (pull request) в репозиторий "
+"документации через link:https://github.com/freebsd/freebsd-doc[его зеркало "
+"на GitHub]. Вы должны размещать свои отчёты в соответствующем подкаталоге "
+"`doc/website/content/en/status` (создайте его, если он отсутствует);"
+
+#. 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 ""
+"отправить письмо на адрес status-submissions@FreeBSD.org, приложив ваш отчет."
+
+#. 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 ""
+"Доступен link:https://www.FreeBSD.org/status/report-sample.adoc[шаблон "
+"отчёта в формате AsciiDoc]."
+
+#. 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 "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 "Отчеты о статусе архивированного репозитория GitHub (использовались для отчетов с 2017Q4 по 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 "Основной адрес электронной почты команды статуса"
+
+#. 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 "Адрес электронной почты для отправки отчетов"
+
+#. 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 "Список рассылки для получения запросов на отчеты о состоянии"
+
+#. 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 "Страница команды статуса в 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 "Сроки"
+
+#. 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 ""
+"Все отправленные отчёты могут быть продлены по ссылке link:mailto:status-"
+"submissions@FreeBSD.org[электронной почте команды статуса] вплоть до "
+"продлённого срока, который составляет 8 дней после окончания квартала. "
+"Записи от link:https://www.freebsd.org/administration/#t-portmgr[команды "
+"управления портами] по умолчанию используют продлённый заголовок из-за "
+"пересечения отчётов о статусе и квартальных веток портов."
+
+#. 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 ""
+"Проверка представленных отчетов людьми, не входящими в команду статуса, "
+"должна быть в основном завершена к середине января/апреля/июля/октября (срок "
+"для сторонней отложенной проверки). То есть, за исключением опечаток или "
+"других незначительных правок, команда статуса должна быть готова начать сбор "
+"представленных материалов вскоре после 15-го числа. Отметим, что это не "
+"полный заморозка, и команда статуса все еще может принимать проверки в этот "
+"период."
+
+#. 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 "1 марта"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:177
+#, no-wrap
+msgid "June 1st"
+msgstr "1 июня"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:178
+#, no-wrap
+msgid "September 1st"
+msgstr "1 сентября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:180
+#, no-wrap
+msgid "December 1st"
+msgstr "1 декабря"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:181
+#, no-wrap
+msgid "2 weeks left reminder"
+msgstr "Напоминание через 2 недели"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:182
+#, no-wrap
+msgid "March 15th"
+msgstr "15 марта"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:183
+#, no-wrap
+msgid "June 15th"
+msgstr "15 июня"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:184
+#, no-wrap
+msgid "September 15th"
+msgstr "15 сентября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:186
+#, no-wrap
+msgid "December 15th"
+msgstr "15 декабря"
+
+#. 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 "24 марта"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:189
+#, no-wrap
+msgid "June 24th"
+msgstr "24 июня"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:190
+#, no-wrap
+msgid "September 24th"
+msgstr "24 сентября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:192
+#, no-wrap
+msgid "December 24th"
+msgstr "24 декабря"
+
+#. 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 "31 марта"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:195
+#, no-wrap
+msgid "June 30th"
+msgstr "30 июня"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:196
+#, no-wrap
+msgid "September 30th"
+msgstr "30 сентября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:198
+#, no-wrap
+msgid "December 31st"
+msgstr "31 декабря"
+
+#. 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 "8 апреля"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:201
+#, no-wrap
+msgid "July 8th"
+msgstr "8 июля"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:202
+#, no-wrap
+msgid "October 8th"
+msgstr "8 октября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:204
+#, no-wrap
+msgid "January 8th"
+msgstr "8 января"
+
+#. 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 "15 апреля"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:207
+#, no-wrap
+msgid "July 15th"
+msgstr "15 июля"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:208
+#, no-wrap
+msgid "October 15th"
+msgstr "15 октября"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:209
+#, no-wrap
+msgid "January 15th"
+msgstr "15 января"
+
+#. 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 ""
+"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 ""
+"всем авторам последних отчетов о состоянии (у них могут быть обновления или "
+"дополнительные улучшения);"
+
+#. 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 ""
+"link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] в марте (первый квартал);"
+
+#. 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] в мае (второй квартал);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:222
+msgid "Various conference attendees:"
+msgstr "Различные участники конференции:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:225
+msgid ""
+"EuroBSDcon in 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. Hence, reports about this event should be asked of members of the "
+"FreeBSD community that attended it."
+msgstr ""
+"ЕвроBSDcon в сентябре - октябре (третий-четвертый квартал); организация "
+"ЕвроBSDcon не заинтересована в написании отчетов для FreeBSD — по крайней "
+"мере, не была заинтересована в октябре 2019 года: причина в том, что "
+"конференция не ориентирована конкретно на FreeBSD. Следовательно, отчеты об "
+"этом мероприятии следует запрашивать у участников сообщества FreeBSD, "
+"которые присутствовали на нем."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:226
+msgid ""
+"Google Summer of Code link:mailto:soc-students@FreeBSD.org[students] and "
+"their link:mailto:soc-mentors@FreeBSD.org[mentors]."
+msgstr ""
+"Google Summer of Code: link:mailto:soc-students@FreeBSD.org[студенты] и их "
+"link:mailto:soc-mentors@FreeBSD.org[наставники]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:230
+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 ""
+"Самый простой способ отправки запросов на отчеты о состоянии — использовать "
+"скрипт link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/"
+"sendcalls[[.filename]#sendcalls# на Perl] из каталога [.filename]#tools/"
+"sendcalls# git репозитория документации. Скрипт автоматически отправляет "
+"запросы всем указанным получателям. Его также можно использовать через "
+"задание cron, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:233
+#, 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:239
+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 ""
+"Если вы отвечаете за рассылку запросов отчетов о состоянии и используете "
+"задание cron, пожалуйста, запускайте его на freefall и подписывайте своим "
+"именем, чтобы в случае возникновения проблем можно было определить, кто "
+"настроил задание cron. Также, в качестве дополнительной меры "
+"предосторожности, обновите приведенный выше пример, указав свое имя."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:242
+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 ""
+"Также может быть полезно объявить сбор отчетов на форумах, как это "
+"link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-"
+"december-status-reports.49812/[делалось ранее]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:243
+#, no-wrap
+msgid "Building the report"
+msgstr "Построение отчета"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:247
+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 ""
+"Отправленные отчеты проверяются и объединяются в соответствующем подкаталоге "
+"[.filename]#doc/website/content/en/status/# по мере поступления. Пока отчеты "
+"обновляются, люди вне команды статуса также могут просматривать отдельные "
+"записи и предлагать исправления."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:250
+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 ""
+"Обычно последним шагом в процессе проверки содержания является написание "
+"введения в файле с названием [.filename]#intro.adoc#: хорошее введение можно "
+"написать только после того, как собраны все отчеты. По возможности, полезно "
+"попросить разных людей написать введение, чтобы добавить разнообразия: "
+"разные люди привнесут разные точки зрения и помогут сохранить его свежим."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:252
+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 ""
+"После того как все отчеты и введение готовы, необходимо создать файл "
+"[.filename]#_index.adoc#: это файл, в котором отчеты распределяются по "
+"различным категориям и сортируются."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:253
+#, no-wrap
+msgid "Publishing the report"
+msgstr "Публикация отчета"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:256
+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:259
+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 ""
+"Сначала редактируется файл [.filename]#doc/website/content/en/status/"
+"_index.adoc#: обновляется следующая дата отчёта и добавляется ссылка на "
+"новый отчёт. Затем изменения отправляются в репозиторий, и команда статуса "
+"проверяет, что всё работает как ожидалось."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:261
+msgid ""
+"Then the news entry for the main website page is added to [.filename]#doc/"
+"website/data/en/news/news.toml#."
+msgstr ""
+"Затем запись новости для главной страницы сайта добавляется в "
+"[.filename]#doc/website/data/ru/news/news.toml#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:263
+msgid "Here is a sample for the news entry:"
+msgstr "Вот пример записи новостей:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:268
+#, 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:271
+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 ""
+"После создания HTML-версии отчёта и её публикации в сети используется "
+"man:w3m[1] для преобразования веб-сайта в простой текст, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:273
+#, 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:276
+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] имеет полную поддержку юникода. Опция `-dump` просто выводит "
+"текстовое представление HTML-кода, из которого затем можно удалить несколько "
+"элементов, а `-cols` гарантирует, что всё будет перенесено на 80 колонок."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:278
+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:280
+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 ""
+"Переключив способ доставки (отчёт должен быть в тексте письма, а не в "
+"приложении) и убедившись, что его кодировка в UTF-8, вы получаете "
+"окончательно готовый к отправке отчёт."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:282
+msgid ""
+"Two emails are sent, both with subject in the format `FreeBSD Status Report "
+"- <First/Second/Third/Fourth> Quarter <year>`:"
+msgstr ""
+"Отправляются два письма, оба с темой в формате `FreeBSD Status Report - "
+"<First/Second/Third/Fourth> Quarter <year>`:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:284
+msgid ""
+"one to link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-"
+"announce@FreeBSD.org];"
+msgstr ""
+"одно для 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:288
+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 ""
+"Это письмо должно быть одобрено, поэтому если вы отвечаете за отправку этого "
+"письма, убедитесь, что кто-то сделает это одобрение (напишите "
+"link:mailto:postmaster@FreeBSD.org[постмастеру], если одобрение займет много "
+"времени)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:290
+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 ""
+"одно на link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-"
+"hackers@FreeBSD.org], которому добавьте link:https://lists.freebsd.org/"
+"subscription/freebsd-current[freebsd-current@FreeBSD.org] и link:https://"
+"lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] в "
+"копию (CC) и `developers@FreeBSD.org` в скрытую копию (BCC)."
diff --git a/documentation/content/ru/articles/freebsd-update-server/_index.adoc b/documentation/content/ru/articles/freebsd-update-server/_index.adoc
new file mode 100644
index 0000000000..d2aa4552ee
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-update-server/_index.adoc
@@ -0,0 +1,610 @@
+---
+authors:
+ -
+ author: 'Jason Helfman'
+ email: jgh@FreeBSD.org
+copyright: '2009-2011, 2013 Jason Helfman'
+description: 'Создание собственного сервера freebsd-update позволяет системному администратору выполнять быстрые обновления для множества машин из локального зеркала'
+tags: ["FreeBSD", "Update", "Server", "internal"]
+title: 'Создайте свой собственный сервер обновлений FreeBSD'
+trademarks: ["freebsd", "amd", "intel", "general"]
+---
+
+= Создайте свой собственный сервер обновлений FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/freebsd-update-server/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+
+[WARNING]
+====
+Инструкции в этой статье относятся к более старой версии FreeBSD и могут не работать корректно в последних версиях ОС. В связи с появлением pkgbase, утилита freebsd-update планируется к удалению из FreeBSD в будущем. Когда это произойдет, статья будет либо обновлена с учетом новых процедур, либо полностью удалена.
+====
+
+[.abstract-title]
+Аннотация
+
+В этой статье описывается создание внутреннего сервера обновлений FreeBSD. https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] написан `{cperciva}`, почетным руководителем безопасности FreeBSD. Для пользователей, которым удобно обновлять свои системы через официальный сервер обновлений, создание собственного сервера обновлений FreeBSD может помочь расширить его функциональность, поддерживая вручную модифицированные выпуски FreeBSD или предоставляя локальное зеркало, которое позволит ускорить обновления для множества машин.
+
+'''
+
+toc::[]
+
+[[acknowledgments]]
+== Благодарности
+
+Эта статья была впоследствии опубликована в онлайн издании https://people.freebsd.org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine].
+
+[[introduction]]
+== Введение
+
+Опытные пользователи или администраторы часто отвечают за несколько машин или окружений. Они понимают сложные требования и вызовы, связанные с поддержанием такой инфраструктуры. Запуск сервера обновлений FreeBSD упрощает развертывание исправлений безопасности и программного обеспечения на выбранных тестовых машинах перед их внедрением в рабочую среду. Это также означает, что множество систем могут быть обновлены из локальной сети, а не через потенциально медленное интернет-соединение. В этой статье описаны шаги, необходимые для создания внутреннего сервера обновлений FreeBSD.
+
+[[prerequisites]]
+== Предварительные требования
+
+Для создания внутреннего сервера обновлений FreeBSD необходимо выполнить некоторые требования.
+
+* Работающая система FreeBSD.
++
+[NOTE]
+====
+Минимальное требование для обновлений — сборка на версии FreeBSD, которая не меньше целевой версии для распространения.
+====
+* Пользовательская учётная запись с как минимум 4 ГБ свободного места. Это позволит создавать обновления для версий 7.1 и 7.2, но точные требования к месту могут меняться от версии к версии.
+* Учетная запись man:ssh[1] на удаленной машине для загрузки распределенных обновлений.
+* Веб-сервер, например extref:{handbook}[Apache, network-apache], с более чем половиной пространства, необходимого для сборки. Например, тестовые сборки для версий 7.1 и 7.2 занимают в общей сложности 4 ГБ, а пространство веб-сервера, необходимое для распространения этих обновлений, составляет 2.6 ГБ.
+* Базовые знания написания скриптов для оболочки Bourne shell, man:sh[1].
+
+[[Configuration]]
+== Конфигурация: установка и настройка
+
+Загрузите программное обеспечение https://github.com/freebsd/freebsd-update-build/[freebsd-update-server], установив пакеты package:devel/git[] и package:security/ca_root_nss[], и выполните:
+
+[source, shell]
+....
+% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server
+....
+
+Обновите соответствующим образом файл [.filename]#scripts/build.conf#. Он используется во всех операциях сборки.
+
+Вот стандартный [.filename]#build.conf#, который следует изменить в соответствии с вашим окружением.
+
+[.programlisting]
+....
+# Main configuration file for FreeBSD Update builds. The
+# release-specific configuration data is lower down in
+# the scripts tree.
+
+# Location from which to fetch releases
+export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>
+
+# Host platform
+export HOSTPLATFORM=`uname -m`
+
+# Host name to use inside jails
+export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>
+
+# Location of SSH key
+export SSHKEY=/root/.ssh/id_dsa <.>
+
+# SSH account into which files are uploaded
+MASTERACCT=builder@wadham.daemonology.net <.>
+
+# Directory into which files are uploaded
+MASTERDIR=update-master.freebsd.org <.>
+....
+
+Учтите возможные варианты следующих настроек:
+
+<.> Это место, откуда загружаются образы ISO (с помощью подпрограммы `fetchiso()` из файла [.filename]#scripts/build.subr#). Настроенное расположение не ограничивается URI FTP. Должны работать любые схемы URI, поддерживаемые стандартной утилитой man:fetch[1]. Пользовательские изменения кода `fetchiso()` можно установить, скопировав скрипт [.filename]#build.subr# по умолчанию в область, специфичную для выпуска и архитектуры, по пути [.filename]#scripts/РЕЛИЗ/АРХИТЕКТУРА/build.subr#, и применив локальные изменения.
+
+<.> Имя хоста для сборки. Эта информация будет отображаться на обновленных системах при выполнении команды:
++
+[source, shell]
+....
+% uname -v
+....
++
+<.> Ключ SSH для загрузки файлов на сервер обновлений. Пару ключей можно создать, выполнив команду `ssh-keygen -t dsa`. Этот параметр необязателен; стандартная аутентификация по паролю будет использоваться в качестве резервного метода, если `SSHKEY` не определён. Более подробную информацию о SSH и соответствующих шагах по созданию и использованию ключей можно найти на man:ssh-keygen[1].
+
+<.> Учетная запись для загрузки файлов на сервер обновлений.
+
+<.> Каталог на сервере обновлений, в который загружаются файлы.
+
+В стандартном файле [.filename]#build.conf#, поставляемом с исходниками freebsd-update-server, задана сборка релизов FreeBSD для архитектуры i386. В качестве примера настройки сервера обновлений для других архитектур ниже приведены шаги с необходимыми изменениями конфигурации для amd64:
+
+[.procedure]
+====
+. Создайте среду сборки для amd64:
++
+[source, shell]
+....
+% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64
+....
+
+. Установите файл [.filename]#build.conf# в только что созданный каталог сборки. Параметры конфигурации сборки для FreeBSD 7.2-RELEASE на amd64 должны быть примерно такими:
++
+[.programlisting]
+....
+# SHA256 hash of RELEASE disc1.iso image.
+export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 <.>
+# Components of the world, source, and kernels
+export WORLDPARTS="base catpages dict doc games info manpages proflibs lib32"
+export SOURCEPARTS="base bin contrib crypto etc games gnu include krb5 \
+ lib libexec release rescue sbin secure share sys tools \
+ ubin usbin cddl"
+export KERNELPARTS="generic"
+
+# EOL date
+export EOL=1275289200 <.>
+....
++
+<.> Хеш-ключ man:sha256[1] для желаемого выпуска опубликован в соответствующем link:https://www.FreeBSD.org/releases/[анонсе выпуска].
+<.> Для получения номера "End of Life" для файла [.filename]#build.conf# обратитесь к "Estimated EOL" на сайте link:https://www.FreeBSD.org/security/security/[FreeBSD Security Website]. Значение `EOL` можно вывести из даты, указанной на веб-сайте, используя утилиту man:date[1], например:
++
+[source, shell]
+....
+% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'
+....
+====
+
+[[build]]
+== Сборка кода обновления
+
+Первым шагом является запуск [.filename]#scripts/make.sh#. Это приведёт к сборке некоторых бинарных файлов, созданию каталогов и генерации RSA-ключа подписи, используемого для подтверждения сборок. На этом этапе потребуется ввести парольную фразу для окончательного создания ключа подписи.
+
+[source, shell]
+....
+# sh scripts/make.sh
+cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps
+findstamps.c: In function 'usage':
+findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit'
+cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp
+install findstamps ../bin
+install unstamp ../bin
+rm -f findstamps unstamp
+Generating RSA private key, 4096 bit long modulus
+................................................................................++
+...................++
+e is 65537 (0x10001)
+
+Public key fingerprint:
+27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e
+
+Encrypting signing key for root
+enter aes-256-cbc encryption password:
+Verifying - enter aes-256-cbc encryption password:
+....
+
+[NOTE]
+====
+Сохраните сгенерированный отпечаток ключа. Это значение требуется в [.filename]#/etc/freebsd-update.conf# для бинарных обновлений.
+====
+
+На этом этапе мы готовы к подготовке сборки.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/init.sh amd64 7.2-RELEASE
+....
+
+Ниже приведён пример _первоначальной_ сборки.
+
+[source, shell]
+....
+# sh scripts/init.sh amd64 7.2-RELEASE
+Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE
+/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps 00m00s
+Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE
+Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE
+
+Files built but not released:
+Files released but not built:
+Files which differ by more than contents:
+Files which differ between release and build:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+src|sys|/sys/conf/newvers.sh
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+....
+
+Затем выполняется сборка world с применением патчей world. Более подробное объяснение можно найти в [.filename]#scripts/build.subr#.
+
+[WARNING]
+====
+В течение этого второго цикла сборки демон протокола сетевого времени, man:ntpd[8], отключен. По словам `{cperciva}`, почетного офицера безопасности FreeBSD, "код сборки https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] должен идентифицировать временные метки, хранящиеся в файлах, чтобы их можно было игнорировать при сравнении сборок для определения того, какие файлы нуждаются в обновлении. Этот поиск временных меток работает путем выполнения двух сборок с интервалом в 400 дней и сравнения результатов."
+====
+
+[source, shell]
+....
+Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE
+Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE
+Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE
+Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE
+
+Files found which include build stamps:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/include/osreldate.h
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+....
+
+Наконец, сборка завершена.
+
+[source, shell]
+....
+Values of build stamps, excluding library archive headers:
+v1.2 (Aug 25 2009 00:40:36)
+v1.2 (Aug 25 2009 00:38:22)
+@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009
+FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009
+ root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
+7.2-RELEASE
+Mon Aug 24 23:55:25 UTC 2009
+Mon Aug 24 23:55:25 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+ built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
+Mon Aug 24 23:46:47 UTC 2009
+ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+ * Copyright (c) 1992-2009 The FreeBSD Project.
+Mon Aug 24 23:46:47 UTC 2009
+Mon Aug 24 23:55:40 UTC 2009
+Aug 25 2009
+ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)
+ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
+Tue Aug 25 00:21:21 UTC 2009
+Tue Aug 25 00:21:21 UTC 2009
+Tue Aug 25 00:21:21 UTC 2009
+Mon Aug 24 23:46:47 UTC 2009
+
+FreeBSD/amd64 7.2-RELEASE initialization build complete. Please
+review the list of build stamps printed above to confirm that
+they look sensible, then run
+ sh -e approve.sh amd64 7.2-RELEASE
+to sign the release.
+....
+
+Одобрите сборку, если всё правильно. Дополнительную информацию о том, как это определить, можно найти в распределённом исходном файле с именем [.filename]#USAGE#. Выполните [.filename]#scripts/approve.sh#, как указано. Это подпишет релиз и переместит компоненты в промежуточную область, подходящую для загрузки.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/mountkey.sh
+....
+
+[source, shell]
+....
+# sh -e scripts/approve.sh amd64 7.2-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
+....
+
+После завершения процесса утверждения можно начать процедуру загрузки.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/upload.sh amd64 7.2-RELEASE
+....
+
+[NOTE]
+====
+В случае необходимости повторной загрузки кода обновления, это можно сделать, перейдя в публичный каталог дистрибутивов для целевого выпуска и обновив атрибуты файла _uploaded_.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64
+# touch -t 200801010101.01 uploaded
+....
+
+====
+
+Загруженные файлы должны находиться в корневом каталоге веб-сервера, чтобы обновления могли распространяться. Точная конфигурация будет зависеть от используемого веб-сервера. Для веб-сервера Apache обратитесь к разделу extref:{handbook}[Настройка серверов Apache, network-apache] в Руководстве.
+
+Обновите `KeyPrint` и `ServerName` клиента в [.filename]#/etc/freebsd-update.conf# и выполните обновления, как указано в разделе extref:{handbook}[Обновление FreeBSD, updating-upgrading-freebsdupdate] Руководства.
+
+[IMPORTANT]
+====
+Для корректной работы сервера обновлений FreeBSD Update необходимо собирать обновления как для текущего релиза, так и для релиза, _на который планируется обновление_. Это необходимо для определения различий в файлах между релизами. Например, при обновлении системы FreeBSD с 7.1-RELEASE до 7.2-RELEASE потребуется собрать и загрузить на сервер распространения обновления для обеих версий.
+====
+
+Для справки, полный текст выполнения link:../../source/articles/freebsd-update-server/init.txt[init.sh] прилагается.
+
+[[patch]]
+== Построение патча
+
+Каждый раз, когда объявляется link:https://www.FreeBSD.org/security/advisories/[консультативный документ по безопасности] или link:https://www.FreeBSD.org/security/notices/[уведомление о безопасности], можно собрать обновление с исправлением.
+
+Для этого примера будет использоваться версия 7.1-RELEASE.
+
+Несколько предположений сделано для другой сборки выпуска:
+
+* Настройка правильной структуры каталогов для первоначальной сборки.
+* Выполните первоначальную сборку для 7.1-RELEASE.
+
+Создайте каталог с патчами соответствующего выпуска в [.filename]#/usr/local/freebsd-update-server/patches/#.
+
+[source, shell]
+....
+% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/
+% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE
+....
+
+В качестве примера возьмем патч для man:named[8]. Прочтите рекомендации и загрузите необходимый файл с link:https://www.FreeBSD.org/security/advisories/[FreeBSD Security Advisories]. Дополнительную информацию о том, как интерпретировать рекомендации, можно найти в extref:{handbook}[FreeBSD Handbook, security-advisories].
+
+В https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[кратком обзоре безопасности] этот совет называется `SA-09:12.bind`. После загрузки файла необходимо переименовать его в соответствии с уровнем исправления. Рекомендуется сохранять это в соответствии с официальными уровнями исправлений FreeBSD, но имя может быть выбрано свободно. Для данной сборки давайте последуем текущей установленной практике FreeBSD и назовем его `p7`. Переименуйте файл:
+
+[source, shell]
+....
+% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind
+....
+
+[NOTE]
+====
+При выполнении сборки уровня патча предполагается, что предыдущие патчи уже установлены. При запуске сборки патча будут выполнены все патчи, содержащиеся в каталоге патчей.
+
+В сборку могут быть добавлены пользовательские патчи. Используйте ноль или любое другое число.
+====
+
+[WARNING]
+====
+
+Задача администратора сервера FreeBSD Update — принимать соответствующие меры для проверки подлинности каждого патча.
+====
+
+На этом этапе _diff_ готов к сборке. Программное обеспечение сначала проверяет, был ли запущен [.filename]#scripts/init.sh# для соответствующего выпуска перед выполнением сборки diff.
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/diff.sh amd64 7.1-RELEASE 7
+....
+
+Вот пример выполнения _дифференциальной_ сборки.
+
+[source, shell]
+....
+# sh -e scripts/diff.sh amd64 7.1-RELEASE 7
+Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
+Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
+Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7
+...
+Files found which include build stamps:
+kernel|generic|/GENERIC/hptrr.ko
+kernel|generic|/GENERIC/kernel
+world|base|/boot/loader
+world|base|/boot/pxeboot
+world|base|/etc/mail/freebsd.cf
+world|base|/etc/mail/freebsd.submit.cf
+world|base|/etc/mail/sendmail.cf
+world|base|/etc/mail/submit.cf
+world|base|/lib/libcrypto.so.5
+world|base|/usr/bin/ntpq
+world|base|/usr/include/osreldate.h
+world|base|/usr/lib/libalias.a
+world|base|/usr/lib/libalias_cuseeme.a
+world|base|/usr/lib/libalias_dummy.a
+world|base|/usr/lib/libalias_ftp.a
+...
+Values of build stamps, excluding library archive headers:
+v1.2 (Aug 26 2009 18:13:46)
+v1.2 (Aug 26 2009 18:11:44)
+@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009
+FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009
+ root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
+7.1-RELEASE-p7
+Wed Aug 26 17:29:15 UTC 2009
+Wed Aug 26 17:29:15 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+ built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
+Wed Aug 26 17:20:39 UTC 2009
+ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+ * Copyright (c) 1992-2009 The FreeBSD Project.
+Wed Aug 26 17:20:39 UTC 2009
+Wed Aug 26 17:29:30 UTC 2009
+Aug 26 2009
+ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)
+ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:55:02 UTC 2009
+Wed Aug 26 17:20:39 UTC 2009
+...
+....
+
+Обновления выводятся на экран, и запрашивается подтверждение.
+
+[source, shell]
+....
+New updates:
+kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|
+kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|
+kernel|generic|/|d|0|0|0755|0||
+src|base|/|d|0|0|0755|0||
+src|bin|/|d|0|0|0755|0||
+src|cddl|/|d|0|0|0755|0||
+src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|
+src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|
+src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|
+...
+FreeBSD/amd64 7.1-RELEASE update build complete. Please review
+the list of build stamps printed above and the list of updated
+files to confirm that they look sensible, then run
+ sh -e approve.sh amd64 7.1-RELEASE
+to sign the build.
+....
+
+Следуйте той же процедуре, что и ранее, для подтверждения сборки:
+
+[source, shell]
+....
+# sh -e scripts/approve.sh amd64 7.1-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE
+Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE
+
+The FreeBSD/amd64 7.1-RELEASE update build has been signed and is
+ready to be uploaded. Remember to run
+ sh -e umountkey.sh
+to unmount the decrypted key once you have finished signing all
+the new builds.
+....
+
+После утверждения сборки загрузите программное обеспечение:
+
+[source, shell]
+....
+# cd /usr/local/freebsd-update-server
+# sh scripts/upload.sh amd64 7.1-RELEASE
+....
+
+Для справки, полный запуск скрипта link:../../source/articles/freebsd-update-server/diff.txt[diff.sh] прилагается.
+
+[[tips]]
+== Советы
+
+* Если пользовательская сборка создана с использованием стандартной процедуры `make release` extref:{releng}[procedure, release-build], код freebsd-update-server будет работать с вашей сборкой. Например, сборка без портов или документации может быть создана путем отключения функциональности, относящейся к подпрограммам документации `findextradocs ()`, `addextradocs ()`, и изменения места загрузки в `fetchiso ()` соответственно в файле [.filename]#scripts/build.subr#. В завершение измените хеш man:sha256[1] в файле [.filename]#build.conf# для соответствующей сборки и архитектуры, после чего можно приступать к сборке вашей пользовательской версии.
++
+[.programlisting]
+....
+# Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts
+# of the world|doc subcomponent are missing from the latter, and
+# build a tarball out of them.
+findextradocs () {
+}
+# Add extra docs to ${WORKDIR}/$1
+addextradocs () {
+}
+....
+
+* Добавление флагов `-j _ЧИСЛО_` к целям `buildworld` и `obj` в скрипте [.filename]#scripts/build.subr# может ускорить обработку в зависимости от используемого оборудования, однако это не обязательно. Использование этих флагов в других целях не рекомендуется, так как это может привести к ненадёжности сборки.
++
+[.programlisting]
+....
+ # Build the world
+ log "Building world"
+ cd /usr/src &&
+ make -j 2 ${COMPATFLAGS} buildworld 2>&1
+ # Distribute the world
+ log "Distributing world"
+ cd /usr/src/release &&
+ make -j 2 obj &&
+ make ${COMPATFLAGS} release.1 release.2 2>&1
+....
+
+* Создайте соответствующий extref:{handbook}[DNS, network-dns] SRV-запись для сервера обновлений и разместите остальные за ним с переменными весами. Использование этой возможности обеспечит зеркала для обновлений, однако данный совет не обязателен, если вы не хотите предоставлять избыточный сервис.
++
+[.programlisting]
+....
+_http._tcp.update.myserver.com. IN SRV 0 2 80 host1.myserver.com.
+ IN SRV 0 1 80 host2.myserver.com.
+ IN SRV 0 0 80 host3.myserver.com.
+....
diff --git a/documentation/content/ru/articles/freebsd-update-server/_index.po b/documentation/content/ru/articles/freebsd-update-server/_index.po
new file mode 100644
index 0000000000..7e8874769e
--- /dev/null
+++ b/documentation/content/ru/articles/freebsd-update-server/_index.po
@@ -0,0 +1,1482 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-21 11:50+0300\n"
+"PO-Revision-Date: 2025-08-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesfreebsd-update-server_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Создание собственного сервера freebsd-update позволяет системному администратору выполнять быстрые обновления для множества машин из локального зеркала"
+
+#. 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 "Создайте свой собственный сервер обновлений FreeBSD"
+
+#. 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 ""
+"Инструкции в этой статье относятся к более старой версии FreeBSD и могут не "
+"работать корректно в последних версиях ОС. В связи с появлением pkgbase, "
+"утилита freebsd-update планируется к удалению из FreeBSD в будущем. Когда "
+"это произойдет, статья будет либо обновлена с учетом новых процедур, либо "
+"полностью удалена."
+
+#. 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 ""
+"В этой статье описывается создание внутреннего сервера обновлений FreeBSD. "
+"https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] "
+"написан `{cperciva}`, почетным руководителем безопасности FreeBSD. Для "
+"пользователей, которым удобно обновлять свои системы через официальный "
+"сервер обновлений, создание собственного сервера обновлений FreeBSD может "
+"помочь расширить его функциональность, поддерживая вручную модифицированные "
+"выпуски FreeBSD или предоставляя локальное зеркало, которое позволит "
+"ускорить обновления для множества машин."
+
+#. 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 ""
+"Эта статья была впоследствии опубликована в онлайн издании 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: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 ""
+"Опытные пользователи или администраторы часто отвечают за несколько машин "
+"или окружений. Они понимают сложные требования и вызовы, связанные с "
+"поддержанием такой инфраструктуры. Запуск сервера обновлений FreeBSD "
+"упрощает развертывание исправлений безопасности и программного обеспечения "
+"на выбранных тестовых машинах перед их внедрением в рабочую среду. Это также "
+"означает, что множество систем могут быть обновлены из локальной сети, а не "
+"через потенциально медленное интернет-соединение. В этой статье описаны "
+"шаги, необходимые для создания внутреннего сервера обновлений FreeBSD."
+
+#. 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 ""
+"Для создания внутреннего сервера обновлений FreeBSD необходимо выполнить "
+"некоторые требования."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:84
+msgid "A running FreeBSD system."
+msgstr "Работающая система FreeBSD."
+
+#. 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 ""
+"Минимальное требование для обновлений — сборка на версии FreeBSD, которая не "
+"меньше целевой версии для распространения."
+
+#. 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 ""
+"Пользовательская учётная запись с как минимум 4 ГБ свободного места. Это "
+"позволит создавать обновления для версий 7.1 и 7.2, но точные требования к "
+"месту могут меняться от версии к версии."
+
+#. 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 ""
+"Учетная запись man:ssh[1] на удаленной машине для загрузки распределенных "
+"обновлений."
+
+#. 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 ""
+"Веб-сервер, например extref:{handbook}[Apache, network-apache], с более чем "
+"половиной пространства, необходимого для сборки. Например, тестовые сборки "
+"для версий 7.1 и 7.2 занимают в общей сложности 4 ГБ, а пространство веб-"
+"сервера, необходимое для распространения этих обновлений, составляет 2.6 ГБ."
+
+#. 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 ""
+"Базовые знания написания скриптов для оболочки Bourne shell, man:sh[1]."
+
+#. 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 ""
+"Загрузите программное обеспечение https://github.com/freebsd/freebsd-update-"
+"build/[freebsd-update-server], установив пакеты package:devel/git[] и "
+"package:security/ca_root_nss[], и выполните:"
+
+#. 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 "% 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:106
+msgid ""
+"Update [.filename]#scripts/build.conf# appropriately. It is sourced during "
+"all build operations."
+msgstr ""
+"Обновите соответствующим образом файл [.filename]#scripts/build.conf#. Он "
+"используется во всех операциях сборки."
+
+#. 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 ""
+"Вот стандартный [.filename]#build.conf#, который следует изменить в "
+"соответствии с вашим окружением."
+
+#. 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 ""
+"# Main configuration file for FreeBSD Update builds. The\n"
+"# release-specific configuration data is lower down in\n"
+"# the scripts tree.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:117
+#, no-wrap
+msgid ""
+"# Location from which to fetch releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+msgstr ""
+"# Location from which to fetch releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:120
+#, no-wrap
+msgid ""
+"# Host platform\n"
+"export HOSTPLATFORM=`uname -m`\n"
+msgstr ""
+"# Host platform\n"
+"export HOSTPLATFORM=`uname -m`\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:123
+#, no-wrap
+msgid ""
+"# Host name to use inside jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+msgstr ""
+"# Host name to use inside jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:126
+#, no-wrap
+msgid ""
+"# Location of SSH key\n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+msgstr ""
+"# Location of SSH key\n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:129
+#, no-wrap
+msgid ""
+"# SSH account into which files are uploaded\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+msgstr ""
+"# SSH account into which files are uploaded\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:132
+#, no-wrap
+msgid ""
+"# Directory into which files are uploaded\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+msgstr ""
+"# Directory into which files are uploaded\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc: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 ""
+"Это место, откуда загружаются образы ISO (с помощью подпрограммы "
+"`fetchiso()` из файла [.filename]#scripts/build.subr#). Настроенное "
+"расположение не ограничивается URI FTP. Должны работать любые схемы URI, "
+"поддерживаемые стандартной утилитой man:fetch[1]. Пользовательские изменения "
+"кода `fetchiso()` можно установить, скопировав скрипт "
+"[.filename]#build.subr# по умолчанию в область, специфичную для выпуска и "
+"архитектуры, по пути [.filename]#scripts/РЕЛИЗ/АРХИТЕКТУРА/build.subr#, и "
+"применив локальные изменения."
+
+#. 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 "% uname -v\n"
+
+#. 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 ""
+"Ключ SSH для загрузки файлов на сервер обновлений. Пару ключей можно "
+"создать, выполнив команду `ssh-keygen -t dsa`. Этот параметр необязателен; "
+"стандартная аутентификация по паролю будет использоваться в качестве "
+"резервного метода, если `SSHKEY` не определён. Более подробную информацию о "
+"SSH и соответствующих шагах по созданию и использованию ключей можно найти "
+"на man:ssh-keygen[1]."
+
+#. 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 ""
+"В стандартном файле [.filename]#build.conf#, поставляемом с исходниками "
+"freebsd-update-server, задана сборка релизов FreeBSD для архитектуры i386. В "
+"качестве примера настройки сервера обновлений для других архитектур ниже "
+"приведены шаги с необходимыми изменениями конфигурации для amd64:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:158
+msgid "Create a build environment for amd64:"
+msgstr "Создайте среду сборки для amd64:"
+
+#. 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 "% 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: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 ""
+"Установите файл [.filename]#build.conf# в только что созданный каталог "
+"сборки. Параметры конфигурации сборки для FreeBSD 7.2-RELEASE на amd64 "
+"должны быть примерно такими:"
+
+#. 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 ""
+"# 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:179
+#, 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: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 ""
+"Хеш-ключ man:sha256[1] для желаемого выпуска опубликован в соответствующем "
+"link:https://www.FreeBSD.org/releases/[анонсе выпуска]."
+
+#. 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 ""
+"Для получения номера \"End of Life\" для файла [.filename]#build.conf# "
+"обратитесь к \"Estimated EOL\" на сайте link:https://www.FreeBSD.org/"
+"security/security/[FreeBSD Security Website]. Значение `EOL` можно вывести "
+"из даты, указанной на веб-сайте, используя утилиту man:date[1], например:"
+
+#. 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 "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+
+#. 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 ""
+"Первым шагом является запуск [.filename]#scripts/make.sh#. Это приведёт к "
+"сборке некоторых бинарных файлов, созданию каталогов и генерации RSA-ключа "
+"подписи, используемого для подтверждения сборок. На этом этапе потребуется "
+"ввести парольную фразу для окончательного создания ключа подписи."
+
+#. 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 ""
+"# 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:214
+#, 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: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 ""
+"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:224
+msgid ""
+"Keep a note of the generated key fingerprint. This value is required in "
+"[.filename]#/etc/freebsd-update.conf# for binary updates."
+msgstr ""
+"Сохраните сгенерированный отпечаток ключа. Это значение требуется в "
+"[.filename]#/etc/freebsd-update.conf# для бинарных обновлений."
+
+#. 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 ""
+"# 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: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 ""
+"# 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: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 ""
+"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: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 ""
+"Затем выполняется сборка world с применением патчей world. Более подробное "
+"объяснение можно найти в [.filename]#scripts/build.subr#."
+
+#. 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 ""
+"В течение этого второго цикла сборки демон протокола сетевого времени, "
+"man:ntpd[8], отключен. По словам `{cperciva}`, почетного офицера "
+"безопасности FreeBSD, \"код сборки https://github.com/freebsd/freebsd-update-"
+"build/[freebsd-update-server] должен идентифицировать временные метки, "
+"хранящиеся в файлах, чтобы их можно было игнорировать при сравнении сборок "
+"для определения того, какие файлы нуждаются в обновлении. Этот поиск "
+"временных меток работает путем выполнения двух сборок с интервалом в 400 "
+"дней и сравнения результатов.\""
+
+#. 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 ""
+"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: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 ""
+"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: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 ""
+"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: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 ""
+"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: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 ""
+"Одобрите сборку, если всё правильно. Дополнительную информацию о том, как "
+"это определить, можно найти в распределённом исходном файле с именем "
+"[.filename]#USAGE#. Выполните [.filename]#scripts/approve.sh#, как указано. "
+"Это подпишет релиз и переместит компоненты в промежуточную область, "
+"подходящую для загрузки."
+
+#. 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 ""
+"# 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: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 ""
+"# 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: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 ""
+"# 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: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 ""
+"В случае необходимости повторной загрузки кода обновления, это можно "
+"сделать, перейдя в публичный каталог дистрибутивов для целевого выпуска и "
+"обновив атрибуты файла _uploaded_."
+
+#. 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 ""
+"# 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: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 ""
+"Загруженные файлы должны находиться в корневом каталоге веб-сервера, чтобы "
+"обновления могли распространяться. Точная конфигурация будет зависеть от "
+"используемого веб-сервера. Для веб-сервера Apache обратитесь к разделу "
+"extref:{handbook}[Настройка серверов Apache, network-apache] в Руководстве."
+
+#. 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 ""
+"Обновите `KeyPrint` и `ServerName` клиента в [.filename]#/etc/freebsd-"
+"update.conf# и выполните обновления, как указано в разделе extref:{handbook}"
+"[Обновление FreeBSD, updating-upgrading-freebsdupdate] Руководства."
+
+#. 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 ""
+"Для корректной работы сервера обновлений FreeBSD Update необходимо собирать "
+"обновления как для текущего релиза, так и для релиза, _на который "
+"планируется обновление_. Это необходимо для определения различий в файлах "
+"между релизами. Например, при обновлении системы FreeBSD с 7.1-RELEASE до "
+"7.2-RELEASE потребуется собрать и загрузить на сервер распространения "
+"обновления для обеих версий."
+
+#. 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 ""
+"Для справки, полный текст выполнения link:../../source/articles/freebsd-"
+"update-server/init.txt[init.sh] прилагается."
+
+#. 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 ""
+"Каждый раз, когда объявляется link:https://www.FreeBSD.org/security/"
+"advisories/[консультативный документ по безопасности] или link:https://"
+"www.FreeBSD.org/security/notices/[уведомление о безопасности], можно собрать "
+"обновление с исправлением."
+
+#. 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 "Для этого примера будет использоваться версия 7.1-RELEASE."
+
+#. 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 "Выполните первоначальную сборку для 7.1-RELEASE."
+
+#. 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 ""
+"Создайте каталог с патчами соответствующего выпуска в [.filename]#/usr/local/"
+"freebsd-update-server/patches/#."
+
+#. 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 ""
+"% 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: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 ""
+"В качестве примера возьмем патч для man:named[8]. Прочтите рекомендации и "
+"загрузите необходимый файл с link:https://www.FreeBSD.org/security/"
+"advisories/[FreeBSD Security Advisories]. Дополнительную информацию о том, "
+"как интерпретировать рекомендации, можно найти в extref:{handbook}[FreeBSD "
+"Handbook, security-advisories]."
+
+#. 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 ""
+"В https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[кратком "
+"обзоре безопасности] этот совет называется `SA-09:12.bind`. После загрузки "
+"файла необходимо переименовать его в соответствии с уровнем исправления. "
+"Рекомендуется сохранять это в соответствии с официальными уровнями "
+"исправлений FreeBSD, но имя может быть выбрано свободно. Для данной сборки "
+"давайте последуем текущей установленной практике FreeBSD и назовем его `p7`. "
+"Переименуйте файл:"
+
+#. 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 "% 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: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 ""
+"Задача администратора сервера FreeBSD Update — принимать соответствующие "
+"меры для проверки подлинности каждого патча."
+
+#. 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 ""
+"На этом этапе _diff_ готов к сборке. Программное обеспечение сначала "
+"проверяет, был ли запущен [.filename]#scripts/init.sh# для соответствующего "
+"выпуска перед выполнением сборки diff."
+
+#. 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 ""
+"# 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: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 ""
+"# 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: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 ""
+"New updates:\n"
+"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
+"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/|d|0|0|0755|0||\n"
+"src|base|/|d|0|0|0755|0||\n"
+"src|bin|/|d|0|0|0755|0||\n"
+"src|cddl|/|d|0|0|0755|0||\n"
+"src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
+"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
+"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"...\n"
+"FreeBSD/amd64 7.1-RELEASE update build complete. Please review\n"
+"the list of build stamps printed above and the list of updated\n"
+"files to confirm that they look sensible, then run\n"
+" sh -e approve.sh amd64 7.1-RELEASE\n"
+"to sign the build.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc: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 ""
+"# 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: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 ""
+"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: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 ""
+"# 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:601
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/diff.txt[diff.sh] is attached."
+msgstr ""
+"Для справки, полный запуск скрипта link:../../source/articles/freebsd-update-"
+"server/diff.txt[diff.sh] прилагается."
+
+#. 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 ""
+"Если пользовательская сборка создана с использованием стандартной процедуры "
+"`make release` extref:{releng}[procedure, release-build], код freebsd-update-"
+"server будет работать с вашей сборкой. Например, сборка без портов или "
+"документации может быть создана путем отключения функциональности, "
+"относящейся к подпрограммам документации `findextradocs ()`, `addextradocs "
+"()`, и изменения места загрузки в `fetchiso ()` соответственно в файле "
+"[.filename]#scripts/build.subr#. В завершение измените хеш man:sha256[1] в "
+"файле [.filename]#build.conf# для соответствующей сборки и архитектуры, "
+"после чего можно приступать к сборке вашей пользовательской версии."
+
+#. 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 ""
+"# 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: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 ""
+"Добавление флагов `-j _ЧИСЛО_` к целям `buildworld` и `obj` в скрипте "
+"[.filename]#scripts/build.subr# может ускорить обработку в зависимости от "
+"используемого оборудования, однако это не обязательно. Использование этих "
+"флагов в других целях не рекомендуется, так как это может привести к "
+"ненадёжности сборки."
+
+#. 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 ""
+" # 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: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 ""
+"Создайте соответствующий extref:{handbook}[DNS, network-dns] SRV-запись для "
+"сервера обновлений и разместите остальные за ним с переменными весами. "
+"Использование этой возможности обеспечит зеркала для обновлений, однако "
+"данный совет не обязателен, если вы не хотите предоставлять избыточный "
+"сервис."
+
+#. 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 ""
+"_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"
diff --git a/documentation/content/ru/articles/geom-class/_index.adoc b/documentation/content/ru/articles/geom-class/_index.adoc
index 9ec0e0c6e2..a7940ade06 100644
--- a/documentation/content/ru/articles/geom-class/_index.adoc
+++ b/documentation/content/ru/articles/geom-class/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Создание класса GEOM
authors:
- - author: Ivan Voras
+ -
+ author: 'Ivan Voras'
email: ivoras@FreeBSD.org
+description: 'Руководство по внутреннему устройству GEOM и созданию собственного класса GEOM'
+tags: ["GEOM", "kernel", "modules", "FreeBSD"]
+title: 'Создание класса GEOM'
trademarks: ["freebsd", "intel", "general"]
---
@@ -47,10 +50,10 @@ endif::[]
toc::[]
[[intro]]
-== Вступление
+== Введение
[[intro-docs]]
-=== Документация
+=== Documentation
Документация по программированию для ядра скудная, это одна из немногих областей программирования, где почти нет хороших учебных пособий, и совет "читай исходники!" - сохраняет свою справедливость. Однако, существует несколько статей и книг разной актуальности, которые рекомендуются к изучению перед тем, как начать программировать:
@@ -88,7 +91,7 @@ options WITNESS_SUPPORT
options WITNESS
....
-Также включите отладочные символы, если планируете выполнять отладку по дампам аварийных отказов
+Также включите отладочные символы, если планируете выполнять отладку по дампам аварийных отказов:
[.programlisting]
....
@@ -129,7 +132,7 @@ kern.metadelay=3
[.programlisting]
....
dumpdev="/dev/ad0s4b"
-dumpdir="/usr/core"
+dumpdir="/usr/core
....
Переменная `dumpdev` указывает на раздел подкачки, а `dumpdir` сообщает системе куда перемещать дамп ядра при следующей загрузке.
@@ -170,7 +173,7 @@ KMOD=geom_journal
.include <bsd.kmod.mk>
....
-Этот [.filename]#Makefile# (с измененными именами файлов) подойдет к любому модулю ядра. Класс GEOM может размещаться в одном единственном модуле ядра. Если для сборки вашего модуля требуется больше, чем один файл, то перечислите их имена, разделенные пробельными символами, в переменной `SRCS`.
+Этот [.filename]#Makefile# (с измененными именами файлов) подойдет к любому модулю ядра. Класс GEOM может размещаться в одном единственном модуле ядра. Если для сборки вашего модуля требуется больше, чем один файл, то перечислите их имена, разделенные пробельными символами, в переменной `SRCS`.
[[kernelprog]]
== Программирование в ядре FreeBSD
@@ -187,7 +190,7 @@ KMOD=geom_journal
static MALLOC_DEFINE(M_GJOURNAL, "gjournal data", "GEOM_JOURNAL Data");
....
-Для того, чтобы можно было использовать этот макрос, необходимо включить следующие заголовочные файлы: [.filename]#sys/param.h#, [.filename]#sys/kernel.h# и [.filename]#sys/malloc.h#
+Для того, чтобы можно было использовать этот макрос, необходимо включить следующие заголовочные файлы: [.filename]#sys/param.h#, [.filename]#sys/kernel.h# и [.filename]#sys/malloc.h#.
Существует еще один механизм выделения памяти - UMA (Universal Memory Allocator), описанный в man:uma[9]. Это специфический метод, преимущественно предназначенный для быстрого выделения памяти под списки, состоящие из элементов одинакового размера (например, динамические массивы структур).
@@ -201,7 +204,7 @@ KMOD=geom_journal
[[kernelprog-bios]]
=== BIOs
-Структура `bio` используется для всех операций ввода/вывода, касающихся GEOM. Она содержит информацию о том, какое устройство ('поставщик geom') должно ответить на запрос, тип запроса, смещение, длину и указатель на буфер, а также набор "определенных пользователем" флагов и полей .
+Структура `bio` используется для всех операций ввода/вывода, касающихся GEOM. Она содержит информацию о том, какое устройство ('поставщик geom') должно ответить на запрос, тип запроса, смещение, длину и указатель на буфер, а также набор "определенных пользователем" флагов и полей .
Важным моментом является то, что `bio` обрабатываются асинхронно. Это значит, что во многих частях кода нет аналога к man:read[2] и man:write[2] функциям из пространства пользовательских процессов, которые не возвращают управление пока не выполнится системный вызов. Скорее, по завершении обработки запроса (или в случае ошибки при обработке) как извещение вызывается определенная пользователем функция.
@@ -220,12 +223,12 @@ KMOD=geom_journal
Класс GEOM выполняет преобразования данных. Эти преобразования могут быть скомпонованы друг с другом в виде дерева. Экземпляр класса GEOM называют __geom__.
-В каждом классе GEOM есть несколько "методов класса", которые вызываются когда экземпляра класса нет в наличии (или же они не привязаны к конкретному экземпляру класса).
+В каждом классе GEOM есть несколько "методов класса", которые вызываются когда экземпляра класса нет в наличии (или же они не привязаны к конкретному экземпляру класса):
* `.init` вызывается тогда, когда системе GEOM становится известно о классе GEOM (например, когда загружается модуль ядра).
-* `.fini` будет вызван в случае отказа GEOM системы от класса (например, при выгрузке модуля).
+* `.fini` будет вызван в случае отказа GEOM системы от класса (например, при выгрузке модуля)
* `.taste` вызывается, когда в системе появляется новый класс или поставщик geom ("provider"). Если соответствие найдено, то эта функция обычно создает и запускает экземпляр geom.
-* `.destroy_geom` вызывается при необходимости разрушить экземпляр geom.
+* `.destroy_geom` вызывается при необходимости разрушить экземпляр geom
* `.ctlconf` будет вызван, когда пользователь запросит изменение конфигурации существующего экземпляра geom
Также определены функции событий GEOM, которые копируются в экземпляр geom.
@@ -241,7 +244,7 @@ KMOD=geom_journal
* `struct g_provider *provider` : "поставщик geom" предоставляемый данным экземпляром geom
* `uint16_t n_disks` : Количество потребителей geom ("consumer"), обслуживаемых данным экземпляром geom
-* `struct g_consumer \**disks` : Массив `struct g_consumer*`. (Невозможно обойтись одинарным указателем, потому что система GEOM создает для нас структуры struct g_consumer)
+* `struct g_consumer \**disks` : Массив `struct g_consumer*`. (Невозможно обойтись одинарным указателем, потому что система GEOM создает для нас структуры struct g_consumer).
Структура `softc` содержит состояние экземпляра geom. У каждого экземпляра есть свой softc.
@@ -283,7 +286,7 @@ KMOD=geom_journal
[.programlisting]
....
- команда [-опции] имя_geom [другие]
+ verb [-options] geomname [other]
....
Общими командами являются:
@@ -329,18 +332,18 @@ KMOD=geom_journal
* Файловая система преобразует запрос в экземпляр структуры bio и передает его системе GEOM. Файловая система "знает", что экземпляр geom должен обработать запрос, так как файловые системы размещаются непосредственно над экземпляром geom.
* Запрос завершается вызовом функции `.start`() в потоке g_down и достигает верхнего экземпляра geom.
* Верхний экземпляр geom (например, это секционировщик разделов (partition slicer)) определяет, что запрос должен быть переадресован нижестоящему экземпляру geom (к примеру, драйверу диска). Вышестоящий экземпляр geom создает копию запроса bio (запросы bio _ВСЕГДА_ копируются при передаче между экземплярами geom при помощи `g_clone_bio`()!), изменяет поля смещения и целевого поставщика geom и запускает на обработку копию при помощи функции `g_io_request`()
-* Драйвер диска также получает запрос bio, как вызов функции `.start`() в потоке `g_down`. Драйвер обращается к контроллеру диска, получает блок данных и вызывает функцию `g_io_deliver`() используя копию запроса bio
-* Теперь, извещение о завершении bio "всплывает" в потоке `g_up`. Сначала в потоке `g_up` вызывается функция `.done`() секционировщика разделов, последний использует полученную информацию, разрушает клонированный экземпляр структуры bio посредством `g_destroy_bio`() и вызывает `g_io_deliver`() используя первоначальный запрос
-* Файловая система получает данные и передает их пользовательскому процессу
+* Драйвер диска также получает запрос bio, как вызов функции `.start`() в потоке `g_down`. Драйвер обращается к контроллеру диска, получает блок данных и вызывает функцию `g_io_deliver`() используя копию запроса bio.
+* Теперь, извещение о завершении bio "всплывает" в потоке `g_up`. Сначала в потоке `g_up` вызывается функция `.done`() секционировщика разделов, последний использует полученную информацию, разрушает клонированный экземпляр структуры bio посредством `g_destroy_bio`() и вызывает `g_io_deliver`() используя первоначальный запрос.
+* Файловая система получает данные и передает их пользовательскому процессу.
-За информацией о том, как данные передаются в структуре `bio` между экземплярами geom, смотрите man:g_bio[9] (обратите внимание на использование полей `bio_parent` и `bio_children`).
+За информацией о том, как данные передаются в структуре `bio` между экземплярами geom, смотрите man:g_bio[9] (обратите внимание на использование полей `bio_parent` и `bio_children`).
Важный момент в том, что __НЕЛЬЗЯ ДОПУСКАТЬ БЛОКИРОВОК В ПОТОКАХ G_UP И G_DOWN__. Вот неполный перечень того, что нельзя делать в этих потоках:
* Вызывать функции `msleep`() или `tsleep`().
* Использовать функции `g_write_data`() и `g_read_data`(), так как они блокируются в момент обмена данными с потребителями geom.
* Ожидать ввод/вывод.
-* Вызывать man:malloc[9] и `uma_zalloc`() с установленным флагом `M_WAITOK`.
+* Вызывать man:malloc[9] и `uma_zalloc`() с установленным флагом `M_WAITOK`
* Использовать man:sx[9]
Это ограничение на код GEOM призвано избежать от "засорения" пути запроса ввода/вывода, так как блокировки обычно не имеют четких временных границ, и нет гарантий на занимаемое время (также на то есть и другие технические причины). Это также значит, что в вышеупомянутых потоках сколь-нибудь сложные операции выполнить нельзя, например: любое сложное преобразование требует выделения памяти. К счастью решение есть: создание дополнительных ядерных потоков.
@@ -348,7 +351,7 @@ KMOD=geom_journal
[[geom-kernelthreads]]
=== Ядерные потоки выполнения, предназначенные для использования в коде geom
-Ядерные потоки выполнения создаются функцией man:kthread_create[9], в своем поведении они схожи с потоками, созданными в пространстве пользовательских процессов, но есть одно отличие: они не могут известить вызвавший их поток о своем завершении; по завершению - необходимо вызывать man:kthread_exit[9]
+Ядерные потоки выполнения создаются функцией man:kthread_create[9], в своем поведении они схожи с потоками, созданными в пространстве пользовательских процессов, но есть одно отличие: они не могут известить вызвавший их поток о своем завершении; по завершению - необходимо вызывать man:kthread_exit[9].
В коде GEOM обычное назначение этих потоков - разгрузить поток `g_down` (функцию `.start`() ) от обработки запросов. Эти потоки подобны "обработчикам событий" ("event handlers"): у них есть очередь событий (которая наполняется событиями от разных функций из разных потоков; очередь необходимо защищать мьютексом), события из очереди выбираются одно за другим и обрабатываются в большом блоке `switch`().
diff --git a/documentation/content/ru/articles/geom-class/_index.po b/documentation/content/ru/articles/geom-class/_index.po
new file mode 100644
index 0000000000..0fd7cf563b
--- /dev/null
+++ b/documentation/content/ru/articles/geom-class/_index.po
@@ -0,0 +1,1388 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 13:16+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesgeom-class_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Руководство по внутреннему устройству GEOM и созданию собственного класса 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 "Создание класса GEOM"
+
+#. 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 ""
+"Эта статья документирует некоторые начальные выкладки в разработке GEOM-"
+"классов, а также модулей ядра в общем. Предполагается, что читатель близко "
+"знаком с программированием на Си в контексте пространства пользовательских "
+"процессов (userland)."
+
+#. 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 "Documentation"
+
+#. 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 ""
+"extref:{developers-handbook}[Руководство FreeBSD для разработчиков] - часть "
+"Проекта Документации FreeBSD, ничего специфичного о программировании ядра в "
+"нем нет, зато есть немного общей полезной информации."
+
+#. 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 ""
+"extref:{arch-handbook}[Руководство по Архитектуре FreeBSD] - также является "
+"частью Проекта Документации FreeBSD, содержит описания некоторых "
+"низкоуровневых средств и процедур. Уделите внимание разделу номер 13 - "
+"extref:{arch-handbook}[Написание драйверов устройств для 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 ""
+"Несколько интересных статей об устройстве ядра можно найти на сайте http://"
+"www.freebsddiary.com[FreeBSD Diary]."
+
+#. 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 ""
+"Страницы из раздела номер 9 системного справочника, содержат важную "
+"документацию по функциям ядра."
+
+#. 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 ""
+"Страница справочника man:geom[4], а также http://phk.freebsd.dk/pubs/[слайды "
+"Пола-Хеннинга Кампа ] - общее представление о подсистеме 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 ""
+"Страницы справочника 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], а "
+"также другие, связанные с вышеупомянутыми и раскрывающие специфический "
+"функционал подсистемы GEOM."
+
+#. 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 ""
+"Страница справочника man:style[9] - документирует соглашения о стиле "
+"оформления кода, которые обязаны быть соблюдены если вы планируете передать "
+"ваш код в Subversion репозиторий FreeBSD."
+
+#. 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 ""
+"Для того, чтоб заниматься разработками для ядра, желательно иметь два "
+"отдельных компьютера. Один из них предназначен для среды разработки и "
+"исходных кодов, а второй - для запуска тестов отлаживаемого кода. Второму "
+"компьютеру для работы достаточно иметь возможность выполнять начальную "
+"загрузку по сети и монтирование файловых систем по сети. В этой ситуации, "
+"если отлаживаемый код содержит ошибки и вызовет аварийную остановку системы, "
+"то это не повлечет порчу или утерю исходного кода . Второму компьютеру даже "
+"не потребуется иметь свой монитор, достаточно будет соединения асинхронных "
+"портов кабелем RS-232 или соединения при помощи KVM-устройства."
+
+#. 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 ""
+"Но так как далеко не у каждого есть два или более компьютеров под рукой, "
+"есть пара способов подготовить иную \"живую\" систему для разработки кода "
+"для ядра. Один из них - это разработка в http://www.vmware.com/[VMWare] или "
+"http://www.qemu.org/[QEmu] виртуальной машине (это лучшее из доступного, "
+"после, конечно-же, выделенного для тестов компьютера)."
+
+#. 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 ""
+"Прежде всего необходимо иметь в ядре поддержку `INVARIANTS`. Добавьте "
+"следующие строки в файл конфигурации ядра:"
+
+#. 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 ""
+"Для большей информативности при отладке включите поддержку WITNESS, которая "
+"будет предупреждать вас в случае возникновения взаимоблокировок:"
+
+#. 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 ""
+"Также включите отладочные символы, если планируете выполнять отладку по "
+"дампам аварийных отказов:"
+
+#. 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 ""
+"Установка отладочного ядра обычным способом (`make installkernel`) не даст "
+"привычного результата: файл ядра будет называться [.filename]#kernel.debug# "
+"и будет находиться в [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. Для "
+"удобства, отладочное ядро необходимо скопировать в [.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 ""
+"Также удобно иметь включенный отладчик ядра, так вы сможете исследовать "
+"паники сразу-же после их возникновения. Для включения отладчика добавьте "
+"следующие строки в файл конфигурации ядра:"
+
+#. 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 ""
+"Для автоматического запуска отладчика ядра после возникновения паники может "
+"понадобиться установить переменную sysctl:"
+
+#. 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 ""
+"Паники системы будут происходить, поэтому уделите внимание кэшу файловой "
+"системы. Обычно, при включенном механизме softupdates, последняя версия "
+"файла может быть утеряна если паника произошла раньше сбрасывания кэша на "
+"устройство хранения. Выключение механизма softupdates (посредством "
+"монтирования файловой системы с опцией \"sync\") значительно сказывается на "
+"производительности и, опять-же, не гарантирует целостности данных. Как "
+"компромисс, можно сократить задержки сбрасывания кэша механизма softupdates. "
+"Есть три переменных sysctl, значения которых необходимо изменить (лучше "
+"всего - прописав их в [.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 "Значения этих переменных - секунды."
+
+#. 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 ""
+"Для отладки паник ядра необходимы дампы памяти. Так как паника ядра может "
+"\"сломать\" файловую систему, дамп сначала сохраняется в \"сырой\" раздел. "
+"Обычно, это своп-раздел. Поэтому, размер своп-раздела должен быть не меньше "
+"размера ОЗУ компьютера. При последующей загрузке дамп копируется в обычный "
+"файл. Это происходит сразу-же после проверки и монтирования файловых систем, "
+"но перед активированием раздела свопа. Такое поведение контролируется "
+"следующими переменными [.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 ""
+"Переменная `dumpdev` указывает на раздел подкачки, а `dumpdir` сообщает "
+"системе куда перемещать дамп ядра при следующей загрузке."
+
+#. 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 ""
+"Сохранение дампа ядра - процесс медленный, и, если у вашего компьютера много "
+"оперативной памяти (>256M) и если паники случаются часто, то ожидание "
+"сохранения дампов может начать раздражать (вспомним, что над дампом "
+"происходит две операции: сохранение в своп-файл и перемещение на файловую "
+"систему). В таком случае может оказаться удобным ограничивание объема "
+"используемой системой памяти путем установки переменной в [.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 ""
+"Если паники случаются часто и размер файловых систем большой (или же вы "
+"просто не доверяете softupdates и фоновой проверке файловых систем), "
+"рекомендуется отключить фоновую проверку файловых систем посредством "
+"установки переменной в [.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 ""
+"В этом случае файловые системы будут проверяться только при необходимости. "
+"Также заметьте, что в случае использования фоновой проверки, новая паника "
+"может случиться в то время, когда проверяются диски. Другими словами, "
+"наиболее безопасный способ - не иметь много локальных файловых систем, а "
+"использовать второй компьютер в качестве NFS-сервера."
+
+#. 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 ""
+"Для написания нового класса GEOM необходимо создать поддиректорию в любой "
+"доступной пользователю директории. Совсем не обязательно, чтоб ваш модуль "
+"изначально размещался в [.filename]#/usr/src#."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:186
+#, no-wrap
+msgid "The Makefile"
+msgstr "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 ""
+"Правилом хорошего тона является создание [.filename]#Makefile#-ов для "
+"каждого нетривиального проекта, примером которого конечно-же является "
+"создание модулей ядра."
+
+#. 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 ""
+"Создание [.filename]#Makefile# - дело не сложное благодаря исчерпывающему "
+"набору вспомогательных средств, предоставляемых системой. В вкратце, вот как "
+"должен выглядеть [.filename]#Makefile# для модуля ядра:"
+
+#. 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 ""
+"Этот [.filename]#Makefile# (с измененными именами файлов) подойдет к любому "
+"модулю ядра. Класс GEOM может размещаться в одном единственном модуле ядра. "
+"Если для сборки вашего модуля требуется больше, чем один файл, то "
+"перечислите их имена, разделенные пробельными символами, в переменной `SRCS`."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:205
+#, no-wrap
+msgid "On FreeBSD Kernel Programming"
+msgstr "Программирование в ядре FreeBSD"
+
+#. 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 ""
+"Прочитайте man:malloc[9] - выделение памяти лишь немного отличается от "
+"своего эквивалента, используемого в пространстве пользовательских процессов "
+"(userland). Наиболее приметно то, что `malloc`() и `free`() принимают "
+"дополнительные параметры, которые описаны в странице справочника."
+
+#. 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 ""
+"Тип \"malloc_type\" необходимо объявить в секции деклараций файла с исходным "
+"кодом, например:"
+
+#. 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 ""
+"Для того, чтобы можно было использовать этот макрос, необходимо включить "
+"следующие заголовочные файлы: [.filename]#sys/param.h#, [.filename]#sys/"
+"kernel.h# и [.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 ""
+"Существует еще один механизм выделения памяти - UMA (Universal Memory "
+"Allocator), описанный в man:uma[9]. Это специфический метод, преимущественно "
+"предназначенный для быстрого выделения памяти под списки, состоящие из "
+"элементов одинакового размера (например, динамические массивы структур)."
+
+#. 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 ""
+"Ознакомьтесь с man:queue[3] Во множестве случаев вам необходимо будет "
+"организовывать и управлять такой структурой данных, как списки. К счастью, "
+"эта структура данных реализована несколькими способами в виде макросов на "
+"Си, а также включена в систему. Наиболее гибкий и часто употребляемый тип "
+"списка - TAILQ. Этот тип списка также один из наиболее требовательных к "
+"памяти (его элементы - с двойными связями), а также - наиболее медленный "
+"(однако счет идет на несколько инструкций ЦПУ, поэтому последнее утверждение "
+"не следует воспринимать в всерьез)."
+
+#. 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 ""
+"Если важна скорость получения данных, то возьмите на вооружение man:tree[3] "
+"и 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 ""
+"Структура `bio` используется для всех операций ввода/вывода, касающихся "
+"GEOM. Она содержит информацию о том, какое устройство ('поставщик geom') "
+"должно ответить на запрос, тип запроса, смещение, длину и указатель на "
+"буфер, а также набор \"определенных пользователем\" флагов и полей ."
+
+#. 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 ""
+"Важным моментом является то, что `bio` обрабатываются асинхронно. Это "
+"значит, что во многих частях кода нет аналога к man:read[2] и man:write[2] "
+"функциям из пространства пользовательских процессов, которые не возвращают "
+"управление пока не выполнится системный вызов. Скорее, по завершении "
+"обработки запроса (или в случае ошибки при обработке) как извещение "
+"вызывается определенная пользователем функция."
+
+#. 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 ""
+"Асинхронная модель программирования в чем-то сложней, нежели чаще "
+"используемая императивная модель, используемая в пространстве "
+"пользовательских процессов; в любом случае, привыкание займет некоторое "
+"время. В некоторых случаях могут быть использованы вспомогательные функции "
+"`g_write_data`() и `g_read_data`(), но __далеко не всегда__. В частности, "
+"эти функции не могут использоваться когда захвачен мьютекс; например, "
+"мьютекс GEOM-топологии или внутренний мьютекс, удерживаемый в ходе "
+"выполнения `.start`() или `.stop`()."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:252
+#, no-wrap
+msgid "On GEOM Programming"
+msgstr "Программирование в системе 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 ""
+"Если максимальная производительность не требуется, то более простой способ "
+"совершать преобразования данных - это выполнять их в пространстве "
+"пользовательских процессов посредством ggate (GEOM gate). К недостаткам "
+"следует отнести невозможность простого переноса кода в ядро."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:261
+#, no-wrap
+msgid "GEOM Class"
+msgstr "Класс 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 ""
+"Класс GEOM выполняет преобразования данных. Эти преобразования могут быть "
+"скомпонованы друг с другом в виде дерева. Экземпляр класса GEOM называют "
+"__geom__."
+
+#. 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 ""
+"В каждом классе GEOM есть несколько \"методов класса\", которые вызываются "
+"когда экземпляра класса нет в наличии (или же они не привязаны к конкретному "
+"экземпляру класса):"
+
+#. 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` вызывается тогда, когда системе GEOM становится известно о классе "
+"GEOM (например, когда загружается модуль ядра)."
+
+#. 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` будет вызван в случае отказа GEOM системы от класса (например, при "
+"выгрузке модуля)"
+
+#. 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 ""
+"`.taste` вызывается, когда в системе появляется новый класс или поставщик "
+"geom (\"provider\"). Если соответствие найдено, то эта функция обычно "
+"создает и запускает экземпляр 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` вызывается при необходимости разрушить экземпляр 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` будет вызван, когда пользователь запросит изменение конфигурации "
+"существующего экземпляра geom"
+
+#. 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 ""
+"Также определены функции событий GEOM, которые копируются в экземпляр 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 ""
+"Поле `.geom` в структуре `g_class` - это список (LIST) экземпляров geom, "
+"реализованных из класса."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:280
+msgid "These functions are called from the g_event kernel thread."
+msgstr "Эти функции вызываются из 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 ""
+"\"softc\" - это устаревший термин для \"приватных данных драйвера\" "
+"(\"driver private data\"). Название вероятней всего происходит от "
+"устаревшего термина \"software control block\". В системе GEOM softc это "
+"структура (точнее: указатель на структуру) которая может быть присоединена к "
+"экземпляру geom и может содержать приватные данные экземпляра. У большинства "
+"классов GEOM есть следующие члены:"
+
+#. 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` : \"поставщик geom\" предоставляемый данным "
+"экземпляром 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` : Количество потребителей geom (\"consumer\"), "
+"обслуживаемых данным экземпляром 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` : Массив `struct g_consumer*`. (Невозможно "
+"обойтись одинарным указателем, потому что система GEOM создает для нас "
+"структуры struct g_consumer)."
+
+#. 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 ""
+"Структура `softc` содержит состояние экземпляра geom. У каждого экземпляра "
+"есть свой softc."
+
+#. 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 ""
+"16-байтного буфера для подписи - строки с завершающим нулем (обычно это имя "
+"класса)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:303
+msgid "uint32 version ID"
+msgstr "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 ""
+"Подразумевается, что классы geom знают как обращаться с метаданными с "
+"идентификаторами версий ниже, чем их собственные."
+
+#. 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 ""
+"Метаданные размещаются в последнем секторе поставщика geom (поэтому обязаны "
+"целиком умещаться в нем)."
+
+#. 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 "Маркирование/создание экземпляра geom"
+
+#. 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 "пользователь запускает служебную программу man:geom[8]"
+
+#. 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 ""
+"программа решает каким классом geom ей придется управлять и ищет библиотеку "
+"[.filename]#geom_CLASSNAME.so# (которая обычно находится в [.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 ""
+"она открывает библиотеку при помощи man:dlopen[3], извлекает вспомогательные "
+"функции и определения параметров командной строки."
+
+#. 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 "Вот так происходит создание/маркирование нового экземпляра geom:"
+
+#. 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] ищет команду в аргументах командной строки (обычно это `label`) "
+"и вызывает вспомогательную функцию."
+
+#. 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 ""
+"Вспомогательная функция проверяет параметры и собирает метаданные, которые "
+"записываются во все вовлеченные поставщики geom."
+
+#. 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 ""
+"Это \"повреждает (spoil)\" существующие экземпляры geom (если они были) и "
+"порождает новый виток \"тестирования\" поставщиков geom. Целевой класс geom "
+"опознает метаданные и активирует экземпляр 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 ""
+"(Приведенная выше последовательность событий зависит от конкретной "
+"реализации, но весь существующий код работает подобно описанному и "
+"поддерживается библиотеками.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:328
+#, no-wrap
+msgid "GEOM Command Structure"
+msgstr "Структура команд 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 ""
+"Вспомогательная библиотека [.filename]#geom_CLASSNAME.so# экспортирует "
+"структуру `class_commands`, которая является массивом элементов `struct "
+"g_command`. Эти команды одинакового формата и выглядят следующим образом:"
+
+#. 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 "Общими командами являются:"
+
+#. 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 - записать метаданные в устройства, чтобы они могли быть опознаны в "
+"процессе тестирования и использованы в соответствующих экземплярах geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:342
+msgid "destroy - to destroy metadata, so the geoms get destroyed"
+msgstr ""
+"destroy - разрушить метаданные, за которым последует разрушение экземпляров "
+"geom"
+
+#. 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 "`-v` : детальный вывод"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:347
+msgid "`-f` : force"
+msgstr "`-f` : принудить"
+
+#. 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 ""
+"Некоторые операции, к примеру маркирование метаданными и разрушение "
+"метаданных могут быть выполнены из пространства пользовательских процессов. "
+"Для этого, структура `g_command` содержит поле `gc_func`, которое может быть "
+"установлено на функцию (в том-же [.filename]#.so#), которая будет вызвана "
+"для обработки команды. В случае, когда `gc_func` равно NULL, команда будет "
+"передана модулю ядра: функции `.ctlreq` класса GEOM."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:353
+#, no-wrap
+msgid "Geoms"
+msgstr "Экземпляры geom"
+
+#. 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 ""
+"У экземпляров классов GEOM есть внутренние данные, которые хранятся в "
+"структурах softc, а также есть некоторые функции, посредством которых они "
+"реагируют на внешние события."
+
+#. 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 ""
+"`.access` : просчитывает права доступа (чтение/запись/исключительный доступ)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:362
+msgid "`.dumpconf` : returns XML-formatted information about the geom"
+msgstr "`.dumpconf` : возвращает информацию о экземпляре geom; формат XML"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:363
+msgid "`.orphan` : called when some underlying provider gets disconnected"
+msgstr ""
+"`.orphan` : вызывается, когда отсоединяется любой из низлежащих поставщиков "
+"geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:364
+msgid "`.spoiled` : called when some underlying provider gets written to"
+msgstr ""
+"`.spoiled` : вызывается, когда производится запись в низлежащий поставщик "
+"geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:365
+msgid "`.start` : handles I/O"
+msgstr "`.start` : обрабатывает ввод/вывод"
+
+#. 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 ""
+"Эти функции вызываются из ядерного потока `g_down` и в этом контексте не "
+"может быть блокировок (поищите определение \"блокировка\" в других "
+"источниках), что немного ограничивает свободу действий, но способствует "
+"быстроте обработки."
+
+#. 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 ""
+"Из вышеупомянутых, наиболее важной и выполняющей полезную работу функцией "
+"является `.start`(), которая вызывается всякий раз, когда поставщику geom, "
+"управляемому экземпляром класса, приходит запрос BIO."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:371
+#, no-wrap
+msgid "GEOM Threads"
+msgstr "Потоки выполнения системы 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 ""
+"Системой GEOM в ядре ОС создаются и используются три потока выполнения "
+"(kernel threads):"
+
+#. 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` : Обрабатывает запросы, приходящие от высокоуровневых сущностей "
+"(таких, как запросы из пространства пользовательских процессов) на пути к "
+"физическим устройствам"
+
+#. 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` : Обрабатывает ответы от драйверов устройств на запросы, выполненные "
+"высокоуровневыми сущностями"
+
+#. 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` : Отрабатывает в остальных случаях, как-то создание экземпляра "
+"geom, просчитывание прав доступа, события \"повреждения\" и т.п."
+
+#. 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 ""
+"Когда пользовательский процесс запрашивает \"прочитать данные X по смещению "
+"Y файла\", происходит следующее:"
+
+#. 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 ""
+"Файловая система преобразует запрос в экземпляр структуры bio и передает его "
+"системе GEOM. Файловая система \"знает\", что экземпляр geom должен "
+"обработать запрос, так как файловые системы размещаются непосредственно над "
+"экземпляром 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 ""
+"Запрос завершается вызовом функции `.start`() в потоке g_down и достигает "
+"верхнего экземпляра geom."
+
+#. 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 ""
+"Верхний экземпляр geom (например, это секционировщик разделов (partition "
+"slicer)) определяет, что запрос должен быть переадресован нижестоящему "
+"экземпляру geom (к примеру, драйверу диска). Вышестоящий экземпляр geom "
+"создает копию запроса bio (запросы bio _ВСЕГДА_ копируются при передаче "
+"между экземплярами geom при помощи `g_clone_bio`()!), изменяет поля смещения "
+"и целевого поставщика geom и запускает на обработку копию при помощи функции "
+"`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 ""
+"Драйвер диска также получает запрос bio, как вызов функции `.start`() в "
+"потоке `g_down`. Драйвер обращается к контроллеру диска, получает блок "
+"данных и вызывает функцию `g_io_deliver`() используя копию запроса 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 ""
+"Теперь, извещение о завершении bio \"всплывает\" в потоке `g_up`. Сначала в "
+"потоке `g_up` вызывается функция `.done`() секционировщика разделов, "
+"последний использует полученную информацию, разрушает клонированный "
+"экземпляр структуры bio посредством `g_destroy_bio`() и вызывает "
+"`g_io_deliver`() используя первоначальный запрос."
+
+#. 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 ""
+"За информацией о том, как данные передаются в структуре `bio` между "
+"экземплярами geom, смотрите man:g_bio[9] (обратите внимание на использование "
+"полей `bio_parent` и `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 ""
+"Важный момент в том, что __НЕЛЬЗЯ ДОПУСКАТЬ БЛОКИРОВОК В ПОТОКАХ G_UP И "
+"G_DOWN__. Вот неполный перечень того, что нельзя делать в этих потоках:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:394
+msgid "Calls to `msleep`() and `tsleep`(), obviously."
+msgstr "Вызывать функции `msleep`() или `tsleep`()."
+
+#. 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 ""
+"Использовать функции `g_write_data`() и `g_read_data`(), так как они "
+"блокируются в момент обмена данными с потребителями geom."
+
+#. 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 ""
+"Вызывать man:malloc[9] и `uma_zalloc`() с установленным флагом `M_WAITOK`"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:398
+msgid "sx and other sleepable locks"
+msgstr "Использовать man:sx[9]"
+
+#. 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 ""
+"Это ограничение на код GEOM призвано избежать от \"засорения\" пути запроса "
+"ввода/вывода, так как блокировки обычно не имеют четких временных границ, и "
+"нет гарантий на занимаемое время (также на то есть и другие технические "
+"причины). Это также значит, что в вышеупомянутых потоках сколь-нибудь "
+"сложные операции выполнить нельзя, например: любое сложное преобразование "
+"требует выделения памяти. К счастью решение есть: создание дополнительных "
+"ядерных потоков."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:404
+#, no-wrap
+msgid "Kernel Threads for Use in GEOM Code"
+msgstr "Ядерные потоки выполнения, предназначенные для использования в коде 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 ""
+"Ядерные потоки выполнения создаются функцией man:kthread_create[9], в своем "
+"поведении они схожи с потоками, созданными в пространстве пользовательских "
+"процессов, но есть одно отличие: они не могут известить вызвавший их поток о "
+"своем завершении; по завершению - необходимо вызывать 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 ""
+"В коде GEOM обычное назначение этих потоков - разгрузить поток `g_down` "
+"(функцию `.start`() ) от обработки запросов. Эти потоки подобны "
+"\"обработчикам событий\" (\"event handlers\"): у них есть очередь событий "
+"(которая наполняется событиями от разных функций из разных потоков; очередь "
+"необходимо защищать мьютексом), события из очереди выбираются одно за другим "
+"и обрабатываются в большом блоке `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 ""
+"Основное преимущество использования отдельного потока, который обрабатывает "
+"запросы ввода/вывода, то, что он может блокироваться по мере необходимости. "
+"Это, несомненно, привлекательно, но должно быть хорошо обдумано. "
+"Блокирование - хорошо и удобно, но может существенно снизить "
+"производительность преобразований данных в системе GEOM. Особо "
+"требовательные к производительности классы могут делать всю работу в функции "
+"`.start`(), уделяя особое внимание ошибкам при работе с памятью."
+
+#. 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 ""
+"Еще одно преимущество потока \"обработчика событий\" это сериализация всех "
+"запросов и ответов, приходящих с разных потоков geom в один поток. Это также "
+"удобно, но может быть медленным. В большинстве случаев, обработка запросов "
+"функцией `.done`() может быть оставлена потоку `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 ""
+"У мьютексов в ядре FreeBSD (man:mutex[9]) есть одно различие с их аналогами "
+"из пространства пользовательских процессов - во время удержания мьютекса в "
+"коде не должно быть блокировки. Если в коде необходимо блокирование, то "
+"лучше использовать man:sx[9]. С другой стороны, если вся ваша работа "
+"выполняется в одном потоке, вы можете обойтись вообще без мьютексов."
diff --git a/documentation/content/ru/articles/gjournal-desktop/_index.adoc b/documentation/content/ru/articles/gjournal-desktop/_index.adoc
index d58842adc3..835a0489ec 100644
--- a/documentation/content/ru/articles/gjournal-desktop/_index.adoc
+++ b/documentation/content/ru/articles/gjournal-desktop/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Настройка журналирования UFS для настольного компьютера.
authors:
- - author: Manolis Kiagias
+ -
+ author: 'Manolis Kiagias'
email: manolis@FreeBSD.org
+description: 'Настройка журналирования UFS для настольного компьютера'
+tags: ["UFS", "Journaling" , "Desktop", "FreeBSD"]
+title: 'Настройка журналирования UFS для настольного компьютера'
trademarks: ["freebsd", "general"]
---
-= Настройка журналирования UFS для настольного компьютера.
+= Настройка журналирования UFS для настольного компьютера
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,20 +43,20 @@ endif::[]
[.abstract-title]
Аннотация
-Журналируемая файловая система использует лог для записи всех транзакций, происходящих в файловой системе, который также сохраняет ее целостность в случае краха системы или пропадания питания. Несмотря на то, что всё еще возможна потеря несохранённых изменений файлов, журналирование почти полностью исключает возможность повреждения структуры файловой системы, вызванное непредвиденным остановом работы. Журналирование также сокращает до минимума время, необходимое для проверки файловой системы после отказа. Несмотря на то, что в используемой FreeBSD файловой системе UFS нет поддержки журналирования, новый класс системы GEOM в FreeBSD 7._X_ может быть использован для для ведения независимого от файловой системы журналирования. Эта статья объясняет, как реализовать журналирование UFS для типичного настольного компьютера.
+Журналируемая файловая система использует лог для записи всех транзакций, происходящих в файловой системе, который также сохраняет ее целостность в случае краха системы или пропадания питания. Несмотря на то, что всё еще возможна потеря несохранённых изменений файлов, журналирование почти полностью исключает возможность повреждения структуры файловой системы, вызванное непредвиденным остановом работы. Журналирование также сокращает до минимума время, необходимое для проверки файловой системы после отказа. Несмотря на то, что в используемой FreeBSD файловой системе UFS нет поддержки журналирования, новый класс системы GEOM в FreeBSD 7._X_ может быть использован для ведения независимого от файловой системы журналирования. Эта статья объясняет, как реализовать журналирование UFS для типичного настольного компьютера.
'''
toc::[]
[[introduction]]
-== Вступление
+== Введение
Серверное оборудование обычно хорошо защищено от потери питания. Настольный компьютер часто подвержен неожиданным пропаданиям питания, случайным нажатиям кнопки Reset и другим происшествиям (часто связанным с неосторожностью пользователей), которые могут привести к непредвиденным выключениям. Механизм Soft Updates, как правило, достаточно эффективно защищает файловую систему в таких случаях, однако в последствии требуется длительная фоновая проверка. В очень редких случаях повреждения файловой системы достигают того уровня, при котором становится необходимым вмешательство пользователя и данные могут быть утерянными.
Новая возможность журналирования, предоставленная системой GEOM, может существенно выручить в подобных случаях, исключая время, необходимое для проверки файловых систем и удостовериваясь, что файловая система быстро восстановлена в целостное состояние.
-Эта статья описывает порядок действий, необходимых для конфигурирования журналирования UFS на типичном настольном компьютере, в котором один жесткий диск используется для размещения как операционной системы, так и данных. В статье подразумевается установка FreeBSD "с нуля". Шаги достаточно просты и не требуют чрезмерно сложных манипуляций с командной строкой
+Эта статья описывает порядок действий, необходимых для конфигурирования журналирования UFS на типичном настольном компьютере, в котором один жесткий диск используется для размещения как операционной системы, так и данных. В статье подразумевается установка FreeBSD "с нуля". Шаги достаточно просты и не требуют чрезмерно сложных манипуляций с командной строкой.
После прочтения данной статьи вы будете знать:
@@ -100,7 +103,7 @@ toc::[]
=== Выделение места под журналирование
-Типичный настольный компьютер обычно имеет один жесткий диск, на котором хранится как операционная система, так и пользовательские данные. Вероятно, что схема разбития винчестера (по умолчанию), выбранная в меню Sysinstall, является более или менее подходящей: настольному компьютеру не требуется большой раздел [.filename]#/var#, в то время, как для раздела [.filename]#/usr# выделяется значительный объем дискового пространства, ввиду того, что пользовательские данные и множество пэкэджей хранятся именно в поддиректориях [.filename]#/usr#.
+Типичный настольный компьютер обычно имеет один жесткий диск, на котором хранится как операционная система, так и пользовательские данные. Вероятно, что схема разбития винчестера (по умолчанию), выбранная в меню Sysinstall, является более или менее подходящей: настольному компьютеру не требуется большой раздел [.filename]#/var#, в то время, как для раздела [.filename]#/usr# выделяется значительный объем дискового пространства, ввиду того, что пользовательские данные и множество пэкэджей хранятся именно в поддиректориях [.filename]#/usr#.
Разбиение по умолчанию (получаемое при нажатии kbd:[A] в редакторе разделов FreeBSD, называемом Disklabel) не оставляет свободного места. Каждый подлежащий журналированию раздел требует отдельного раздела для журнала. Ввиду того, что раздел [.filename]#/usr# - наибольший, есть смысл немного уменьшить его размер, чтобы получить пространство, необходимое для журнала.
@@ -162,28 +165,28 @@ image::disklabel2.png[]
Подготовив необходимые разделы, перейдем к конфигурированию журналирования. Нам будет необходимо загрузиться в однопользовательском режиме, для этого залогинимся пользователем `root` и напечатаем:
-[source,shell]
+[source, shell]
....
# shutdown now
....
-Нажмите kbd:[Enter] для получения приглашения командного интерпретатора. Нам необходимо будет размонтировать разделы, которые подлежат журналированию, в нашем примере это [.filename]#/usr# и [.filename]#/var#.
+Нажмите kbd:[Enter] для получения приглашения командного интерпретатора. Нам необходимо будет размонтировать разделы, которые подлежат журналированию, в нашем примере это [.filename]#/usr# и [.filename]#/var#:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Загрузите модуль ядра, необходимый для журналирования:
-[source,shell]
+[source, shell]
....
# gjournal load
....
На данном этапе сверьтесь со своими записями и определите, какие разделы будут использоваться под какой журнал. В нашем примере [.filename]#/usr# располагается на [.filename]#ad0s1f#, а его журнал будет располагаться на [.filename]#ad0s1g#, и, по аналогии, для [.filename]#/var#: файловая система располагается на [.filename]#ad0s1d#, а ее журнал - на [.filename]#ad0s1h#. Наберите следующие команды:
-[source,shell]
+[source, shell]
....
# gjournal label ad0s1f ad0s1g
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
@@ -198,7 +201,7 @@ GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
====
Если последний сектор любого из двух разделов (поставщиков данных) используется, команда `gjournal` возвратит ошибку. Вам необходимо будет использовать флаг `-F` для принудительной перезаписи, например:
-[source,shell]
+[source, shell]
....
# gjournal label -f ad0s1d ad0s1h
....
@@ -208,7 +211,7 @@ GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
На данном этапе созданы два устройства: [.filename]#ad0s1d.journal# и [.filename]#ad0s1f.journal#. Они представляют [.filename]#/var# и [.filename]#/usr# соответственно. Перед монтированием, нам необходимо установить флаг журналирования и снять флаг механизма Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J enable -n disable ad0s1d.journal
tunefs: gjournal set
@@ -221,7 +224,7 @@ tunefs: soft updates cleared
Теперь, смонтируйте новые устройства в соответствующие места файловой системы (обратите внимание на то, что мы можем использовать опцию монтирования `async`):
-[source,shell]
+[source, shell]
....
# mount -o async /dev/ad0s1d.journal /var
# mount -o async /dev/ad0s1f.journal /usr
@@ -231,26 +234,25 @@ tunefs: soft updates cleared
[.programlisting]
....
-/dev/ad0s1f.journal /usr ufs rw,async 2 2
-/dev/ad0s1d.journal /var ufs rw,async 2 2
+/dev/ad0s1f.journal /usr ufs rw,async 2 2
+/dev/ad0s1d.journal /var ufs rw,async 2 2
....
[WARNING]
====
-
-Убедитесь, что упомянутые выше записи правильные, иначе старт системы будет проблематичным после перезагрузки!
+Проверьте корректность всех указанных параметров - в противном случае после перезагрузки возможны проблемы со стандартным запуском системы!
====
-И напоследок, подредактируйте [.filename]#/boot/loader.conf#: добавьте следующую строку и модуль man:gjournal[8] будет загружаться автоматически при старте системы:
+Наконец, внесите изменения в [.filename]#/boot/loader.conf#, добавив строку для автоматической загрузки модуля man:gjournal[8] при каждом старте системы:
[.programlisting]
....
geom_journal_load="YES"
....
-Поздравляем! Журналирование успешно сконфигурировано. Вам необходимо лишь набрать `exit` для возвращения в многопользовательский режим или перезагрузить систему, чтобы полностью проверить вашу конфигурацию (рекомендуется). Во время загрузки вы увидите сообщения, подобные следующим:
+Поздравляем! Ваша система теперь настроена для журналирования. Вы можете ввести команду `exit` для возврата в многопользовательский режим или перезагрузить систему для проверки конфигурации (рекомендуется). При загрузке вы увидите сообщения следующего вида:
-[source,shell]
+[source, shell]
....
ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
@@ -261,21 +263,21 @@ GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal ad0s1f clean.
....
-После непредвиденного останова работы системы сообщения будут немного отличаться, например:
+После некорректного завершения работы сообщения будут немного отличаться, например:
-[source,shell]
+[source, shell]
....
GEOM_JOURNAL: Journal ad0s1d consistent.
....
-Это обычно значит, что man:gjournal[8] воспользовался информацией в журнале для возвращения файловой системы к целостному состоянию.
+Обычно это означает, что man:gjournal[8] использовал информацию из журнала для приведения файловой системы в согласованное состояние.
[[gjournal-new]]
=== Журналирование новых разделов
Процедура, описанная выше, необходима для подключения журналирования разделов, содержащих данные. Журналирование пустых разделов немного проще, ввиду того, что поставщик данных и поставщик журнала могут быть размещены на одном и том же разделе. Например, предположим, что был установлен новый жесткий диск и был создан новый раздел [.filename]#/dev/ad1s1d#. Создание журнала не сложнее набора:
-[source,shell]
+[source, shell]
....
# gjournal label ad1s1d
....
@@ -284,14 +286,14 @@ GEOM_JOURNAL: Journal ad0s1d consistent.
К примеру, чтобы создать журнал размером в 2Гб, можно использовать следующую команду:
-[source,shell]
+[source, shell]
....
# gjournal label -s 2G ad1s1d
....
Далее, вы можете создать файловую систему на новом разделе, а также разрешить журналирование ключом `-J`:
-[source,shell]
+[source, shell]
....
# newfs -J /dev/ad1s1d.journal
....
@@ -303,9 +305,9 @@ GEOM_JOURNAL: Journal ad0s1d consistent.
[.programlisting]
....
-options UFS_GJOURNAL # Прим.: Это включено в GENERIC
+options UFS_GJOURNAL # Note: This is already in GENERIC
-options GEOM_JOURNAL # А эту строку необходимо добавить
+options GEOM_JOURNAL # You will have to add this one
....
Соберите и установите новое ядро следуя указаниям extref:{handbook}kernelconfig[Руководства FreeBSD., kernelconfig]
@@ -319,20 +321,20 @@ options GEOM_JOURNAL # А эту строку необходимо добави
=== Я получаю паники ядра во время высокой дисковой активности. Как это связано с журналированием?
-Вероятно, что журнал заполняется раньше, чем происходит сброс его на диск. Помните, размер журнала зависит от загруженности диска, а не от размера поставщика данных. Если загрузка диска высокая, вам потребуется раздел большего размера для журнала. См. замечания в разделе <<understanding-journaling>>
+Вероятно, что журнал заполняется раньше, чем происходит сброс его на диск. Помните, размер журнала зависит от загруженности диска, а не от размера поставщика данных. Если загрузка диска высокая, вам потребуется раздел большего размера для журнала. См. замечания в разделе crossref:gjournal-desktop[understanding-journaling, Understanding Journaling in FreeBSD].
=== Я допустил некоторые ошибки во время конфигурирования, теперь система не загружается. Можно это как-нибудь исправить?
Вы либо забыли внести запись (опечатались) в [.filename]#/boot/loader.conf#, либо есть ошибки в файле [.filename]#/etc/fstab#. Это легко исправить. Нажмите kbd:[Enter], чтобы получить приглашение командного интерпретатора в однопользовательском режиме. Потом, проверьте возможные варианты:
-[source,shell]
+[source, shell]
....
# cat /boot/loader.conf
....
-Если отсутствует запись `geom_journal_load`, или она содержит ошибки, журналируемые устройства не создадутся. Загрузите модуль вручную, примонтируйте все разделы и переходите в многопользовательский режим (продолжайте загрузку).
+Если отсутствует запись `geom_journal_load`, или она содержит ошибки, журналируемые устройства не создадутся. Загрузите модуль вручную, примонтируйте все разделы и переходите в многопользовательский режим (продолжайте загрузку):
-[source,shell]
+[source, shell]
....
# gjournal load
@@ -356,28 +358,28 @@ GEOM_JOURNAL: Journal ad0s1f clean.
Залогиньтесь `root` и переведите систему в однопользовательский режим:
-[source,shell]
+[source, shell]
....
# shutdown now
....
Размонтируйте журналируемые разделы:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Синхронизируйте журналы:
-[source,shell]
+[source, shell]
....
# gjournal sync
....
Остановите поставщиков журналов:
-[source,shell]
+[source, shell]
....
# gjournal stop ad0s1d.journal
# gjournal stop ad0s1f.journal
@@ -385,7 +387,7 @@ GEOM_JOURNAL: Journal ad0s1f clean.
Удалите метаданные журналирования со всех задействованных устройств:
-[source,shell]
+[source, shell]
....
# gjournal clear ad0s1d
# gjournal clear ad0s1f
@@ -395,7 +397,7 @@ GEOM_JOURNAL: Journal ad0s1f clean.
Снимите флаг журналирования и установите флаг механизма Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J disable -n enable ad0s1d
tunefs: gjournal cleared
@@ -408,7 +410,7 @@ tunefs: soft updates set
Смонтируйте вручную старые (первоначальные) устройства:
-[source,shell]
+[source, shell]
....
# mount -o rw /dev/ad0s1d /var
# mount -o rw /dev/ad0s1f /usr
@@ -418,8 +420,8 @@ tunefs: soft updates set
[.programlisting]
....
-/dev/ad0s1f /usr ufs rw 2 2
-/dev/ad0s1d /var ufs rw 2 2
+/dev/ad0s1f /usr ufs rw 2 2
+/dev/ad0s1d /var ufs rw 2 2
....
И напоследок, удалите строку, загружающую модуль `geom_journal`, из файла [.filename]#/boot/loader.conf# и перезагрузите операционную систему.
diff --git a/documentation/content/ru/articles/gjournal-desktop/_index.po b/documentation/content/ru/articles/gjournal-desktop/_index.po
new file mode 100644
index 0000000000..7ba3ff77c7
--- /dev/null
+++ b/documentation/content/ru/articles/gjournal-desktop/_index.po
@@ -0,0 +1,1345 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-12-29 08:30-0500\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesgjournal-desktop_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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 "Настройка журналирования UFS для настольного компьютера"
+
+#. 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 ""
+"Журналируемая файловая система использует лог для записи всех транзакций, "
+"происходящих в файловой системе, который также сохраняет ее целостность в "
+"случае краха системы или пропадания питания. Несмотря на то, что всё еще "
+"возможна потеря несохранённых изменений файлов, журналирование почти "
+"полностью исключает возможность повреждения структуры файловой системы, "
+"вызванное непредвиденным остановом работы. Журналирование также сокращает до "
+"минимума время, необходимое для проверки файловой системы после отказа. "
+"Несмотря на то, что в используемой FreeBSD файловой системе UFS нет "
+"поддержки журналирования, новый класс системы GEOM в FreeBSD 7._X_ может "
+"быть использован для ведения независимого от файловой системы "
+"журналирования. Эта статья объясняет, как реализовать журналирование UFS для "
+"типичного настольного компьютера."
+
+#. 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 ""
+"Серверное оборудование обычно хорошо защищено от потери питания. Настольный "
+"компьютер часто подвержен неожиданным пропаданиям питания, случайным "
+"нажатиям кнопки Reset и другим происшествиям (часто связанным с "
+"неосторожностью пользователей), которые могут привести к непредвиденным "
+"выключениям. Механизм Soft Updates, как правило, достаточно эффективно "
+"защищает файловую систему в таких случаях, однако в последствии требуется "
+"длительная фоновая проверка. В очень редких случаях повреждения файловой "
+"системы достигают того уровня, при котором становится необходимым "
+"вмешательство пользователя и данные могут быть утерянными."
+
+#. 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 ""
+"Новая возможность журналирования, предоставленная системой GEOM, может "
+"существенно выручить в подобных случаях, исключая время, необходимое для "
+"проверки файловых систем и удостовериваясь, что файловая система быстро "
+"восстановлена в целостное состояние."
+
+#. 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 ""
+"Эта статья описывает порядок действий, необходимых для конфигурирования "
+"журналирования UFS на типичном настольном компьютере, в котором один жесткий "
+"диск используется для размещения как операционной системы, так и данных. В "
+"статье подразумевается установка FreeBSD \"с нуля\". Шаги достаточно просты "
+"и не требуют чрезмерно сложных манипуляций с командной строкой."
+
+#. 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 "Как зарезервировать место для журнала во время новой установки 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 ""
+"Как загрузить модуль `geom_journal` (или включить поддержку журналирования в "
+"специализированном ядре системы)."
+
+#. 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 ""
+"Как преобразовать существующую файловую систему, в систему, использующую "
+"журналирование, и какие опции монтирования использовать в [.filename]#/etc/"
+"fstab#."
+
+#. 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 ""
+"Понимать базовые концепции таких операционных систем, как UNIX(R) и 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 ""
+"Быть знакомым с процедурой установки FreeBSD, а также с программой "
+"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 ""
+"Процедура, описанная здесь, подразумевает подготовку к новой установке, в "
+"которой на дисках еще нет пользовательских данных. Так как эту процедуру "
+"можно модифицировать и расширить на системы, которые уже используются, вам "
+"настоятельно рекомендуется сделать _резервную копию_ всех ценных данных. "
+"Путаница в низкоуровневых операциях с дисками и разделами может привести к "
+"фатальным ошибкам и потере данных."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:89
+#, no-wrap
+msgid "Understanding Journaling in FreeBSD"
+msgstr "Реализация журналирования в 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 ""
+"Журналирование, предоставляемое системой GEOM в FreeBSD 7._X_, не является "
+"особенностью файловой системы (в отличие от, например, файловой системы ext3 "
+"в Linux(R)), оно функционирует на блочном уровне. А это значит, что оно "
+"может быть применено к разным типам файловых систем, однако для FreeBSD 7.0-"
+"RELEASE журналирование может быть применено только для 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 ""
+"Возможность журналирования обеспечивается загрузкой модуля [."
+"filename]#geom_journal.ko# в ядро (или сборкой собственного ядра с "
+"активированием соответствующих опций) и использованием команды `gjournal` "
+"для конфигурирования файловой системы. В общем, вы предпочтете журналировать "
+"файловые системы большого размера, к примеру - [.filename]#/usr#. Однако, "
+"вам придется зарезервировать некоторое количество свободного места (см. "
+"следующий раздел)."
+
+#. 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 ""
+"Когда файловая система журналируется, некоторая часть дискового пространства "
+"требуется для хранения самого журнала. Дисковое пространство, содержащее "
+"данные, называется __поставщиком данных (data provider)__, а часть "
+"пространства, содержащая журнал, называется __поставщиком журнала (journal "
+"provider)__. Поставщики данных и журнала должны быть на разных разделах, "
+"если журналирование достраивается к содержащему данные разделу. А если "
+"журналирование включается для нового раздела, у вас есть возможность "
+"использовать один поставщик для данных и журнала. В любом из двух "
+"вышеупомянутых случаев команда `gjournal` задействует поставщики и создаст "
+"конечную журналируемую файловую систему. Например:"
+
+#. 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 ""
+"Вы намереваетесь журналировать файловую систему [.filename]#/usr#, "
+"размещенную на [.filename]#/dev/ad0s1f#, файловая система уже содержит "
+"данные."
+
+#. 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 ""
+"Вы зарезервировали часть дискового пространства на разделе [.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 ""
+"Используя команду `gjournal`, создаем новый файл устройства [.filename]#/dev/"
+"ad0s1f.journal#, для которого [.filename]#/dev/ad0s1f# является поставщиком "
+"данных, а [.filename]#/dev/ad0s1g# - поставщик журнала. Это новое устройство "
+"необходимо использовать во всех последующих операциях."
+
+#. 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 ""
+"Размер дискового пространства, отводимого под поставщик журнала, зависит от "
+"нагруженности файловой системы, а не от размера самого поставщика данных. "
+"Например, для типичного настольного компьютера достаточно отвести 1 Гб под "
+"поставщик журнала для файловой системы [.filename]#/usr#, в то время как "
+"компьютеру, имеющему интенсивный дисковый ввод/вывод (например, "
+"редактирование видео) может потребоваться больше. Если свободное место на "
+"поставщике журнала заканчивается раньше, чем происходит сброс журнала на "
+"диск, - вы получите панику ядра."
+
+#. 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 ""
+"Очень маловероятно то, что размеры журнала, предложенные здесь, станут "
+"причиной проблем с обычным настольным компьютером (на котором вы "
+"просматриваете веб-страницы, обрабатываете текст или проигрываете "
+"мультимедийные файлы). Если работа вашего компьютера подразумевает "
+"интенсивную дисковую активность, то для обеспечения стабильности следует "
+"придерживаться следующего правила: размер ОЗУ должен уместиться в 30% "
+"размера, отведенного под журнал. Например, если в вашем компьютере "
+"установлен 1 Гб ОЗУ, создайте под поставщик журнала раздел размером около "
+"3.3 Гб. (Умножьте размер ОЗУ в 3.3 раза, чтоб получить размер журнала)."
+
+#. 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 ""
+"Для получения дополнительной информации о журналировании, пожалуйста, "
+"прочитайте страницу справочника, посвященную man:gjournal[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:124
+#, no-wrap
+msgid "Steps During the Installation of FreeBSD"
+msgstr "Действия, необходимые во время установки FreeBSD"
+
+#. 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 ""
+"Типичный настольный компьютер обычно имеет один жесткий диск, на котором "
+"хранится как операционная система, так и пользовательские данные. Вероятно, "
+"что схема разбития винчестера (по умолчанию), выбранная в меню Sysinstall, "
+"является более или менее подходящей: настольному компьютеру не требуется "
+"большой раздел [.filename]#/var#, в то время, как для раздела [."
+"filename]#/usr# выделяется значительный объем дискового пространства, ввиду "
+"того, что пользовательские данные и множество пэкэджей хранятся именно в "
+"поддиректориях [.filename]#/usr#."
+
+#. 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 ""
+"Разбиение по умолчанию (получаемое при нажатии kbd:[A] в редакторе разделов "
+"FreeBSD, называемом Disklabel) не оставляет свободного места. Каждый "
+"подлежащий журналированию раздел требует отдельного раздела для журнала. "
+"Ввиду того, что раздел [.filename]#/usr# - наибольший, есть смысл немного "
+"уменьшить его размер, чтобы получить пространство, необходимое для журнала."
+
+#. 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 ""
+"В нашем примере используется жесткий диск размером 80 Гб. Следующий скриншот "
+"показывает результаты разбиения по умолчанию, выполненного при помощи "
+"Disklabel в процессе установки операционной системы:"
+
+#. 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 ""
+"Если это разбиение более или менее вас устраивает, то его легко "
+"модифицировать для журналирования. Используйте клавиши со стрелками для "
+"того, чтобы выделить раздел, отведенный под [.filename]#/usr#, потом нажмите "
+"kbd:[D] чтобы удалить его."
+
+#. 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 ""
+"Теперь переведите подсвечивание к имени диска, находящемуся вверху экрана, и "
+"нажмите kbd:[C] - создайте новый раздел [.filename]#/usr#. Новый раздел "
+"должен быть меньше на 1 Гб (если вы собираетесь журналировать только [."
+"filename]#/usr#) или на 2 Гб (если журналированию подлежат как [."
+"filename]#/usr#, так и [.filename]#/var#). Во всплывающем окне выберите "
+"\"создать файловую систему\" и укажите [.filename]#/usr# точкой монтирования."
+
+#. 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 ""
+"Следует ли журналировать [.filename]#/var# раздел? Обычно есть смысл "
+"журналировать большие разделы. Вы можете решить не журналировать [."
+"filename]#/var#, однако журналирование на обычном настольном компьютере не "
+"причинит вреда. Если файловая система не нагружена (что типично для "
+"настольной системы), то можно выделить меньше дискового пространства под "
+"журнал."
+
+#. 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 ""
+"В этом примере подразумевается журналирование двух файловых систем: [."
+"filename]#/usr# и [.filename]#/var#. Естественно, вы можете "
+"подкорректировать процедуру под свои задачи."
+
+#. 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 ""
+"Чтобы не усложнять описываемую методику, для создания разделов, необходимых "
+"для размещения журналов, мы будем использовать утилиту Sysinstall. Однако, "
+"во время установки утилита Sysinstall требует указания точек монтирования "
+"для каждого созданного вами раздела. Но разделы, содержащие журналы, вам "
+"никогда и никуда монтировать не придется."
+
+#. 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 ""
+"Чтобы избежать вопросов о точках монтирования, мы создадим разделы под "
+"журналы и установим их тип в swap. Раздел, предназначенный для свопа, "
+"никогда и никуда не монтируется, плюс к тому, утилита Sysinstall позволяет "
+"создавать столько разделов под своп, сколько необходимо. После первой "
+"перезагрузки необходимо подредактировать файл [.filename]#/etc/fstab#, "
+"удалив в нём лишние записи о своп-разделах."
+
+#. 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 ""
+"Для создания своп-раздела, используя клавиши со стрелками, перемещайте "
+"подсвечивание к верхней части экрана в утилите Disklabel так, чтобы стало "
+"подсвеченным имя диска. Потом, нажмите kbd:[N], введите необходимый размер "
+"раздела (_1024M_), а после - выберите во всплывшем окне \"swap space\". "
+"Повторите эти шаги для всех оставшихся журналов. В этом примере мы создаем "
+"два раздела, на которых будут размещаться журналы для [.filename]#/usr# и [."
+"filename]#/var#. Конечный результат показан на следующем скриншоте:"
+
+#. 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 ""
+"По завершении создания разделов мы рекомендуем вам записать на бумагу "
+"названия разделов и их точек монтирования: с этой информацией вы будете "
+"сверяться во время конфигурирования. Это также поможет уменьшить количество "
+"ошибок, приводящих к повреждению установки. Следующая табличка отображает "
+"наши заметки, сделанные для данного примера:"
+
+#. 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 "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 ""
+"Дальше продолжайте обычную установку. Однако, мы рекомендуем вам отложить "
+"инсталляцию приложений сторонних разработчиков (пакетов) до полной настройки "
+"журналирования."
+
+#. 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 ""
+"Ваша система загрузится нормально, однако вам необходимо будет "
+"подредактировать [.filename]#/etc/fstab# и удалить те лишние своп-разделы, "
+"которые вы создавали под журналы. Как правило, в названии файла устройства, "
+"созданного автоматически утилитой Sysinstall, присутствует суффикс \"b\" (в "
+"нашем примере это ad0s1b). Удалите другие записи о своп-разделах и "
+"перезагрузите компьютер, после чего FreeBSD перестанет их использовать."
+
+#. 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 "Работа с командой `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 ""
+"Подготовив необходимые разделы, перейдем к конфигурированию журналирования. "
+"Нам будет необходимо загрузиться в однопользовательском режиме, для этого "
+"залогинимся пользователем `root` и напечатаем:"
+
+#. 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 ""
+"Нажмите kbd:[Enter] для получения приглашения командного интерпретатора. Нам "
+"необходимо будет размонтировать разделы, которые подлежат журналированию, в "
+"нашем примере это [.filename]#/usr# и [.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 "Загрузите модуль ядра, необходимый для журналирования:"
+
+#. 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 ""
+"На данном этапе сверьтесь со своими записями и определите, какие разделы "
+"будут использоваться под какой журнал. В нашем примере [.filename]#/usr# "
+"располагается на [.filename]#ad0s1f#, а его журнал будет располагаться на [."
+"filename]#ad0s1g#, и, по аналогии, для [.filename]#/var#: файловая система "
+"располагается на [.filename]#ad0s1d#, а ее журнал - на [.filename]#ad0s1h#. "
+"Наберите следующие команды:"
+
+#. 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 ""
+"Если последний сектор любого из двух разделов (поставщиков данных) "
+"используется, команда `gjournal` возвратит ошибку. Вам необходимо будет "
+"использовать флаг `-F` для принудительной перезаписи, например:"
+
+#. 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 ""
+"Так как это - новая установка, очень маловероятен факт, что что-нибудь будет "
+"действительно переписано."
+
+#. 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 ""
+"На данном этапе созданы два устройства: [.filename]#ad0s1d.journal# и [."
+"filename]#ad0s1f.journal#. Они представляют [.filename]#/var# и [."
+"filename]#/usr# соответственно. Перед монтированием, нам необходимо "
+"установить флаг журналирования и снять флаг механизма 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 ""
+"Теперь, смонтируйте новые устройства в соответствующие места файловой "
+"системы (обратите внимание на то, что мы можем использовать опцию "
+"монтирования `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 ""
+"Откройте [.filename]#/etc/fstab# и исправьте записи для следующих файловых "
+"систем: [.filename]#/usr# и [.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 ""
+"Проверьте корректность всех указанных параметров - в противном случае после "
+"перезагрузки возможны проблемы со стандартным запуском системы!"
+
+#. 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 ""
+"Наконец, внесите изменения в [.filename]#/boot/loader.conf#, добавив строку "
+"для автоматической загрузки модуля man:gjournal[8] при каждом старте системы:"
+
+#. 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 ""
+"Поздравляем! Ваша система теперь настроена для журналирования. Вы можете "
+"ввести команду `exit` для возврата в многопользовательский режим или "
+"перезагрузить систему для проверки конфигурации (рекомендуется). При "
+"загрузке вы увидите сообщения следующего вида:"
+
+#. 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 ""
+"После некорректного завершения работы сообщения будут немного отличаться, "
+"например:"
+
+#. 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 ""
+"Обычно это означает, что man:gjournal[8] использовал информацию из журнала "
+"для приведения файловой системы в согласованное состояние."
+
+#. 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 ""
+"Процедура, описанная выше, необходима для подключения журналирования "
+"разделов, содержащих данные. Журналирование пустых разделов немного проще, "
+"ввиду того, что поставщик данных и поставщик журнала могут быть размещены на "
+"одном и том же разделе. Например, предположим, что был установлен новый "
+"жесткий диск и был создан новый раздел [.filename]#/dev/ad1s1d#. Создание "
+"журнала не сложнее набора:"
+
+#. 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 ""
+"Размер журнала - 1 Гб по умолчанию. Однако, вы можете изменить это значение "
+"используя ключ `-s`. Значение можно задавать в байтах, в килобайтах, "
+"мегабайтах или гигабайтах (используя суффикс `K`, `M` или `G`). Имейте "
+"ввиду, что команда `gjournal` не позволит вам создать журнал недопустимо "
+"малого размера."
+
+#. 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 ""
+"К примеру, чтобы создать журнал размером в 2Гб, можно использовать следующую "
+"команду:"
+
+#. 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 ""
+"Далее, вы можете создать файловую систему на новом разделе, а также "
+"разрешить журналирование ключом `-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 "Встраивание журналирования в специализированное ядро"
+
+#. 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 ""
+"Если вы не желаете загружать `geom_journal` как модуль, то можно встроить "
+"его функции прямо в ваше специализированное ядро. Редактируя "
+"конфигурационный файл ядра, убедитесь, что в нем находятся следующие две "
+"строки:"
+
+#. 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 ""
+"Соберите и установите новое ядро следуя указаниям "
+"extref:{handbook}kernelconfig[Руководства FreeBSD., 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 ""
+"И не забудьте удалить соответствующую строку загрузки модуля (\"load\") из [."
+"filename]#/boot/loader.conf# (если на предыдущем этапе она была туда "
+"внесена)."
+
+#. 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 "
+"crossref:gjournal-desktop[understanding-journaling, Understanding Journaling "
+"in FreeBSD] section."
+msgstr ""
+"Вероятно, что журнал заполняется раньше, чем происходит сброс его на диск. "
+"Помните, размер журнала зависит от загруженности диска, а не от размера "
+"поставщика данных. Если загрузка диска высокая, вам потребуется раздел "
+"большего размера для журнала. См. замечания в разделе crossref:gjournal-"
+"desktop[understanding-journaling, Understanding Journaling in FreeBSD]."
+
+#. 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 ""
+"Вы либо забыли внести запись (опечатались) в [.filename]#/boot/loader.conf#, "
+"либо есть ошибки в файле [.filename]#/etc/fstab#. Это легко исправить. "
+"Нажмите kbd:[Enter], чтобы получить приглашение командного интерпретатора в "
+"однопользовательском режиме. Потом, проверьте возможные варианты:"
+
+#. 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 ""
+"Если отсутствует запись `geom_journal_load`, или она содержит ошибки, "
+"журналируемые устройства не создадутся. Загрузите модуль вручную, "
+"примонтируйте все разделы и переходите в многопользовательский режим ("
+"продолжайте загрузку):"
+
+#. 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 ""
+"Если же запись о `geom_journal_load` верна, то проверьте [.filename]#/etc/"
+"fstab#. Вероятней всего, что вы обнаружите опечатку или отсутствие "
+"необходимой записи. В этом случае смонтируйте вручную оставшиеся разделы и "
+"продолжите загрузку в многопользовательский режим."
+
+#. 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 ""
+"Возможно ли отказаться от журналирования и вернуться к моей привычной "
+"файловой системе с механизмом 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 ""
+"Несомненно. Используйте приведенную ниже последовательность действий, "
+"которая обращает изменения. Разделы, созданные для поставщиков журналов, "
+"могут позже быть использованы для других целей."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:432
+msgid "Login as `root` and switch to single user mode:"
+msgstr "Залогиньтесь `root` и переведите систему в однопользовательский режим:"
+
+#. 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 "# gjournal sync\n"
+
+#. 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 ""
+"# 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 "Удалите метаданные журналирования со всех задействованных устройств:"
+
+#. 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 "Снимите флаг журналирования и установите флаг механизма 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 "Смонтируйте вручную старые (первоначальные) устройства:"
+
+#. 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 ""
+"Откройте файл [.filename]#/etc/fstab# и приведите его к изначальному виду:"
+
+#. 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 ""
+"И напоследок, удалите строку, загружающую модуль `geom_journal`, из файла [."
+"filename]#/boot/loader.conf# и перезагрузите операционную систему."
+
+#. 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 ""
+"Журналирование - относительно новая функциональная возможность FreeBSD, и "
+"как такова, она еще недостаточно документирована. Однако, вы можете сочти "
+"полезными следующие источники:"
+
+#. 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 ""
+"Новый extref:{handbook}geom[раздел Руководства FreeBSD, geom-gjournal], "
+"посвященный журналированию."
+
+#. 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 ""
+"http://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html["
+"Этот пост] в списке рассылки {freebsd-current}, написанный `{pjd}` - автором "
+"man:gjournal[8]."
+
+#. 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 ""
+"http://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html["
+"Этот пост] от `{ivoras}` в списке рассылки {freebsd-questions}."
+
+#. 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 "Страницы справочника man:gjournal[8] и man:geom[8]."
diff --git a/documentation/content/ru/articles/hubs/_index.adoc b/documentation/content/ru/articles/hubs/_index.adoc
index ecd63f2649..a5e3f51098 100644
--- a/documentation/content/ru/articles/hubs/_index.adoc
+++ b/documentation/content/ru/articles/hubs/_index.adoc
@@ -1,15 +1,20 @@
---
-title: Поддержка зеркал 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
- - author: Дмитрий Морозовский
+description: 'Полное руководство по зеркалированию веб-сайта FreeBSD, FTP-серверов и многого другого'
+tags: ["Mirroring", "FreeBSD", "Hub"]
+title: 'Поддержка зеркал FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -69,7 +74,7 @@ toc::[]
[[mirror-diskspace]]
=== Дисковое пространство
-Одним из наиболее важных требований является дисковое пространство. В зависимости от набора релизов, архитектур и степени полноты зеркала вам может потребоваться огромный объем диска. Не лишним будет помнить, что _официальное_ зеркало, скорее всего, должно быть полным. Веб-страницы всегда должны зеркалироваться полностью. Кроме того, учтите, что приводимые оценки объема относятся к состоянию на момент последнего редактирования данной статьи ({rel112-current}-RELEASE/{rel120-current}-RELEASE). Дальнейший процесс разработки и последующие релизы только увеличат требуемый объем. Кроме того, разумно будет зарезервировать некоторое (10-20%) дополнительное пространство спокойствия ради. Вот некоторые оценки объема:
+Одним из наиболее важных требований является дисковое пространство. В зависимости от набора релизов, архитектур и степени полноты зеркала вам может потребоваться огромный объем диска. Не лишним будет помнить, что _официальное_ зеркало, скорее всего, должно быть полным. Веб-страницы всегда должны зеркалироваться полностью. Кроме того, учтите, что приводимые оценки объема относятся к состоянию на момент последнего редактирования данной статьи ({rel120-current}-RELEASE/{rel113-current}-RELEASE). Дальнейший процесс разработки и последующие релизы только увеличат требуемый объем. Кроме того, разумно будет зарезервировать некоторое (10-20%) дополнительное пространство спокойствия ради. Вот некоторые оценки объема:
* Полное зеркало FTP: 1.4 TB
* Комплект изменений CTM: 10 GB
@@ -89,7 +94,7 @@ toc::[]
[[mirror-system]]
=== Системные требования, процессор и память
-Эти требования в первую очередь определяются максимальным ожидаемым количеством клиентов (устанавливается администратором сервера). Также, на требуемые ресурсы влияет список сервисов, которые вы будете предоставлять. Зеркала FTP и/или HTTP не требуют особенно много ресурсов. Будьте на чеку, если планируете предоставлять rsync. Выбор rsync может иметь огромное влияние на требования к аппаратным ресурсам, поскольку rsync признан "прожорливым" по памяти. Вот некоторые советы по конфигурации аппаратной части сервера:
+Эти требования в первую очередь определяются максимальным ожидаемым количеством клиентов (устанавливается администратором сервера). Также, на требуемые ресурсы влияет список сервисов, которые вы будете предоставлять. Зеркала FTP и/или HTTP не требуют особенно много ресурсов. Будьте на чеку, если планируете предоставлять rsync. Выбор rsync может иметь огромное влияние на требования к аппаратным ресурсам, поскольку rsync признан "прожорливым" по памяти. Вот некоторые советы по конфигурации аппаратной части сервера.
Для умеренно посещаемого сайта, предоставляющего rsync, можно использовать процессор с частотой 800MHz - 1 GHz и по крайней мере 512MB памяти. Скорее всего, данная конфигурация может считаться минимальной для _официального_ зеркала.
@@ -107,7 +112,7 @@ toc::[]
Это один из наиболее базовых сервисов; его предоставление требуется для каждого зеркала, распространяющего файлы FreeBSD по FTP. Доступ по FTP должен быть анонимным, и не должны применяться какие-либо ограничения по соотношению объема передано/принято (что вообще является, на наш взгляд, странным подходом). Закачка (upload) файлов на сервер не требуется (и _должна_ быть запрещена в разделе FreeBSD). Кроме того, архив файлов FreeBSD должен быть доступен с путем [.filename]#/pub/FreeBSD#.
- Для предоставления анонимного FTP доступа может быть использован целый ряд программ (перечислены в алфавитном порядке):
+Для предоставления анонимного FTP доступа может быть использован целый ряд программ (перечислены в алфавитном порядке).
* `/usr/libexec/ftpd`: базовый FTP-даемон FreeBSD. Не забудьте прочитать man:ftpd[8].
* package:ftp/ncftpd[]: коммерческий пакет, свободен для использования в учебных целях.
@@ -129,12 +134,14 @@ rsync часто используется для предоставления д
[[mirror-serv-http]]
==== HTTP (требуется для веб-страниц, дополнителен для FTP зеркал)
-Если вы хотите поддерживать зеркало веб-страниц FreeBSD, вам потребуется установить веб-сервер. Дополнительно, вы можете предоставлять HTTP доступ к FTP-набору файлов FreeBSD. Выбор веб-сервера остается на усмотрение администратора зеркала. Некоторые из наиболее популярных веб-серверов перечислены ниже.
+Если вы хотите поддерживать зеркало веб-страниц FreeBSD, вам потребуется установить веб-сервер. Дополнительно, вы можете предоставлять HTTP доступ к FTP-набору файлов FreeBSD. Выбор веб-сервера остается на усмотрение администратора зеркала. Некоторые из наиболее популярных веб-серверов перечислены ниже:
-* package:www/apache13[]: Apache - самый широко распространённый в Интернете веб-сервер, активно используемый проектом FreeBSD. Вы можете также использовать веб-сервер Apache следующего поколения, доступный в коллекции портов как package:www/apache22[].
-* package:www/thttpd[]: Для обслуживания большого количества запросов к статическим документам сервер thttpd может оказаться более эффективным, чем Apache. thttpd отлично оптимизирован по производительности при работе под FreeBSD.
-* package:www/boa[]: Boa - еще одна альтернатива thttpd и Apache. Этот сервер должен быть ощутимо более высокопроизводительным, чем Apache, для полностью статических страниц. На время написания данного документа, впрочем, он не так хорошо оптимизирован под FreeBSD, как thttpd.
-* package:www/nginx[]: Nginx - высокопроизводительный веб-сервер, отличающийся низкими требованиями к объему оперативной памяти и обладающий ключевыми функциональными возможностями для построения современной веб-инфраструктуры. Функциональные возможности включают следующее: HTTP-сервер, обратный прокси для HTTP, почтовый прокси сервер, кеширование, балансировка нагрузки, сжатие, ограничение количества запросов, мультиплексирование и повторное использование соединений, поддержка разгрузки SSL (SSL offload) и вещания медиапотоков (media streaming).
+* package:www/apache24[]: Apache - самый широко распространённый в Интернете веб-сервер, активно используемый проектом FreeBSD.
+* package:www/boa[]: Boa - это однозадачный HTTP-сервер. В отличие от традиционных веб-серверов, он не создает отдельные процессы для каждого входящего соединения и не запускает множество копий самого себя для обработки множества соединений. Тем не менее, он должен обеспечивать значительно более высокую производительность для чисто статического контента.
+* package:www/cherokee[]: Cherokee — это очень быстрый, гибкий и простой в настройке веб-сервер. Он поддерживает распространённые современные технологии: FastCGI, SCGI, PHP, CGI, SSL/TLS-шифрование соединений, виртуальные хосты, аутентификацию пользователей, динамическое кодирование и балансировку нагрузки. Также он генерирует журналы, совместимые с Apache.
+* package:www/lighttpd[]: lighttpd — это безопасный, быстрый, совместимый и очень гибкий веб-сервер, оптимизированный для высокопроизводительных сред. По сравнению с другими веб-серверами, он имеет очень низкое потребление памяти и эффективно распределяет нагрузку на процессор.
+* package:www/nginx[]: nginx — это высокопроизводительный веб-сервер с низким потреблением памяти и ключевыми функциями для построения современной и эффективной веб-инфраструктуры. Возможности включают HTTP-сервер, обратный прокси для HTTP и почты, кэширование, балансировку нагрузки, сжатие, ограничение запросов, мультиплексирование и повторное использование соединений, выгрузку SSL и потоковую передачу HTTP-медиа.
+* package:www/thttpd[]: Если вам необходимо обслуживать большое количество статического контента, вы можете обнаружить, что использование приложения, такого как thttpd, более эффективно по сравнению с другими. Оно также оптимизировано для отличной производительности в FreeBSD.
[[mirror-howto]]
== Как вести зеркало FreeBSD
@@ -155,7 +162,7 @@ rsync часто используется для предоставления д
Строка для синхронизации FreeBSD по rsync выглядит примерно так:
-[source,shell]
+[source, shell]
....
% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/
....
@@ -165,25 +172,65 @@ rsync часто используется для предоставления д
[[mirror-www]]
=== Зеркалирование страниц WWW
-Веб-сайт FreeBSD следует зеркалировать исключительно при помощи rsync.
+[WARNING]
+====
+После перевода документации на Hugo/Asciidoctor 2021-01-25, зеркалирование веб-сайта с помощью rsync больше не работает.
+====
+
+Ведутся исследования по реализации зеркала веб-сайта с использованием extref:{handbook}mirrors/[официальной инфраструктуры].
+
+Для прежних зеркал веб-сайтов способ достичь зеркалирования сегодня — это собрать веб-сайт локально с соответствующим адресом, на котором он будет размещён.
+
+[source, shell]
+....
+% cd website && env HUGO_baseURL="https://www.XX.freebsd.org/" make
+....
-Командная строка для синхронизации веб-сайта FreeBSD выглядит примерно так:
+Проверьте дополнительные сведения о инструментах сборки в extref:{fdp-primer}overview/[Проект документации FreeBSD: введение для новых участников, overview-quick-start].
+////
[source,shell]
....
% rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
....
+////
+
+[NOTE]
+====
+Обратите внимание, что сайт был разделён на www.FreeBSD.org и docs.FreeBSD.org, и между ними есть ссылки; кроме того, на данный момент переменная `HUGO_baseURL` не охватывает все ссылки, поэтому зеркалирование сайта не рекомендуется.
+====
+
+[[mirror-pkgs]]
+=== Зеркалирование пакетов
+
+Из-за очень высоких требований к пропускной способности, хранилищу и администрированию проект FreeBSD принял решение не разрешать публичные зеркала пакетов. Для сайтов с большим количеством машин может быть выгодно запустить кэширующий HTTP-прокси для процесса man:pkg[8]. Или конкретные пакеты и их зависимости можно загрузить, выполнив что-то вроде следующего:
+
+[source, shell]
+....
+% pkg fetch -d -o /usr/local/mirror vim
+....
+
+После загрузки этих пакетов необходимо сгенерировать метаданные репозитория, выполнив:
+
+[source, shell]
+....
+% pkg repo /usr/local/mirror
+....
+
+После загрузки пакетов и генерации метаданных репозитория предоставьте пакеты клиентским машинам через HTTP. Дополнительную информацию можно найти на man-страницах man:pkg[8], в частности на странице man:pkg-repo[8].
[[mirror-how-often]]
=== Как часто синхронизироваться?
-Каждое зеркало должно регулярно обновляться. Вам потребуется какой-то набор скриптов, выполняемых посредством man:cron[8]. Поскольку каждый администратор, как правило, пишет такие скрипты сам и на свой лад, мы не можем выдать конкретных указаний. Общие же советы выглядят так:
+Каждое зеркало должно обновляться как минимум раз в день. Конечно, потребуется скрипт с блокировкой, чтобы предотвратить одновременный запуск нескольких копий, который будет запускаться из man:cron[8]. Поскольку почти каждый администратор делает это по-своему, конкретные инструкции предоставить невозможно. Это может работать примерно так:
[.procedure]
+====
. Создайте скрипт с командой, которая запустит нужное приложение для обновления зеркала. Рекомендуем использовать скрипт на языке обычного `/bin/sh`.
. Добавьте команд перенаправления вывода, чтобы записать диагностику работы в файл.
-. Попробуйте, как ваш скрипт работает. По завершении проверьте логи.
+. Попробуйте, как ваш скрипт работает. По завершении проверьте журналы.
. При помощи утилиты man:crontab[1] добавьте ваш скрипт в таблицу регулярных заданий man:crontab[5] соответствующего пользователя. Это должен быть пользователь, отличный от пользователя FTP-даемона, чтобы файлы в FTP-области без атрибута "чтение для всех" не были доступны анонимным FTP-пользователям. Данное свойство используется для тестирования перед выходом новых релизов, для того чтобы удостовериться, что все официальные зеркала содержат все необходимые файлы к моменту официального объявления релиза.
+====
Некоторые рекомендуемые установки частоты обновления:
@@ -210,24 +257,26 @@ rsync часто используется для предоставления д
[[mirror-where-simple]]
==== Я хочу получить копию зеркала хоть откуда-нибудь!
-Если у вас нет каких-либо специальных предпочтений или требований, см. <<mirror-where-where>>. Это означает:
+Если у вас нет особых намерений или требований, применимо утверждение в crossref:hubs[mirror-where-where, Так откуда же мне синхронизироваться?]. Это означает:
[.procedure]
+====
. Выберите те из них, с которыми вам работать быстрее всего (меньшее число промежуточных узлов и время отклика), и которые предоставляют нужные вам сервисы (такие как rsync).
. Свяжитесь с администраторами выбранного сервера, опишите ваши запросы и уточните их правила.
. Сконфигурируйте ваше зеркало, как описывалось выше.
+====
[[mirror-where-official]]
==== Я поддерживаю официальное зеркало, какой сайт мне выбрать?
-В основном, правила, описанные в <<mirror-where-simple>>, применимы. Дополнительно можно убедиться, что выбранный сайт принадлежит низкому слою. Другие соображения относительно _официальных_ зеркал описаны в <<mirror-official>>.
+В основном, правила, описанные в crossref:hubs[mirror-where-simple, Я хочу получить копию зеркала хоть откуда-нибудь!], применимы. Дополнительно можно убедиться, что выбранный сайт принадлежит низкому слою. Другие соображения относительно _официальных_ зеркал описаны в <<mirror-official>>.
[[mirror-where-master]]
==== Мне нужен доступ к основным сайтам!
При наличии достаточных причин вы можете получить доступ к одному из основных сайтов. Доступ к ним ограничен; существуют специальные правила их использования. Наличие у вас статуса _официального_ зеркала, безусловно, является хорошим подспорьем. В противном случае убедитесь, что ваша страна действительно нуждается еще в одном зеркале. Если их уже три или более, сначала свяжитесь с администратором соответствующей зоны DNS (mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) или напишите в {freebsd-hubs}.
-Доступ к одному из мастер-сайтов или подходящему зеркалу 1 уровня вам помогут обеспечить те же, кто помогал вам получить статус _официального_ зеркала. В случае неудачи свяжитесь с mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org] и попросите помощи у них.
+Тот, кто помог вам стать _официальным_ зеркалом, должен был помочь вам получить доступ к соответствующему вышестоящему хосту — либо к одному из основных сайтов, либо к подходящему сайту уровня Tier-1. Если этого не произошло, вы можете отправить письмо по адресу mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org], чтобы запросить помощь в этом вопросе.
Существует один основной сайт для синхронизации набора файлов FTP.
@@ -236,14 +285,14 @@ rsync часто используется для предоставления д
Это основной сервер для синхронизации FTP набора.
-В дополнение к FTP, `ftp-master.FreeBSD.org` поддерживает доступ по rsync. Использование этих протоколов описано в <<mirror-ftp-rsync>>.
+В дополнение к FTP, `ftp-master.FreeBSD.org` поддерживает доступ по rsync. Использование этих протоколов описано в crossref:hubs[mirror-ftp-rsync, Mirroring the FTP Site].
Приветствуется предоставление зеркалами _1 уровня_ доступа к FTP-области по протоколу rsync.
[[mirror-official]]
== Официальные зеркала
-Официальные зеркала обладают следующим свойствами:
+Официальные зеркала обладают следующим свойствами
* a) имеют запись в домене `FreeBSD.org` (обычно типа CNAME).
* b) присутствуют в списке официальных зеркал в Руководстве по FreeBSD и другой документации.
@@ -259,13 +308,13 @@ rsync часто используется для предоставления д
* поддерживать полный список файлов
* предоставлять доступ для других зеркал
-* обеспечивать доступ по протоколам ftp и rsync.
+* обеспечивать доступ по протоколам ftp и rsync
-Кроме того, администратор такого зеркала должен быть подписан на {freebsd-hubs}. См. extref:{handbook}eresources[здесь, eresources-mail] для дополнительной информации о подписке.
+Кроме того, администратор такого зеркала должен быть подписан на {freebsd-hubs}. См. extref:{handbook}[здесь, eresources-mail] для дополнительной информации о подписке.
[IMPORTANT]
====
-Администраторы зеркал, в особенности 1 уровня, должны _очень_ внимательно следить за http://www.FreeBSD.org/releng/[графиком релизов]. Это поможет подготовиться к крупным всплескам нагрузки на зеркало, которые всегда происходят после очередного релиза.
+Очень важно для администратора хаба, особенно администраторов хаба уровня Tier-1, проверять https://www.FreeBSD.org/releng/[график выпусков] следующего релиза FreeBSD. Это важно, потому что это позволит вам узнать, когда запланирован выход следующего релиза, и, таким образом, даст вам время подготовиться к большому всплеску трафика, который последует за ним.
Кроме того, важно поддерживать актуальность зеркал (в особенности зеркал уровня 1). Если Зеркало1 не синхронизировалось в течение длительного времени, то зеркала следующего уровня будут синхронизироваться по устаревшей информации и т.д. Поддерживайте актуальность ваших зеркал!
====
@@ -273,17 +322,15 @@ rsync часто используется для предоставления д
[[mirror-official-become]]
=== Как стать официальным зеркалом?
-На текущий момент заявки на подключение новых зеркал не принимаются.
+Обратитесь к администраторам кластера, как указано в документации по адресу https://www.FreeBSD.org/administration/#t-clusteradm.
[[mirror-statpages]]
== Статистика некоторых зеркал
-Вот несколько ссылок на статистику использования зеркал
+Вот ссылки на страницы статистики ваших любимых зеркал (иначе говоря, единственных, кто предоставляет такую статистику).
[[mirror-statpagesftp]]
=== Статистика FTP сайтов
-* ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD.org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (загрузка канала)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(FTP процессы)] http://www.rhnet.is/status/ftp/http-notendur.html[(HTTP процессы)]
-* ftp.cz.FreeBSD.org - mailto:cejkar@fit.vutbr.cz[cejkar@fit.vutbr.cz] - http://www.cz.FreeBSD.org/stats/mrtg/net.html[(загрузка канала)] http://www.freebsd.cz/stats/mrtg/ftpd.html[(FTP процессы)] http://www.freebsd.cz/stats/mrtg/rsyncd.html[(rsync процессы)]
-
+* 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/ru/articles/hubs/_index.po b/documentation/content/ru/articles/hubs/_index.po
new file mode 100644
index 0000000000..c5238938d7
--- /dev/null
+++ b/documentation/content/ru/articles/hubs/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-02 23:15+0300\n"
+"PO-Revision-Date: 2025-09-26 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articleshubs_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Полное руководство по зеркалированию веб-сайта FreeBSD, FTP-серверов и многого другого"
+
+#. type: Title =
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#: documentation/content/en/articles/hubs/_index.adoc:17
+#, no-wrap
+msgid "Mirroring FreeBSD"
+msgstr "Поддержка зеркал FreeBSD"
+
+#. 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 ""
+"Рабочий вариант статьи, описывающей процесс создания и поддержки зеркала "
+"FreeBSD и адресованной администраторам зеркал."
+
+#. 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 ""
+"Координаторы системы зеркал доступны по электронной почте по адресу "
+"mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Помимо этого, "
+"существует {freebsd-hubs}."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:69
+#, no-wrap
+msgid "Requirements for FreeBSD Mirrors"
+msgstr "Требования к зеркалам FreeBSD"
+
+#. 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 ""
+"Одним из наиболее важных требований является дисковое пространство. В "
+"зависимости от набора релизов, архитектур и степени полноты зеркала вам "
+"может потребоваться огромный объем диска. Не лишним будет помнить, что "
+"_официальное_ зеркало, скорее всего, должно быть полным. Веб-страницы всегда "
+"должны зеркалироваться полностью. Кроме того, учтите, что приводимые оценки "
+"объема относятся к состоянию на момент последнего редактирования данной "
+"статьи ({rel120-current}-RELEASE/{rel113-current}-RELEASE). Дальнейший "
+"процесс разработки и последующие релизы только увеличат требуемый объем. "
+"Кроме того, разумно будет зарезервировать некоторое (10-20%) дополнительное "
+"пространство спокойствия ради. Вот некоторые оценки объема:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:84
+msgid "Full FTP Distribution: 1.4 TB"
+msgstr "Полное зеркало FTP: 1.4 TB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:85
+msgid "CTM deltas: 10 GB"
+msgstr "Комплект изменений CTM: 10 GB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:86
+msgid "Web pages: 1GB"
+msgstr "Веб-страницы: 1 GB"
+
+#. 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 ""
+"Текущее использование диска зеркалом FTP можно посмотреть на 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 "Требования к сетевой связности и пропускной способности"
+
+#. 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 ""
+"Разумеется, у вас должно быть подключение к интернет. Требуемая пропускная "
+"способность ваших каналов зависит от предполагаемого профиля использования "
+"вашего зеркала. Если вы собираетесь копировать некоторые части FreeBSD для "
+"локального использования на вашей машине или в интранете, требования могут "
+"быть много мягче, чем для публичного зеркала. Для официального зеркала "
+"необходимая пропускная способность увеличивается еще больше. Мы можем дать "
+"лишь очень грубые оценки:"
+
+#. 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 ""
+"Зеркало для локального доступа: фактически минимум не определен, но канал "
+"шириной менее 2 Mbps может сделать процесс обновления мучительно медленным."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:100
+msgid "Unofficial public site: 34 Mbps is probably a good start."
+msgstr "Неофициальное публичное зеркало: 34 Mbps выглядит неплохо для начала."
+
+#. 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 ""
+"Официальное зеркало: рекомендуется канал шириной более 100 Mbps; кроме того, "
+"ваша машина должна стоять как можно ближе к граничным маршрутизаторам вашей "
+"сети."
+
+#. 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 ""
+"Эти требования в первую очередь определяются максимальным ожидаемым "
+"количеством клиентов (устанавливается администратором сервера). Также, на "
+"требуемые ресурсы влияет список сервисов, которые вы будете предоставлять. "
+"Зеркала FTP и/или HTTP не требуют особенно много ресурсов. Будьте на чеку, "
+"если планируете предоставлять rsync. Выбор rsync может иметь огромное "
+"влияние на требования к аппаратным ресурсам, поскольку rsync признан "
+"\"прожорливым\" по памяти. Вот некоторые советы по конфигурации аппаратной "
+"части сервера."
+
+#. 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 ""
+"Для умеренно посещаемого сайта, предоставляющего rsync, можно использовать "
+"процессор с частотой 800MHz - 1 GHz и по крайней мере 512MB памяти. Скорее "
+"всего, данная конфигурация может считаться минимальной для _официального_ "
+"зеркала."
+
+#. 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 ""
+"Для регулярно посещаемого сайта вам потребуется больше памяти (хорошим "
+"стартом будет 2GB) и больше процессорной мощности, что может означать "
+"требование многопроцессорной (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 ""
+"Кроме того, вам потребуется быстрая дисковая подсистема, в первую очередь, "
+"для работы с репозиторием SVN (крайне рекомендуем RAID). Контроллер SCSI, "
+"оборудованный собственной памятью, также может ощутимо ускорить процесс, "
+"поскольку большая часть сервисов связана с большим количеством дисковых "
+"запросов небольшого размера."
+
+#. 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 "FTP (требуется для 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 ""
+"Это один из наиболее базовых сервисов; его предоставление требуется для "
+"каждого зеркала, распространяющего файлы FreeBSD по FTP. Доступ по FTP "
+"должен быть анонимным, и не должны применяться какие-либо ограничения по "
+"соотношению объема передано/принято (что вообще является, на наш взгляд, "
+"странным подходом). Закачка (upload) файлов на сервер не требуется (и "
+"_должна_ быть запрещена в разделе FreeBSD). Кроме того, архив файлов FreeBSD "
+"должен быть доступен с путем [.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 ""
+"Для предоставления анонимного FTP доступа может быть использован целый ряд "
+"программ (перечислены в алфавитном порядке)."
+
+#. 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`: базовый FTP-даемон FreeBSD. Не забудьте прочитать "
+"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[]: коммерческий пакет, свободен для использования в "
+"учебных целях."
+
+#. 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[]: FTP-даемон, написанный в основном с точки зрения "
+"защищенности."
+
+#. 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[]: Модульный и очень гибкий FTP-даемон."
+
+#. 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[]: Еще один FTP-даемон, разработанный с позиций "
+"защищенности."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:144
+msgid "package:ftp/twoftpd[]: As above."
+msgstr "package:ftp/twoftpd[]: См. предыдущий пункт."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:145
+msgid "package:ftp/vsftpd[]: The \"very secure\" ftpd."
+msgstr "package:ftp/vsftpd[]: \"очень защищенный\" (\"very secure\") ftpd."
+
+#. 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, proftpd и, возможно, ncftpd являются наиболее часто встречающимися FTP "
+"серверами. Прочие распространены среди существующих зеркал в существенно "
+"меньшей степени. Дополнительным поводом для рассмотрения может являться "
+"возможность гибко ограничивать количество одновременных соединений, что "
+"поможет вам удержать в нужных рамках потребление пропускной способности "
+"ваших каналов и машинные ресурсы."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:151
+#, no-wrap
+msgid "Rsync (optional for FTP Fileset)"
+msgstr "Rsync (необязательный сервис для 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 ""
+"rsync часто используется для предоставления доступа к FTP-области FreeBSD, "
+"чтобы другие зеркала могли синхронизироваться по вашему. Протокол rsync во "
+"многом отличается от FTP, в частности, он гораздо гуманнее с точки зрения "
+"пропускной способности каналов, поскольку не требует передачи измененного "
+"файла целиком (передаются лишь различия). Взамен rsync требует значительных "
+"объемов памяти. Размер каждого процесса зависит от размера синхронизируемого "
+"модуля (в основном от количества директорий и файлов). rsync может "
+"использовать в качестве транспортного протокола `rsh` или `ssh` (по "
+"умолчанию); также, может использоваться внутренний протокол rsync (этот "
+"метод предпочтителен для публичных rsync-серверов). Поддерживается "
+"авторизация клиентов и различные ограничения. Для протокола rsync существует "
+"единственный пакет:"
+
+#. 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 (требуется для веб-страниц, дополнителен для 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 ""
+"Если вы хотите поддерживать зеркало веб-страниц FreeBSD, вам потребуется "
+"установить веб-сервер. Дополнительно, вы можете предоставлять HTTP доступ к "
+"FTP-набору файлов FreeBSD. Выбор веб-сервера остается на усмотрение "
+"администратора зеркала. Некоторые из наиболее популярных веб-серверов "
+"перечислены ниже:"
+
+#. 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[]: Apache - самый широко распространённый в Интернете "
+"веб-сервер, активно используемый проектом 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 - это однозадачный HTTP-сервер. В отличие от "
+"традиционных веб-серверов, он не создает отдельные процессы для каждого "
+"входящего соединения и не запускает множество копий самого себя для "
+"обработки множества соединений. Тем не менее, он должен обеспечивать "
+"значительно более высокую производительность для чисто статического контента."
+
+#. 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 — это очень быстрый, гибкий и простой в "
+"настройке веб-сервер. Он поддерживает распространённые современные "
+"технологии: FastCGI, SCGI, PHP, CGI, SSL/TLS-шифрование соединений, "
+"виртуальные хосты, аутентификацию пользователей, динамическое кодирование и "
+"балансировку нагрузки. Также он генерирует журналы, совместимые с 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[]: lighttpd — это безопасный, быстрый, совместимый и "
+"очень гибкий веб-сервер, оптимизированный для высокопроизводительных сред. "
+"По сравнению с другими веб-серверами, он имеет очень низкое потребление "
+"памяти и эффективно распределяет нагрузку на процессор."
+
+#. 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 — это высокопроизводительный веб-сервер с низким "
+"потреблением памяти и ключевыми функциями для построения современной и "
+"эффективной веб-инфраструктуры. Возможности включают HTTP-сервер, обратный "
+"прокси для HTTP и почты, кэширование, балансировку нагрузки, сжатие, "
+"ограничение запросов, мультиплексирование и повторное использование "
+"соединений, выгрузку SSL и потоковую передачу 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[]: Если вам необходимо обслуживать большое количество "
+"статического контента, вы можете обнаружить, что использование приложения, "
+"такого как thttpd, более эффективно по сравнению с другими. Оно также "
+"оптимизировано для отличной производительности в FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:180
+#, no-wrap
+msgid "How to Mirror FreeBSD"
+msgstr "Как вести зеркало 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 ""
+"Теперь вам известно, какая потребуется машина и как предоставлять сервисы, "
+"но не как получить их самому. :-) В этом разделе описывается процесс ведения "
+"зеркала и поддержания его в актуальном состоянии, в том числе какие "
+"инструменты использовать и какие сайты выбирать в качестве источников для "
+"синхронизации."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:186
+#, no-wrap
+msgid "Mirroring the FTP Site"
+msgstr "Зеркалирование 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 ""
+"Файлы, доступные по FTP, составляют большую часть зеркала. Они включают "
+"__дистрибутивные наборы__, необходимые для установки по сети, __ветви "
+"(branches)__, в которых отражено текущее состояние исходных текстов, _образы "
+"ISO_ для записи компакт-дисков с дистрибутивами для установки, образами "
+"\"живых\" файловых систем и пакетами, дерево портов, исходные дистрибутивы "
+"для сборки портов и кучу готовых пакетов. И, разумеется, все вышеописанное - "
+"для разных версий 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 crossref:hubs[mirror-serv-rsync, Rsync "
+"(optional for FTP Fileset)]. 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 ""
+"Наиболее эффективным будет синхронизация FTP-области при помощи rsync. Для "
+"этого следует установить пакет package:net/rsync[], который был описан в "
+"разделе <<mirror-serv-rsync>>. Поскольку доступ по протоколу rsync не "
+"является обязательным, выбранный вами сайт может его не поддерживать. "
+"Возможно, вам придется немного поискать в сетевой окрестности зеркало, "
+"поддерживающее 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 ""
+"Поскольку от количества клиентов rsync ощутимо зависит загрузка сервера, "
+"большинство администраторов вводят ограничения доступа. Для поддержания "
+"зеркала вам следует связаться с администратором сайта, с которым вы будете "
+"синхронизироваться, для уточнения локальных правил и, возможно, для внесения "
+"в них исключения для вас (поскольку вы также поддерживаете зеркало)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:205
+msgid "A command line to mirror FreeBSD might look like:"
+msgstr "Строка для синхронизации FreeBSD по rsync выглядит примерно так:"
+
+#. 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 ""
+"Загляните в документацию по rsync, также доступную по адресу http://"
+"rsync.samba.org/[http://rsync.samba.org/] за дополнительной информацией по "
+"различным опциям rsync. Обратите внимание, что в случае синхронизации модуля "
+"целиком (а не отдельного каталога) необходимо явно указать результирующий "
+"каталог, потому что каталог с именем модуля (в данном случае \"FreeBSD\") не "
+"создается. Для поддержания актуальности вам потребуется создать скрипт для "
+"запуска подобной команды из man:cron[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:215
+#, no-wrap
+msgid "Mirroring the WWW Pages"
+msgstr "Зеркалирование страниц 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 ""
+"После перевода документации на Hugo/Asciidoctor 2021-01-25, зеркалирование "
+"веб-сайта с помощью rsync больше не работает."
+
+#. 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 ""
+"Ведутся исследования по реализации зеркала веб-сайта с использованием extref:"
+"{handbook}mirrors/[официальной инфраструктуры]."
+
+#. 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 "% 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 ""
+"Проверьте дополнительные сведения о инструментах сборки в extref:{fdp-primer}"
+"overview/[Проект документации FreeBSD: введение для новых участников, "
+"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 ""
+"Обратите внимание, что сайт был разделён на www.FreeBSD.org и "
+"docs.FreeBSD.org, и между ними есть ссылки; кроме того, на данный момент "
+"переменная `HUGO_baseURL` не охватывает все ссылки, поэтому зеркалирование "
+"сайта не рекомендуется."
+
+#. 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 ""
+"Из-за очень высоких требований к пропускной способности, хранилищу и "
+"администрированию проект FreeBSD принял решение не разрешать публичные "
+"зеркала пакетов. Для сайтов с большим количеством машин может быть выгодно "
+"запустить кэширующий HTTP-прокси для процесса man:pkg[8]. Или конкретные "
+"пакеты и их зависимости можно загрузить, выполнив что-то вроде следующего:"
+
+#. 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 ""
+"После загрузки этих пакетов необходимо сгенерировать метаданные репозитория, "
+"выполнив:"
+
+#. 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 ""
+"После загрузки пакетов и генерации метаданных репозитория предоставьте "
+"пакеты клиентским машинам через HTTP. Дополнительную информацию можно найти "
+"на man-страницах man:pkg[8], в частности на странице man:pkg-repo[8]."
+
+#. 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 ""
+"Каждое зеркало должно обновляться как минимум раз в день. Конечно, "
+"потребуется скрипт с блокировкой, чтобы предотвратить одновременный запуск "
+"нескольких копий, который будет запускаться из man:cron[8]. Поскольку почти "
+"каждый администратор делает это по-своему, конкретные инструкции "
+"предоставить невозможно. Это может работать примерно так:"
+
+#. 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 ""
+"Создайте скрипт с командой, которая запустит нужное приложение для "
+"обновления зеркала. Рекомендуем использовать скрипт на языке обычного `/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 ""
+"Добавьте команд перенаправления вывода, чтобы записать диагностику работы в "
+"файл."
+
+#. 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 ""
+"При помощи утилиты man:crontab[1] добавьте ваш скрипт в таблицу регулярных "
+"заданий man:crontab[5] соответствующего пользователя. Это должен быть "
+"пользователь, отличный от пользователя FTP-даемона, чтобы файлы в FTP-"
+"области без атрибута \"чтение для всех\" не были доступны анонимным FTP-"
+"пользователям. Данное свойство используется для тестирования перед выходом "
+"новых релизов, для того чтобы удостовериться, что все официальные зеркала "
+"содержат все необходимые файлы к моменту официального объявления релиза."
+
+#. 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 "FTP-набор: раз в сутки"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:287
+msgid "WWW pages: daily"
+msgstr "WWW-страницы: раз в сутки"
+
+#. 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 ""
+"Это важный вопрос, так что мы попытаемся пояснить, откуда берутся ответы. "
+"Для начала повторим еще несколько раз: _никогда не синхронизируйтесь с "
+"ftp.FreeBSD.org_."
+
+#. 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 ""
+"Зеркала организуются по странам. Имена хостов всех официальных зеркал "
+"построены по принципу `ftpN.CC.FreeBSD.org`, где _CC_ (country code) - домен "
+"верхнего уровня страны, где расположено зеркало, _N_ - номер зеркала в "
+"данной стране. Этот же принцип применим к именам хостов "
+"`wwwN.CC.FreeBSD.org` и т.п. Кроме того, есть зеркала без доменной части, "
+"обозначающей страну. Все они имеют очень хорошие внешние каналы и "
+"обслуживают большое число одновременных соединений. Имя `ftp.FreeBSD.org` на "
+"самом деле указывает на две машины, одна из которых в настоящее время "
+"находится в Дании, а другая в США. Ни одна из этих машин _НЕ_ является "
+"основным сайтом, и потому не должна использоваться для синхронизации. Масса "
+"документации для \"живых\" пользователей указывает на `ftp.FreeBSD.org`, так "
+"что автоматическим системам ведения зеркал следует выбирать другие источники "
+"синхронизации."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:317
+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 "
+"crossref:hubs[mirror-requirements, Requirements for FreeBSD Mirrors]. 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 ""
+"Кроме того, существует иерархия зеркал в терминах их удаленности от центра, "
+"или __слоях__. Основные сайты могут быть описаны как __Зеркала нулевого "
+"слоя__. Зеркала, синхронизирующиеся по ним, считаются __слоем 1__, следующие "
+"- _слоем 2_ и т.д. Официальные сайты приглашаются на низкие слои, однако "
+"следует помнить, что чем меньше номер слоя, тем выше требования к зеркалу, "
+"как было описано в <<mirror-requirements>>. Помимо того, доступ к зеркалам 1 "
+"слоя может быть ограничен; безусловно ограничен доступ к основным сайтам. "
+"Иерархия _слоев_ не отражается в DNS и, вообще говоря, нигде (кроме мастер-"
+"сайтов) не документирована. Тем не менее, официальные зеркала с малыми (1-4, "
+"как правило) номерами обычно представляют первый слой. (Это грубая оценка, и "
+"ни в коем случае не правило)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:319
+#, no-wrap
+msgid "Ok, but Where Should I get the Stuff Now?"
+msgstr "Так откуда же мне синхронизироваться?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:323
+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 ""
+"Главное - НЕ с `ftp.FreeBSD.org`. Короткий ответ: с зеркала, которое "
+"расположено недалеко от вас в терминах Интернет, и/или доступ к которому "
+"наилучший."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:325
+#, no-wrap
+msgid "I Just Want to Mirror from Somewhere!"
+msgstr "Я хочу получить копию зеркала хоть откуда-нибудь!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:330
+msgid ""
+"If you have no special intentions or requirements, the statement in "
+"crossref:hubs[mirror-where-where, Ok, but Where Should I get the Stuff Now?] "
+"applies. This means:"
+msgstr ""
+"Если у вас нет особых намерений или требований, применимо утверждение в "
+"crossref:hubs[mirror-where-where, Так откуда же мне синхронизироваться?]. "
+"Это означает:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:334
+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 ""
+"Выберите те из них, с которыми вам работать быстрее всего (меньшее число "
+"промежуточных узлов и время отклика), и которые предоставляют нужные вам "
+"сервисы (такие как rsync)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:335
+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:336
+msgid "Set up your mirror as described above."
+msgstr "Сконфигурируйте ваше зеркало, как описывалось выше."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:339
+#, 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:345
+msgid ""
+"In general the description in crossref:hubs[mirror-where-simple, I Just Want "
+"to Mirror from Somewhere!] 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 "
+"crossref:hubs[mirror-official, Official Mirrors]."
+msgstr ""
+"В основном, правила, описанные в crossref:hubs[mirror-where-simple, Я хочу "
+"получить копию зеркала хоть откуда-нибудь!], применимы. Дополнительно можно "
+"убедиться, что выбранный сайт принадлежит низкому слою. Другие соображения "
+"относительно _официальных_ зеркал описаны в <<mirror-official>>."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:347
+#, no-wrap
+msgid "I Want to Access the Master Sites!"
+msgstr "Мне нужен доступ к основным сайтам!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:354
+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 ""
+"При наличии достаточных причин вы можете получить доступ к одному из "
+"основных сайтов. Доступ к ним ограничен; существуют специальные правила их "
+"использования. Наличие у вас статуса _официального_ зеркала, безусловно, "
+"является хорошим подспорьем. В противном случае убедитесь, что ваша страна "
+"действительно нуждается еще в одном зеркале. Если их уже три или более, "
+"сначала свяжитесь с администратором соответствующей зоны DNS "
+"(mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) или напишите в "
+"{freebsd-hubs}."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:357
+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 ""
+"Тот, кто помог вам стать _официальным_ зеркалом, должен был помочь вам "
+"получить доступ к соответствующему вышестоящему хосту — либо к одному из "
+"основных сайтов, либо к подходящему сайту уровня Tier-1. Если этого не "
+"произошло, вы можете отправить письмо по адресу mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org], чтобы запросить помощь в этом "
+"вопросе."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:359
+msgid "There is one master site for the FTP fileset."
+msgstr "Существует один основной сайт для синхронизации набора файлов FTP."
+
+#. type: Title =====
+#: documentation/content/en/articles/hubs/_index.adoc:361
+#, no-wrap
+msgid "ftp-master.FreeBSD.org"
+msgstr "ftp-master.FreeBSD.org"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:364
+msgid "This is the master site for the FTP fileset."
+msgstr "Это основной сервер для синхронизации FTP набора."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:367
+msgid ""
+"`ftp-master.FreeBSD.org` provides rsync access, in addition to FTP. Refer "
+"to crossref:hubs[mirror-ftp-rsync, Mirroring the FTP Site]."
+msgstr ""
+"В дополнение к FTP, `ftp-master.FreeBSD.org` поддерживает доступ по rsync. "
+"Использование этих протоколов описано в crossref:hubs[mirror-ftp-rsync, "
+"Mirroring the FTP Site]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:369
+msgid ""
+"Mirrors are also encouraged to allow rsync access for the FTP contents, "
+"since they are __Tier-1__-mirrors."
+msgstr ""
+"Приветствуется предоставление зеркалами _1 уровня_ доступа к FTP-области по "
+"протоколу rsync."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:371
+#, no-wrap
+msgid "Official Mirrors"
+msgstr "Официальные зеркала"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:374
+msgid "Official mirrors are mirrors that"
+msgstr "Официальные зеркала обладают следующим свойствами"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:376
+msgid "a) have a `FreeBSD.org` DNS entry (usually a CNAME)."
+msgstr "a) имеют запись в домене `FreeBSD.org` (обычно типа CNAME)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:377
+msgid ""
+"b) are listed as an official mirror in the FreeBSD documentation (like "
+"handbook)."
+msgstr ""
+"b) присутствуют в списке официальных зеркал в Руководстве по FreeBSD и "
+"другой документации."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:380
+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 ""
+"На настоящий момент это все, что отличает их от прочих зеркал. Официальные "
+"зеркала не обязательно принадлежат к __Первому уровню__, однако, вряд ли "
+"можно найти зеркало __уровня 1__, не являющееся официальным."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:382
+#, no-wrap
+msgid "Special Requirements for Official (tier-1) Mirrors"
+msgstr "Отдельные требования к официальным зеркалам 1 уровня"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:387
+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 ""
+"Описать требования для всех официальных зеркал не так просто, поскольку "
+"проект FreeBSD достаточно мягок в этом отношении. Несколько проще указать, "
+"что требуется от __официальных зеркал уровня 1__. Прочие официальные зеркала "
+"должны рассматривать этот список как __настойчивые пожелания__."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:389
+msgid "Tier-1 mirrors are required to:"
+msgstr "Зеркала 1 уровня должны:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:391
+msgid "carry the complete fileset"
+msgstr "поддерживать полный список файлов"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:392
+msgid "allow access to other mirror sites"
+msgstr "предоставлять доступ для других зеркал"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:393
+msgid "provide FTP and rsync access"
+msgstr "обеспечивать доступ по протоколам ftp и rsync"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:396
+msgid ""
+"Furthermore, admins should be subscribed to the {freebsd-hubs}. See extref:"
+"{handbook}[this link, eresources-mail] for details, how to subscribe."
+msgstr ""
+"Кроме того, администратор такого зеркала должен быть подписан на {freebsd-"
+"hubs}. См. extref:{handbook}[здесь, eresources-mail] для дополнительной "
+"информации о подписке."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:401
+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 ""
+"Очень важно для администратора хаба, особенно администраторов хаба уровня "
+"Tier-1, проверять https://www.FreeBSD.org/releng/[график выпусков] "
+"следующего релиза FreeBSD. Это важно, потому что это позволит вам узнать, "
+"когда запланирован выход следующего релиза, и, таким образом, даст вам время "
+"подготовиться к большому всплеску трафика, который последует за ним."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:404
+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 ""
+"Кроме того, важно поддерживать актуальность зеркал (в особенности зеркал "
+"уровня 1). Если Зеркало1 не синхронизировалось в течение длительного "
+"времени, то зеркала следующего уровня будут синхронизироваться по устаревшей "
+"информации и т.д. Поддерживайте актуальность ваших зеркал!"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:407
+#, no-wrap
+msgid "How to Become Official Then?"
+msgstr "Как стать официальным зеркалом?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:410
+msgid ""
+"Please contact the Cluster Administrators as documented at https://"
+"www.FreeBSD.org/administration/#t-clusteradm."
+msgstr ""
+"Обратитесь к администраторам кластера, как указано в документации по адресу "
+"https://www.FreeBSD.org/administration/#t-clusteradm."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:412
+#, no-wrap
+msgid "Some Statistics from Mirror Sites"
+msgstr "Статистика некоторых зеркал"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:415
+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:417
+#, no-wrap
+msgid "FTP Site Statistics"
+msgstr "Статистика FTP сайтов"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:420
+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:420
+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)]"
diff --git a/documentation/content/ru/articles/ipsec-must/_index.adoc b/documentation/content/ru/articles/ipsec-must/_index.adoc
index 8ef1f8d028..0ed3a91901 100644
--- a/documentation/content/ru/articles/ipsec-must/_index.adoc
+++ b/documentation/content/ru/articles/ipsec-must/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Независимое исследование работы IPsec во FreeBSD
authors:
- - author: David Honig
+ -
+ author: 'David Honig'
email: honig@sprynet.com
+description: 'Независимое исследование работы IPsec во FreeBSD'
+tags: ["IPsec", "verification", "FreeBSD"]
+title: 'Независимое исследование работы IPsec во FreeBSD'
trademarks: ["freebsd", "opengroup", "general"]
---
@@ -49,7 +52,7 @@ toc::[]
[[problem]]
== Постановка задачи
-Для начала предположим, что Вы <<ipsec-install>>. Как Вы узнаете, что IPsec <<caveat>>? Несомненно, соединения не будет, если Вы неверно его сконфигурировали. И оно, конечно, появится в выводе команды man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить сам факт функционирования IPsec?
+Для начала предположим, что Вы crossref::ipsec-must[ipsec-install, установили IPsec]. Как Вы узнаете, что IPsec crossref::ipsec-must[caveat, надо учитывать предостережение]? Несомненно, соединения не будет, если Вы неверно его сконфигурировали. И оно, конечно, появится в выводе команды man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить сам факт функционирования IPsec?
[[solution]]
== Решение
@@ -64,16 +67,16 @@ toc::[]
[[MUST]]
=== MUST
-"Универсальный Статистический Тест для Генераторов Случайных Чисел" Уэли Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators), сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST] позволяет быстро измерить энтропию последовательного набора данных. Используемый алгоритм похож на алгоритм сжатия. <<code>> приведён исходный код, позволяющий измерять энтропию последовательных кусков данных размером около четверти мегабайта.
+"Универсальный Статистический Тест для Генераторов Случайных Чисел" Уэли Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators), сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST], позволяет быстро измерить энтропию последовательного набора данных. Используемый алгоритм похож на алгоритм сжатия. В разделе crossref::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - 8 бит))] приведён исходный код, позволяющий измерять энтропию последовательных кусков данных размером около четверти мегабайта.
[[tcpdump]]
=== Tcpdump
-Ещё нам нужен способ сохранения информации, проходящей через интерфейс. Программа man:tcpdump[1] позволяет сделать это в случае, если Вы <<kernel>> с поддержкой __Пакетного Фильтра Беркли (Berkeley Packet Filter)__.
+Ещё нам нужен способ сохранения информации, проходящей через интерфейс. Программа man:tcpdump[1] позволяет сделать это в случае, если у Вас ядро crossref::ipsec-must[kernel,src/sys/i386/conf/KERNELNAME] с поддержкой __Пакетного Фильтра Беркли (Berkeley Packet Filter)__.
-Команда
+Команда:
-[source,shell]
+[source, shell]
....
tcpdump -c 4000 -s 10000 -w dumpfile.bin
....
@@ -86,12 +89,13 @@ toc::[]
Повторите следующие шаги эксперимента:
[.procedure]
+====
. Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь компьютером через канал IPsec, а в другом - с обычным, "незащищённым" компьютером.
-. Теперь начните <<tcpdump>>.
+. Теперь запустите crossref::ipsec-must[tcpdump, Tcpdump].
. В "шифрованном" окне запустите команду UNIX(R) man:yes[1], которая будет выдавать бесконечный поток символов `y`. Немножко подождите и завершите её. Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте то же самое.
-. Заключительный этап: запустите <<code>>, передав ему для обработки только что сохранённые пакеты через командную строку. Вы должны увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное соединение - всего лишь 29% (2,1).
+. Заключительный этап: запустите crossref::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - 8 бит)], передав ему для обработки только что сохранённые пакеты через командную строку. Вы должны увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное соединение - всего лишь 29% (2,1).
+
-[source,shell]
+[source, shell]
....
% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin
% uliscan ipsecdemo.bin
@@ -107,14 +111,15 @@ Expected value for L=8 is 7.1836656
2.0838 -----------------
2.0983 -----------------
....
+====
[[caveat]]
-== Замечание
+== Предостережение
Этот эксперимент показывает, что IPsec _действительно_ распределяет передаваемые байты по области определения __равномерно__, как и любое другое шифрование. Однако этот метод _не может_ обнаружить множество других изъянов в системе (хотя я таковых не знаю). Для примера можно привести плохие алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных или ключей, использование слабых в криптографическом смысле алгоритмов, взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит.
[[IPsec]]
-== Определение IPsec
+== IPsec — определение
IPsec представляет собой протокол безопасного обмена информацией по Internet. Существует в виде расширения к IPv4; является неотъемлемой частью IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP (межмашинное "host-to-host" взаимодействие). SSL защищает только лишь конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает определённый файл или письмо. IPsec шифрует всю информацию, передаваемую между двумя машинами.
@@ -123,7 +128,7 @@ IPsec представляет собой протокол безопасног
Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, Вы должны будете лишь добавить опцию `IPSEC` в конфигурационный файл ядра, и после сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с помощью команды man:setkey[8].
-Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в extref:{handbook}security[Руководстве пользователя, ipsec].
+Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в extref:{handbook}[Руководстве пользователя, ipsec].
[[kernel]]
== src/sys/i386/conf/KERNELNAME
@@ -138,7 +143,7 @@ device bpf
[[code]]
== Универсальный Статистический Тест Маурера (размер блока - 8 бит)
-Оригинал нижеприведённого кода находится по http://www.geocities.com/SiliconValley/Code/4704/uliscanc.txt[ этому адресу].
+Оригинал нижеприведённого кода находится по https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[ этому адресу].
[.programlisting]
....
diff --git a/documentation/content/ru/articles/ipsec-must/_index.po b/documentation/content/ru/articles/ipsec-must/_index.po
new file mode 100644
index 0000000000..762f8315b1
--- /dev/null
+++ b/documentation/content/ru/articles/ipsec-must/_index.po
@@ -0,0 +1,757 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-12-29 08:30-0500\n"
+"PO-Revision-Date: 2025-08-21 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesipsec-must_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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 "Независимое исследование работы IPsec во FreeBSD"
+
+#. 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 ""
+"Вы только что установили и настроили IPsec, и оно, кажется, заработало. Как "
+"это можно проверить? Я опишу метод экспериментальной проверки правильного "
+"функционирования IPsec."
+
+#. 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 crossref::ipsec-must[ipsec-install, Installing "
+"IPsec]. How do you know it is crossref::ipsec-must[caveat, 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 ""
+"Для начала предположим, что Вы crossref::ipsec-must[ipsec-install, "
+"установили IPsec]. Как Вы узнаете, что IPsec crossref::ipsec-must[caveat, "
+"надо учитывать предостережение]? Несомненно, соединения не будет, если Вы "
+"неверно его сконфигурировали. И оно, конечно, появится в выводе команды "
+"man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить "
+"сам факт функционирования IPsec?"
+
+#. 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 ""
+"Предположим, что у Вас имеется возможность измерить энтропию входящего и "
+"исходящего трафика на сетевом интерфейсе. В этом случае Вы сможете легко "
+"отличить зашифрованные данные от открытых, причём даже в том случае, когда "
+"часть данных в \"режиме шифрования\" передаётся в открытом виде, к примеру "
+"внешние заголовки IP, которые используются для маршрутизации."
+
+#. 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. crossref::ipsec-"
+"must[code, Maurer's Universal Statistical Test (for block size8 bits)] for a "
+"variant which measures successive (~quarter megabyte) chunks of a file."
+msgstr ""
+"\"Универсальный Статистический Тест для Генераторов Случайных Чисел\" Уэли "
+"Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators)"
+", сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal."
+"pdf[MUST], позволяет быстро измерить энтропию последовательного набора "
+"данных. Используемый алгоритм похож на алгоритм сжатия. В разделе crossref"
+"::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - "
+"8 бит))] приведён исходный код, позволяющий измерять энтропию "
+"последовательных кусков данных размером около четверти мегабайта."
+
+#. 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:84
+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 crossref::ipsec-must[kernel,src/sys/i386/conf/"
+"KERNELNAME]."
+msgstr ""
+"Ещё нам нужен способ сохранения информации, проходящей через интерфейс. "
+"Программа man:tcpdump[1] позволяет сделать это в случае, если у Вас ядро "
+"crossref::ipsec-must[kernel,src/sys/i386/conf/KERNELNAME] с поддержкой "
+"__Пакетного Фильтра Беркли (Berkeley Packet Filter)__."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:86
+msgid "The command:"
+msgstr "Команда:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:90
+#, 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:94
+msgid ""
+"will capture 4000 raw packets to _dumpfile.bin_. Up to 10,000 bytes per "
+"packet will be captured in this example."
+msgstr ""
+"сохранит 4000 пакетов в файл _dumpfile.bin_. В данном примере объём "
+"записываемой информации в каждом пакете не может превышать 10,000 байтов."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:96
+#, no-wrap
+msgid "The Experiment"
+msgstr "Эксперимент"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:99
+msgid "Here is the experiment:"
+msgstr "Повторите следующие шаги эксперимента:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:103
+msgid "Open a window to an IPsec host and another window to an insecure host."
+msgstr ""
+"Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь "
+"компьютером через канал IPsec, а в другом - с обычным, \"незащищённым\" "
+"компьютером."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:104
+msgid "Now start crossref::ipsec-must[tcpdump, Tcpdump]."
+msgstr "Теперь запустите crossref::ipsec-must[tcpdump, Tcpdump]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:105
+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 ""
+"В \"шифрованном\" окне запустите команду UNIX(R) man:yes[1], которая будет "
+"выдавать бесконечный поток символов `y`. Немножко подождите и завершите её. "
+"Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте "
+"то же самое."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:106
+msgid ""
+"Now run crossref::ipsec-must[code, Maurer's Universal Statistical Test (for "
+"block size8 bits)] 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 ""
+"Заключительный этап: запустите crossref::ipsec-must[code, Универсальный "
+"Статистический Тест Маурера (размер блока - 8 бит)], передав ему для "
+"обработки только что сохранённые пакеты через командную строку. Вы должны "
+"увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное "
+"соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное "
+"соединение - всего лишь 29% (2,1)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:122
+#, 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:126
+#, no-wrap
+msgid "Caveat"
+msgstr "Предостережение"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:132
+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 ""
+"Этот эксперимент показывает, что IPsec _действительно_ распределяет "
+"передаваемые байты по области определения __равномерно__, как и любое другое "
+"шифрование. Однако этот метод _не может_ обнаружить множество других изъянов "
+"в системе (хотя я таковых не знаю). Для примера можно привести плохие "
+"алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных "
+"или ключей, использование слабых в криптографическом смысле алгоритмов, "
+"взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:134
+#, no-wrap
+msgid "IPsec---Definition"
+msgstr "IPsec — определение"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:140
+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 ""
+"IPsec представляет собой протокол безопасного обмена информацией по "
+"Internet. Существует в виде расширения к IPv4; является неотъемлемой частью "
+"IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP ("
+"межмашинное \"host-to-host\" взаимодействие). SSL защищает только лишь "
+"конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает "
+"определённый файл или письмо. IPsec шифрует всю информацию, передаваемую "
+"между двумя машинами."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:142
+#, no-wrap
+msgid "Installing IPsec"
+msgstr "Установка IPsec"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:146
+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 ""
+"Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, "
+"Вы должны будете лишь добавить опцию `IPSEC` в конфигурационный файл ядра, и "
+"после сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с "
+"помощью команды man:setkey[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:148
+msgid ""
+"A comprehensive guide on running IPsec on FreeBSD is provided in extref:"
+"{handbook}[FreeBSD Handbook, ipsec]."
+msgstr ""
+"Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в "
+"extref:{handbook}[Руководстве пользователя, ipsec]."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:150
+#, 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:154
+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 ""
+"Для того, чтобы захватывать сетевой трафик при помощи man:tcpdump[1], "
+"следующие строки должны присутствовать в конфигурационном файле ядра. Не "
+"забудьте после модификации запустить man:config[8], и, как обычно, "
+"пересобрать и установить новое ядро."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:158
+#, no-wrap
+msgid "device\tbpf\n"
+msgstr "device\tbpf\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:161
+#, no-wrap
+msgid "Maurer's Universal Statistical Test (for block size=8 bits)"
+msgstr "Универсальный Статистический Тест Маурера (размер блока - 8 бит)"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:164
+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 ""
+"Оригинал нижеприведённого кода находится по https://web.archive.org/web/"
+"20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc."
+"txt[ этому адресу]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:169
+#, 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:173
+#, 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:175
+#, 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:178
+#, 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:181
+#, 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:183
+#, 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:186
+#, 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:189
+#, 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:194
+#, 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:200
+#, 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:203
+#, 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:215
+#, 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:217
+#, 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:219
+#, 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:226
+#, 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:228
+#, 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:233
+#, 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:237
+#, 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:242
+#, 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:244
+#, 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:246
+#, 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:248
+#, no-wrap
+msgid " run = 1;\n"
+msgstr " run = 1;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:252
+#, 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:257
+#, 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:260
+#, 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:264
+#, 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:266
+#, 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:270
+#, 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:273
+#, 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:276
+#, 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:279
+#, 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:281
+#, no-wrap
+msgid " printf(\"\\n\");\n"
+msgstr ""
+" printf(\"\\n"
+"\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:295
+#, 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"
diff --git a/documentation/content/ru/articles/ldap-auth/_index.adoc b/documentation/content/ru/articles/ldap-auth/_index.adoc
new file mode 100644
index 0000000000..0559e6f0ee
--- /dev/null
+++ b/documentation/content/ru/articles/ldap-auth/_index.adoc
@@ -0,0 +1,703 @@
+---
+authors:
+ -
+ author: 'Toby Burress'
+ email: kurin@causa-sui.net
+copyright: '2007-2008 The FreeBSD Documentation Project'
+description: 'Руководство по настройке сервера LDAP для аутентификации в FreeBSD'
+tags: ["LDAP", "Authentication", "OpenLDAP", "configuration", "guide", "tutorial", "FreeBSD"]
+title: 'Аутентификация LDAP'
+trademarks: ["freebsd", "general"]
+---
+
+= Аутентификация 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]
+Аннотация
+
+Этот документ является руководством по настройке сервера LDAP (в основном сервера OpenLDAP) для аутентификации в FreeBSD. Это полезно в ситуациях, когда множество серверов требуют одинаковых учётных записей пользователей, например, в качестве замены NIS.
+
+'''
+
+toc::[]
+
+[[preface]]
+== Предисловие
+
+Этот документ предназначен для того, чтобы дать читателю достаточно знаний о LDAP для настройки сервера LDAP. В документе будет предпринята попытка объяснить использование package:net/nss_ldap[] и package:security/pam_ldap[] для клиентских машин, работающих с сервером LDAP.
+
+По завершении читатель должен уметь настроить и развернуть сервер FreeBSD, способный размещать каталог LDAP, а также настроить и развернуть сервер FreeBSD, который может проходить аутентификацию с использованием каталога LDAP.
+
+Эта статья не претендует на исчерпывающее описание вопросов безопасности, надежности или лучших практик настройки LDAP и других обсуждаемых здесь сервисов. Хотя автор старается делать всё правильно, вопросы безопасности рассматриваются лишь в общих чертах. Данная статья должна рассматриваться только как теоретическая основа, а любая реальная реализация должна сопровождаться тщательным анализом требований.
+
+[[ldap]]
+== Настройка LDAP
+
+LDAP означает "Lightweight Directory Access Protocol" (облегчённый протокол доступа к каталогам) и является подмножеством X.500 Directory Access Protocol. Последние спецификации можно найти в http://www.ietf.org/rfc/rfc4510.txt[RFC4510] и связанных документах. По сути, это база данных, которая предполагает более частые операции чтения, чем записи.
+
+В примерах в этом документе будет использоваться LDAP-сервер http://www.openldap.org/[OpenLDAP]; хотя принципы, изложенные здесь, должны быть применимы к различным серверам, большая часть конкретных административных действий специфична для OpenLDAP. В портах доступно несколько версий сервера, например package:net/openldap26-server[]. Клиентские серверы потребуют соответствующие библиотеки package:net/openldap26-client[].
+
+Существуют (в основном) две области службы LDAP, которые требуют настройки. Первая — настройка сервера для правильного приёма соединений, а вторая — добавление записей в каталог сервера, чтобы инструменты FreeBSD знали, как с ним взаимодействовать.
+
+[[ldap-connect]]
+=== Настройка сервера для подключений
+
+[NOTE]
+====
+Этот раздел относится конкретно к OpenLDAP. Если вы используете другой сервер, вам необходимо обратиться к документации этого сервера.
+====
+
+[[ldap-connect-install]]
+==== Установка OpenLDAP
+
+Сначала установите OpenLDAP:
+
+[[oldap-install]]
+.Установка OpenLDAP
+[example]
+====
+
+[source, shell]
+....
+# cd /usr/ports/net/openldap26-server
+# make install clean
+....
+
+====
+
+Это устанавливает бинарные файлы `slapd` и `slurpd`, а также необходимые библиотеки OpenLDAP.
+
+[[ldap-connect-config]]
+==== Настройка OpenLDAP
+
+Далее мы должны настроить OpenLDAP.
+
+Вам следует требовать шифрование соединений с сервером LDAP; в противном случае пароли ваших пользователей будут передаваться в открытом виде, что считается небезопасным. Инструменты, которые мы будем использовать, поддерживают два очень похожих типа шифрования: SSL и TLS.
+
+TLS означает "Transportation Layer Security". Службы, использующие TLS, обычно подключаются к тем же портам, что и аналогичные службы без TLS; таким образом, SMTP-сервер с поддержкой TLS будет ожидать подключений на порту 25, а LDAP-сервер — на порту 389.
+
+SSL означает «Secure Sockets Layer», и службы, реализующие SSL, _не_ работают на тех же портах, что и их аналоги без SSL. Таким образом, SMTPS использует порт 465 (а не 25), HTTPS — порт 443, а LDAPS — порт 636.
+
+Причина, по которой SSL использует другой порт, чем TLS, заключается в том, что соединение TLS начинается как обычный текст и переключается на зашифрованный трафик после директивы `STARTTLS`. Соединения SSL зашифрованы с самого начала. Кроме этого, существенных различий между ними нет.
+
+[NOTE]
+====
+Мы настроим OpenLDAP для использования TLS, так как SSL считается устаревшим.
+====
+
+После установки OpenLDAP через порты следующие параметры конфигурации в [.filename]#/usr/local/etc/openldap/slapd.conf# включат TLS:
+
+[.programlisting]
+....
+security ssf=128
+
+TLSCertificateFile /path/to/your/cert.crt
+TLSCertificateKeyFile /path/to/your/cert.key
+TLSCACertificateFile /path/to/your/cacert.crt
+....
+
+В этом примере `ssf=128` указывает OpenLDAP требовать 128-битное шифрование для всех соединений, как для поиска, так и для обновления. Этот параметр может быть настроен в соответствии с требованиями безопасности вашего сайта, но ослаблять его требуется редко, так как большинство библиотек LDAP-клиентов поддерживают стойкое шифрование.
+
+Файлы [.filename]#cert.crt#, [.filename]#cert.key# и [.filename]#cacert.crt# необходимы для аутентификации клиентами _вас_ как действительного LDAP-сервера. Если вам просто нужен работающий сервер, вы можете создать самоподписанный сертификат с помощью OpenSSL:
+
+[[genrsa]]
+.Генерация 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
+....
+
+====
+
+На этом этапе вам будет предложено ввести некоторые значения. Вы можете ввести любые значения, какие пожелаете; однако важно, чтобы значение "Common Name" (Общее имя) было полным доменным именем сервера OpenLDAP. В нашем случае и в приведённых примерах сервер называется _server.example.org_. Неправильное указание этого значения может привести к сбоям при подключении клиентов. Это может стать причиной серьёзных проблем, поэтому внимательно следуйте этим шагам.
+
+Наконец, запрос на подпись сертификата должен быть подписан:
+
+[[self-sign]]
+.Самостоятельная подпись сертификата
+[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
+....
+
+====
+
+Это создаст самоподписанный сертификат, который можно использовать для директив в [.filename]#slapd.conf#, где [.filename]#cert.crt# и [.filename]#cacert.crt# представляют собой один и тот же файл. Если вы планируете использовать множество серверов OpenLDAP (для репликации через `slurpd`), рекомендуется ознакомиться с разделом crossref:ldap-auth[ssl-ca, Сертификаты OpenSSL для LDAP], чтобы сгенерировать ключ центра сертификации (CA) и использовать его для подписи индивидуальных сертификатов серверов.
+
+После этого добавьте следующее в [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+slapd_enable="YES"
+....
+
+Затем выполните `/usr/local/etc/rc.d/slapd start`. Это должно запустить OpenLDAP. Убедитесь, что он слушает порт 389 с помощью
+
+[source, shell]
+....
+% sockstat -4 -p 389
+ldap slapd 3261 7 tcp4 *:389 *:*
+....
+
+[[ldap-connect-client]]
+==== Настройка клиента
+
+Установите порт package:net/openldap26-client[] для библиотек OpenLDAP. Клиентские машины всегда будут иметь библиотеки OpenLDAP, так как они содержатся в пакетах package:security/pam_ldap[] и package:net/nss_ldap[], по крайней мере, на данный момент.
+
+Файл конфигурации для библиотек OpenLDAP — это [.filename]#/usr/local/etc/openldap/ldap.conf#. Отредактируйте этот файл, указав следующие значения:
+
+[.programlisting]
+....
+base dc=example,dc=org
+uri ldap://server.example.org/
+ssl start_tls
+tls_cacert /path/to/your/cacert.crt
+....
+
+[NOTE]
+====
+Важно, чтобы у ваших клиентов был доступ к [.filename]#cacert.crt#, иначе они не смогут подключиться.
+====
+
+[NOTE]
+====
+Существует два файла с именем [.filename]#ldap.conf#. Первый — это данный файл, предназначенный для библиотек OpenLDAP и определяющий, как взаимодействовать с сервером. Второй — [.filename]#/usr/local/etc/ldap.conf#, используется pam_ldap.
+====
+
+На этом этапе вы должны быть в состоянии выполнить `ldapsearch -Z` на клиентской машине; `-Z` означает "использовать TLS". Если вы столкнётесь с ошибкой, значит что-то настроено неправильно; скорее всего, проблема в ваших сертификатах. Используйте `s_client` и `s_server` из man:openssl[1], чтобы убедиться, что они правильно настроены и подписаны.
+
+[[ldap-database]]
+=== Записи в базе данных
+
+Аутентификация в каталоге LDAP обычно выполняется путем попытки привязаться к каталогу как подключающийся пользователь. Это делается путем установки "простой" привязки к каталогу с предоставленным именем пользователя. Если существует запись с `uid`, равным имени пользователя, и атрибут `userPassword` этой записи совпадает с предоставленным паролем, то привязка проходит успешно.
+
+Первое, что нам нужно сделать, — это определить, где в каталоге будут находиться наши пользователи.
+
+Базовой записью для нашей базы данных является `dc=example,dc=org`. Стандартное расположение пользователей, которое ожидает большинство клиентов, выглядит примерно как `ou=people,_base_`, поэтому здесь будет использоваться именно это. Однако следует помнить, что это настраивается.
+
+Таким образом, запись ldif для организационного подразделения `people` будет выглядеть следующим образом:
+
+[.programlisting]
+....
+dn: ou=people,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: people
+....
+
+Все пользователи будут созданы как подразделы этой организационной единицы.
+
+Некоторые размышления стоит посвятить классу объектов, к которому будут принадлежать ваши пользователи. Большинство инструментов по умолчанию используют `people`, что подходит, если вам просто нужно предоставить записи для аутентификации. Однако, если вы также собираетесь хранить информацию о пользователях в базе данных LDAP, вам, вероятно, стоит использовать `inetOrgPerson`, который имеет множество полезных атрибутов. В любом случае, соответствующие схемы должны быть загружены в [.filename]#slapd.conf#.
+
+Для этого примера мы будем использовать класс объекта `person`. Если вы используете `inetOrgPerson`, шаги практически идентичны, за исключением того, что атрибут `sn` является обязательным.
+
+Чтобы добавить тестового пользователя с именем `tuser`, ldif-файл должен выглядеть так:
+
+[.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
+....
+
+Я начинаю UID пользователей LDAP с 10000, чтобы избежать конфликтов с системными учётными записями; вы можете настроить любое число здесь, при условии что оно меньше 65536.
+
+Также необходимы записи групп. Они настраиваются так же, как записи пользователей, но мы будем использовать стандартные значения, приведённые ниже:
+
+[.programlisting]
+....
+dn: ou=groups,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: groups
+
+dn: cn=tuser,ou=groups,dc=example,dc=org
+objectClass: posixGroup
+objectClass: top
+gidNumber: 10000
+cn: tuser
+....
+
+Чтобы добавить их в вашу базу данных, вы можете использовать `slapadd` или `ldapadd` для файла, содержащего эти записи. Альтернативно, вы можете использовать package:sysutils/ldapvi[].
+
+Утилита `ldapsearch` на клиентской машине теперь должна возвращать эти записи. Если это так, ваша база данных правильно настроена для использования в качестве сервера аутентификации LDAP.
+
+[[client]]
+== Конфигурация клиента
+
+Клиент уже должен иметь библиотеки OpenLDAP из crossref:ldap-auth[ldap-connect-client,Настройка клиента], но если вы устанавливаете несколько клиентских машин, вам потребуется установить package:net/openldap26-client[] на каждой из них.
+
+Для аутентификации на сервере LDAP в FreeBSD необходимо установить два порта: package:security/pam_ldap[] и package:net/nss_ldap[].
+
+[[client-auth]]
+=== Аутентификация
+
+package:security/pam_ldap[] настраивается через [.filename]#/usr/local/etc/ldap.conf#.
+
+[NOTE]
+====
+Это _другой файл_, отличный от файла конфигурации библиотечных функций OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; однако он принимает многие из тех же параметров; фактически он является надмножеством этого файла. В оставшейся части этого раздела ссылки на [.filename]#ldap.conf# будут означать [.filename]#/usr/local/etc/ldap.conf#.
+====
+
+Таким образом, мы захотим скопировать все исходные параметры конфигурации из [.filename]#openldap/ldap.conf# в новый [.filename]#ldap.conf#. После этого нам нужно указать package:security/pam_ldap[], что искать на сервере каталогов.
+
+Мы идентифицируем наших пользователей с помощью атрибута `uid`. Чтобы настроить это (хотя это значение по умолчанию), укажите директиву `pam_login_attribute` в [.filename]#ldap.conf#:
+
+[[set-pam-login-attr]]
+.Установка `pam_login_attribute`
+[example]
+====
+
+[.programlisting]
+....
+pam_login_attribute uid
+....
+
+====
+
+С таким набором, package:security/pam_ldap[] будет искать во всей LDAP-директории под `base` значение `uid=_имя_пользователя_`. Если оно найдёт одну и только одну запись, будет предпринята попытка привязаться к этой записи с использованием предоставленного пароля. Если привязка произойдёт успешно, доступ будет разрешён. В противном случае доступ будет запрещён.
+
+Пользователи, чья оболочка не указана в [.filename]#/etc/shells#, не смогут войти в систему. Это особенно важно, когда Bash установлен как оболочка пользователя на сервере LDAP. Bash не входит в стандартную установку FreeBSD. При установке из пакета или порта, он располагается в [.filename]#/usr/local/bin/bash#. Убедитесь, что путь к оболочке на сервере указан правильно:
+
+[source, shell]
+....
+% getent passwd username
+....
+
+Если в последнем столбце вывода указан `/bin/bash`, есть два варианта действий. Первый — изменить запись пользователя на сервере LDAP на [.filename]#/usr/local/bin/bash#. Второй вариант — создать символическую ссылку на клиентском компьютере LDAP, чтобы Bash находился в правильном месте:
+
+[source, shell]
+....
+# ln -s /usr/local/bin/bash /bin/bash
+....
+
+Убедитесь, что файл [.filename]#/etc/shells# содержит записи для `/usr/local/bin/bash` и `/bin/bash`. После этого пользователь сможет входить в систему с Bash в качестве оболочки.
+
+[[client-auth-pam]]
+==== PAM
+
+PAM, что означает "Pluggable Authentication Modules" (подключаемые модули аутентификации), является методом, с помощью которого FreeBSD аутентифицирует большинство своих сеансов. Чтобы указать FreeBSD, что мы хотим использовать LDAP-сервер, нам необходимо добавить строку в соответствующий файл PAM.
+
+В большинстве случаев подходящий файл PAM — это [.filename]#/etc/pam.d/sshd#, если вы хотите использовать SSH (не забудьте установить соответствующие параметры в [.filename]#/etc/ssh/sshd_config#, иначе SSH не будет использовать PAM).
+
+Чтобы использовать PAM для аутентификации, добавьте строку
+
+[.programlisting]
+....
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
+....
+
+Строгое место, где эта строка появляется в файле, и какие опции указаны в четвертом столбце, определяют точное поведение механизма аутентификации; см. man:pam[d]
+
+С такой конфигурацией вы сможете аутентифицировать пользователя в LDAP-каталоге. PAM выполнит привязку с вашими учетными данными, и в случае успеха сообщит SSH разрешить доступ.
+
+Однако разрешать _каждому_ пользователю в каталоге доступ к _каждой_ клиентской машине — не лучшая идея. При текущей конфигурации пользователю для входа на машину достаточно наличия записи в LDAP. К счастью, есть несколько способов ограничить доступ пользователей.
+
+[.filename]#ldap.conf# поддерживает директиву `pam_groupdn`; каждая учётная запись, подключающаяся к этой машине, должна быть членом группы, указанной здесь. Например, если у вас есть
+
+[.programlisting]
+....
+pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org
+....
+
+в [.filename]#ldap.conf#, тогда только члены этой группы смогут войти в систему. Однако есть несколько моментов, которые следует учитывать.
+
+Участники этой группы указываются в одном или нескольких атрибутах `memberUid`, и каждый атрибут должен содержать полное отличающееся имя участника. Таким образом, `memberUid: someuser` не сработает; необходимо указать:
+
+[.programlisting]
+....
+memberUid: uid=someuser,ou=people,dc=example,dc=org
+....
+
+Кроме того, эта директива не проверяется в PAM во время аутентификации, она проверяется во время управления учётными записями, поэтому вам понадобится вторая строка в ваших PAM-файлах в разделе `account`. Это, в свою очередь, потребует, чтобы _каждый_ пользователь был указан в группе, что не обязательно соответствует нашим желаниям. Чтобы избежать блокировки пользователей, не находящихся в LDAP, следует включить атрибут `ignore_unknown_user`. Наконец, следует установить опцию `ignore_authinfo_unavail`, чтобы не оказаться заблокированным на каждом компьютере при недоступности LDAP-сервера.
+
+Ваш файл [.filename]#pam.d/sshd# может в итоге выглядеть так:
+
+[[pam]]
+.Пример [.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]
+====
+Поскольку мы добавляем эти строки конкретно в [.filename]#pam.d/sshd#, это повлияет только на SSH-сеансы. Пользователи LDAP не смогут войти через консоль. Чтобы изменить это поведение, изучите остальные файлы в [.filename]#/etc/pam.d# и измените их соответствующим образом.
+====
+
+[[client-nss]]
+=== Name Service Switch
+
+NSS — это служба, которая сопоставляет атрибуты с именами. Например, если файл принадлежит пользователю `1001`, приложение запросит у NSS имя для `1001` и может получить `bob`, `ted` или любое другое имя пользователя.
+
+Теперь, когда информация о пользователях хранится в LDAP, необходимо указать NSS обращаться туда при запросах.
+
+Порт package:net/nss_ldap[] выполняет это. Он использует тот же конфигурационный файл, что и package:security/pam_ldap[], и после установки не должен требовать дополнительных параметров. Вместо этого остаётся просто отредактировать [.filename]#/etc/nsswitch.conf#, чтобы воспользоваться преимуществами каталога. Просто замените следующие строки:
+
+[.programlisting]
+....
+group: compat
+passwd: compat
+....
+
+строкой
+
+[.programlisting]
+....
+group: files ldap
+passwd: files ldap
+....
+
+Это позволит сопоставлять имена пользователей с UID и UID с именами пользователей.
+
+Поздравляем! Теперь у вас должна работать аутентификация через LDAP.
+
+[[caveats]]
+=== Предостережения
+
+К сожалению, на момент написания этой документации FreeBSD не поддерживал изменение паролей пользователей с помощью man:passwd[1]. В результате большинству администраторов приходится самостоятельно реализовывать решение. Здесь я привожу несколько примеров. Обратите внимание, что если вы пишете собственный скрипт для смены пароля, вам следует учитывать некоторые проблемы безопасности; см. crossref:ldap-auth[security-passwd, Хранение паролей]
+
+[[chpw-shell]]
+.Скрипт оболочки для изменения паролей
+[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]
+====
+
+Этот скрипт почти не проверяет ошибки, что более важно, он очень беспечен в том, как хранит ваши пароли. Если вы делаете что-то подобное, по крайней мере измените значение sysctl `security.bsd.see_other_uids`:
+
+[source, shell]
+....
+# sysctl security.bsd.see_other_uids=0
+....
+
+====
+
+Более гибкий (и, вероятно, более безопасный) подход может быть реализован путем написания собственной программы или даже веб-интерфейса. Ниже приведена часть библиотеки на Ruby, которая позволяет изменять пароли в LDAP. Она используется как в командной строке, так и в вебе.
+
+[[chpw-ruby]]
+.Ruby-скрипт для изменения паролей
+[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])
+....
+
+====
+
+Хотя это не гарантирует отсутствия уязвимостей (например, пароль хранится в памяти), данный подход чище и гибче, чем простой скрипт на `sh`.
+
+[[secure]]
+== Безопасность
+
+Теперь, когда ваши машины (и, возможно, другие службы) проходят аутентификацию через ваш LDAP-сервер, этот сервер необходимо защитить как минимум так же, как [.filename]#/etc/master.passwd# на обычном сервере, а возможно, и лучше, поскольку сломанный или взломанный LDAP-сервер нарушит работу всех клиентских служб.
+
+Помните, что этот раздел не является исчерпывающим. Вам следует постоянно пересматривать свою конфигурацию и процедуры для улучшений.
+
+[[secure-readonly]]
+=== Установка атрибутов только для чтения
+
+Некоторые атрибуты в LDAP должны быть доступны только для чтения. Если оставить их доступными для записи пользователем, например, пользователь может изменить свой атрибут `uidNumber` на `0` и получить доступ `root`!
+
+Для начала атрибут `userPassword` не должен быть доступен для чтения всем. По умолчанию любой, кто может подключиться к LDAP-серверу, может читать этот атрибут. Чтобы отключить это, добавьте следующее в [.filename]#slapd.conf#:
+
+[[hide-userpass]]
+.Скрыть пароли
+[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
+....
+
+====
+
+Это запретит чтение атрибута `userPassword`, но позволит пользователям изменять свои собственные пароли.
+
+Кроме того, следует запретить пользователям изменять некоторые из своих атрибутов. По умолчанию пользователи могут изменять любые атрибуты (за исключением тех, которые сами схемы LDAP запрещают изменять), такие как `uidNumber`. Чтобы устранить эту уязвимость, измените приведённое выше на
+
+[[attrib-readonly]]
+.Атрибуты только для чтения
+[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
+....
+
+====
+
+Это предотвратит возможность пользователей маскироваться под других пользователей.
+
+[[secure-root]]
+=== Определение учетной записи `root`
+
+Часто учетная запись `root` или администратора для службы LDAP будет определена в файле конфигурации. Например, OpenLDAP поддерживает это, и это работает, но может привести к проблемам, если файл [.filename]#slapd.conf# будет скомпрометирован. Возможно, лучше использовать это только для первоначальной настройки доступа к LDAP, а затем определить учетную запись `root` там.
+
+Еще лучше определить учетные записи с ограниченными правами и полностью исключить учетную запись `root`. Например, пользователи, которые могут добавлять или удалять учетные записи, добавляются в одну группу, но сами не могут изменять состав этой группы. Такая политика безопасности поможет снизить последствия утечки пароля.
+
+[[manager-acct]]
+==== Создание группы управления
+
+Предположим, вы хотите, чтобы ваш IT-отдел мог изменять домашние каталоги пользователей, но не хотите, чтобы все они могли добавлять или удалять пользователей. Способ сделать это — добавить группу для этих администраторов:
+
+[[manager-acct-dn]]
+.Создание группы управления
+[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
+....
+
+====
+
+И затем измените атрибуты прав в [.filename]#slapd.conf#:
+
+[[management-acct-acl]]
+.ACL для группы управления домашним каталогом
+[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
+....
+
+====
+
+Теперь `tuser` и `user2` могут изменять домашние каталоги других пользователей.
+
+В этом примере мы предоставили подмножество административных полномочий определённым пользователям, не давая им власти в других областях. Идея заключается в том, чтобы вскоре ни одна учётная запись пользователя не обладала полномочиями учётной записи `root`, но каждое полномочие, которое имел root, было бы у хотя бы одного пользователя. Учётная запись `root` тогда становится ненужной и может быть удалена.
+
+[[security-passwd]]
+=== Хранение паролей
+
+По умолчанию OpenLDAP сохраняет значение атрибута `userPassword` так же, как и любые другие данные: в открытом виде. В большинстве случаев оно кодируется в base64, что обеспечивает достаточную защиту, чтобы честный администратор не узнал ваш пароль, но не более того.
+
+Хорошей идеей является хранение паролей в более безопасном формате, таком как SSHA (солёный SHA). Это выполняется любой программой, которую вы используете для изменения паролей пользователей.
+
+:sectnums!:
+
+[appendix]
+[[useful]]
+== Полезные инструменты
+
+Вот несколько других программ, которые могут быть полезны, особенно если у вас много пользователей и вы не хотите настраивать всё вручную.
+
+package:security/pam_mkhomedir[] — это модуль PAM, который всегда завершается успешно; его назначение — создавать домашние каталоги для пользователей, у которых их нет. Если у вас есть десятки серверов-клиентов и сотни пользователей, гораздо удобнее использовать этот модуль и настроить скелетные каталоги, чем подготавливать каждый домашний каталог вручную.
+
+package:sysutils/ldapvi[] — это отличная утилита для редактирования значений LDAP в синтаксисе, подобном LDIF. Каталог (или его подраздел) отображается в редакторе, выбранном переменной окружения `EDITOR`. Это позволяет легко вносить масштабные изменения в каталог без необходимости написания собственного инструмента.
+
+package:security/openssh-portable[] обладает возможностью обращаться к серверу LDAP для проверки SSH-ключей. Это очень удобно, если у вас много серверов и вы не хотите копировать свои открытые ключи на все из них.
+
+:sectnums!:
+
+[appendix]
+[[ssl-ca]]
+== Сертификаты OpenSSL для LDAP
+
+Если вы размещаете два или более LDAP-серверов, вам, вероятно, не захочется использовать самоподписанные сертификаты, так как каждый клиент придется настраивать для работы с каждым сертификатом. Хотя это возможно, это не так просто, как создать собственный центр сертификации и подписать сертификаты ваших серверов с его помощью.
+
+Шаги здесь представлены как есть, без попыток объяснить происходящее — дополнительные пояснения можно найти в man:openssl[1] и связанных справочных страницах.
+
+Для создания центра сертификации нам просто нужны самоподписанный сертификат и ключ. Шаги для этого следующие
+
+[[make-cert]]
+.Создание сертификата
+[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
+....
+
+====
+
+Это будут корневой ключ и сертификат ЦС. Возможно, вы захотите зашифровать ключ и хранить его в прохладном, сухом месте; любой, кто получит к нему доступ, сможет выдавать себя за один из ваших LDAP-серверов.
+
+Затем, используя первые два шага, описанные выше, создайте ключ [.filename]#ldap-server-one.key# и запрос на подпись сертификата [.filename]#ldap-server-one.csr#. После подписания запроса с помощью [.filename]#root.key# вы сможете использовать [.filename]#ldap-server-one.*# на своих LDAP-серверах.
+
+[NOTE]
+====
+Не забудьте использовать полное доменное имя для атрибута "common name" при создании запроса на подпись сертификата; в противном случае клиенты будут отклонять соединение с вами, и диагностика этой проблемы может быть очень сложной.
+====
+
+Для подписи ключа используйте `-CA` и `-CAkey` вместо `-signkey`:
+
+[[ca-sign]]
+.Подписывать как Центр Сертификации
+[example]
+====
+
+[source, shell]
+....
+% openssl x509 -req -days 1024 \
+-in ldap-server-one.csr -CA root.crt -CAkey root.key \
+-out ldap-server-one.crt
+....
+
+====
+
+Результирующий файл будет представлять собой сертификат, который можно использовать на ваших LDAP-серверах.
+
+Наконец, чтобы клиенты доверяли всем вашим серверам, распространите файл [.filename]#root.crt# (__сертификат__, а не ключ!) на каждом клиенте и укажите его в директиве `TLSCACertificateFile` в файле [.filename]#ldap.conf#.
diff --git a/documentation/content/ru/articles/ldap-auth/_index.po b/documentation/content/ru/articles/ldap-auth/_index.po
new file mode 100644
index 0000000000..e064db5f93
--- /dev/null
+++ b/documentation/content/ru/articles/ldap-auth/_index.po
@@ -0,0 +1,1887 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-23 19:02+0300\n"
+"PO-Revision-Date: 2025-08-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesldap-auth_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Руководство по настройке сервера LDAP для аутентификации в 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 "Аутентификация LDAP"
+
+#. 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 ""
+"Этот документ является руководством по настройке сервера LDAP (в основном "
+"сервера OpenLDAP) для аутентификации в FreeBSD. Это полезно в ситуациях, "
+"когда множество серверов требуют одинаковых учётных записей пользователей, "
+"например, в качестве замены 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 "Предисловие"
+
+#. 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 ""
+"Этот документ предназначен для того, чтобы дать читателю достаточно знаний о "
+"LDAP для настройки сервера LDAP. В документе будет предпринята попытка "
+"объяснить использование package:net/nss_ldap[] и package:security/pam_ldap[] "
+"для клиентских машин, работающих с сервером 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 ""
+"По завершении читатель должен уметь настроить и развернуть сервер FreeBSD, "
+"способный размещать каталог LDAP, а также настроить и развернуть сервер "
+"FreeBSD, который может проходить аутентификацию с использованием каталога "
+"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 ""
+"Эта статья не претендует на исчерпывающее описание вопросов безопасности, "
+"надежности или лучших практик настройки LDAP и других обсуждаемых здесь "
+"сервисов. Хотя автор старается делать всё правильно, вопросы безопасности "
+"рассматриваются лишь в общих чертах. Данная статья должна рассматриваться "
+"только как теоретическая основа, а любая реальная реализация должна "
+"сопровождаться тщательным анализом требований."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:66
+#, no-wrap
+msgid "Configuring LDAP"
+msgstr "Настройка 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 означает \"Lightweight Directory Access Protocol\" (облегчённый "
+"протокол доступа к каталогам) и является подмножеством X.500 Directory "
+"Access Protocol. Последние спецификации можно найти в http://www.ietf.org/"
+"rfc/rfc4510.txt[RFC4510] и связанных документах. По сути, это база данных, "
+"которая предполагает более частые операции чтения, чем записи."
+
+#. 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 ""
+"В примерах в этом документе будет использоваться LDAP-сервер http://"
+"www.openldap.org/[OpenLDAP]; хотя принципы, изложенные здесь, должны быть "
+"применимы к различным серверам, большая часть конкретных административных "
+"действий специфична для OpenLDAP. В портах доступно несколько версий "
+"сервера, например package:net/openldap26-server[]. Клиентские серверы "
+"потребуют соответствующие библиотеки package:net/openldap26-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 ""
+"Существуют (в основном) две области службы LDAP, которые требуют настройки. "
+"Первая — настройка сервера для правильного приёма соединений, а вторая — "
+"добавление записей в каталог сервера, чтобы инструменты FreeBSD знали, как с "
+"ним взаимодействовать."
+
+#. 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 ""
+"Этот раздел относится конкретно к OpenLDAP. Если вы используете другой "
+"сервер, вам необходимо обратиться к документации этого сервера."
+
+#. 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 "Установка OpenLDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:92
+msgid "First, install OpenLDAP:"
+msgstr "Сначала установите OpenLDAP:"
+
+#. 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 ""
+"# cd /usr/ports/net/openldap26-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 ""
+"Это устанавливает бинарные файлы `slapd` и `slurpd`, а также необходимые "
+"библиотеки OpenLDAP."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:109
+#, no-wrap
+msgid "Configuring OpenLDAP"
+msgstr "Настройка OpenLDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:112
+msgid "Next we must configure OpenLDAP."
+msgstr "Далее мы должны настроить 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 ""
+"Вам следует требовать шифрование соединений с сервером LDAP; в противном "
+"случае пароли ваших пользователей будут передаваться в открытом виде, что "
+"считается небезопасным. Инструменты, которые мы будем использовать, "
+"поддерживают два очень похожих типа шифрования: SSL и 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 означает \"Transportation Layer Security\". Службы, использующие TLS, "
+"обычно подключаются к тем же портам, что и аналогичные службы без TLS; таким "
+"образом, SMTP-сервер с поддержкой TLS будет ожидать подключений на порту 25, "
+"а LDAP-сервер — на порту 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 означает «Secure Sockets Layer», и службы, реализующие SSL, _не_ "
+"работают на тех же портах, что и их аналоги без SSL. Таким образом, SMTPS "
+"использует порт 465 (а не 25), HTTPS — порт 443, а LDAPS — порт 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 ""
+"Причина, по которой SSL использует другой порт, чем TLS, заключается в том, "
+"что соединение TLS начинается как обычный текст и переключается на "
+"зашифрованный трафик после директивы `STARTTLS`. Соединения SSL зашифрованы "
+"с самого начала. Кроме этого, существенных различий между ними нет."
+
+#. 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 ""
+"Мы настроим OpenLDAP для использования TLS, так как SSL считается устаревшим."
+
+#. 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 ""
+"После установки OpenLDAP через порты следующие параметры конфигурации в "
+"[.filename]#/usr/local/etc/openldap/slapd.conf# включат 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 ""
+"В этом примере `ssf=128` указывает OpenLDAP требовать 128-битное шифрование "
+"для всех соединений, как для поиска, так и для обновления. Этот параметр "
+"может быть настроен в соответствии с требованиями безопасности вашего сайта, "
+"но ослаблять его требуется редко, так как большинство библиотек LDAP-"
+"клиентов поддерживают стойкое шифрование."
+
+#. 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 ""
+"Файлы [.filename]#cert.crt#, [.filename]#cert.key# и [.filename]#cacert.crt# "
+"необходимы для аутентификации клиентами _вас_ как действительного LDAP-"
+"сервера. Если вам просто нужен работающий сервер, вы можете создать "
+"самоподписанный сертификат с помощью OpenSSL:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:149
+#, no-wrap
+msgid "Generating an RSA Key"
+msgstr "Генерация 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 ""
+"На этом этапе вам будет предложено ввести некоторые значения. Вы можете "
+"ввести любые значения, какие пожелаете; однако важно, чтобы значение "
+"\"Common Name\" (Общее имя) было полным доменным именем сервера OpenLDAP. В "
+"нашем случае и в приведённых примерах сервер называется "
+"_server.example.org_. Неправильное указание этого значения может привести к "
+"сбоям при подключении клиентов. Это может стать причиной серьёзных проблем, "
+"поэтому внимательно следуйте этим шагам."
+
+#. 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 ""
+"% 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:192
+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 "
+"crossref:ldap-auth[ssl-ca, OpenSSL Certificates for LDAP] to generate a CA "
+"key and use it to sign individual server certificates."
+msgstr ""
+"Это создаст самоподписанный сертификат, который можно использовать для "
+"директив в [.filename]#slapd.conf#, где [.filename]#cert.crt# и "
+"[.filename]#cacert.crt# представляют собой один и тот же файл. Если вы "
+"планируете использовать множество серверов OpenLDAP (для репликации через "
+"`slurpd`), рекомендуется ознакомиться с разделом crossref:ldap-auth[ssl-ca, "
+"Сертификаты OpenSSL для LDAP], чтобы сгенерировать ключ центра сертификации "
+"(CA) и использовать его для подписи индивидуальных сертификатов серверов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:194
+msgid "Once this is done, put the following in [.filename]#/etc/rc.conf#:"
+msgstr "После этого добавьте следующее в [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:198
+#, no-wrap
+msgid "slapd_enable=\"YES\"\n"
+msgstr "slapd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:203
+msgid ""
+"Then run `/usr/local/etc/rc.d/slapd start`. This should start OpenLDAP. "
+"Confirm that it is listening on 389 with"
+msgstr ""
+"Затем выполните `/usr/local/etc/rc.d/slapd start`. Это должно запустить "
+"OpenLDAP. Убедитесь, что он слушает порт 389 с помощью"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:208
+#, 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:211
+#, no-wrap
+msgid "Configuring the Client"
+msgstr "Настройка клиента"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:215
+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 ""
+"Установите порт package:net/openldap26-client[] для библиотек OpenLDAP. "
+"Клиентские машины всегда будут иметь библиотеки OpenLDAP, так как они "
+"содержатся в пакетах package:security/pam_ldap[] и package:net/nss_ldap[], "
+"по крайней мере, на данный момент."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:218
+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 ""
+"Файл конфигурации для библиотек OpenLDAP — это [.filename]#/usr/local/etc/"
+"openldap/ldap.conf#. Отредактируйте этот файл, указав следующие значения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:225
+#, 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:230
+msgid ""
+"It is important that your clients have access to [.filename]#cacert.crt#, "
+"otherwise they will not be able to connect."
+msgstr ""
+"Важно, чтобы у ваших клиентов был доступ к [.filename]#cacert.crt#, иначе "
+"они не смогут подключиться."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:237
+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 ""
+"Существует два файла с именем [.filename]#ldap.conf#. Первый — это данный "
+"файл, предназначенный для библиотек OpenLDAP и определяющий, как "
+"взаимодействовать с сервером. Второй — [.filename]#/usr/local/etc/"
+"ldap.conf#, используется pam_ldap."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:242
+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 ""
+"На этом этапе вы должны быть в состоянии выполнить `ldapsearch -Z` на "
+"клиентской машине; `-Z` означает \"использовать TLS\". Если вы столкнётесь с "
+"ошибкой, значит что-то настроено неправильно; скорее всего, проблема в ваших "
+"сертификатах. Используйте `s_client` и `s_server` из man:openssl[1], чтобы "
+"убедиться, что они правильно настроены и подписаны."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:244
+#, no-wrap
+msgid "Entries in the Database"
+msgstr "Записи в базе данных"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:249
+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 ""
+"Аутентификация в каталоге LDAP обычно выполняется путем попытки привязаться "
+"к каталогу как подключающийся пользователь. Это делается путем установки "
+"\"простой\" привязки к каталогу с предоставленным именем пользователя. Если "
+"существует запись с `uid`, равным имени пользователя, и атрибут "
+"`userPassword` этой записи совпадает с предоставленным паролем, то привязка "
+"проходит успешно."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:251
+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:255
+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 ""
+"Базовой записью для нашей базы данных является `dc=example,dc=org`. "
+"Стандартное расположение пользователей, которое ожидает большинство "
+"клиентов, выглядит примерно как `ou=people,_base_`, поэтому здесь будет "
+"использоваться именно это. Однако следует помнить, что это настраивается."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:257
+msgid "So the ldif entry for the `people` organizational unit will look like:"
+msgstr ""
+"Таким образом, запись ldif для организационного подразделения `people` будет "
+"выглядеть следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:264
+#, 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:267
+msgid "All users will be created as subentries of this organizational unit."
+msgstr ""
+"Все пользователи будут созданы как подразделы этой организационной единицы."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:272
+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 ""
+"Некоторые размышления стоит посвятить классу объектов, к которому будут "
+"принадлежать ваши пользователи. Большинство инструментов по умолчанию "
+"используют `people`, что подходит, если вам просто нужно предоставить записи "
+"для аутентификации. Однако, если вы также собираетесь хранить информацию о "
+"пользователях в базе данных LDAP, вам, вероятно, стоит использовать "
+"`inetOrgPerson`, который имеет множество полезных атрибутов. В любом случае, "
+"соответствующие схемы должны быть загружены в [.filename]#slapd.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:275
+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 ""
+"Для этого примера мы будем использовать класс объекта `person`. Если вы "
+"используете `inetOrgPerson`, шаги практически идентичны, за исключением "
+"того, что атрибут `sn` является обязательным."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:277
+msgid "To add a test-user named `tuser`, the ldif would be:"
+msgstr ""
+"Чтобы добавить тестового пользователя с именем `tuser`, ldif-файл должен "
+"выглядеть так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:291
+#, 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:294
+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 ""
+"Я начинаю UID пользователей LDAP с 10000, чтобы избежать конфликтов с "
+"системными учётными записями; вы можете настроить любое число здесь, при "
+"условии что оно меньше 65536."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:297
+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:304
+#, no-wrap
+msgid ""
+"dn: ou=groups,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: groups\n"
+msgstr ""
+"dn: ou=groups,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: groups\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:310
+#, 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:314
+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 ""
+"Чтобы добавить их в вашу базу данных, вы можете использовать `slapadd` или "
+"`ldapadd` для файла, содержащего эти записи. Альтернативно, вы можете "
+"использовать package:sysutils/ldapvi[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:317
+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 ""
+"Утилита `ldapsearch` на клиентской машине теперь должна возвращать эти "
+"записи. Если это так, ваша база данных правильно настроена для использования "
+"в качестве сервера аутентификации LDAP."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:319
+#, no-wrap
+msgid "Client Configuration"
+msgstr "Конфигурация клиента"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:323
+msgid ""
+"The client should already have OpenLDAP libraries from crossref:ldap-"
+"auth[ldap-connect-client,Configuring the Client], but if you are installing "
+"several client machines you will need to install package:net/openldap26-"
+"client[] on each of them."
+msgstr ""
+"Клиент уже должен иметь библиотеки OpenLDAP из crossref:ldap-auth[ldap-"
+"connect-client,Настройка клиента], но если вы устанавливаете несколько "
+"клиентских машин, вам потребуется установить package:net/openldap26-client[] "
+"на каждой из них."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:325
+msgid ""
+"FreeBSD requires two ports to be installed to authenticate against an LDAP "
+"server, package:security/pam_ldap[] and package:net/nss_ldap[]."
+msgstr ""
+"Для аутентификации на сервере LDAP в FreeBSD необходимо установить два "
+"порта: package:security/pam_ldap[] и package:net/nss_ldap[]."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:327
+#, no-wrap
+msgid "Authentication"
+msgstr "Аутентификация"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:330
+msgid ""
+"package:security/pam_ldap[] is configured via [.filename]#/usr/local/etc/"
+"ldap.conf#."
+msgstr ""
+"package:security/pam_ldap[] настраивается через [.filename]#/usr/local/etc/"
+"ldap.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:335
+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 ""
+"Это _другой файл_, отличный от файла конфигурации библиотечных функций "
+"OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; однако он "
+"принимает многие из тех же параметров; фактически он является надмножеством "
+"этого файла. В оставшейся части этого раздела ссылки на "
+"[.filename]#ldap.conf# будут означать [.filename]#/usr/local/etc/ldap.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:339
+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 ""
+"Таким образом, мы захотим скопировать все исходные параметры конфигурации из "
+"[.filename]#openldap/ldap.conf# в новый [.filename]#ldap.conf#. После этого "
+"нам нужно указать package:security/pam_ldap[], что искать на сервере "
+"каталогов."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:342
+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 ""
+"Мы идентифицируем наших пользователей с помощью атрибута `uid`. Чтобы "
+"настроить это (хотя это значение по умолчанию), укажите директиву "
+"`pam_login_attribute` в [.filename]#ldap.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:344
+#, no-wrap
+msgid "Setting `pam_login_attribute`"
+msgstr "Установка `pam_login_attribute`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:351
+#, 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:359
+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 ""
+"С таким набором, package:security/pam_ldap[] будет искать во всей LDAP-"
+"директории под `base` значение `uid=_имя_пользователя_`. Если оно найдёт "
+"одну и только одну запись, будет предпринята попытка привязаться к этой "
+"записи с использованием предоставленного пароля. Если привязка произойдёт "
+"успешно, доступ будет разрешён. В противном случае доступ будет запрещён."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:365
+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 ""
+"Пользователи, чья оболочка не указана в [.filename]#/etc/shells#, не смогут "
+"войти в систему. Это особенно важно, когда Bash установлен как оболочка "
+"пользователя на сервере LDAP. Bash не входит в стандартную установку "
+"FreeBSD. При установке из пакета или порта, он располагается в [.filename]#/"
+"usr/local/bin/bash#. Убедитесь, что путь к оболочке на сервере указан "
+"правильно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:369
+#, no-wrap
+msgid "% getent passwd username\n"
+msgstr "% getent passwd username\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:374
+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 ""
+"Если в последнем столбце вывода указан `/bin/bash`, есть два варианта "
+"действий. Первый — изменить запись пользователя на сервере LDAP на "
+"[.filename]#/usr/local/bin/bash#. Второй вариант — создать символическую "
+"ссылку на клиентском компьютере LDAP, чтобы Bash находился в правильном "
+"месте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:378
+#, 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:382
+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 ""
+"Убедитесь, что файл [.filename]#/etc/shells# содержит записи для `/usr/local/"
+"bin/bash` и `/bin/bash`. После этого пользователь сможет входить в систему с "
+"Bash в качестве оболочки."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:384
+#, no-wrap
+msgid "PAM"
+msgstr "PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:388
+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, что означает \"Pluggable Authentication Modules\" (подключаемые модули "
+"аутентификации), является методом, с помощью которого FreeBSD "
+"аутентифицирует большинство своих сеансов. Чтобы указать FreeBSD, что мы "
+"хотим использовать LDAP-сервер, нам необходимо добавить строку в "
+"соответствующий файл PAM."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:390
+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 ""
+"В большинстве случаев подходящий файл PAM — это [.filename]#/etc/pam.d/"
+"sshd#, если вы хотите использовать SSH (не забудьте установить "
+"соответствующие параметры в [.filename]#/etc/ssh/sshd_config#, иначе SSH не "
+"будет использовать PAM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:392
+msgid "To use PAM for authentication, add the line"
+msgstr "Чтобы использовать PAM для аутентификации, добавьте строку"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:396
+#, 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:399
+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 ""
+"Строгое место, где эта строка появляется в файле, и какие опции указаны в "
+"четвертом столбце, определяют точное поведение механизма аутентификации; см. "
+"man:pam[d]"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:402
+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 ""
+"С такой конфигурацией вы сможете аутентифицировать пользователя в LDAP-"
+"каталоге. PAM выполнит привязку с вашими учетными данными, и в случае успеха "
+"сообщит SSH разрешить доступ."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:406
+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 ""
+"Однако разрешать _каждому_ пользователю в каталоге доступ к _каждой_ "
+"клиентской машине — не лучшая идея. При текущей конфигурации пользователю "
+"для входа на машину достаточно наличия записи в LDAP. К счастью, есть "
+"несколько способов ограничить доступ пользователей."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:409
+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# поддерживает директиву `pam_groupdn`; каждая учётная "
+"запись, подключающаяся к этой машине, должна быть членом группы, указанной "
+"здесь. Например, если у вас есть"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:413
+#, 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:417
+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 ""
+"в [.filename]#ldap.conf#, тогда только члены этой группы смогут войти в "
+"систему. Однако есть несколько моментов, которые следует учитывать."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:420
+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 ""
+"Участники этой группы указываются в одном или нескольких атрибутах "
+"`memberUid`, и каждый атрибут должен содержать полное отличающееся имя "
+"участника. Таким образом, `memberUid: someuser` не сработает; необходимо "
+"указать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:424
+#, 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:430
+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 ""
+"Кроме того, эта директива не проверяется в PAM во время аутентификации, она "
+"проверяется во время управления учётными записями, поэтому вам понадобится "
+"вторая строка в ваших PAM-файлах в разделе `account`. Это, в свою очередь, "
+"потребует, чтобы _каждый_ пользователь был указан в группе, что не "
+"обязательно соответствует нашим желаниям. Чтобы избежать блокировки "
+"пользователей, не находящихся в LDAP, следует включить атрибут "
+"`ignore_unknown_user`. Наконец, следует установить опцию "
+"`ignore_authinfo_unavail`, чтобы не оказаться заблокированным на каждом "
+"компьютере при недоступности LDAP-сервера."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:432
+msgid "Your [.filename]#pam.d/sshd# might then end up looking like this:"
+msgstr "Ваш файл [.filename]#pam.d/sshd# может в итоге выглядеть так:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:434
+#, no-wrap
+msgid "Sample [.filename]#pam.d/sshd#"
+msgstr "Пример [.filename]#pam.d/sshd#"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:445
+#, 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:448
+#, 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:457
+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 ""
+"Поскольку мы добавляем эти строки конкретно в [.filename]#pam.d/sshd#, это "
+"повлияет только на SSH-сеансы. Пользователи LDAP не смогут войти через "
+"консоль. Чтобы изменить это поведение, изучите остальные файлы в "
+"[.filename]#/etc/pam.d# и измените их соответствующим образом."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:460
+#, no-wrap
+msgid "Name Service Switch"
+msgstr "Name Service Switch"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:464
+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 — это служба, которая сопоставляет атрибуты с именами. Например, если "
+"файл принадлежит пользователю `1001`, приложение запросит у NSS имя для "
+"`1001` и может получить `bob`, `ted` или любое другое имя пользователя."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:466
+msgid ""
+"Now that our user information is kept in LDAP, we need to tell NSS to look "
+"there when queried."
+msgstr ""
+"Теперь, когда информация о пользователях хранится в LDAP, необходимо указать "
+"NSS обращаться туда при запросах."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:471
+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 ""
+"Порт package:net/nss_ldap[] выполняет это. Он использует тот же "
+"конфигурационный файл, что и package:security/pam_ldap[], и после установки "
+"не должен требовать дополнительных параметров. Вместо этого остаётся просто "
+"отредактировать [.filename]#/etc/nsswitch.conf#, чтобы воспользоваться "
+"преимуществами каталога. Просто замените следующие строки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:476
+#, 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:479
+msgid "with"
+msgstr "строкой"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:484
+#, 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:487
+msgid "This will allow you to map usernames to UIDs and UIDs to usernames."
+msgstr ""
+"Это позволит сопоставлять имена пользователей с UID и UID с именами "
+"пользователей."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:489
+msgid "Congratulations! You should now have working LDAP authentication."
+msgstr "Поздравляем! Теперь у вас должна работать аутентификация через LDAP."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:491
+#, no-wrap
+msgid "Caveats"
+msgstr "Предостережения"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:498
+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 "
+"crossref:ldap-auth[security-passwd, Password Storage]"
+msgstr ""
+"К сожалению, на момент написания этой документации FreeBSD не поддерживал "
+"изменение паролей пользователей с помощью man:passwd[1]. В результате "
+"большинству администраторов приходится самостоятельно реализовывать решение. "
+"Здесь я привожу несколько примеров. Обратите внимание, что если вы пишете "
+"собственный скрипт для смены пароля, вам следует учитывать некоторые "
+"проблемы безопасности; см. crossref:ldap-auth[security-passwd, Хранение "
+"паролей]"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:500
+#, no-wrap
+msgid "Shell Script for Changing Passwords"
+msgstr "Скрипт оболочки для изменения паролей"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:507
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:513
+#, 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:518
+#, 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:523
+#, 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:532
+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 ""
+"Этот скрипт почти не проверяет ошибки, что более важно, он очень беспечен в "
+"том, как хранит ваши пароли. Если вы делаете что-то подобное, по крайней "
+"мере измените значение sysctl `security.bsd.see_other_uids`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:536
+#, 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:543
+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 ""
+"Более гибкий (и, вероятно, более безопасный) подход может быть реализован "
+"путем написания собственной программы или даже веб-интерфейса. Ниже "
+"приведена часть библиотеки на Ruby, которая позволяет изменять пароли в "
+"LDAP. Она используется как в командной строке, так и в вебе."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:545
+#, no-wrap
+msgid "Ruby Script for Changing Passwords"
+msgstr "Ruby-скрипт для изменения паролей"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:555
+#, 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:558
+#, 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:563
+#, 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:566
+#, 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:572
+#, 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:575
+#, 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:578
+#, 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:582
+#, 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:587
+#, 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:592
+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 ""
+"Хотя это не гарантирует отсутствия уязвимостей (например, пароль хранится в "
+"памяти), данный подход чище и гибче, чем простой скрипт на `sh`."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:594
+#, no-wrap
+msgid "Security Considerations"
+msgstr "Безопасность"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:597
+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 ""
+"Теперь, когда ваши машины (и, возможно, другие службы) проходят "
+"аутентификацию через ваш LDAP-сервер, этот сервер необходимо защитить как "
+"минимум так же, как [.filename]#/etc/master.passwd# на обычном сервере, а "
+"возможно, и лучше, поскольку сломанный или взломанный LDAP-сервер нарушит "
+"работу всех клиентских служб."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:600
+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:602
+#, no-wrap
+msgid "Setting Attributes Read-only"
+msgstr "Установка атрибутов только для чтения"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:606
+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 ""
+"Некоторые атрибуты в LDAP должны быть доступны только для чтения. Если "
+"оставить их доступными для записи пользователем, например, пользователь "
+"может изменить свой атрибут `uidNumber` на `0` и получить доступ `root`!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:610
+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 ""
+"Для начала атрибут `userPassword` не должен быть доступен для чтения всем. "
+"По умолчанию любой, кто может подключиться к LDAP-серверу, может читать этот "
+"атрибут. Чтобы отключить это, добавьте следующее в [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:612
+#, no-wrap
+msgid "Hide Passwords"
+msgstr "Скрыть пароли"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:623
+#: documentation/content/en/articles/ldap-auth/_index.adoc:649
+#, 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:627
+#: documentation/content/en/articles/ldap-auth/_index.adoc:656
+#, 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:632
+msgid ""
+"This will disallow reading of the `userPassword` attribute, while still "
+"allowing users to change their own passwords."
+msgstr ""
+"Это запретит чтение атрибута `userPassword`, но позволит пользователям "
+"изменять свои собственные пароли."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:636
+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 ""
+"Кроме того, следует запретить пользователям изменять некоторые из своих "
+"атрибутов. По умолчанию пользователи могут изменять любые атрибуты (за "
+"исключением тех, которые сами схемы LDAP запрещают изменять), такие как "
+"`uidNumber`. Чтобы устранить эту уязвимость, измените приведённое выше на"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:638
+#, no-wrap
+msgid "Read-only Attributes"
+msgstr "Атрибуты только для чтения"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:652
+#, 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:661
+msgid "This will stop users from being able to masquerade as other users."
+msgstr ""
+"Это предотвратит возможность пользователей маскироваться под других "
+"пользователей."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:663
+#, no-wrap
+msgid "`root` Account Definition"
+msgstr "Определение учетной записи `root`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:668
+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 ""
+"Часто учетная запись `root` или администратора для службы LDAP будет "
+"определена в файле конфигурации. Например, OpenLDAP поддерживает это, и это "
+"работает, но может привести к проблемам, если файл [.filename]#slapd.conf# "
+"будет скомпрометирован. Возможно, лучше использовать это только для "
+"первоначальной настройки доступа к LDAP, а затем определить учетную запись "
+"`root` там."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:672
+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 ""
+"Еще лучше определить учетные записи с ограниченными правами и полностью "
+"исключить учетную запись `root`. Например, пользователи, которые могут "
+"добавлять или удалять учетные записи, добавляются в одну группу, но сами не "
+"могут изменять состав этой группы. Такая политика безопасности поможет "
+"снизить последствия утечки пароля."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:674
+#: documentation/content/en/articles/ldap-auth/_index.adoc:680
+#, no-wrap
+msgid "Creating a Management Group"
+msgstr "Создание группы управления"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:678
+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 ""
+"Предположим, вы хотите, чтобы ваш IT-отдел мог изменять домашние каталоги "
+"пользователей, но не хотите, чтобы все они могли добавлять или удалять "
+"пользователей. Способ сделать это — добавить группу для этих администраторов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:693
+#, 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:698
+msgid "And then change the permissions attributes in [.filename]#slapd.conf#:"
+msgstr "И затем измените атрибуты прав в [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:700
+#, no-wrap
+msgid "ACLs for a Home Directory Management Group"
+msgstr "ACL для группы управления домашним каталогом"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:710
+#, 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:715
+msgid "Now `tuser` and `user2` can change other users' home directories."
+msgstr ""
+"Теперь `tuser` и `user2` могут изменять домашние каталоги других "
+"пользователей."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:719
+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 ""
+"В этом примере мы предоставили подмножество административных полномочий "
+"определённым пользователям, не давая им власти в других областях. Идея "
+"заключается в том, чтобы вскоре ни одна учётная запись пользователя не "
+"обладала полномочиями учётной записи `root`, но каждое полномочие, которое "
+"имел root, было бы у хотя бы одного пользователя. Учётная запись `root` "
+"тогда становится ненужной и может быть удалена."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:721
+#, no-wrap
+msgid "Password Storage"
+msgstr "Хранение паролей"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:725
+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 сохраняет значение атрибута `userPassword` так же, как "
+"и любые другие данные: в открытом виде. В большинстве случаев оно кодируется "
+"в base64, что обеспечивает достаточную защиту, чтобы честный администратор "
+"не узнал ваш пароль, но не более того."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:728
+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 ""
+"Хорошей идеей является хранение паролей в более безопасном формате, таком "
+"как SSHA (солёный SHA). Это выполняется любой программой, которую вы "
+"используете для изменения паролей пользователей."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:733
+#, no-wrap
+msgid "Useful Aids"
+msgstr "Полезные инструменты"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:736
+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:739
+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[] — это модуль PAM, который всегда "
+"завершается успешно; его назначение — создавать домашние каталоги для "
+"пользователей, у которых их нет. Если у вас есть десятки серверов-клиентов и "
+"сотни пользователей, гораздо удобнее использовать этот модуль и настроить "
+"скелетные каталоги, чем подготавливать каждый домашний каталог вручную."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:743
+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[] — это отличная утилита для редактирования значений "
+"LDAP в синтаксисе, подобном LDIF. Каталог (или его подраздел) отображается в "
+"редакторе, выбранном переменной окружения `EDITOR`. Это позволяет легко "
+"вносить масштабные изменения в каталог без необходимости написания "
+"собственного инструмента."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:746
+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[] обладает возможностью обращаться к "
+"серверу LDAP для проверки SSH-ключей. Это очень удобно, если у вас много "
+"серверов и вы не хотите копировать свои открытые ключи на все из них."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:751
+#, no-wrap
+msgid "OpenSSL Certificates for LDAP"
+msgstr "Сертификаты OpenSSL для LDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:755
+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 ""
+"Если вы размещаете два или более LDAP-серверов, вам, вероятно, не захочется "
+"использовать самоподписанные сертификаты, так как каждый клиент придется "
+"настраивать для работы с каждым сертификатом. Хотя это возможно, это не так "
+"просто, как создать собственный центр сертификации и подписать сертификаты "
+"ваших серверов с его помощью."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:757
+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 ""
+"Шаги здесь представлены как есть, без попыток объяснить происходящее — "
+"дополнительные пояснения можно найти в man:openssl[1] и связанных справочных "
+"страницах."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:760
+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:762
+#, no-wrap
+msgid "Creating a Certificate"
+msgstr "Создание сертификата"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:771
+#, 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:777
+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 ""
+"Это будут корневой ключ и сертификат ЦС. Возможно, вы захотите зашифровать "
+"ключ и хранить его в прохладном, сухом месте; любой, кто получит к нему "
+"доступ, сможет выдавать себя за один из ваших LDAP-серверов."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:780
+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 ""
+"Затем, используя первые два шага, описанные выше, создайте ключ "
+"[.filename]#ldap-server-one.key# и запрос на подпись сертификата "
+"[.filename]#ldap-server-one.csr#. После подписания запроса с помощью "
+"[.filename]#root.key# вы сможете использовать [.filename]#ldap-server-one.*# "
+"на своих LDAP-серверах."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:784
+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 ""
+"Не забудьте использовать полное доменное имя для атрибута \"common name\" "
+"при создании запроса на подпись сертификата; в противном случае клиенты "
+"будут отклонять соединение с вами, и диагностика этой проблемы может быть "
+"очень сложной."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:787
+msgid "To sign the key, use `-CA` and `-CAkey` instead of `-signkey`:"
+msgstr "Для подписи ключа используйте `-CA` и `-CAkey` вместо `-signkey`:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:789
+#, no-wrap
+msgid "Signing as a Certificate Authority"
+msgstr "Подписывать как Центр Сертификации"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:798
+#, 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:803
+msgid ""
+"The resulting file will be the certificate that you can use on your LDAP "
+"servers."
+msgstr ""
+"Результирующий файл будет представлять собой сертификат, который можно "
+"использовать на ваших LDAP-серверах."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:804
+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 ""
+"Наконец, чтобы клиенты доверяли всем вашим серверам, распространите файл "
+"[.filename]#root.crt# (__сертификат__, а не ключ!) на каждом клиенте и "
+"укажите его в директиве `TLSCACertificateFile` в файле "
+"[.filename]#ldap.conf#."
diff --git a/documentation/content/ru/articles/leap-seconds/_index.adoc b/documentation/content/ru/articles/leap-seconds/_index.adoc
new file mode 100644
index 0000000000..438e79d1f5
--- /dev/null
+++ b/documentation/content/ru/articles/leap-seconds/_index.adoc
@@ -0,0 +1,131 @@
+---
+description: 'Краткое описание обработки високосных секунд (секунд координации) в 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]]
+== Введение
+
+_Секунда координации_ (високосная секунда) — это односекундная
+корректировка, вносимая в определённые моменты года в UTC для синхронизации
+атомных шкал времени с вариациями вращения Земли. В этой статье описано, как
+FreeBSD взаимодействует с секундами координации.
+
+На момент написания следующая високосная секунда будет добавлена 2015-Jun-30
+23:59:60 UTC. Эта високосная секунда выпадет на рабочий день для Северной и
+Южной Америки, а также для региона Азии/Тихоокеанского региона.
+
+Секунды координации объявляются
+https://www.iers.org/IERS/EN/Home/home_node.html[IERS] в
+https://datacenter.iers.org/data/latestVersion/16_BULLETIN_C16.txt[Бюллетене
+C].
+
+Стандартное поведение високосной секунды описано в
+https://datatracker.ietf.org/doc/html/rfc7164#section-3[RFC 7164]. Также
+см. man:time2posix[3].
+
+[[leapseconds-posix]]
+== Обработка високосных секунд по умолчанию в FreeBSD
+
+Самый простой способ обработки високосных секунд — использование правил
+времени POSIX, которые FreeBSD использует по умолчанию, в сочетании с
+extref:{handbook}[NTP, network-ntp]. Когда man:ntpd[8] работает и время
+синхронизировано с вышестоящими серверами NTP, которые корректно
+обрабатывают високосные секунды, високосная секунда приведёт к
+автоматическому повтору последней секунды дня в системном времени. Другие
+корректировки не требуются.
+
+Если вышестоящие серверы NTP не обрабатывают високосные секунды корректно,
+man:ntpd[8] изменит время на одну секунду после того, как ошибочный
+вышестоящий сервер заметит это и изменит своё время.
+
+Если NTP не используется, после високосной секунды потребуется ручная
+корректировка системных часов.
+
+[[leapseconds-cautions]]
+== Предупреждения
+
+Високосные секунды добавляются одновременно по всему миру: в полночь по
+UTC. В Японии это середина утра, в Тихоокеанском регионе — середина дня, в
+Америке — поздний вечер, а в Европе — ночь.
+
+Мы полагаем и ожидаем, что FreeBSD, при условии предоставления корректного и
+стабильного сервиса NTP, будет работать как задумано во время этой секунды
+координации, как это происходило во время предыдущих.
+
+Однако мы предупреждаем, что практически ни одно приложение никогда не
+запрашивало у ядра информацию о високосных секундах. Наш опыт показывает,
+что, как и задумано, високосные секунды по сути являются повторением
+секунды, предшествующей високосной, и это становится неожиданностью для
+большинства программистов.
+
+Другие операционные системы и компьютеры могут обрабатывать високосную
+секунду иначе, чем FreeBSD, а системы без корректной и стабильной службы NTP
+вообще не будут знать о високосных секундах.
+
+Нередко компьютеры выходят из строя из-за високосных секунд, и опыт показал,
+что значительная часть всех публичных NTP-серверов может обрабатывать и
+объявлять високосную секунду неправильно.
+
+Пожалуйста, постарайтесь убедиться, что из-за секунды координации не
+произойдет ничего ужасного.
+
+[[leapseconds-testing]]
+== Тестирование
+
+Возможно проверить, будет ли использована секунда координации. Из-за
+особенностей NTP, проверка может работать до 24 часов до введения секунды
+координации. Некоторые крупные источники эталонных часов объявляют о
+секундах координации всего за час до события. Запрос к демону NTP:
+
+[source, shell]
+....
+% ntpq -c 'rv 0 leap'
+....
+
+Вывод, включающий `leap_add_sec`, указывает на корректную поддержку секунды
+координации. До 24 часов перед наступлением секунды координации или после её
+прохождения будет отображаться `leap_none`.
+
+[[leapseconds-conclusion]]
+== Заключение
+
+На практике секунды координации обычно не представляют проблемы в
+FreeBSD. Мы надеемся, что этот обзор поможет прояснить, чего ожидать и как
+сделать обработку секунды координации более гладкой.
diff --git a/documentation/content/ru/articles/leap-seconds/_index.po b/documentation/content/ru/articles/leap-seconds/_index.po
new file mode 100644
index 0000000000..8a1952b384
--- /dev/null
+++ b/documentation/content/ru/articles/leap-seconds/_index.po
@@ -0,0 +1,256 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 22:32+0300\n"
+"PO-Revision-Date: 2025-09-16 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesleap-seconds_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Краткое описание обработки високосных секунд (секунд координации) в 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 ""
+"_Секунда координации_ (високосная секунда) — это односекундная "
+"корректировка, вносимая в определённые моменты года в 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-Jun-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://www.iers.org/IERS/EN/Home/"
+"home_node.html[IERS] в https://datacenter.iers.org/data/latestVersion/"
+"16_BULLETIN_C16.txt[Бюллетене 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 ""
+"Стандартное поведение високосной секунды описано в 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 ""
+"Самый простой способ обработки високосных секунд — использование правил "
+"времени POSIX, которые FreeBSD использует по умолчанию, в сочетании с extref:"
+"{handbook}[NTP, network-ntp]. Когда man:ntpd[8] работает и время "
+"синхронизировано с вышестоящими серверами NTP, которые корректно "
+"обрабатывают високосные секунды, високосная секунда приведёт к "
+"автоматическому повтору последней секунды дня в системном времени. Другие "
+"корректировки не требуются."
+
+#. 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] изменит время на одну секунду после того, как ошибочный "
+"вышестоящий сервер заметит это и изменит своё время."
+
+#. 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 ""
+"Мы полагаем и ожидаем, что FreeBSD, при условии предоставления корректного и "
+"стабильного сервиса NTP, будет работать как задумано во время этой секунды "
+"координации, как это происходило во время предыдущих."
+
+#. 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 часов до введения секунды "
+"координации. Некоторые крупные источники эталонных часов объявляют о "
+"секундах координации всего за час до события. Запрос к демону 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/ru/articles/license-guide/_index.adoc b/documentation/content/ru/articles/license-guide/_index.adoc
new file mode 100644
index 0000000000..d36b20a8db
--- /dev/null
+++ b/documentation/content/ru/articles/license-guide/_index.adoc
@@ -0,0 +1,480 @@
+---
+authors:
+ -
+ author: 'Warner Losh'
+ email: imp@FreeBSD.org
+title: 'Политика лицензирования FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Политики лицензирования 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]]
+== Предпочтительная лицензия для новых файлов
+
+Оставшаяся часть этого раздела предназначена для того, чтобы помочь вам
+разобраться. Как правило, если сомневаетесь, спрашивайте. Получить совет
+гораздо проще, чем исправлять дерево исходного кода. Проект FreeBSD
+использует как явные лицензии (где дословный текст лицензии воспроизводится
+в каждом файле), так и отделённые лицензии (где тег в файле указывает
+лицензию, как описано в этом документе).
+
+Проект FreeBSD использует следующий текст в качестве предпочтительной
+лицензии:
+
+[.programlisting]
+....
+/*
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+
+Проект FreeBSD не разрешает использование «рекламного условия»footnote:[прим
+перев: требование указания первоначального автора при всех изменениях кода]
+в новом коде. Из-за большого числа участников проекта FreeBSD соблюдение
+этого условия стало затруднительным для многих коммерческих
+поставщиков. Если у вас есть код в дереве с рекламным условием, пожалуйста,
+рассмотрите возможность перехода на лицензию без него. Новые вклады в
+FreeBSD должны использовать лицензию BSD-2-Clause.
+
+Проект FreeBSD не поощряет полностью новые лицензии и вариации стандартных
+лицензий. Новые лицензии требуют одобрения {core-email} для размещения в
+основном репозитории. В прошлом нестандартные лицензии вызывали больше
+проблем, чем стандартные. Плохая проработка нестандартных лицензий часто
+приводит к непредвиденным последствиям, поэтому они вряд ли будут одобрены
+{core-email}. Проект FreeBSD стандартизируется на лицензии BSD-2-Clause, как
+опубликовано SPDX.
+
+В дополнение, политика проекта требует, чтобы код, лицензированный под
+некоторыми не-BSD лицензиями, размещался в определённых разделах
+репозитория. Для некоторых лицензий компиляция должна быть условной или
+отключена по умолчанию. Например, код в статической части ядра GENERIC
+должен быть лицензирован под BSD или аналогичными лицензиями. Программное
+обеспечение под лицензиями GPL, APSL, CDDL и т.п. не должно компилироваться
+в статическое ядро GENERIC. Однако код с такими лицензиями может
+использоваться в предварительно скомпилированных модулях.
+
+Разработчикам напоминают, что в открытом исходном коде правильное понимание
+«открытости» так же важно, как и правильное понимание «исходного
+кода». Неправильное обращение с интеллектуальной собственностью имеет
+серьёзные последствия. Любые вопросы или опасения следует немедленно
+направлять по адресу {core-email}.
+
+[[license-policy]]
+== Политика лицензирования программного обеспечения
+
+В следующих разделах подробно изложены политики лицензирования программного
+обеспечения проекта. В основном мы ожидаем, что разработчики прочитают,
+поймут и будут использовать разделы выше, чтобы применять соответствующие
+лицензии к своим вкладам. Остальная часть этого документа подробно описывает
+философскую основу политик, а также сами политики. Как всегда, если текст
+ниже вызывает затруднения или вам нужна помощь в применении этих политик,
+пожалуйста, обратитесь к {core-email}.
+
+=== Руководящие принципы
+
+Проект FreeBSD ставит своей целью создание полноценной операционной системы
+под лицензией BSD, позволяющей пользователям системы создавать производные
+продукты без ограничений или дополнительных лицензионных обязательств. Мы
+приветствуем и высоко ценим вклад в виде изменений и дополнений под
+лицензией BSD с двумя пунктами, а также призываем другие проекты с открытым
+исходным кодом принимать эту лицензию. Использование лицензии BSD является
+ключевым для поощрения внедрения передовых технологий операционных систем и
+во многих значимых случаях играло решающую роль в широком распространении
+новых технологий.
+
+Мы, однако, признаем, что существуют веские причины для включения в исходное
+дерево FreeBSD программного обеспечения с другими лицензиями.
+
+Мы требуем, чтобы программное обеспечение, лицензированное под некоторыми
+не-BSD лицензиями, было тщательно изолировано в дереве исходного кода, чтобы
+оно не могло загрязнять компоненты, доступные только под BSD. Такое
+осторожное управление способствует ясности лицензирования и облегчает
+создание производных продуктов, доступных только под BSD.
+
+Если не сделано специального исключения, существующие компоненты с лицензией
+BSD не могут быть заменены на программное обеспечение с более
+ограничительной лицензией. Мы призываем разработчиков FreeBSD и сторонних
+разработчиков стремиться к перелицензированию, двойному лицензированию или
+перереализации критических компонентов под лицензией BSD. Это облегчит их
+более полную интеграцию в операционную систему FreeBSD.
+
+=== Политика
+
+* Импорт нового программного обеспечения, лицензированного под любыми
+ лицензиями, кроме лицензии BSD и подобных лицензий BSD (как определено
+ ниже), требует предварительного одобрения от FreeBSD Core Team. Запросы на
+ импорт должны включать:
+** Список новых возможностей или исправлений ошибок, которые содержит новая
+ версия или патчи, вместе с доказательствами того, что эти возможности нужны
+ нашим пользователям. Идеальными формами доказательств являются PR (запросы
+ на включение изменений) или ссылки на обсуждения в почтовых рассылках.
+** Этот процесс должен использоваться для всех импортов программного
+ обеспечения, а не только для тех, которые требуют проверки Core Team. Сам
+ факт существования новой версии не является оправданием для импорта
+ программного обеспечения в исходные коды или порты.
+** Список ветвей FreeBSD, которые могут быть затронуты. Расширение области
+ применения требует нового запроса и одобрения от основной команды FreeBSD.
+
+* Лицензия Apache 2.0 допустима для использования в некоторых
+ случаях. Основная команда должна одобрить импорт новых компонентов,
+ лицензированных по лицензии Apache, или изменение лицензии существующих
+ компонентов на лицензию Apache.
+** Данная лицензия одобрена для следующих компонентов:
+*** Инструментарий LLVM и (с исключениями LLVM) компоненты времени выполнения.
+
+* Лицензия BSD+Patent License допустима для использования в некоторых
+ случаях. Основная команда (Core Team) должна одобрить импорт новых
+ компонентов, лицензированных по BSD+Patent License, или изменение лицензии
+ существующих компонентов на BSD+Patent License.
+** Данная лицензия одобрена для следующих компонентов:
+*** Код, основанный на EDK2, связанный с функциональностью UEFI
+
+* Общая лицензия на разработку и распространение (CDDL) допустима для
+ использования в некоторых случаях. Основная команда должна одобрить импорт
+ новых компонентов с лицензией CDDL или изменение лицензии существующих
+ компонентов на CDDL.
+** Данная лицензия одобрена для следующих компонентов:
+*** DTrace
+*** Файловая система ZFS, включая поддержку в ядре и пользовательские утилиты
+
+* Исторически фраза "All Rights Reserved." включалась во все уведомления об
+ авторских правах. Все релизы BSD содержали её, чтобы соответствовать
+ требованиям
+ https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Буэнос-Айресской
+ конвенции 1910 года] в Америке. После ратификации
+ https://en.wikipedia.org/wiki/Berne_Convention[Бернской конвенции] в 2000
+ году Никарагуа, Буэнос-Айресская конвенция — и эта фраза — устарели. В связи
+ с этим проект FreeBSD рекомендует опускать эту фразу в новом коде и
+ призывает текущих правообладателей удалить её. В 2018 году проект обновил
+ свои шаблоны, убрав её.
+* Изначально многие элементы в дереве FreeBSD были помечены лицензией
+ BSD-2-Clause-FreeBSD. Однако SPDX объявил эту лицензию устаревшей как
+ вариант, и текст устаревшего тега в SPDX отличается от стандартной лицензии
+ FreeBSD настолько, что его не следует использовать. Проводится проверка его
+ текущего использования.
+
+==== Допустимые лицензии
+
+Следующие лицензии считаются допустимыми лицензиями в стиле BSD для целей
+данной Политики. Отклонения или использование любых других лицензий должны
+быть согласованы с основной командой (Core Team) FreeBSD:
+
+* Версия лицензии BSD с 2 пунктами
+
+[.programlisting]
+....
+/*
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+* Версия лицензии BSD с 3 пунктами
+
+[.programlisting]
+....
+/*
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+....
+* Лицензия ISC
+
+[.programlisting]
+....
+/*
+ * Copyright (c) [year] [copyright holder]
+ *
+ * SPDX-License-Identifier: ISC
+ */
+....
+* Лицензия MIT
+
+[.programlisting]
+....
+/*
+ * Copyright (c) [year] [copyright holders]
+ *
+ * SPDX-License-Identifier: MIT
+ */
+....
+== Лицензия набора программного обеспечения (Software Collection License)
+
+Проект FreeBSD лицензирует свою подборку программного обеспечения, как
+описано в [.filename]#COPYRIGHT#, по лицензии BSD-2-Clause. Данная лицензия
+не заменяет лицензии отдельных файлов, которые описаны ниже. Файлы, не
+имеющие явной лицензии, распространяются по лицензии BSD-2-Clause.
+
+== Расположение файла лицензии
+
+Для соответствия стандарту https://reuse.software/[REUSE Software] насколько
+это возможно, все файлы лицензий будут храниться в каталоге
+[.filename]#LICENSES/# репозитория. В этом корневом каталоге есть три
+подкаталога. Подкаталог [.filename]#LICENSES/text/# содержит в отдельном
+виде тексты всех лицензий, разрешённых в комплекте программного обеспечения
+FreeBSD. Эти файлы сохраняются с использованием идентификатора
+SPDX-License-Identifier с добавлением .txt. Подкаталог
+[.filename]#LICENSES/exceptions/# содержит тексты всех исключений,
+разрешённых в отдельном виде в комплекте программного обеспечения
+FreeBSD. Эти файлы сохраняются с использованием идентификатора исключения с
+добавлением .txt. Подкаталог [.filename]#LICENSES/other/# содержит в
+отдельном виде файлы лицензий, упомянутые в выражениях
+SPDX-License-Identifier, но не разрешённые в качестве отдельных
+лицензий. Все такие файлы должны присутствовать в комплекте программного
+обеспечения FreeBSD хотя бы один раз и должны быть удалены, когда удаляется
+последний файл, ссылающийся на них. Лицензии, для которых нет подходящего
+соответствия в SPDX, должны находиться в [.filename]#LICENSES/other/# и
+иметь имя файла, начинающееся с LicenseRef-, за которым следует уникальная
+строка идентификатора. В настоящее время такие файлы не выявлены, но если
+они появятся, их полный список будет приведён здесь.
+
+Проект FreeBSD в настоящее время не использует файлы `DEP5`, описанные в
+стандарте `REUSE Software`. Проект FreeBSD ещё не пометил все файлы в дереве
+в соответствии с этим стандартом, как описано далее в этом документе. Проект
+FreeBSD пока не включил эти файлы в свои репозитории, поскольку данная
+политика ещё находится в процессе разработки.
+
+[[individual-files]]
+== Лицензии индивидуальных файлов
+
+Каждый отдельный файл в комплекте программного обеспечения FreeBSD имеет
+собственное авторское право и лицензию. Способ их обозначения варьируется и
+описан в этом разделе.
+
+Уведомление об авторских правах указывает, кто заявляет о законных авторских
+правах на файл. Они предоставляются проектом по принципу наилучших
+усилий. Поскольку авторские права могут быть юридически переданы, текущий
+правообладатель может отличаться от указанного в файле.
+
+Лицензия — это юридический документ между автором и пользователями
+программного обеспечения, который предоставляет разрешение на использование
+защищённых авторским правом частей программного обеспечения на определённых
+условиях, изложенных в лицензии. В коллекции программного обеспечения
+FreeBSD лицензии могут быть выражены одним из двух способов. Лицензии могут
+быть явно указаны в файле. Когда лицензионное разрешение явно указано в
+файле, этот файл может использоваться, копироваться и изменяться в
+соответствии с данной лицензией. Лицензии также могут быть выражены
+косвенно, когда текст лицензии находится в другом месте. Для этой цели
+проект использует идентификаторы лицензий Software Package Data Exchange
+(SPDX), как описано в следующих подразделах. Идентификаторы лицензий SPDX
+управляются рабочей группой SPDX в Linux Foundation и были согласованы
+партнёрами по отрасли, поставщиками инструментов и юридическими
+командами. Для получения дополнительной информации см. https://spdx.org/ и
+следующие разделы о том, как проект FreeBSD их использует.
+
+Сущности, которые вносят исправления и улучшения в комплект программного
+обеспечения без явного лицензирования, соглашаются лицензировать эти
+изменения на условиях, применимых к изменённым файлам. Политика проекта, в
+соответствии с отраслевой практикой, включает уведомление об авторских
+правах только от значительных участников для файлов в коллекции.
+
+В комплекте программного обеспечения FreeBSD существует четыре типа файлов:
+
+. Файлы, содержащие только явное уведомление об авторских правах и лицензию.
+. Файлы, содержащие как явное уведомление об авторских правах и лицензии, так
+ и тег SPDX-License-Identifier.
+. Файлы, содержащие только уведомление об авторских правах и тег
+ SPDX-License-Identifier, но без явного указания лицензии.
+. Файлы, в которых отсутствует какое-либо указание на авторские права или
+ лицензию.
+
+=== Только авторские права и лицензия
+
+Многие файлы в коллекции программного обеспечения FreeBSD содержат как
+уведомление об авторских правах, так и явную лицензию в самом файле. В таких
+случаях применяется лицензия, указанная в файле.
+
+=== Авторские права и лицензия с выражением SPDX-License-Identifier
+
+Некоторые файлы в коллекции программного обеспечения FreeBSD содержат
+заявление об авторских правах, тег SPDX-License-Identifier и явную
+лицензию. Явная лицензия имеет приоритет над тегом
+SPDX-License-Identifier. Тег SPDX-License-Identifier представляет собой
+наилучшую попытку проекта охарактеризовать лицензию, но является лишь
+информационным полем для автоматизированных
+инструментов. См. crossref:license-guide[expressions,Выражения
+SPDX-License-Identifier] для интерпретации выражения.
+
+=== Только уведомление об авторских правах и выражение SPDX-License-Identifier.
+
+Некоторые файлы в дереве содержат отдельные лицензии. Эти файлы содержат
+только уведомление об авторских правах и выражение SPDX-License-Identifier,
+но не содержат явной лицензии. См. crossref:license-guide[expressions,
+Выражения SPDX-License-Identifier] для интерпретации выражения. Примечание:
+выражения, разрешенные для отдельных лицензий проектом, являются
+подмножеством выражений, используемых в информационных целях или
+определенных стандартом.
+
+Лицензия для файлов, содержащих только SPDX-License-Identifier, должна
+толковаться как
+
+. Начните лицензию с уведомления об авторских правах из файла. Включите всех
+ правообладателей.
+. Для каждого подвыражения скопируйте текст лицензии из
+ [.filename]#LICENSE/text/`id`.txt#. Если присутствуют исключения, добавьте
+ их из [.filename]#src/share/license/exceptions/`id`.txt#. Выражения
+ SPDX-License-Identifier должны интерпретироваться в соответствии со
+ стандартом SPDX.
+
+Где `id` — это короткий идентификатор лицензии SPDX из столбца `Identifier`
+на страницах https://spdx.org/licenses/[Идентификаторы SPDX] или
+https://spdx.org/licenses/exceptions-index.html[исключения лицензий]. Если в
+каталоге [.filename]#LICENSE/# нет файла, то такая лицензия или исключение
+не могут быть указаны как отдельная лицензия в этом разделе.
+
+При чтении текста лицензии, отделенного от файла, необходимо учитывать ряд
+аспектов, чтобы отделенная лицензия имела смысл.
+
+. Любая ссылка на уведомление об авторских правах должна относиться к
+ уведомлению, составленному из лицензированного файла, а не из любого
+ уведомления об авторских правах в самом тексте файла лицензии. Многие файлы
+ SPDX содержат примеры уведомлений об авторских правах, которые понимаются
+ исключительно как образцы.
+. Когда в тексте лицензии упоминаются названия организаций, они должны
+ интерпретироваться как относящиеся к списку всех правообладателей, указанных
+ в уведомлениях об авторских правах лицензированного файла. Например,
+ лицензия BSD-4-clause содержит фразу "Этот продукт включает программное
+ обеспечение, разработанное организацией". Фраза 'организацией' должна быть
+ заменена на правообладателей.
+. Когда SPDX предлагает варианты лицензии, подразумевается, что лицензия в
+ файле [.filename]#LICENSE/# представляет точную версию выбранной
+ лицензии. Стандарт SPDX существует для сопоставления семейств лицензий, и
+ эти варианты помогают сопоставлять похожие лицензии, которые организация
+ SPDX считает юридически идентичными.
+
+Для лицензий с небольшими вариациями в тексте SPDX предоставляет
+рекомендации по их сопоставлению. Эти рекомендации здесь не
+актуальны. Участники, желающие использовать вариант лицензии SPDX, который
+не содержится дословно в [.filename]#LICENSE/#, не могут использовать
+отдельный вариант и должны явно указать лицензию.
+
+=== Файлы без указания авторских прав или любой лицензионной отметки
+
+Некоторые файлы не могут содержать подходящих комментариев. В таких случаях
+лицензия может быть найдена в [.filename]#file.ext.license#. Например, файл
+с именем [.filename]#foo.jpg# может иметь лицензию в
+[.filename]#foo.jpg.license#, следуя соглашениям REUSE Software.
+
+Файлы, созданные проектом, в которых отсутствует уведомление об авторских
+правах, считаются подпадающими под общие положения об авторских правах и
+лицензировании в файле [.filename]#COPYRIGHT#. Это означает, что либо файл
+представляет собой простое изложение фактов, не охраняемых законом об
+авторских правах, либо его содержание настолько тривиально, что не требует
+оформления явной лицензии.
+
+Файлы, которые не имеют маркировки и содержат значительное количество
+материала, защищенного авторским правом, или которые автор считает
+неправильно промаркированными, должны быть доведены до сведения основной
+команды (Core Team) FreeBSD. Проект FreeBSD строго придерживается политики
+соблюдения всех соответствующих лицензий.
+
+В будущем все подобные файлы будут явно помечены или следовать соглашению
+REUSE Software о файлах с расширением [.filename]#.license#.
+
+[[expressions]]
+=== Выражения SPDX-License-Identifier
+
+'SPDX License expression' используется в двух контекстах в коллекции
+программного обеспечения FreeBSD. Во-первых, его полная форма применяется
+для файлов, которые содержат явные заявления о лицензии внутри файла, а
+также обобщающее выражение SPDX-License-Identifier. В этом контексте может
+быть использована вся мощь этих выражений. Во-вторых, в ограниченной форме,
+описанной выше, оно используется для обозначения фактической лицензии для
+данного файла. Во втором контексте проектом разрешено только подмножество
+этого выражения.
+
+`Лицензионные под-выражения SPDX` — это либо короткий идентификатор лицензии
+из https://spdx.org/licenses/[Список лицензий SPDX], либо комбинация двух
+таких идентификаторов, разделённых "WITH", если применяется
+https://spdx.org/licenses/exceptions-index.html[исключение из
+лицензии]. Если применяются несколько лицензий, выражение состоит из
+подвыражений, разделённых ключевыми словами "AND", "OR" и окружённых
+символами "(", ")". Полное описание выражений доступно в
+https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[спецификации]
+и имеет приоритет в случае противоречий с упрощённым изложением этого
+раздела.
+
+Некоторые идентификаторы лицензий, такие как [L]GPL, предоставляют
+возможность использовать только указанную версию или любую более позднюю
+версию. SPDX определяет суффикс `-or-later` для обозначения этой версии
+лицензии или более поздней версии. Суффикс `-only` означает только указанную
+версию файла. Существует старая конвенция, согласно которой отсутствие
+суффикса (что означает то же, что и новый суффикс '-only', но люди путают
+это с `-or-later`). Кроме того, добавление суффикса `+` подразумевало
+значение `-or-later`. В новых файлах FreeBSD не следует использовать эти две
+конвенции. Старые файлы, использующие эту конвенцию, следует преобразовать
+соответствующим образом.
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0-only
+ // SPDX-License-Identifier: LGPL-2.1-or-later
+....
+
+`WITH` следует использовать, когда требуется модификатор лицензии. В проекте
+FreeBSD ряд файлов из LLVM имеют исключение из лицензии Apache 2.0:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+....
+
+https://spdx.org/licenses/exceptions-index.html[Теги исключений] управляются
+SPDX. Исключения лицензий могут применяться только к определённым лицензиям,
+как указано в исключении.
+
+`OR` следует использовать, если файл предлагает выбор лицензии и одна
+лицензия выбрана. Например, некоторые файлы `dtsi` доступны под двойными
+лицензиями:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+....
+
+`AND` следует использовать, если файл имеет несколько лицензий, условия
+которых применяются к использованию файла. Например, если код был
+заимствован из нескольких проектов, каждый со своей собственной лицензией:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: BSD-2-Clause AND MIT
+....
diff --git a/documentation/content/ru/articles/license-guide/_index.po b/documentation/content/ru/articles/license-guide/_index.po
new file mode 100644
index 0000000000..46d19f93b4
--- /dev/null
+++ b/documentation/content/ru/articles/license-guide/_index.po
@@ -0,0 +1,1068 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 18:52+0300\n"
+"PO-Revision-Date: 2025-08-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articleslicense-guide_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/articles/license-guide/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Licensing Policy"
+msgstr "Политика лицензирования FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/license-guide/_index.adoc:9
+#, no-wrap
+msgid "FreeBSD License Policies"
+msgstr "Политики лицензирования 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 "Предпочтительная лицензия для новых файлов"
+
+#. 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 ""
+"Оставшаяся часть этого раздела предназначена для того, чтобы помочь вам "
+"разобраться. Как правило, если сомневаетесь, спрашивайте. Получить совет "
+"гораздо проще, чем исправлять дерево исходного кода. Проект FreeBSD "
+"использует как явные лицензии (где дословный текст лицензии воспроизводится "
+"в каждом файле), так и отделённые лицензии (где тег в файле указывает "
+"лицензию, как описано в этом документе)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:54
+msgid "The FreeBSD Project uses this text as the preferred license:"
+msgstr ""
+"Проект FreeBSD использует следующий текст в качестве предпочтительной "
+"лицензии:"
+
+#. 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 ""
+"Проект FreeBSD не разрешает использование «рекламного условия»footnote:[прим "
+"перев: требование указания первоначального автора при всех изменениях кода] "
+"в новом коде. Из-за большого числа участников проекта FreeBSD соблюдение "
+"этого условия стало затруднительным для многих коммерческих поставщиков. "
+"Если у вас есть код в дереве с рекламным условием, пожалуйста, рассмотрите "
+"возможность перехода на лицензию без него. Новые вклады в FreeBSD должны "
+"использовать лицензию 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 ""
+"Проект FreeBSD не поощряет полностью новые лицензии и вариации стандартных "
+"лицензий. Новые лицензии требуют одобрения {core-email} для размещения в "
+"основном репозитории. В прошлом нестандартные лицензии вызывали больше "
+"проблем, чем стандартные. Плохая проработка нестандартных лицензий часто "
+"приводит к непредвиденным последствиям, поэтому они вряд ли будут одобрены "
+"{core-email}. Проект FreeBSD стандартизируется на лицензии BSD-2-Clause, как "
+"опубликовано 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 ""
+"В дополнение, политика проекта требует, чтобы код, лицензированный под "
+"некоторыми не-BSD лицензиями, размещался в определённых разделах "
+"репозитория. Для некоторых лицензий компиляция должна быть условной или "
+"отключена по умолчанию. Например, код в статической части ядра GENERIC "
+"должен быть лицензирован под BSD или аналогичными лицензиями. Программное "
+"обеспечение под лицензиями GPL, APSL, CDDL и т.п. не должно компилироваться "
+"в статическое ядро GENERIC. Однако код с такими лицензиями может "
+"использоваться в предварительно скомпилированных модулях."
+
+#. 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 ""
+"Разработчикам напоминают, что в открытом исходном коде правильное понимание "
+"«открытости» так же важно, как и правильное понимание «исходного кода». "
+"Неправильное обращение с интеллектуальной собственностью имеет серьёзные "
+"последствия. Любые вопросы или опасения следует немедленно направлять по "
+"адресу {core-email}."
+
+#. 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 ""
+"В следующих разделах подробно изложены политики лицензирования программного "
+"обеспечения проекта. В основном мы ожидаем, что разработчики прочитают, "
+"поймут и будут использовать разделы выше, чтобы применять соответствующие "
+"лицензии к своим вкладам. Остальная часть этого документа подробно описывает "
+"философскую основу политик, а также сами политики. Как всегда, если текст "
+"ниже вызывает затруднения или вам нужна помощь в применении этих политик, "
+"пожалуйста, обратитесь к {core-email}."
+
+#. 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 ""
+"Проект FreeBSD ставит своей целью создание полноценной операционной системы "
+"под лицензией BSD, позволяющей пользователям системы создавать производные "
+"продукты без ограничений или дополнительных лицензионных обязательств. Мы "
+"приветствуем и высоко ценим вклад в виде изменений и дополнений под "
+"лицензией BSD с двумя пунктами, а также призываем другие проекты с открытым "
+"исходным кодом принимать эту лицензию. Использование лицензии BSD является "
+"ключевым для поощрения внедрения передовых технологий операционных систем и "
+"во многих значимых случаях играло решающую роль в широком распространении "
+"новых технологий."
+
+#. 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 ""
+"Мы, однако, признаем, что существуют веские причины для включения в исходное "
+"дерево FreeBSD программного обеспечения с другими лицензиями."
+
+#. 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 ""
+"Мы требуем, чтобы программное обеспечение, лицензированное под некоторыми не-"
+"BSD лицензиями, было тщательно изолировано в дереве исходного кода, чтобы "
+"оно не могло загрязнять компоненты, доступные только под BSD. Такое "
+"осторожное управление способствует ясности лицензирования и облегчает "
+"создание производных продуктов, доступных только под 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 ""
+"Если не сделано специального исключения, существующие компоненты с лицензией "
+"BSD не могут быть заменены на программное обеспечение с более "
+"ограничительной лицензией. Мы призываем разработчиков FreeBSD и сторонних "
+"разработчиков стремиться к перелицензированию, двойному лицензированию или "
+"перереализации критических компонентов под лицензией BSD. Это облегчит их "
+"более полную интеграцию в операционную систему FreeBSD."
+
+#. 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 ""
+"Импорт нового программного обеспечения, лицензированного под любыми "
+"лицензиями, кроме лицензии BSD и подобных лицензий BSD (как определено "
+"ниже), требует предварительного одобрения от FreeBSD Core Team. Запросы на "
+"импорт должны включать:"
+
+#. 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 ""
+"Список новых возможностей или исправлений ошибок, которые содержит новая "
+"версия или патчи, вместе с доказательствами того, что эти возможности нужны "
+"нашим пользователям. Идеальными формами доказательств являются PR (запросы "
+"на включение изменений) или ссылки на обсуждения в почтовых рассылках."
+
+#. 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 ""
+"Этот процесс должен использоваться для всех импортов программного "
+"обеспечения, а не только для тех, которые требуют проверки Core Team. Сам "
+"факт существования новой версии не является оправданием для импорта "
+"программного обеспечения в исходные коды или порты."
+
+#. 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 ""
+"Список ветвей FreeBSD, которые могут быть затронуты. Расширение области "
+"применения требует нового запроса и одобрения от основной команды 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 ""
+"Лицензия Apache 2.0 допустима для использования в некоторых случаях. "
+"Основная команда должна одобрить импорт новых компонентов, лицензированных "
+"по лицензии Apache, или изменение лицензии существующих компонентов на "
+"лицензию 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 "Данная лицензия одобрена для следующих компонентов:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:123
+msgid "LLVM toolchain and (with LLVM Exceptions) runtime components."
+msgstr ""
+"Инструментарий LLVM и (с исключениями LLVM) компоненты времени выполнения."
+
+#. 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 ""
+"Лицензия BSD+Patent License допустима для использования в некоторых случаях. "
+"Основная команда (Core Team) должна одобрить импорт новых компонентов, "
+"лицензированных по BSD+Patent License, или изменение лицензии существующих "
+"компонентов на BSD+Patent License."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:128
+msgid "EDK2 derived code related to UEFI functionality"
+msgstr "Код, основанный на EDK2, связанный с функциональностью 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 ""
+"Общая лицензия на разработку и распространение (CDDL) допустима для "
+"использования в некоторых случаях. Основная команда должна одобрить импорт "
+"новых компонентов с лицензией CDDL или изменение лицензии существующих "
+"компонентов на CDDL."
+
+#. 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 ""
+"Файловая система ZFS, включая поддержку в ядре и пользовательские утилиты"
+
+#. 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 ""
+"Исторически фраза \"All Rights Reserved.\" включалась во все уведомления об "
+"авторских правах. Все релизы BSD содержали её, чтобы соответствовать "
+"требованиям https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Буэнос-"
+"Айресской конвенции 1910 года] в Америке. После ратификации https://"
+"en.wikipedia.org/wiki/Berne_Convention[Бернской конвенции] в 2000 году "
+"Никарагуа, Буэнос-Айресская конвенция — и эта фраза — устарели. В связи с "
+"этим проект FreeBSD рекомендует опускать эту фразу в новом коде и призывает "
+"текущих правообладателей удалить её. В 2018 году проект обновил свои "
+"шаблоны, убрав её."
+
+#. 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 ""
+"Изначально многие элементы в дереве FreeBSD были помечены лицензией BSD-2-"
+"Clause-FreeBSD. Однако SPDX объявил эту лицензию устаревшей как вариант, и "
+"текст устаревшего тега в SPDX отличается от стандартной лицензии FreeBSD "
+"настолько, что его не следует использовать. Проводится проверка его текущего "
+"использования."
+
+#. 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 ""
+"Следующие лицензии считаются допустимыми лицензиями в стиле BSD для целей "
+"данной Политики. Отклонения или использование любых других лицензий должны "
+"быть согласованы с основной командой (Core Team) FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:150
+msgid "The 2 clause version of the BSD license"
+msgstr "Версия лицензии BSD с 2 пунктами"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:160
+msgid "The 3 clause version of the BSD license"
+msgstr "Версия лицензии BSD с 3 пунктами"
+
+#. 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 "Лицензия 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 "Лицензия 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 "Лицензия набора программного обеспечения (Software Collection License)"
+
+#. 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 ""
+"Проект FreeBSD лицензирует свою подборку программного обеспечения, как "
+"описано в [.filename]#COPYRIGHT#, по лицензии BSD-2-Clause. Данная лицензия "
+"не заменяет лицензии отдельных файлов, которые описаны ниже. Файлы, не "
+"имеющие явной лицензии, распространяются по лицензии BSD-2-Clause."
+
+#. 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 ""
+"Для соответствия стандарту https://reuse.software/[REUSE Software] насколько "
+"это возможно, все файлы лицензий будут храниться в каталоге "
+"[.filename]#LICENSES/# репозитория. В этом корневом каталоге есть три "
+"подкаталога. Подкаталог [.filename]#LICENSES/text/# содержит в отдельном "
+"виде тексты всех лицензий, разрешённых в комплекте программного обеспечения "
+"FreeBSD. Эти файлы сохраняются с использованием идентификатора SPDX-License-"
+"Identifier с добавлением .txt. Подкаталог [.filename]#LICENSES/exceptions/# "
+"содержит тексты всех исключений, разрешённых в отдельном виде в комплекте "
+"программного обеспечения FreeBSD. Эти файлы сохраняются с использованием "
+"идентификатора исключения с добавлением .txt. Подкаталог "
+"[.filename]#LICENSES/other/# содержит в отдельном виде файлы лицензий, "
+"упомянутые в выражениях SPDX-License-Identifier, но не разрешённые в "
+"качестве отдельных лицензий. Все такие файлы должны присутствовать в "
+"комплекте программного обеспечения FreeBSD хотя бы один раз и должны быть "
+"удалены, когда удаляется последний файл, ссылающийся на них. Лицензии, для "
+"которых нет подходящего соответствия в SPDX, должны находиться в "
+"[.filename]#LICENSES/other/# и иметь имя файла, начинающееся с LicenseRef-, "
+"за которым следует уникальная строка идентификатора. В настоящее время такие "
+"файлы не выявлены, но если они появятся, их полный список будет приведён "
+"здесь."
+
+#. 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 ""
+"Проект FreeBSD в настоящее время не использует файлы `DEP5`, описанные в "
+"стандарте `REUSE Software`. Проект FreeBSD ещё не пометил все файлы в дереве "
+"в соответствии с этим стандартом, как описано далее в этом документе. Проект "
+"FreeBSD пока не включил эти файлы в свои репозитории, поскольку данная "
+"политика ещё находится в процессе разработки."
+
+#. 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 ""
+"Каждый отдельный файл в комплекте программного обеспечения FreeBSD имеет "
+"собственное авторское право и лицензию. Способ их обозначения варьируется и "
+"описан в этом разделе."
+
+#. 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 ""
+"Лицензия — это юридический документ между автором и пользователями "
+"программного обеспечения, который предоставляет разрешение на использование "
+"защищённых авторским правом частей программного обеспечения на определённых "
+"условиях, изложенных в лицензии. В коллекции программного обеспечения "
+"FreeBSD лицензии могут быть выражены одним из двух способов. Лицензии могут "
+"быть явно указаны в файле. Когда лицензионное разрешение явно указано в "
+"файле, этот файл может использоваться, копироваться и изменяться в "
+"соответствии с данной лицензией. Лицензии также могут быть выражены "
+"косвенно, когда текст лицензии находится в другом месте. Для этой цели "
+"проект использует идентификаторы лицензий Software Package Data Exchange "
+"(SPDX), как описано в следующих подразделах. Идентификаторы лицензий SPDX "
+"управляются рабочей группой SPDX в Linux Foundation и были согласованы "
+"партнёрами по отрасли, поставщиками инструментов и юридическими командами. "
+"Для получения дополнительной информации см. https://spdx.org/ и следующие "
+"разделы о том, как проект 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 ""
+"Сущности, которые вносят исправления и улучшения в комплект программного "
+"обеспечения без явного лицензирования, соглашаются лицензировать эти "
+"изменения на условиях, применимых к изменённым файлам. Политика проекта, в "
+"соответствии с отраслевой практикой, включает уведомление об авторских "
+"правах только от значительных участников для файлов в коллекции."
+
+#. 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 ""
+"В комплекте программного обеспечения 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 ""
+"Файлы, содержащие только явное уведомление об авторских правах и лицензию."
+
+#. 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 ""
+"Файлы, содержащие как явное уведомление об авторских правах и лицензии, так "
+"и тег 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 ""
+"Файлы, содержащие только уведомление об авторских правах и тег SPDX-License-"
+"Identifier, но без явного указания лицензии."
+
+#. 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 ""
+"Многие файлы в коллекции программного обеспечения FreeBSD содержат как "
+"уведомление об авторских правах, так и явную лицензию в самом файле. В таких "
+"случаях применяется лицензия, указанная в файле."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:246
+#, no-wrap
+msgid "Copyright and License with SPDX-License-Identifier expression"
+msgstr "Авторские права и лицензия с выражением 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 "
+"crossref:license-guide[expressions,SPDX-License-Identifier Expressions] for "
+"how to interpret the expression."
+msgstr ""
+"Некоторые файлы в коллекции программного обеспечения FreeBSD содержат "
+"заявление об авторских правах, тег SPDX-License-Identifier и явную лицензию. "
+"Явная лицензия имеет приоритет над тегом SPDX-License-Identifier. Тег SPDX-"
+"License-Identifier представляет собой наилучшую попытку проекта "
+"охарактеризовать лицензию, но является лишь информационным полем для "
+"автоматизированных инструментов. См. crossref:license-"
+"guide[expressions,Выражения SPDX-License-Identifier] для интерпретации "
+"выражения."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:253
+#, no-wrap
+msgid "Only Copyright and SPDX-License-Identifier expression."
+msgstr "Только уведомление об авторских правах и выражение 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 crossref:license-guide[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 ""
+"Некоторые файлы в дереве содержат отдельные лицензии. Эти файлы содержат "
+"только уведомление об авторских правах и выражение SPDX-License-Identifier, "
+"но не содержат явной лицензии. См. crossref:license-guide[expressions, "
+"Выражения SPDX-License-Identifier] для интерпретации выражения. Примечание: "
+"выражения, разрешенные для отдельных лицензий проектом, являются "
+"подмножеством выражений, используемых в информационных целях или "
+"определенных стандартом."
+
+#. 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 ""
+"Лицензия для файлов, содержащих только SPDX-License-Identifier, должна "
+"толковаться как"
+
+#. 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 ""
+"Для каждого подвыражения скопируйте текст лицензии из [.filename]#LICENSE/"
+"text/`id`.txt#. Если присутствуют исключения, добавьте их из [.filename]#src/"
+"share/license/exceptions/`id`.txt#. Выражения SPDX-License-Identifier должны "
+"интерпретироваться в соответствии со стандартом 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 ""
+"Где `id` — это короткий идентификатор лицензии SPDX из столбца `Identifier` "
+"на страницах https://spdx.org/licenses/[Идентификаторы SPDX] или https://"
+"spdx.org/licenses/exceptions-index.html[исключения лицензий]. Если в "
+"каталоге [.filename]#LICENSE/# нет файла, то такая лицензия или исключение "
+"не могут быть указаны как отдельная лицензия в этом разделе."
+
+#. 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 ""
+"Любая ссылка на уведомление об авторских правах должна относиться к "
+"уведомлению, составленному из лицензированного файла, а не из любого "
+"уведомления об авторских правах в самом тексте файла лицензии. Многие файлы "
+"SPDX содержат примеры уведомлений об авторских правах, которые понимаются "
+"исключительно как образцы."
+
+#. 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 ""
+"Когда в тексте лицензии упоминаются названия организаций, они должны "
+"интерпретироваться как относящиеся к списку всех правообладателей, указанных "
+"в уведомлениях об авторских правах лицензированного файла. Например, "
+"лицензия BSD-4-clause содержит фразу \"Этот продукт включает программное "
+"обеспечение, разработанное организацией\". Фраза 'организацией' должна быть "
+"заменена на правообладателей."
+
+#. 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 ""
+"Когда SPDX предлагает варианты лицензии, подразумевается, что лицензия в "
+"файле [.filename]#LICENSE/# представляет точную версию выбранной лицензии. "
+"Стандарт SPDX существует для сопоставления семейств лицензий, и эти варианты "
+"помогают сопоставлять похожие лицензии, которые организация SPDX считает "
+"юридически идентичными."
+
+#. 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 ""
+"Для лицензий с небольшими вариациями в тексте SPDX предоставляет "
+"рекомендации по их сопоставлению. Эти рекомендации здесь не актуальны. "
+"Участники, желающие использовать вариант лицензии SPDX, который не "
+"содержится дословно в [.filename]#LICENSE/#, не могут использовать отдельный "
+"вариант и должны явно указать лицензию."
+
+#. 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 ""
+"Некоторые файлы не могут содержать подходящих комментариев. В таких случаях "
+"лицензия может быть найдена в [.filename]#file.ext.license#. Например, файл "
+"с именем [.filename]#foo.jpg# может иметь лицензию в "
+"[.filename]#foo.jpg.license#, следуя соглашениям 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 ""
+"Файлы, созданные проектом, в которых отсутствует уведомление об авторских "
+"правах, считаются подпадающими под общие положения об авторских правах и "
+"лицензировании в файле [.filename]#COPYRIGHT#. Это означает, что либо файл "
+"представляет собой простое изложение фактов, не охраняемых законом об "
+"авторских правах, либо его содержание настолько тривиально, что не требует "
+"оформления явной лицензии."
+
+#. 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 ""
+"Файлы, которые не имеют маркировки и содержат значительное количество "
+"материала, защищенного авторским правом, или которые автор считает "
+"неправильно промаркированными, должны быть доведены до сведения основной "
+"команды (Core Team) FreeBSD. Проект FreeBSD строго придерживается политики "
+"соблюдения всех соответствующих лицензий."
+
+#. 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 ""
+"В будущем все подобные файлы будут явно помечены или следовать соглашению "
+"REUSE Software о файлах с расширением [.filename]#.license#."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:300
+#, no-wrap
+msgid "SPDX-License-Identifier Expressions"
+msgstr "Выражения 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 ""
+"'SPDX License expression' используется в двух контекстах в коллекции "
+"программного обеспечения FreeBSD. Во-первых, его полная форма применяется "
+"для файлов, которые содержат явные заявления о лицензии внутри файла, а "
+"также обобщающее выражение SPDX-License-Identifier. В этом контексте может "
+"быть использована вся мощь этих выражений. Во-вторых, в ограниченной форме, "
+"описанной выше, оно используется для обозначения фактической лицензии для "
+"данного файла. Во втором контексте проектом разрешено только подмножество "
+"этого выражения."
+
+#. 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 ""
+"`Лицензионные под-выражения SPDX` — это либо короткий идентификатор лицензии "
+"из https://spdx.org/licenses/[Список лицензий SPDX], либо комбинация двух "
+"таких идентификаторов, разделённых \"WITH\", если применяется https://"
+"spdx.org/licenses/exceptions-index.html[исключение из лицензии]. Если "
+"применяются несколько лицензий, выражение состоит из подвыражений, "
+"разделённых ключевыми словами \"AND\", \"OR\" и окружённых символами \"(\", "
+"\")\". Полное описание выражений доступно в https://spdx.github.io/spdx-spec/"
+"appendix-IV-SPDX-license-expressions/[спецификации] и имеет приоритет в "
+"случае противоречий с упрощённым изложением этого раздела."
+
+#. 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 ""
+"Некоторые идентификаторы лицензий, такие как [L]GPL, предоставляют "
+"возможность использовать только указанную версию или любую более позднюю "
+"версию. SPDX определяет суффикс `-or-later` для обозначения этой версии "
+"лицензии или более поздней версии. Суффикс `-only` означает только указанную "
+"версию файла. Существует старая конвенция, согласно которой отсутствие "
+"суффикса (что означает то же, что и новый суффикс '-only', но люди путают "
+"это с `-or-later`). Кроме того, добавление суффикса `+` подразумевало "
+"значение `-or-later`. В новых файлах FreeBSD не следует использовать эти две "
+"конвенции. Старые файлы, использующие эту конвенцию, следует преобразовать "
+"соответствующим образом."
+
+#. 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` следует использовать, когда требуется модификатор лицензии. В проекте "
+"FreeBSD ряд файлов из LLVM имеют исключение из лицензии 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 ""
+"https://spdx.org/licenses/exceptions-index.html[Теги исключений] управляются "
+"SPDX. Исключения лицензий могут применяться только к определённым лицензиям, "
+"как указано в исключении."
+
+#. 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` следует использовать, если файл предлагает выбор лицензии и одна "
+"лицензия выбрана. Например, некоторые файлы `dtsi` доступны под двойными "
+"лицензиями:"
+
+#. 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` следует использовать, если файл имеет несколько лицензий, условия "
+"которых применяются к использованию файла. Например, если код был "
+"заимствован из нескольких проектов, каждый со своей собственной лицензией:"
+
+#. 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/ru/articles/linux-users/_index.adoc b/documentation/content/ru/articles/linux-users/_index.adoc
new file mode 100644
index 0000000000..26b7765144
--- /dev/null
+++ b/documentation/content/ru/articles/linux-users/_index.adoc
@@ -0,0 +1,446 @@
+---
+authors:
+ -
+ author: 'John Ferrell'
+copyright: '2008 The FreeBSD Documentation Project'
+description: 'Этот документ предназначен для быстрого ознакомления с основами FreeBSD пользователей Linux® среднего и продвинутого уровня.'
+tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
+title: 'Быстрое руководство по FreeBSD для пользователей Linux®'
+trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
+---
+
+= Быстрое руководство по FreeBSD для пользователей Linux(R)
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/linux-users/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Этот документ предназначен для быстрого ознакомления с основами FreeBSD
+пользователей Linux(R) среднего и продвинутого уровня.
+
+'''
+
+toc::[]
+
+[[intro]]
+== Введение
+
+В этом документе освещаются некоторые технические различия между FreeBSD и
+Linux(R), чтобы пользователи Linux(R) среднего и продвинутого уровней могли
+быстро ознакомиться с основами FreeBSD.
+
+Этот документ предполагает, что FreeBSD уже установлена. Для получения
+помощи по процессу установки обратитесь к главе extref:{handbook}[Установка
+FreeBSD, bsdinstall] Руководства FreeBSD.
+
+[[shells]]
+== Стандартная оболочка
+
+Пользователи Linux(R) часто удивляются, обнаружив, что Bash не является
+оболочкой по умолчанию в FreeBSD. На самом деле, Bash не включён в
+стандартную установку. Вместо этого используется совместимая с Bourne shell
+оболочка man:sh[1] в качестве оболочки пользователя по умолчанию. Оболочка
+root — это man:tcsh[1] по умолчанию в FreeBSD 13 и более ранних версиях и
+man:sh[1] в FreeBSD 14 и позднее. Оболочка man:sh[1] очень похожа на Bash,
+но имеет гораздо меньший набор возможностей. Как правило, скрипты,
+написанные для man:sh[1], будут работать в Bash, но обратное не всегда
+верно.
+
+Однако Bash и другие оболочки доступны для установки через
+extref:{handbook}[Коллекцию портов и пакетов FreeBSD, ports].
+
+После установки другой оболочки используйте man:chsh[1], чтобы изменить
+оболочку пользователя по умолчанию. Рекомендуется оставить оболочку
+пользователя `root` без изменений, поскольку оболочки, не входящие в базовую
+поставку, устанавливаются в [.filename]#/usr/local/bin#. В случае
+возникновения проблемы файловая система, в которой находится
+[.filename]#/usr/local/bin#, может быть не смонтирована. В такой ситуации у
+`root` не будет доступа к своей оболочке по умолчанию, что помешает ему
+войти в систему и устранить проблему.
+
+[[software]]
+== Пакеты и порты: установка программ в FreeBSD
+
+FreeBSD предоставляет два метода установки приложений: бинарные пакеты и
+скомпилированные порты. Каждый метод имеет свои преимущества:
+
+.Бинарные пакеты
+* Быстрая установка по сравнению с компиляцией крупных приложений.
+* Не требует понимания того, как компилировать программное обеспечение.
+* Нет необходимости устанавливать компилятор.
+
+.Порты
+* Возможность настройки параметров установки.
+* Могут быть применены пользовательские патчи.
+
+Если установка приложения не требует дополнительной собственной настройки,
+достаточно установить пакет. Собирайте порт, если приложению требуется
+изменение параметров, заданных в пакетах по умолчанию. При необходимости
+собственный пакет можно собрать из портов с помощью `make package`.
+
+Полный список всех доступных портов и пакетов можно найти
+https://ports.freebsd.org[здесь].
+
+[[packages]]
+=== Пакеты
+
+Пакеты — это предварительно скомпилированные приложения, эквиваленты файлов
+[.filename]#.deb# в системах на основе Debian/Ubuntu и файлов
+[.filename]#.rpm# в системах на основе Red Hat/Fedora. Пакеты
+устанавливаются с помощью `pkg`. Например, следующая команда устанавливает
+Apache 2.4:
+
+[source, shell]
+....
+# pkg install apache24
+....
+
+Для получения дополнительной информации о пакетах обратитесь к разделу 4.4
+Руководства FreeBSD: extref:{handbook}ports/[Использование pkg для
+управления бинарными пакетами, pkgng-intro].
+
+[[ports]]
+=== Порты
+
+Коллекция портов FreeBSD — это набор [.filename]#Makefile# и патчей,
+специально адаптированных для установки приложений из исходного кода в
+FreeBSD. При установке порта система загрузит исходный код, применит
+необходимые патчи, скомпилирует код и установит приложение вместе с
+требуемыми зависимостями.
+
+Коллекция портов, иногда называемая деревом портов, может быть установлена в
+[.filename]#/usr/ports# с помощью
+link:{handbook}mirrors/#git[Git]. Подробные инструкции по установке
+Коллекции портов можно найти в extref:{handbook}ports/[разделе 4.5.1,
+ports-using-installation-methods] Руководства FreeBSD.
+
+Для сборки порта перейдите в его каталог и запустите процесс сборки. В
+следующем примере устанавливается Apache 2.4 из коллекции портов:
+
+[source, shell]
+....
+# cd /usr/ports/www/apache24
+# make install clean
+....
+
+Преимущество использования портов для установки программного обеспечения
+заключается в возможности настройки параметров установки. В этом примере
+указано, что также должен быть установлен модуль mod_ldap:
+
+[source, shell]
+....
+# cd /usr/ports/www/apache24
+# make WITH_LDAP="YES" install clean
+....
+
+Обратитесь к extref:{handbook}ports/[Использование коллекции портов,
+ports-using] для получения дополнительной информации.
+
+[[startup]]
+== Загрузка системы
+
+Многие дистрибутивы Linux(R) используют систему инициализации SysV, тогда
+как FreeBSD использует традиционный BSD-стиль man:init[8]. В BSD-стиле
+man:init[8] нет уровней запуска (run-levels), и файл
+[.filename]#/etc/inittab# отсутствует. Вместо этого запуск системы
+управляется сценариями man:rc[8]. При загрузке системы [.filename]#/etc/rc#
+читает [.filename]#/etc/rc.conf# и [.filename]#/etc/defaults/rc.conf#, чтобы
+определить, какие службы должны быть запущены. Указанные службы затем
+запускаются путем выполнения соответствующих сценариев инициализации,
+расположенных в [.filename]#/etc/rc.d/# и
+[.filename]#/usr/local/etc/rc.d/#. Эти сценарии аналогичны сценариям,
+расположенным в [.filename]#/etc/init.d/# в системах Linux(R).
+
+Скрипты, расположенные в [.filename]#/etc/rc.d/#, предназначены для
+приложений, входящих в "базовую" систему, таких как man:cron[8], man:sshd[8]
+и man:syslog[3]. Скрипты в [.filename]#/usr/local/etc/rc.d/# предназначены
+для пользовательских приложений, таких как Apache и Squid.
+
+Поскольку FreeBSD разрабатывается как полноценная операционная система,
+пользовательские приложения не считаются частью «базовой»
+системы. Пользовательские приложения обычно устанавливаются с помощью
+extref:{handbook}ports/[Пакетов или Портов, ports-using]. Чтобы отделить их
+от базовой системы, пользовательские приложения устанавливаются в
+[.filename]#/usr/local/#. Таким образом, исполняемые файлы пользовательских
+приложений находятся в [.filename]#/usr/local/bin/#, конфигурационные файлы
+— в [.filename]#/usr/local/etc/# и так далее.
+
+Сервисы включаются путем добавления соответствующей записи в файл
+[.filename]#/etc/rc.conf#. Системные параметры по умолчанию находятся в
+файле [.filename]#/etc/defaults/rc.conf#, а настройки по умолчанию
+переопределяются параметрами из файла [.filename]#/etc/rc.conf#. Подробнее о
+доступных параметрах можно узнать в man:rc.conf[5]. При установке
+дополнительных приложений ознакомьтесь с сообщением установки, чтобы
+определить, как включить связанные сервисы.
+
+Следующие записи в [.filename]#/etc/rc.conf# включают man:sshd[8],
+активируют Apache 2.4 и указывают, что Apache должен запускаться с SSL.
+
+[.programlisting]
+....
+# enable SSHD
+sshd_enable="YES"
+# enable Apache with SSL
+apache24_enable="YES"
+apache24_flags="-DSSL"
+....
+
+После включения службы в [.filename]#/etc/rc.conf# её можно запустить без
+перезагрузки системы:
+
+[source, shell]
+....
+# service sshd start
+# service apache24 start
+....
+
+Если служба не была включена, её можно запустить из командной строки с
+помощью `onestart`:
+
+[source, shell]
+....
+# service sshd onestart
+....
+
+[[network]]
+== Настройка сети
+
+Вместо общего идентификатора _ethX_, который используется в Linux(R) для
+обозначения сетевого интерфейса, FreeBSD использует имя драйвера с
+последующим числом. Следующий вывод из man:ifconfig[8] показывает два
+сетевых интерфейса Intel(R) Pro 1000 ([.filename]#em0# и [.filename]#em1#):
+
+[source, shell]
+....
+% ifconfig
+em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+ options=b<RXCSUM,TXCSUM,VLAN_MTU>
+ inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
+ ether 00:50:56:a7:70:b2
+ media: Ethernet autoselect (1000baseTX <full-duplex>)
+ status: active
+em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+ options=b<RXCSUM,TXCSUM,VLAN_MTU>
+ inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
+ ether 00:50:56:a7:03:2b
+ media: Ethernet autoselect (1000baseTX <full-duplex>)
+ status: active
+....
+
+IP-адрес может быть назначен интерфейсу с помощью man:ifconfig[8]. Чтобы
+настройки сохранялись после перезагрузки, конфигурация IP должна быть
+указана в [.filename]#/etc/rc.conf#. Следующие записи в
+[.filename]#/etc/rc.conf# задают имя хоста, IP-адрес и шлюз по умолчанию:
+
+[.programlisting]
+....
+hostname="server1.example.com"
+ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
+defaultrouter="10.10.10.1"
+....
+
+Используйте следующие записи для настройки интерфейса через DHCP:
+
+[.programlisting]
+....
+hostname="server1.example.com"
+ifconfig_em0="DHCP"
+....
+
+[[firewall]]
+== Firewall
+
+FreeBSD не использует Linux(R) IPTABLES для своего межсетевого
+экрана. Вместо этого FreeBSD предлагает выбор из трёх межсетевых экранов на
+уровне ядра:
+
+* extref:{handbook}[PF, firewalls-pf]
+* extref:{handbook}[IPFILTER, firewalls-ipf]
+* extref:{handbook}[IPFW, firewalls-ipfw]
+
+PF разработан проектом OpenBSD и портирован в FreeBSD. PF был создан как
+замена для IPFILTER, и его синтаксис схож с синтаксисом IPFILTER. PF может
+использоваться совместно с man:altq[4] для обеспечения функций QoS.
+
+Этот пример записи PF разрешает входящий SSH:
+
+[.programlisting]
+....
+pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
+....
+
+IPFILTER — это приложение для межсетевого экрана, разработанное Дарреном
+Ридом. Оно не является специфичным для FreeBSD и было портировано на
+несколько операционных систем, включая NetBSD, OpenBSD, SunOS, HP/UX и
+Solaris.
+
+Синтаксис IPFILTER для разрешения входящего SSH:
+
+[.programlisting]
+....
+pass in on $ext_if proto tcp from any to any port = 22
+....
+
+IPFW — это межсетевой экран, разработанный и поддерживаемый FreeBSD. Он
+может быть использован совместно с man:dummynet[4] для обеспечения
+возможностей управления трафиком и имитации различных типов сетевых
+соединений.
+
+Синтаксис IPFW для разрешения входящего SSH будет следующим:
+
+[.programlisting]
+....
+ipfw add allow tcp from any to me 22 in via $ext_if
+....
+
+[[updates]]
+== Обновление FreeBSD
+
+Существует два метода обновления системы FreeBSD: из исходного кода или
+бинарные обновления.
+
+Обновление из исходного кода — это наиболее сложный метод обновления, но он
+предоставляет наибольшую гибкость. Процесс включает синхронизацию локальной
+копии исходного кода FreeBSD с репозиторием FreeBSD Git. После того как
+локальный исходный код обновлён, можно скомпилировать новую версию ядра и
+пользовательского пространства.
+
+Двоичные обновления аналогичны использованию `yum` или `apt-get` для
+обновления системы Linux(R). В FreeBSD, man:freebsd-update[8] может быть
+использован для получения и установки новых двоичных обновлений. Эти
+обновления могут быть запланированы с помощью man:cron[8].
+
+[NOTE]
+====
+При использовании man:cron[8] для планирования обновлений используйте
+`freebsd-update cron` в man:crontab[1], чтобы снизить вероятность
+одновременного скачивания обновлений большим количеством машин:
+
+[.programlisting]
+....
+0 3 * * * root /usr/sbin/freebsd-update cron
+....
+
+====
+
+Для получения дополнительной информации об обновлениях исходного кода и
+бинарных обновлениях обратитесь к extref:{handbook}cutting-edge/[главе об
+обновлениях, updating-upgrading-freebsdupdate] в Руководстве FreeBSD.
+
+[[procfs]]
+== procfs: ушёл, но не забыт
+
+В некоторых дистрибутивах Linux(R) можно посмотреть файл
+[.filename]#/proc/sys/net/ipv4/ip_forward#, чтобы определить, включена ли
+IP-маршрутизация. В FreeBSD вместо этого используется man:sysctl[8] для
+просмотра этого и других системных параметров.
+
+Например, используйте следующую команду, чтобы определить, включена ли
+IP-переадресация в системе FreeBSD:
+
+[source, shell]
+....
+% sysctl net.inet.ip.forwarding
+net.inet.ip.forwarding: 0
+....
+
+Используйте `-a` для вывода всех системных настроек:
+
+[source, shell]
+....
+% sysctl -a | more
+....
+
+Если приложению требуется procfs, добавьте следующую запись в
+[.filename]#/etc/fstab#:
+
+[source, shell]
+....
+proc /proc procfs rw,noauto 0 0
+....
+
+Добавление `noauto` предотвратит автоматическое монтирование
+[.filename]#/proc# при загрузке.
+
+Чтобы подключить файловую систему без перезагрузки:
+
+[source, shell]
+....
+# mount /proc
+....
+
+[[commands]]
+== Распространенные команды
+
+Некоторые эквиваленты распространённых команд приведены ниже:
+
+[.informaltable]
+[cols="1,1,1", frame="none", options="header"]
+|===
+| Команда Linux(R) (Red Hat/Debian)
+| Эквивалент FreeBSD
+| Назначение
+
+|`yum install _package_` / `apt-get install _package_`
+|`pkg install _package_`
+|Установить пакет из удалённого репозитория
+
+|`rpm -ivh _package_` / `dpkg -i _package_`
+|`pkg add _package_`
+|Установить локальный пакет
+
+|`rpm -qa` / `dpkg -l`
+|`pkg info`
+|Список установленных пакетов
+
+|`lspci`
+|`pciconf`
+|Перечислить устройства PCI
+
+|`lsmod`
+|`kldstat`
+|Перечислить загруженные модули ядра
+
+|`modprobe`
+|`kldload` / `kldunload`
+|Загрузка/выгрузка модулей ядра
+
+|`strace`
+|`truss`
+|Трассировка системных вызовов
+|===
+
+[[conclusion]]
+== Заключение
+
+Этот документ предоставил обзор FreeBSD. Для более детального изучения этих
+тем, а также многих других, не рассмотренных в данном документе, обратитесь
+к extref:{handbook}[Руководству FreeBSD].
diff --git a/documentation/content/ru/articles/linux-users/_index.po b/documentation/content/ru/articles/linux-users/_index.po
new file mode 100644
index 0000000000..a0bd6f4469
--- /dev/null
+++ b/documentation/content/ru/articles/linux-users/_index.po
@@ -0,0 +1,989 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-22 19:04+0300\n"
+"PO-Revision-Date: 2025-08-06 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articleslinux-users_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Этот документ предназначен для быстрого ознакомления с основами FreeBSD пользователей Linux® среднего и продвинутого уровня."
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux® Users"
+msgstr "Быстрое руководство по FreeBSD для пользователей Linux®"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-users/_index.adoc:11
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux(R) Users"
+msgstr "Быстрое руководство по FreeBSD для пользователей Linux(R)"
+
+#. 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 ""
+"Этот документ предназначен для быстрого ознакомления с основами FreeBSD "
+"пользователей Linux(R) среднего и продвинутого уровня."
+
+#. 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 ""
+"В этом документе освещаются некоторые технические различия между FreeBSD и "
+"Linux(R), чтобы пользователи Linux(R) среднего и продвинутого уровней могли "
+"быстро ознакомиться с основами 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 ""
+"Этот документ предполагает, что FreeBSD уже установлена. Для получения "
+"помощи по процессу установки обратитесь к главе extref:{handbook}[Установка "
+"FreeBSD, bsdinstall] Руководства FreeBSD."
+
+#. 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 ""
+"Пользователи Linux(R) часто удивляются, обнаружив, что Bash не является "
+"оболочкой по умолчанию в FreeBSD. На самом деле, Bash не включён в "
+"стандартную установку. Вместо этого используется совместимая с Bourne shell "
+"оболочка man:sh[1] в качестве оболочки пользователя по умолчанию. Оболочка "
+"root — это man:tcsh[1] по умолчанию в FreeBSD 13 и более ранних версиях и "
+"man:sh[1] в FreeBSD 14 и позднее. Оболочка man:sh[1] очень похожа на Bash, "
+"но имеет гораздо меньший набор возможностей. Как правило, скрипты, "
+"написанные для man:sh[1], будут работать в Bash, но обратное не всегда верно."
+
+#. 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 ""
+"Однако Bash и другие оболочки доступны для установки через extref:{handbook}"
+"[Коллекцию портов и пакетов 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 ""
+"После установки другой оболочки используйте man:chsh[1], чтобы изменить "
+"оболочку пользователя по умолчанию. Рекомендуется оставить оболочку "
+"пользователя `root` без изменений, поскольку оболочки, не входящие в базовую "
+"поставку, устанавливаются в [.filename]#/usr/local/bin#. В случае "
+"возникновения проблемы файловая система, в которой находится [.filename]#/"
+"usr/local/bin#, может быть не смонтирована. В такой ситуации у `root` не "
+"будет доступа к своей оболочке по умолчанию, что помешает ему войти в "
+"систему и устранить проблему."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:77
+#, no-wrap
+msgid "Packages and Ports: Adding Software in FreeBSD"
+msgstr "Пакеты и порты: установка программ в 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 предоставляет два метода установки приложений: бинарные пакеты и "
+"скомпилированные порты. Каждый метод имеет свои преимущества:"
+
+#. 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 ""
+"Если установка приложения не требует дополнительной собственной настройки, "
+"достаточно установить пакет. Собирайте порт, если приложению требуется "
+"изменение параметров, заданных в пакетах по умолчанию. При необходимости "
+"собственный пакет можно собрать из портов с помощью `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://"
+"ports.freebsd.org[here]."
+msgstr ""
+"Полный список всех доступных портов и пакетов можно найти https://"
+"ports.freebsd.org[здесь]."
+
+#. 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 ""
+"Пакеты — это предварительно скомпилированные приложения, эквиваленты файлов "
+"[.filename]#.deb# в системах на основе Debian/Ubuntu и файлов "
+"[.filename]#.rpm# в системах на основе Red Hat/Fedora. Пакеты "
+"устанавливаются с помощью `pkg`. Например, следующая команда устанавливает "
+"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 ""
+"Для получения дополнительной информации о пакетах обратитесь к разделу 4.4 "
+"Руководства FreeBSD: extref:{handbook}ports/[Использование pkg для "
+"управления бинарными пакетами, 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 ""
+"Коллекция портов FreeBSD — это набор [.filename]#Makefile# и патчей, "
+"специально адаптированных для установки приложений из исходного кода в "
+"FreeBSD. При установке порта система загрузит исходный код, применит "
+"необходимые патчи, скомпилирует код и установит приложение вместе с "
+"требуемыми зависимостями."
+
+#. 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 ""
+"Коллекция портов, иногда называемая деревом портов, может быть установлена в "
+"[.filename]#/usr/ports# с помощью link:{handbook}mirrors/#git[Git]. "
+"Подробные инструкции по установке Коллекции портов можно найти в extref:"
+"{handbook}ports/[разделе 4.5.1, ports-using-installation-methods] "
+"Руководства 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 ""
+"Для сборки порта перейдите в его каталог и запустите процесс сборки. В "
+"следующем примере устанавливается Apache 2.4 из коллекции портов:"
+
+#. 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 ""
+"Преимущество использования портов для установки программного обеспечения "
+"заключается в возможности настройки параметров установки. В этом примере "
+"указано, что также должен быть установлен модуль mod_ldap:"
+
+#. 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 ""
+"Обратитесь к extref:{handbook}ports/[Использование коллекции портов, ports-"
+"using] для получения дополнительной информации."
+
+#. 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 ""
+"Многие дистрибутивы Linux(R) используют систему инициализации SysV, тогда "
+"как FreeBSD использует традиционный BSD-стиль man:init[8]. В BSD-стиле "
+"man:init[8] нет уровней запуска (run-levels), и файл [.filename]#/etc/"
+"inittab# отсутствует. Вместо этого запуск системы управляется сценариями "
+"man:rc[8]. При загрузке системы [.filename]#/etc/rc# читает [.filename]#/etc/"
+"rc.conf# и [.filename]#/etc/defaults/rc.conf#, чтобы определить, какие "
+"службы должны быть запущены. Указанные службы затем запускаются путем "
+"выполнения соответствующих сценариев инициализации, расположенных в "
+"[.filename]#/etc/rc.d/# и [.filename]#/usr/local/etc/rc.d/#. Эти сценарии "
+"аналогичны сценариям, расположенным в [.filename]#/etc/init.d/# в системах "
+"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 ""
+"Скрипты, расположенные в [.filename]#/etc/rc.d/#, предназначены для "
+"приложений, входящих в \"базовую\" систему, таких как man:cron[8], "
+"man:sshd[8] и man:syslog[3]. Скрипты в [.filename]#/usr/local/etc/rc.d/# "
+"предназначены для пользовательских приложений, таких как Apache и 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 ""
+"Поскольку FreeBSD разрабатывается как полноценная операционная система, "
+"пользовательские приложения не считаются частью «базовой» системы. "
+"Пользовательские приложения обычно устанавливаются с помощью extref:"
+"{handbook}ports/[Пакетов или Портов, ports-using]. Чтобы отделить их от "
+"базовой системы, пользовательские приложения устанавливаются в [.filename]#/"
+"usr/local/#. Таким образом, исполняемые файлы пользовательских приложений "
+"находятся в [.filename]#/usr/local/bin/#, конфигурационные файлы — в "
+"[.filename]#/usr/local/etc/# и так далее."
+
+#. 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 ""
+"Сервисы включаются путем добавления соответствующей записи в файл "
+"[.filename]#/etc/rc.conf#. Системные параметры по умолчанию находятся в "
+"файле [.filename]#/etc/defaults/rc.conf#, а настройки по умолчанию "
+"переопределяются параметрами из файла [.filename]#/etc/rc.conf#. Подробнее о "
+"доступных параметрах можно узнать в man:rc.conf[5]. При установке "
+"дополнительных приложений ознакомьтесь с сообщением установки, чтобы "
+"определить, как включить связанные сервисы."
+
+#. 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 ""
+"Следующие записи в [.filename]#/etc/rc.conf# включают man:sshd[8], "
+"активируют Apache 2.4 и указывают, что Apache должен запускаться с 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 ""
+"После включения службы в [.filename]#/etc/rc.conf# её можно запустить без "
+"перезагрузки системы:"
+
+#. 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 ""
+"Если служба не была включена, её можно запустить из командной строки с "
+"помощью `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 "Настройка сети"
+
+#. 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 ""
+"Вместо общего идентификатора _ethX_, который используется в Linux(R) для "
+"обозначения сетевого интерфейса, FreeBSD использует имя драйвера с "
+"последующим числом. Следующий вывод из man:ifconfig[8] показывает два "
+"сетевых интерфейса Intel(R) Pro 1000 ([.filename]#em0# и [.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 ""
+"IP-адрес может быть назначен интерфейсу с помощью man:ifconfig[8]. Чтобы "
+"настройки сохранялись после перезагрузки, конфигурация IP должна быть "
+"указана в [.filename]#/etc/rc.conf#. Следующие записи в [.filename]#/etc/"
+"rc.conf# задают имя хоста, IP-адрес и шлюз по умолчанию:"
+
+#. 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 "Используйте следующие записи для настройки интерфейса через 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 не использует Linux(R) IPTABLES для своего межсетевого экрана. "
+"Вместо этого FreeBSD предлагает выбор из трёх межсетевых экранов на уровне "
+"ядра:"
+
+#. 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 разработан проектом OpenBSD и портирован в FreeBSD. PF был создан как "
+"замена для IPFILTER, и его синтаксис схож с синтаксисом IPFILTER. PF может "
+"использоваться совместно с man:altq[4] для обеспечения функций QoS."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:244
+msgid "This sample PF entry allows inbound SSH:"
+msgstr "Этот пример записи PF разрешает входящий 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 — это приложение для межсетевого экрана, разработанное Дарреном "
+"Ридом. Оно не является специфичным для FreeBSD и было портировано на "
+"несколько операционных систем, включая NetBSD, OpenBSD, SunOS, HP/UX и "
+"Solaris."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:254
+msgid "The IPFILTER syntax to allow inbound SSH is:"
+msgstr "Синтаксис IPFILTER для разрешения входящего SSH:"
+
+#. 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 — это межсетевой экран, разработанный и поддерживаемый FreeBSD. Он "
+"может быть использован совместно с man:dummynet[4] для обеспечения "
+"возможностей управления трафиком и имитации различных типов сетевых "
+"соединений."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:264
+msgid "The IPFW syntax to allow inbound SSH would be:"
+msgstr "Синтаксис IPFW для разрешения входящего SSH будет следующим:"
+
+#. 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 "Обновление 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 ""
+"Существует два метода обновления системы FreeBSD: из исходного кода или "
+"бинарные обновления."
+
+#. 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 ""
+"Обновление из исходного кода — это наиболее сложный метод обновления, но он "
+"предоставляет наибольшую гибкость. Процесс включает синхронизацию локальной "
+"копии исходного кода FreeBSD с репозиторием FreeBSD Git. После того как "
+"локальный исходный код обновлён, можно скомпилировать новую версию ядра и "
+"пользовательского пространства."
+
+#. 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 ""
+"Двоичные обновления аналогичны использованию `yum` или `apt-get` для "
+"обновления системы Linux(R). В FreeBSD, man:freebsd-update[8] может быть "
+"использован для получения и установки новых двоичных обновлений. Эти "
+"обновления могут быть запланированы с помощью 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 ""
+"При использовании man:cron[8] для планирования обновлений используйте "
+"`freebsd-update cron` в man:crontab[1], чтобы снизить вероятность "
+"одновременного скачивания обновлений большим количеством машин:"
+
+#. 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 ""
+"Для получения дополнительной информации об обновлениях исходного кода и "
+"бинарных обновлениях обратитесь к extref:{handbook}cutting-edge/[главе об "
+"обновлениях, updating-upgrading-freebsdupdate] в Руководстве FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:297
+#, no-wrap
+msgid "procfs: Gone But Not Forgotten"
+msgstr "procfs: ушёл, но не забыт"
+
+#. 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 ""
+"В некоторых дистрибутивах Linux(R) можно посмотреть файл [.filename]#/proc/"
+"sys/net/ipv4/ip_forward#, чтобы определить, включена ли IP-маршрутизация. В "
+"FreeBSD вместо этого используется man:sysctl[8] для просмотра этого и других "
+"системных параметров."
+
+#. 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 ""
+"Например, используйте следующую команду, чтобы определить, включена ли IP-"
+"переадресация в системе 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 "Используйте `-a` для вывода всех системных настроек:"
+
+#. 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 ""
+"Если приложению требуется procfs, добавьте следующую запись в [.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 ""
+"Добавление `noauto` предотвратит автоматическое монтирование [.filename]#/"
+"proc# при загрузке."
+
+#. 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 "# mount /proc\n"
+
+#. 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 "Команда Linux(R) (Red Hat/Debian)"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:343
+#, no-wrap
+msgid "FreeBSD equivalent"
+msgstr "Эквивалент FreeBSD"
+
+#. 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 "`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 "Установить пакет из удалённого репозитория"
+
+#. 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 "Установить локальный пакет"
+
+#. 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 "Список установленных пакетов"
+
+#. 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 "Перечислить устройства 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 "Перечислить загруженные модули ядра"
+
+#. 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 "Загрузка/выгрузка модулей ядра"
+
+#. 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 "Трассировка системных вызовов"
+
+#. 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 ""
+"Этот документ предоставил обзор FreeBSD. Для более детального изучения этих "
+"тем, а также многих других, не рассмотренных в данном документе, обратитесь "
+"к extref:{handbook}[Руководству FreeBSD]."
diff --git a/documentation/content/ru/articles/mailing-list-faq/_index.adoc b/documentation/content/ru/articles/mailing-list-faq/_index.adoc
index b44a7afc06..9f94d5c88a 100644
--- a/documentation/content/ru/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/ru/articles/mailing-list-faq/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Часто задаваемые вопросы по спискам рассылки 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: 'Как оптимально использовать почтовые рассылки, в том числе как избежать часто повторяющихся обсуждений'
+tags: ["FAQ", "Mailing Lists", "FreeBSD"]
+title: 'Часто задаваемые вопросы по спискам рассылки FreeBSD'
---
= Часто задаваемые вопросы по спискам рассылки FreeBSD
@@ -39,7 +42,7 @@ endif::[]
[.abstract-title]
Аннотация
-Эта статья посвящена часто задаваемым вопросам (FAQ) по спискам рассылки FreeBSD. Если вы хотите помочь поддерживать данный документ, напишите письмо в {freebsd-doc}. Последняя версия данного документа доступна на link:.[WWW сервере FreeBSD]. Вы можете получить данную статью в виде одного большого link:.[HTML] файла, используя HTTP протокол или в виде простого текста, форматов PostScript, PDF, и других с link:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/[FTP сервера FreeBSD]. Возможно вы захотите link:https://www.FreeBSD.org/search/[Найти FAQ].
+Эта статья посвящена часто задаваемым вопросам (FAQ) по спискам рассылки FreeBSD. Если вы хотите помочь поддерживать данный документ, напишите письмо в {freebsd-doc}. Последняя версия данного документа доступна на link:.[WWW сервере FreeBSD]. Вы можете получить данную статью в виде одного большого link:.[HTML] файла, используя HTTP протокол или в виде простого текста, форматов PostScript, PDF, и других с https://download.freebsd.org/doc/[FTP сервера FreeBSD]. Возможно вы захотите link:https://www.FreeBSD.org/search/[Найти FAQ].
'''
@@ -58,19 +61,21 @@ toc::[]
=== Кто пользуется этими списками рассылки?
-Это зависит от темы обсуждения каждого конкретного списка рассылки. Некоторые списки больше ориентированны на разработчиков, некоторые на всё сообщество FreeBSD в целом. Список существующих на сегодняшний день списков рассылки доступен http://lists.FreeBSD.org/mailman/listinfo[здесь].
+Это зависит от регламента каждой конкретной рассылки. Некоторые списки больше ориентированы на разработчиков, некоторые - на всё сообщество FreeBSD в целом. Актуальную информацию смотрите по ссылке: link:https://lists.FreeBSD.org/[этот список].
+
+В списках рассылки используется английский язык, если другой язык не указан явно.
=== Доступны ли списки рассылки по FreeBSD для каждого?
-Повторюсь, это зависит от характера обсуждаемых тем в каждом конкретном листе. Пожалуйста прочтите устав списка рассылки перед отправлением в него письма и соблюдайте его при каждом отправлении. Это будет полезно каждому получить больше опыта по работе со списками рассылки.
+Повторюсь: это зависит от устава (правил) каждого конкретного списка рассылки. Пожалуйста, прочтите устав списка перед отправкой в него письма и соблюдайте его при каждом сообщении. Это способствует более комфортной работе со списками рассылки.
-Если после просмотра выше расположенного списка, вы до сих пор не знаете в какой список рассылки направить письмо, то вам наверняка подойдёт freebsd-questions (но прежде прочтите ниже).
+Если после просмотра выше расположенного списка, вы до сих пор не знаете в какой список рассылки направить письмо, то вам наверняка подойдёт freebsd-questions (но прежде прочтите советы ниже).
-Заметьте, что для отправки письма в список рассылки необязательно быть подписанным на него. Это поможет легче присоединиться к сообществу FreeBSD и способствует открытому обмену идей. Но, из-за небрежности некоторых людей некоторые списки проводят политику предварительного ручного просмотра сообщений от не подписанных пользователей, чтобы убедиться в их целесообразности.
+Обратите внимание, что для отправки сообщений в список рассылки необходимо быть его подписчиком. Вы можете оформить подписку, не получая сообщения, которые в него отправляются.
=== Как я могу подписаться?
-Вы можете использовать http://lists.FreeBSD.org/mailman/listinfo[web интерфейс Mailman] для подписки на любой из открытых списков рассылки.
+Вы можете использовать link:https://lists.FreeBSD.org/[web интерфейс Mlmmj] для подписки на любой из открытых списков рассылки.
=== Как мне отписаться?
@@ -80,11 +85,11 @@ toc::[]
=== Доступны ли архивы?
-Да. Архивы доступны http://docs.FreeBSD.org/mail/[здесь].
+Да. Архивы со всеми письмами с 1994 года доступны link:https://mail-archive.freebsd.org/mail/[здесь]. Вот ссылки на https://lists.freebsd.org/pipermail[архив mailman] и link:https://lists.freebsd.org/archives[архив mlmmj].
=== Доступны ли списки рассылки в дайджест формате?
-Да. Посмотрите http://lists.FreeBSD.org/mailman/listinfo[web интерфейс Mailman].
+Да. Посмотрите link:https://lists.FreeBSD.org/[веб интерфейс Mlmmj].
[[etiquette]]
== Этикет списков рассылки
@@ -95,53 +100,52 @@ toc::[]
Вы уже сделали важный шаг, решив прочитать эту статью. Если вы новичок во FreeBSD, то сначала ознакомьтесь с программным обеспечением и связанной с нею документацией, включающей множество extref:https://www.FreeBSD.org/docs/[книг и статьей]. Могут быть интересными: extref:{faq}[Часто задаваемые вопросы по FreeBSD (FAQ)], extref:{handbook}[Руководство по FreeBSD], и статьи extref:{freebsd-questions-article}[Как работать со списком рассылки FreeBSD-questions с максимальной отдачей], extref:{explaining-bsd}[Что такое BSD], и extref:{new-users}[Пособие для новичков во FreeBSD].
-Вы можете получить нелицеприятные высказывания в свой адрес, если зададите вопрос, ответ на который есть в приведённой выше документации. Это не потому что добровольцы, работающие над данным проектом очень плохие люди, а после многократного ответа на одни и те же вопросы - раздражение берёт своё. Это особенно справедливо, если уже существует и доступен ответ на вопрос. Не забывайте, что вся работа по улучшению FreeBSD выполняется добровольцами, и что мы только люди.
+Считается дурным тоном задавать вопросы, на которые уже есть ответ в приведённых выше документах. Это не потому что добровольцы, работающие над данным проектом очень плохие люди, а после многократного ответа на одни и те же вопросы - раздражение берёт своё. Это особенно справедливо, если уже существует и доступен ответ на вопрос. Не забывайте, что вся работа по улучшению FreeBSD выполняется добровольцами, и что мы только люди.
=== Что считается несоответствующим письмом?
* Письма должны соответствовать уставу списка рассылки.
-* Избегайте личных оскорблений. Как хорошие жители сети, мы должны держать себя по высоким стандартам поведения.
+* Личные нападки недопустимы. Как ответственные участники сетевого сообщества, мы должны придерживаться высоких стандартов поведения.
* Спам не разрешён. Нарушители данного правила будут забаненны.
=== Что считается хорошим этикетом при посылке писем в списки рассылки?
-* Пожалуйста, составляйте строки длиной примерно в 75 символов, так так не каждый использует модную почтовую программу с графическим интерфейсом.
-* Пожалуйста, обращайте внимание на тот факт, что пропускная способность ограничена. Не каждый читает почту через высокоскоростное соединение. Если вы отправляете содержимое какого-нибудь файла, например [.filename]#config.log# или объёмную трассировку стека, то, пожалуйста, размещайте его на каком-нибудь веб-сайте и присылайте просто ссылку на на него. Помните, что такие сообщения будут заархивированны, и это просто добавит ненужные байты к архиву.
+* Пожалуйста, составляйте строки длиной примерно в 75 символов, так как не каждый использует модную почтовую программу с графическим интерфейсом.
+* Пожалуйста, обращайте внимание на тот факт, что пропускная способность ограничена. Не каждый читает почту через высокоскоростное соединение. Если вы отправляете содержимое какого-нибудь файла, например [.filename]#config.log# или объёмную трассировку стека, то, пожалуйста, размещайте его на каком-нибудь веб-сайте и присылайте просто ссылку на него. Помните, что такие сообщения будут заархивированны, и это просто добавит ненужные байты к архиву.
* Оформляйте ваше сообщение, чтобы оно было читабельно и ПОЖАЛУЙСТА, НЕ КРИЧИТЕ!!!!!. Не упускайте из виду эффект, которое производит плохо отформатированное письмо, причём не только в списках рассылки FreeBSD. Ваше сообщение будет просмотрено другими людьми, и если оно плохо отформатировано, имеет множество ошибок и/или восклицательных знаков, то это создаст нехорошее впечатление о вас.
* Пожалуйста, используйте подходящий язык общения для конкретного списка рассылки. link:https://www.FreeBSD.org/community/mailinglists/[ Существует] много не англоязычных рассылок.
-+
++
Мы понимаем, что для многих английский не родной язык и поэтому мы пытаемся сделать некие пособия. Считается плохим тоном критиковать людей не говорящих по-английски за лексические и грамматические ошибки. FreeBSD имеет отличные продвижения в этом отношении. Пожалуйста, помогайте сохранять нам эту традицию.
* Пожалуйста, используйте совместимый со стандартами почтовый клиент (MUA). Много плохо отформатированных сообщений исходят от http://www.lemis.com/grog/email/email.php[неправильно работающих или плохо сконфигурированных почтовых клиентов]. Известно, что следующие почтовые программы могут посылать неправильно отформатированные сообщения без вашего ведома:
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
-
-+
++
Постарайтесь не использовать MIME: многие используют программы, которые не очень хорошо работают с MIME.
* Проверьте правильность настроек времени и временной зоны. Это может выглядеть немножко глупо, потому что ваши сообщения все равно будут доставляться, однако многие люди получают несколько сотен сообщений в день. Зачастую они сортируют входящие сообщения по теме и дате, и если ваше сообщение не будет предшествовать первому ответу, то они могут предположить, что оно потерялось и даже не взглянут на него.
* Основной объем информации, который вы должны предоставить, представляет собой вывод программ, таких, как man:dmesg[8], или консольные сообщения, которые обычно появляются в файле [.filename]#/var/log/messages#. Не пытайтесь скопировать эту информацию, набрав ее снова; это действительно трудно, и здесь легко сделать ошибку. Чтобы послать содержимое файлов протоколов, сделайте копию файла и воспользуйтесь редактором для того, чтобы обрезать информацию, оставив только относящуюся к делу, либо скопируйте и вставьте текст в ваше сообщение. В случае вывода программ, таких, как `dmesg`, перенаправьте вывод в файл и включите его в письмо. Например,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
-Данная команда перенаправит информацию в файл [.filename]#/tmp/dmesg.out#.
++
+Эта команда перенаправляет информацию в файл [.filename]#/tmp/dmesg.out#.
* При использовании операций копирования и вставки учтите, что некоторые такие операции отрицательно сказываются на формате строк. Особенно это стоит учесть при посылке содержимого файлов [.filename]#Makefile#, где `tab` является важным символом. Это довольно часто встречающаяся проблема в link:https://www.FreeBSD.org/support/[ базе данных сообщений об ошибках]. В [.filename]#Makefile# символы tab меняются на пробелы, или раздражающие `=3B` escape последовательности.
=== Каких правил этикета стоит придерживаться при ответе на уже существующее сообщение?
* Пожалуйста, включайте относящийся к теме текст из исходного письма. Сокращайте его до минимума, но не переусердствуйте. Любой, кто не читал исходное сообщение должен суметь понять о чём идёт речь.
-+
-Это особенно важно для ответов, где исходное сообщение составляло сотни строчек.
++
+Это особенно важно для ответов в стиле «Да, я это тоже вижу», где исходное сообщение составляло сотни строчек.
* Отделяйте текст исходного сообщения от текста, добавляемого вами. Чаще всего строчки исходного сообщения предваряются "`>`" и пробелом. Отделяйте ваш текст от текста исходного сообщения пустыми строчками. Эти правила помогут сделать ваши сообщения более читабельными.
-* Пожалуйста, убедитесь, что присваивания текста, который вы цитируйте корректны. Люди могут обидеться, если вы присвоите им слова, которые они не писали.
-* Пожалуйста, не пишите `ответ в начале`. Это значит, что при ответе на сообщения, вставляйте ваши ответы в конец, после текста, копируемого из исходного сообщения.
+* Пожалуйста, убедитесь в корректном указании авторства текста, который вы цитируйте. Люди могут обидеться, если вы приписываете им слова, которые они не писали.
+* Пожалуйста, не пишите `ответ в начале письма`. Это значит, что при ответе на сообщения вставляйте ваши ответы в конец, после текста, копируемого из исходного сообщения.
++
+** Ответ: Потому что это не соответствует логическому ходу обсуждения.
+** Вопрос: Чем плох ответ в начале письма?
+
-** A: Потому что это не соответствует логическому ходу обсуждения.
-** Q: Почему верхнее сообщение осуждает это?
-+
(Спасибо Рэнди Бушу (Randy Bush) за шутку.)
[[recurring]]
@@ -149,16 +153,16 @@ toc::[]
Участие в списках рассылки, как и участие в любом сообществе требует общего базиса для общения. Большое количество рассылок предполагают знание истории Проекта. В частности, существует несколько тем обсуждения, которые возникают у новичков. Обязанность каждого участника не создавать дискуссии на эти темы, тем самым помочь спискам рассылки не отрываться от обсуждаемых тем и обезопасить себя от разгорячённых бесед.
-Лучший способ предотвратить это - ознакомиться с http://docs.FreeBSD.org/mail/[архивами списков рассылки], чтобы понять, что происходило до этого. В этом случае, незаменимым окажется http://www.FreeBSD.org/search/#mailinglists[ интерфейс поиска по спискам рассылки]. (Если этот способ не принёс результатов, воспользуйтесь вашей любимой поисковой системой).
+Лучший способ предотвратить это - ознакомиться с http://docs.FreeBSD.org/mail/[архивами списков рассылки], чтобы понять, что происходило до этого. В этом случае, незаменимым окажется https://www.FreeBSD.org/search/#mailinglists[ интерфейс поиска по спискам рассылки]. (Если этот способ не принёс результатов, воспользуйтесь вашей любимой поисковой системой).
-Познакомившись с архивами, вы не только будете знать какие темы обсуждались до этого, а также узнаете какие тенденции общения существуют в данной рассылке, кто является участниками и какова конечная аудитория. Эти вещи довольно хорошо знать перед отправкой письма в любую рассылку, и это касается не только списков рассылки FreeBSD.
+Познакомившись с архивами, вы не только будете знать, какие темы обсуждались до этого, но также узнаете, какие тенденции общения существуют в данной рассылке, кто является участниками и какова конечная аудитория. Эти вещи довольно хорошо знать перед отправкой письма в любую рассылку, и это касается не только списков рассылки FreeBSD.
-Нет сомнения, что архивы довольно объёмные и некоторые вопросы повторяются гораздо чаще чем другие, иногда в виде откликов (followups), где тема сообщения уже не соответствует новому положению дел. Тем не менее, старайтесь избегать повторяющихся тем.
+Безусловно, архивы весьма обширны, и некоторые вопросы возникают чаще других, иногда в виде цепочек ответов, где заголовок письма уже не отражает содержание обсуждения. Тем не менее, ваша задача как автора — провести предварительную работу, чтобы по возможности избежать этих часто возникающих тем.
[[bikeshed]]
== Что такое велосипедный навес ("Bikeshed")?
-В литературной нотации, `велосипедный навес` - это маленький внешний кожух, в который можно поместить один вид двухколёсного транспорта. Тем не менее, на языке FreeBSD, этот термин ("bikeshed") относится к темам, которые достаточно просты, и на которые (почти) каждый может предложить собственное мнение, и часто (почти) каждый его и предлагает. Детали происхождения данного термина более подробно рассмотрены extref:{faq}[здесь, BIKESHED-PAINTING]. У вас должно иметься представление о данном понятии перед отправкой письма в любой список рассылки FreeBSD.
+В буквальном смысле `bikeshed` (сарай для велосипедов) - это небольшое уличное сооружение для хранения двухколёсного транспорта. Однако в терминологии FreeBSD это понятие относится к темам, достаточно простым для того, чтобы (почти) каждый мог высказать своё мнение, и зачастую (почти) каждый это делает. Детали происхождения данного термина более подробно рассмотрены extref:{faq}[здесь, bikeshed-painting]. У вас должно иметься представление о данном понятии перед отправкой письма в любой список рассылки FreeBSD.
Bikeshed - это тема разговора, которая будет иметь тенденцию порождать немедленные мета-дискуссии и флэйм.
diff --git a/documentation/content/ru/articles/mailing-list-faq/_index.po b/documentation/content/ru/articles/mailing-list-faq/_index.po
new file mode 100644
index 0000000000..4db5d5b21f
--- /dev/null
+++ b/documentation/content/ru/articles/mailing-list-faq/_index.po
@@ -0,0 +1,750 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-30 21:16+0300\n"
+"PO-Revision-Date: 2025-09-30 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesmailing-list-faq_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Часто задаваемые вопросы по спискам рассылки FreeBSD"
+
+#. 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 ""
+"Эта статья посвящена часто задаваемым вопросам (FAQ) по спискам рассылки "
+"FreeBSD. Если вы хотите помочь поддерживать данный документ, напишите письмо "
+"в {freebsd-doc}. Последняя версия данного документа доступна на link:.[WWW "
+"сервере FreeBSD]. Вы можете получить данную статью в виде одного большого "
+"link:.[HTML] файла, используя HTTP протокол или в виде простого текста, "
+"форматов PostScript, PDF, и других с https://download.freebsd.org/doc/[FTP "
+"сервера FreeBSD]. Возможно вы захотите link:https://www.FreeBSD.org/search/"
+"[Найти FAQ]."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:55
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. 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 ""
+"Цель этого документа ответить на часто задаваемые вопросы, касающиеся "
+"списков рассылки FreeBSD. Хотя FAQ задумывались для снижения количества "
+"задаваемых повторяющихся вопросов, они стали восприниматься, как ценные "
+"источники информации."
+
+#. 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 ""
+"Этот документ - попытка представить консенсус всего сообщества, и поэтому он "
+"не может считаться __официальным__. Если вы найдете технические неточности в "
+"данном документе или у вас есть предложения по добавлению новых пунктов, "
+"пожалуйста отправьте PR или напишите в {freebsd-doc}. Спасибо."
+
+#. 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 "Зачем вообще нужны списки рассылки по 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 ""
+"Списки рассылки по FreeBSD служат, как первичное средство связи FreeBSD "
+"сообщества, они покрывают множество различных тем."
+
+#. 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 ""
+"Это зависит от регламента каждой конкретной рассылки. Некоторые списки "
+"больше ориентированы на разработчиков, некоторые - на всё сообщество FreeBSD "
+"в целом. Актуальную информацию смотрите по ссылке: link:https://"
+"lists.FreeBSD.org/[этот список]."
+
+#. 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 "Доступны ли списки рассылки по FreeBSD для каждого?"
+
+#. 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 ""
+"Если после просмотра выше расположенного списка, вы до сих пор не знаете в "
+"какой список рассылки направить письмо, то вам наверняка подойдёт freebsd-"
+"questions (но прежде прочтите советы ниже)."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:86
+msgid ""
+"Note that you must subscribe to a mailing list before you can post. You can "
+"elect to subscribe without receiving messages posted to the mailing list."
+msgstr ""
+"Обратите внимание, что для отправки сообщений в список рассылки необходимо "
+"быть его подписчиком. Вы можете оформить подписку, не получая сообщения, "
+"которые в него отправляются."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:87
+#, no-wrap
+msgid "How can I subscribe?"
+msgstr "Как я могу подписаться?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:90
+msgid ""
+"You can use link:https://lists.FreeBSD.org/[the Mlmmj web interface] to "
+"subscribe to any of the public lists."
+msgstr ""
+"Вы можете использовать link:https://lists.FreeBSD.org/[web интерфейс Mlmmj] "
+"для подписки на любой из открытых списков рассылки."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:91
+#, no-wrap
+msgid "How can I unsubscribe?"
+msgstr "Как мне отписаться?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:94
+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:98
+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:99
+#, no-wrap
+msgid "Are archives available?"
+msgstr "Доступны ли архивы?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:103
+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 ""
+"Да. Архивы со всеми письмами с 1994 года доступны link:https://mail-"
+"archive.freebsd.org/mail/[здесь]. Вот ссылки на https://lists.freebsd.org/"
+"pipermail[архив mailman] и link:https://lists.freebsd.org/archives[архив "
+"mlmmj]."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:104
+#, no-wrap
+msgid "Are mailing lists available in a digest format?"
+msgstr "Доступны ли списки рассылки в дайджест формате?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:107
+msgid "Yes. See link:https://lists.FreeBSD.org/[the Mlmmj web interface]."
+msgstr "Да. Посмотрите link:https://lists.FreeBSD.org/[веб интерфейс Mlmmj]."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:109
+#, no-wrap
+msgid "Mailing List Etiquette"
+msgstr "Этикет списков рассылки"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:113
+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:114
+#, no-wrap
+msgid "What should I do before I post?"
+msgstr "Что я должен сделать перед отправлением письма?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:119
+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 ""
+"Вы уже сделали важный шаг, решив прочитать эту статью. Если вы новичок во "
+"FreeBSD, то сначала ознакомьтесь с программным обеспечением и связанной с "
+"нею документацией, включающей множество extref:https://www.FreeBSD.org/docs/"
+"[книг и статьей]. Могут быть интересными: extref:{faq}[Часто задаваемые "
+"вопросы по FreeBSD (FAQ)], extref:{handbook}[Руководство по FreeBSD], и "
+"статьи extref:{freebsd-questions-article}[Как работать со списком рассылки "
+"FreeBSD-questions с максимальной отдачей], extref:{explaining-bsd}[Что такое "
+"BSD], и extref:{new-users}[Пособие для новичков во FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:124
+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 ""
+"Считается дурным тоном задавать вопросы, на которые уже есть ответ в "
+"приведённых выше документах. Это не потому что добровольцы, работающие над "
+"данным проектом очень плохие люди, а после многократного ответа на одни и те "
+"же вопросы - раздражение берёт своё. Это особенно справедливо, если уже "
+"существует и доступен ответ на вопрос. Не забывайте, что вся работа по "
+"улучшению FreeBSD выполняется добровольцами, и что мы только люди."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:125
+#, no-wrap
+msgid "What constitutes an inappropriate posting?"
+msgstr "Что считается несоответствующим письмом?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:128
+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:129
+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:130
+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:131
+#, 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:134
+msgid ""
+"Please wrap lines at 75 characters, since not everyone uses fancy GUI mail "
+"reading programs."
+msgstr ""
+"Пожалуйста, составляйте строки длиной примерно в 75 символов, так как не "
+"каждый использует модную почтовую программу с графическим интерфейсом."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:135
+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 ""
+"Пожалуйста, обращайте внимание на тот факт, что пропускная способность "
+"ограничена. Не каждый читает почту через высокоскоростное соединение. Если "
+"вы отправляете содержимое какого-нибудь файла, например "
+"[.filename]#config.log# или объёмную трассировку стека, то, пожалуйста, "
+"размещайте его на каком-нибудь веб-сайте и присылайте просто ссылку на него. "
+"Помните, что такие сообщения будут заархивированны, и это просто добавит "
+"ненужные байты к архиву."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:136
+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 ""
+"Оформляйте ваше сообщение, чтобы оно было читабельно и ПОЖАЛУЙСТА, НЕ "
+"КРИЧИТЕ!!!!!. Не упускайте из виду эффект, которое производит плохо "
+"отформатированное письмо, причём не только в списках рассылки FreeBSD. Ваше "
+"сообщение будет просмотрено другими людьми, и если оно плохо "
+"отформатировано, имеет множество ошибок и/или восклицательных знаков, то это "
+"создаст нехорошее впечатление о вас."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:137
+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 ""
+"Пожалуйста, используйте подходящий язык общения для конкретного списка "
+"рассылки. link:https://www.FreeBSD.org/community/mailinglists/[ Существует] "
+"много не англоязычных рассылок."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:141
+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 ""
+"Мы понимаем, что для многих английский не родной язык и поэтому мы пытаемся "
+"сделать некие пособия. Считается плохим тоном критиковать людей не говорящих "
+"по-английски за лексические и грамматические ошибки. FreeBSD имеет отличные "
+"продвижения в этом отношении. Пожалуйста, помогайте сохранять нам эту "
+"традицию."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:142
+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 ""
+"Пожалуйста, используйте совместимый со стандартами почтовый клиент (MUA). "
+"Много плохо отформатированных сообщений исходят от http://www.lemis.com/grog/"
+"email/email.php[неправильно работающих или плохо сконфигурированных почтовых "
+"клиентов]. Известно, что следующие почтовые программы могут посылать "
+"неправильно отформатированные сообщения без вашего ведома:"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:144
+msgid "exmh"
+msgstr "exmh"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:145
+msgid "Microsoft(R) Exchange"
+msgstr "Microsoft(R) Exchange"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:146
+msgid "Microsoft(R) Outlook(R)"
+msgstr "Microsoft(R) Outlook(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:148
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+"Постарайтесь не использовать MIME: многие используют программы, которые не "
+"очень хорошо работают с MIME."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:149
+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:150
+msgid ""
+"A lot of the information you need to supply is the output of programs, such "
+"as man:dmesg[8], or console messages, which usually appear in [.filename]#/"
+"var/log/messages#. Do not try to copy this information by typing it in "
+"again; 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 ""
+"Основной объем информации, который вы должны предоставить, представляет "
+"собой вывод программ, таких, как man:dmesg[8], или консольные сообщения, "
+"которые обычно появляются в файле [.filename]#/var/log/messages#. Не "
+"пытайтесь скопировать эту информацию, набрав ее снова; это действительно "
+"трудно, и здесь легко сделать ошибку. Чтобы послать содержимое файлов "
+"протоколов, сделайте копию файла и воспользуйтесь редактором для того, чтобы "
+"обрезать информацию, оставив только относящуюся к делу, либо скопируйте и "
+"вставьте текст в ваше сообщение. В случае вывода программ, таких, как "
+"`dmesg`, перенаправьте вывод в файл и включите его в письмо. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:154
+#, 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:157
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr ""
+"Эта команда перенаправляет информацию в файл [.filename]#/tmp/dmesg.out#."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:158
+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 ""
+"При использовании операций копирования и вставки учтите, что некоторые такие "
+"операции отрицательно сказываются на формате строк. Особенно это стоит "
+"учесть при посылке содержимого файлов [.filename]#Makefile#, где `tab` "
+"является важным символом. Это довольно часто встречающаяся проблема в "
+"link:https://www.FreeBSD.org/support/[ базе данных сообщений об ошибках]. В "
+"[.filename]#Makefile# символы tab меняются на пробелы, или раздражающие "
+"`=3B` escape последовательности."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:159
+#, 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:162
+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:164
+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:165
+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:166
+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:167
+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:169
+msgid "A: Because it reverses the logical flow of conversation."
+msgstr "Ответ: Потому что это не соответствует логическому ходу обсуждения."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:170
+msgid "Q: Why is top posting frowned upon?"
+msgstr "Вопрос: Чем плох ответ в начале письма?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:172
+msgid "(Thanks to Randy Bush for the joke.)"
+msgstr "(Спасибо Рэнди Бушу (Randy Bush) за шутку.)"
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:174
+#, no-wrap
+msgid "Recurring Topics On The Mailing Lists"
+msgstr "Повторяющиеся темы в списках рассылки"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:181
+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:185
+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 ""
+"Лучший способ предотвратить это - ознакомиться с http://docs.FreeBSD.org/"
+"mail/[архивами списков рассылки], чтобы понять, что происходило до этого. В "
+"этом случае, незаменимым окажется https://www.FreeBSD.org/search/"
+"#mailinglists[ интерфейс поиска по спискам рассылки]. (Если этот способ не "
+"принёс результатов, воспользуйтесь вашей любимой поисковой системой)."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:188
+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 ""
+"Познакомившись с архивами, вы не только будете знать, какие темы обсуждались "
+"до этого, но также узнаете, какие тенденции общения существуют в данной "
+"рассылке, кто является участниками и какова конечная аудитория. Эти вещи "
+"довольно хорошо знать перед отправкой письма в любую рассылку, и это "
+"касается не только списков рассылки FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:191
+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:193
+#, no-wrap
+msgid "What Is A \"Bikeshed\"?"
+msgstr "Что такое велосипедный навес (\"Bikeshed\")?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:198
+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 ""
+"В буквальном смысле `bikeshed` (сарай для велосипедов) - это небольшое "
+"уличное сооружение для хранения двухколёсного транспорта. Однако в "
+"терминологии FreeBSD это понятие относится к темам, достаточно простым для "
+"того, чтобы (почти) каждый мог высказать своё мнение, и зачастую (почти) "
+"каждый это делает. Детали происхождения данного термина более подробно "
+"рассмотрены extref:{faq}[здесь, bikeshed-painting]. У вас должно иметься "
+"представление о данном понятии перед отправкой письма в любой список "
+"рассылки FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:200
+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 ""
+"Bikeshed - это тема разговора, которая будет иметь тенденцию порождать "
+"немедленные мета-дискуссии и флэйм."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:203
+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 ""
+"Пожалуйста, помогайте сохранять списки рассылки настолько полезными для "
+"многих людей, насколько это возможно путём предотвращения bikeshed. Спасибо."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:205
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Благодарности"
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:207
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:209
+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 ""
+"Первоначальный автор большинства материала по этикету списков рассылки, "
+"взятого из статьи extref:{freebsd-questions-article}[Как работать со списком "
+"рассылки FreeBSD-questions с максимальной отдачей]."
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:210
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:211
+msgid "Creation of the rough draft of this FAQ."
+msgstr "Создание черновой версии данного FAQ."
diff --git a/documentation/content/ru/articles/nanobsd/_index.adoc b/documentation/content/ru/articles/nanobsd/_index.adoc
new file mode 100644
index 0000000000..3f8255591a
--- /dev/null
+++ b/documentation/content/ru/articles/nanobsd/_index.adoc
@@ -0,0 +1,424 @@
+---
+authors:
+ -
+ author: 'Daniel Gerzo'
+copyright: '2006 The FreeBSD Documentation Project'
+description: 'Этот документ предоставляет информацию об инструментах NanoBSD, которые могут быть использованы для создания образов системы FreeBSD для встраиваемых приложений, подходящих для использования на USB-накопителе, карте памяти или других носителях данных.'
+tags: ["nanobsd", "guide", "embedded", "FreeBSD"]
+title: 'Введение в NanoBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Введение в NanoBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/nanobsd/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Этот документ предоставляет информацию об инструментах NanoBSD, которые могут быть использованы для создания образов системы FreeBSD для встраиваемых приложений, подходящих для использования на USB-накопителе, карте памяти или других носителях данных.
+
+'''
+
+toc::[]
+
+[[intro]]
+== Введение в NanoBSD
+
+NanoBSD — это инструмент, разработанный {phk} и в настоящее время поддерживаемый {imp}. Он создает образ системы FreeBSD для встраиваемых приложений, подходящий для использования на USB-накопителе, карте памяти или другом носителе данных.
+
+Он может использоваться для создания специализированных установочных образов, предназначенных для простой установки и обслуживания систем, обычно называемых "компьютерными устройствами". Компьютерные устройства объединяют аппаратное и программное обеспечение в одном продукте, что означает, что все приложения предустановлены. Устройство подключается к существующей сети и может начать работу (почти) сразу.
+
+Возможности NanoBSD включают:
+
+* Порты и пакеты работают так же, как в FreeBSD — любое приложение может быть установлено и использовано в образе NanoBSD так же, как и в FreeBSD.
+* Отсутствие недостающей функциональности — если что-то возможно сделать в FreeBSD, то это же можно сделать и в NanoBSD, за исключением случаев, когда определённые функции были явно удалены из образа NanoBSD при его создании.
+* Всё доступно только для чтения во время работы — можно безопасно выдернуть шнур питания. Нет необходимости запускать man:fsck[8] после нештатного завершения работы системы.
+* Простота сборки и настройки — используя всего один shell-скрипт и один файл конфигурации, можно создавать уменьшенные и настроенные образы, удовлетворяющие любым произвольным требованиям.
+
+[[howto]]
+== Инструкция по NanoBSD
+
+[[design]]
+=== Дизайн NanoBSD
+
+После того как образ записан на носитель, можно загрузить NanoBSD. По умолчанию носитель данных разделён на три части:
+
+* Два раздела с образами: `code#1` и `code#2`.
+* Файловый раздел конфигурации, который может быть смонтирован в каталоге [.filename]#/cfg# во время выполнения.
+
+Эти разделы обычно монтируются в режиме только для чтения.
+
+Каталоги [.filename]#/etc# и [.filename]#/var# являются дисками man:md[4] (malloc).
+
+Раздел конфигурации сохраняется в каталоге [.filename]#/cfg#. Он содержит файлы для каталога [.filename]#/etc# и кратковременно монтируется в режиме только для чтения сразу после загрузки системы, поэтому необходимо копировать изменённые файлы из [.filename]#/etc# обратно в каталог [.filename]#/cfg#, если требуется, чтобы изменения сохранялись после перезагрузки системы.
+
+.Внесение постоянных изменений в [.filename]#/etc/resolv.conf#
+[example]
+====
+
+[source, shell]
+....
+# vi /etc/resolv.conf
+[...]
+# mount /cfg
+# cp /etc/resolv.conf /cfg
+# umount /cfg
+....
+
+====
+
+[NOTE]
+====
+Раздел, содержащий [.filename]#/cfg#, должен монтироваться только во время загрузки и при переопределении конфигурационных файлов.
+
+Постоянное подключение [.filename]#/cfg# не является хорошей идеей, особенно если Система NanoBSD работает на носителе данных, который может быть повреждён из-за большого количества операций записи в раздел (например, когда синхронизатор файловой системы записывает данные на системные диски).
+====
+
+=== Создание образа NanoBSD
+
+Для сборки NanoBSD необходим исходный код FreeBSD. Чтобы получить исходный код:
+
+[source, shell]
+....
+# git clone https://git.FreeBSD.org/src.git /usr/src
+....
+
+Для более подробной информации выполните шаги, описанные extref:{handbook}cutting-edge#updating-src-obtaining-src[здесь].
+
+Образ NanoBSD создаётся с помощью простого скрипта [.filename]#nanobsd.sh#, который находится в каталоге [.filename]#/usr/src/tools/tools/nanobsd#. Этот скрипт создаёт образ, который можно записать на носитель с помощью утилиты man:dd[1].
+
+Необходимые команды для создания образа NanoBSD:
+
+[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 <.>
+....
+
+<.> Измените текущий каталог на базовый каталог скрипта сборки NanoBSD.
+
+<.> Начните процесс сборки.
+
+<.> Измените текущий каталог на место, где расположены собранные образы.
+
+<.> Установите NanoBSD на носитель данных.
+
+==== Параметры при сборке образа NanoBSD
+
+При создании образа NanoBSD можно передать несколько параметров сборки в [.filename]#nanobsd.sh# через командную строку. Эти параметры могут существенно повлиять на процесс сборки.
+
+Некоторые параметры предназначены для информирования в большем или меньшем объеме:
+
+* `-h`: выводит страницу с краткой справкой.
+* `-q`: делает вывод менее подробным.
+* `-v`: делает вывод более подробным
+
+Некоторые другие параметры могут использоваться для ограничения процесса сборки. Иногда нет необходимости пересобирать всё из исходников, особенно если образ уже был собран и внесены лишь небольшие изменения.
+
+* `-k`: не собирать ядро
+* `-w`: не собирать world
+* `-b`: не собирать ни ядро, ни систему
+* `-i`: не создавать образ диска. Поскольку файл не будет создан, его нельзя будет записать на носитель с помощью man:dd[1].
+* `-f`: не создавать образ диска первого раздела (что полезно для целей обновления)
+* `-n`: добавляет `-DNO_CLEAN` к `buildworld`, `buildkernel`. Кроме того, все файлы, которые уже были собраны в предыдущем запуске, сохраняются.
+
+Файл конфигурации можно использовать для настройки множества элементов. Загрузите его с помощью `-c`
+
+Последние параметры:
+
+* `-K`: не устанавливать ядро. Образ диска без ядра не сможет выполнить нормальную последовательность загрузки.
+
+==== Полный процесс сборки образа
+
+Полный процесс сборки образа проходит через множество этапов. Точные шаги зависят от выбранных опций при запуске скрипта. При условии, что скрипт запущен без специальных опций, вот что произойдет.
+
+. `run_early_customize`: команды, определенные в предоставленном файле конфигурации.
+. `clean_build`: Просто очищает среду сборки, удаляя ранее созданные файлы.
+. `make_conf_build`: Собрать make.conf из переменных `CONF_WORLD` и `CONF_BUILD`.
+. `build_world`: Сборка системы.
+. `build_kernel`: Собрать файлы ядра.
+. `clean_world`: Очистить целевую директорию.
+. `make_conf_install`: Собрать make.conf из переменных `CONF_WORLD` и `CONF_INSTALL`.
+. `install_world`: Установить все файлы, собранные во время `buildworld`.
+. `install_etc`: Установить необходимые файлы в директорию [.filename]#/etc#, используя команду `make distribution`.
+. `setup_nanobsd_etc`: на этом этапе происходит первая специфичная для NanoBSD настройка. Создается [.filename]#/etc/diskless#, а корневая файловая система определяется как доступная только для чтения.
+. `install_kernel`: устанавливаются файлы ядра и модулей.
+. `run_customize`: будут вызваны все пользовательские процедуры настройки.
+. `setup_nanobsd`: создаётся специальная структура конфигурационных каталогов. Каталог [.filename]#/usr/local/etc# перемещается в [.filename]#/etc/local#, а затем создаётся символическая ссылка из [.filename]#/etc/local# обратно в [.filename]#/usr/local/etc#.
+. `prune_usr`: пустые директории в [.filename]#/usr# удаляются.
+. `run_late_customize`: на этом этапе могут быть выполнены самые последние пользовательские скрипты.
+. `fixup_before_diskimage`: Вывести список всех установленных файлов в metalog
+. `create_diskimage`: создает образ диска на основе предоставленных параметров геометрии диска.
+. `last_orders`: в настоящее время ничего не делает.
+
+=== Настройка образа NanoBSD
+
+Вероятно, это самая важная и интересная функция NanoBSD. Здесь же вы проведёте большую часть времени при разработке с NanoBSD.
+
+Вызов следующей команды заставит [.filename]#nanobsd.sh# прочитать конфигурацию из файла [.filename]#myconf.nano#, расположенного в текущем каталоге:
+
+[source, shell]
+....
+# sh nanobsd.sh -c myconf.nano
+....
+
+Настройка выполняется двумя способами:
+
+* Параметры конфигурации
+* Пользовательские функции
+
+==== Параметры конфигурации
+
+С помощью настроек конфигурации можно задать параметры, передаваемые как на этапах `buildworld`, так и `installworld` процесса сборки NanoBSD, а также внутренние параметры, передаваемые основному процессу сборки NanoBSD. Эти параметры позволяют сократить систему так, чтобы она помещалась всего на 64 МБ. Вы можете использовать конфигурационные опции для ещё большего урезания FreeBSD, пока она не будет состоять только из ядра и двух-трёх файлов в пользовательском пространстве.
+
+Файл конфигурации состоит из параметров конфигурации, которые переопределяют значения по умолчанию. Наиболее важные директивы:
+
+* `NANO_NAME` - Имя сборки (используется для формирования имен рабочих каталогов).
+* `NANO_SRC` - Путь к исходному дереву, используемому для сборки образа.
+* `NANO_KERNEL` - Имя файла конфигурации ядра, используемого для сборки ядра.
+* `CONF_BUILD` - Параметры, передаваемые на этапе `buildworld` сборки.
+* `CONF_INSTALL` - Параметры, передаваемые на этапе `installworld` при сборке.
+* `CONF_WORLD` - Параметры, передаваемые на этапах `buildworld` и `installworld` сборки.
+* `FlashDevice` - Определяет тип носителя для использования. Подробности смотрите в [.filename]#FlashDevice.sub#.
+
+Существует множество дополнительных параметров конфигурации, которые могут быть актуальными в зависимости от типа NanoBSD.
+
+===== Общая настройка
+
+Существует три этапа, на которых по замыслу можно внести изменения, влияющие на процесс сборки, просто установив переменную в предоставленном конфигурационном файле:
+
+* `run_early_customize`: до выполнения любых других действий.
+* `run_customize`: после того как все стандартные файлы будут размещены
+* `run_late_customize`: в самом конце процесса, непосредственно перед созданием фактического образа NanoBSD.
+
+Для настройки образа NanoBSD на любом из этих этапов лучше всего добавить конкретное значение в одну из соответствующих переменных.
+
+Переменная `NANO_EARLY_CUSTOMIZE` используется на первом этапе процесса сборки. На данный момент нет примера того, что можно сделать с помощью этой переменной, но это может измениться в будущем.
+
+Переменная `NANO_CUSTOMIZE` используется после установки ядра, системы и конфигурационных файлов etc, а также настройки файлов etc для установки NanoBSD. Таким образом, это правильный этап процесса сборки для изменения параметров конфигурации и добавления пакетов, как в примере cust_nobeastie.
+
+Переменная `NANO_LATE_CUSTOMIZE` используется непосредственно перед созданием образа диска, поэтому это последний момент для внесения изменений. Помните, что процедура `setup_nanobsd` уже выполнена и каталоги [.filename]#etc#, [.filename]#conf# и [.filename]#cfg#, включая подкаталоги, уже изменены, поэтому сейчас не время их корректировать. Вместо этого можно добавить или удалить конкретные файлы.
+
+===== Параметры загрузки
+
+Существуют также переменные, которые могут изменить способ загрузки образа NanoBSD. Два параметра передаются в man:boot0cfg[8] для инициализации загрузочного сектора образа диска:
+
+* `NANO_BOOT0CFG`
+* `NANO_BOOTLOADER`
+
+С помощью `NANO_BOOTLOADER` можно выбрать файл загрузчика. Наиболее распространённые варианты — [.filename]#boot0sio# и [.filename]#boot0#, в зависимости от наличия последовательного порта у устройства. Лучше не указывать другой загрузчик, но это возможно. Для этого рекомендуется предварительно ознакомиться с extref:{handbook}boot[главой FreeBSD Handbook] о процессе загрузки.
+
+С помощью `NANO_BOOT0CFG` можно настроить процесс загрузки, например, выбрать раздел, с которого будет загружаться образ NanoBSD. Перед изменением значения этой переменной рекомендуется ознакомиться со страницей руководства man:boot0cfg[8]. Один из интересных параметров, который можно изменить, — это таймаут процедуры загрузки. Для этого переменную `NANO_BOOT0CFG` можно изменить на `"-o packet -s 1 -m 3 -t 36"`. В этом случае процесс загрузки начнётся примерно через 2 секунды, так как редко возникает необходимость ждать 10 секунд перед началом загрузки.
+
+Хорошо знать: переменная `NANO_BOOT2CFG` используется только в подпрограмме `cust_comconsole`, которая может вызываться на этапе `NANO_CUSTOMIZE`, если устройство имеет последовательный порт и весь ввод и вывод консоли должен осуществляться через него. Обязательно проверьте соответствующие параметры последовательного порта, так как установка некорректного значения параметра может сделать его бесполезным.
+
+===== Создание образа диска
+
+В конце процесса загрузки происходит создание образа диска. На этом этапе скрипт NanoBSD предоставляет файл, который можно просто скопировать на диск для устройства, и это позволит ему загрузиться и запуститься.
+
+Существует множество переменных, которые должны быть настроены правильно, чтобы скрипт создал пригодный для использования образ диска.
+
+* Переменная `NANO_DRIVE` должна быть установлена в имя накопителя носителя во время выполнения. Обычно ожидается, что значение по умолчанию `ada0`, которое представляет первое устройство `IDE`/`ATA`/`SATA` на устройстве, будет правильным, но также может использоваться другой тип накопителя — например, USB-ключ, в этом случае это скорее будет `da0`.
+* Переменная `NANO_MEDIASIZE` должна быть установлена в значение размера (в секторах по 512 байт) носителя данных, который будет использоваться. Если задать её неправильно, образ NanoBSD может вообще не загрузиться, а во время загрузки появится сообщение о некорректной геометрии диска.
+
+* Каталоги [.filename]#/etc#, [.filename]#/var# и [.filename]#/tmp# выделяются как диски man:md[4] (malloc) при загрузке; их размеры могут быть настроены в соответствии с потребностями устройства. Переменная `NANO_RAM_ETCSIZE` задаёт размер [.filename]#/etc#, а переменная `NANO_RAM_TMPVARSIZE` определяет размер как [.filename]#/var#, так и [.filename]#/tmp#, поскольку [.filename]#/tmp# символически ссылается на [.filename]#/var/tmp#. По умолчанию размер обоих дисков malloc установлен в 20 МБ каждый. Их можно изменить, но обычно [.filename]#/etc# не сильно увеличивается в размере, поэтому 20 МБ — хорошая начальная точка, тогда как [.filename]#/var# и особенно [.filename]#/tmp# могут стать значительно больше, если не следить за ними. Для систем с ограниченной памятью можно выбрать меньшие размеры файловых систем.
+* Поскольку NanoBSD в основном предназначен для создания образа системы для устройства, предполагается, что используемые носители данных будут относительно небольшими. По этой причине файловая система настроена на использование небольшого размера блока (4 Кб) и небольшого размера фрагмента (512 байт). Параметры конфигурации файловой системы можно изменить с помощью переменной `NANO_NEWFS`, но синтаксис должен соответствовать формату команды man:newfs[8]. Кроме того, по умолчанию в файловой системе включены Soft Updates. Подробнее об этом можно узнать в extref:{handbook}[FreeBSD Handbook].
+* Различные размеры разделов могут быть заданы с использованием `NANO_CODESIZE`, `NANO_CONFSIZE` и `NANO_DATASIZE` в виде кратного 512-байтным секторам. `NANO_CODESIZE` определяет размер первых двух разделов образа: `code#1` и `code#2`. Они должны быть достаточно большими, чтобы вместить все файлы, созданные в результате процессов `buildworld` и `buildkernel`. `NANO_CONFSIZE` определяет размер раздела для конфигурационных файлов, поэтому он не должен быть очень большим; однако не стоит делать его слишком маленьким, чтобы он мог вместить все конфигурационные файлы. Наконец, `NANO_DATASIZE` определяет размер дополнительного раздела, который может использоваться на устройстве. Последний раздел может быть использован, например, для хранения файлов, создаваемых на лету на диске.
+
+==== Пользовательские Функции
+
+Возможно тонко настроить NanoBSD с помощью функций оболочки в конфигурационном файле. Следующий пример иллюстрирует базовую модель пользовательских функций:
+
+[.programlisting]
+....
+cust_foo () (
+ echo "bar=baz" > \
+ ${NANO_WORLDDIR}/etc/foo
+)
+customize_cmd cust_foo
+....
+
+Более полезный пример функции настройки — следующий, который изменяет размер каталога [.filename]#/etc# по умолчанию с 5 МБ на 30 МБ:
+
+[.programlisting]
+....
+cust_etc_size () (
+ cd ${NANO_WORLDDIR}/conf
+ echo 30000 > default/etc/md_size
+)
+customize_cmd cust_etc_size
+....
+
+Существует несколько предопределённых функций для настройки, готовых к использованию:
+
+* `cust_comconsole` - Отключает man:getty[8] на VGA-устройствах (узлы устройств [.filename]#/dev/ttyv*#) и позволяет использовать последовательный порт COM1 в качестве системной консоли.
+* `cust_allow_ssh_root` - Разрешить `root` входить через man:sshd[8].
+* `cust_install_files` - Устанавливает файлы из каталога [.filename]#nanobsd/Files#, который содержит полезные скрипты для администрирования системы.
+* `cust_pkgng` - Устанавливает пакеты из каталога [.filename]#nanobsd/Pkg# (также требуется пакет pkg-* для начальной загрузки).
+
+==== Добавление пакетов
+
+Пакеты могут быть добавлены в образ NanoBSD для обеспечения специфических функциональных возможностей устройства. Для этого можно:
+
+* Добавьте `cust_pkgng` в переменную `NANO_CUSTOMIZE` или
+* Добавьте команду `'customize_cmd cust_pkgng'` в настраиваемый конфигурационный файл.
+
+Оба метода приводят к одному результату: запуск процедуры `cust_pkgng`. Эта процедура проверит каталог `NANO_PACKAGE_DIR` для поиска всех пакетов или только списка пакетов, указанных в переменной `NANO_PACKAGE_LIST`.
+
+Обычно при установке приложений через pkg в стандартной среде FreeBSD процесс установки размещает конфигурационные файлы в каталоге [.filename]#usr/local/etc#, а скрипты запуска — в каталоге [.filename]#/usr/local/etc/rc.d#. Поэтому после установки необходимых пакетов их нужно настроить, чтобы они запускались сразу после установки. Для этого необходимо разместить соответствующие конфигурационные файлы в правильных каталогах. Это можно сделать, написав специализированные процедуры, или использовать общую процедуру `cust_install_files` для корректного размещения файлов из каталога [.filename]#/usr/src/tools/tools/nanobsd/Files#. Обычно также требуется добавить одну или несколько записей в файл [.filename]#/etc/rc.conf# для каждого пакета.
+
+==== Пример файла конфигурации
+
+Полный пример конфигурационного файла для создания пользовательского образа NanoBSD может выглядеть следующим образом:
+
+[.programlisting]
+....
+NANO_NAME=custom
+NANO_SRC=/usr/src
+NANO_KERNEL=MYKERNEL
+NANO_IMAGES=2
+
+CONF_BUILD='
+WITHOUT_KLDLOAD=YES
+WITHOUT_NETGRAPH=YES
+WITHOUT_PAM=YES
+'
+
+CONF_INSTALL='
+WITHOUT_ACPI=YES
+WITHOUT_BLUETOOTH=YES
+WITHOUT_FORTRAN=YES
+WITHOUT_HTML=YES
+WITHOUT_LPR=YES
+WITHOUT_MAN=YES
+WITHOUT_SENDMAIL=YES
+WITHOUT_SHAREDOCS=YES
+WITHOUT_EXAMPLES=YES
+WITHOUT_INSTALLLIB=YES
+WITHOUT_CALENDAR=YES
+WITHOUT_MISC=YES
+WITHOUT_SHARE=YES
+'
+
+CONF_WORLD='
+WITHOUT_BIND=YES
+WITHOUT_MODULES=YES
+WITHOUT_KERBEROS=YES
+WITHOUT_GAMES=YES
+WITHOUT_RESCUE=YES
+WITHOUT_LOCALES=YES
+WITHOUT_SYSCONS=YES
+WITHOUT_INFO=YES
+'
+
+FlashDevice SanDisk 1G
+
+cust_nobeastie() (
+ touch ${NANO_WORLDDIR}/boot/loader.conf
+ echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
+)
+
+customize_cmd cust_comconsole
+customize_cmd cust_install_files
+customize_cmd cust_allow_ssh_root
+customize_cmd cust_nobeastie
+....
+
+Все параметры сборки и установки можно найти на странице Справочника man:src.conf[5], но не все параметры можно или следует использовать при создании образа NanoBSD. Параметры сборки и установки должны определяться в соответствии с потребностями создаваемого образа.
+
+Например, FTP-клиент и сервер могут не потребоваться. Добавление `WITHOUT_FTP=TRUE` в файл конфигурации в разделе `CONF_BUILD` позволит избежать их сборки. Также, если устройство NanoBSD не будет использоваться для сборки программ, можно добавить `WITHOUT_BINUTILS=TRUE` в раздел `CONF_INSTALL`, но не в раздел `CONF_BUILD`, так как они будут использоваться для сборки образа NanoBSD.
+
+Не сборка определенного набора программ — через опцию компиляции — сокращает общее время сборки и уменьшает требуемый размер дискового образа, тогда как отсутствие установки того же набора программ не сокращает общее время сборки.
+
+=== Обновление NanoBSD
+
+Процесс обновления NanoBSD относительно прост:
+
+[.procedure]
+====
+. Соберите новый образ NanoBSD, как обычно.
+. Загрузите новый образ в неиспользуемый раздел работающего устройства NanoBSD.
++
+Важнейшее отличие этого шага от первоначальной установки NanoBSD заключается в том, что теперь вместо использования [.filename]#\_.disk.full# (который содержит образ всего диска), устанавливается образ [.filename]#_.disk.image# (который содержит образ одного системного раздела).
+. Перезагрузите систему и запустите её с только что установленного раздела.
+. Если все прошло успешно, обновление завершено.
+. Если что-то пойдет не так, перезагрузитесь обратно в предыдущий раздел (который содержит старую, рабочую версию), чтобы восстановить работоспособность системы как можно быстрее. Исправьте все проблемы новой сборки и повторите процесс.
+====
+
+Для установки нового образа на работающую систему NanoBSD можно использовать скрипт [.filename]#updatep1# или [.filename]#updatep2#, расположенный в директории [.filename]#/root#, в зависимости от того, с какого раздела запущена текущая система.
+
+В зависимости от того, какие службы доступны на хосте, предоставляющем новый образ NanoBSD, и какой тип передачи предпочтителен, можно рассмотреть один из этих трех способов:
+
+==== Использование man:ftp[1]
+
+Если скорость передачи данных стоит на первом месте, используйте этот пример:
+
+[source, shell]
+....
+# ftp myhost
+get _.disk.image "| sh updatep1"
+....
+
+==== Использование man:ssh[1]
+
+Если предпочтителен безопасный способ передачи, рассмотрите следующий пример:
+
+[source, shell]
+....
+# ssh myhost cat _.disk.image.gz | zcat | sh updatep1
+....
+
+==== Использование man:nc[1]
+
+Попробуйте этот пример, если на удалённом хосте не запущены ни служба man:ftpd[8], ни служба man:sshd[8]:
+
+[.procedure]
+====
+. Сначала откройте TCP-слушатель на хосте, обслуживающем образ, и настройте его на отправку образа клиенту:
++
+[source, shell]
+....
+myhost# nc -l 2222 < _.disk.image
+....
++
+[NOTE]
+======
+Убедитесь, что используемый порт не заблокирован для приёма входящих подключений с хоста NanoBSD межсетевым экраном.
+======
+. Подключитесь к хосту, предоставляющему новый образ, и выполните скрипт [.filename]#updatep1#:
++
+[source, shell]
+....
+# nc myhost 2222 | sh updatep1
+....
+====
diff --git a/documentation/content/ru/articles/nanobsd/_index.po b/documentation/content/ru/articles/nanobsd/_index.po
new file mode 100644
index 0000000000..f7bfc67304
--- /dev/null
+++ b/documentation/content/ru/articles/nanobsd/_index.po
@@ -0,0 +1,1550 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: 2025-08-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesnanobsd_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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 ""
+"Этот документ предоставляет информацию об инструментах NanoBSD, которые "
+"могут быть использованы для создания образов системы FreeBSD для "
+"встраиваемых приложений, подходящих для использования на USB-накопителе, "
+"карте памяти или других носителях данных."
+
+#. 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 "Введение в NanoBSD"
+
+#. 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 ""
+"NanoBSD — это инструмент, разработанный {phk} и в настоящее время "
+"поддерживаемый {imp}. Он создает образ системы FreeBSD для встраиваемых "
+"приложений, подходящий для использования на USB-накопителе, карте памяти или "
+"другом носителе данных."
+
+#. 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 "Возможности NanoBSD включают:"
+
+#. 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 ""
+"Порты и пакеты работают так же, как в FreeBSD — любое приложение может быть "
+"установлено и использовано в образе NanoBSD так же, как и в 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 ""
+"Отсутствие недостающей функциональности — если что-то возможно сделать в "
+"FreeBSD, то это же можно сделать и в NanoBSD, за исключением случаев, когда "
+"определённые функции были явно удалены из образа NanoBSD при его создании."
+
+#. 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 ""
+"Всё доступно только для чтения во время работы — можно безопасно выдернуть "
+"шнур питания. Нет необходимости запускать man:fsck[8] после нештатного "
+"завершения работы системы."
+
+#. 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 ""
+"Простота сборки и настройки — используя всего один shell-скрипт и один файл "
+"конфигурации, можно создавать уменьшенные и настроенные образы, "
+"удовлетворяющие любым произвольным требованиям."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:69
+#, no-wrap
+msgid "NanoBSD Howto"
+msgstr "Инструкция по NanoBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:72
+#, no-wrap
+msgid "The Design of NanoBSD"
+msgstr "Дизайн 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 ""
+"После того как образ записан на носитель, можно загрузить NanoBSD. По "
+"умолчанию носитель данных разделён на три части:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:78
+msgid "Two image partitions: `code#1` and `code#2`."
+msgstr "Два раздела с образами: `code#1` и `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 ""
+"Файловый раздел конфигурации, который может быть смонтирован в каталоге [."
+"filename]#/cfg# во время выполнения."
+
+#. 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 ""
+"Каталоги [.filename]#/etc# и [.filename]#/var# являются дисками 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 ""
+"Раздел конфигурации сохраняется в каталоге [.filename]#/cfg#. Он содержит "
+"файлы для каталога [.filename]#/etc# и кратковременно монтируется в режиме "
+"только для чтения сразу после загрузки системы, поэтому необходимо "
+"копировать изменённые файлы из [.filename]#/etc# обратно в каталог [."
+"filename]#/cfg#, если требуется, чтобы изменения сохранялись после "
+"перезагрузки системы."
+
+#. type: Block title
+#: documentation/content/en/articles/nanobsd/_index.adoc:87
+#, no-wrap
+msgid "Making Persistent Changes to [.filename]#/etc/resolv.conf#"
+msgstr "Внесение постоянных изменений в [.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 ""
+"Раздел, содержащий [.filename]#/cfg#, должен монтироваться только во время "
+"загрузки и при переопределении конфигурационных файлов."
+
+#. 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 ""
+"Постоянное подключение [.filename]#/cfg# не является хорошей идеей, особенно "
+"если Система NanoBSD работает на носителе данных, который может быть "
+"повреждён из-за большого количества операций записи в раздел (например, "
+"когда синхронизатор файловой системы записывает данные на системные диски)."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:109
+#, no-wrap
+msgid "Building a NanoBSD Image"
+msgstr "Создание образа NanoBSD"
+
+#. 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 ""
+"Для сборки NanoBSD необходим исходный код FreeBSD. Чтобы получить исходный "
+"код:"
+
+#. 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 "# git clone https://git.FreeBSD.org/src.git /usr/src\n"
+
+#. 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 ""
+"Для более подробной информации выполните шаги, описанные extref:{handbook"
+"}cutting-edge#updating-src-obtaining-src[здесь]."
+
+#. 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 ""
+"Образ NanoBSD создаётся с помощью простого скрипта [.filename]#nanobsd.sh#, "
+"который находится в каталоге [.filename]#/usr/src/tools/tools/nanobsd#. Этот "
+"скрипт создаёт образ, который можно записать на носитель с помощью утилиты "
+"man:dd[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:125
+msgid "The necessary commands to build a NanoBSD image are:"
+msgstr "Необходимые команды для создания образа NanoBSD:"
+
+#. 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 ""
+"# 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:135
+msgid ""
+"Change the current directory to the base directory of the NanoBSD build "
+"script."
+msgstr "Измените текущий каталог на базовый каталог скрипта сборки NanoBSD."
+
+#. 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 "Установите NanoBSD на носитель данных."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:142
+#, no-wrap
+msgid "Options When Building a NanoBSD Image"
+msgstr "Параметры при сборке образа NanoBSD"
+
+#. 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 ""
+"При создании образа NanoBSD можно передать несколько параметров сборки в [."
+"filename]#nanobsd.sh# через командную строку. Эти параметры могут "
+"существенно повлиять на процесс сборки."
+
+#. 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 "`-h`: выводит страницу с краткой справкой."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:151
+msgid "`-q`: makes output quieter."
+msgstr "`-q`: делает вывод менее подробным."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:152
+msgid "`-v`: makes output more verbose"
+msgstr "`-v`: делает вывод более подробным"
+
+#. 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 "`-k`: не собирать ядро"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:158
+msgid "`-w`: do not build world"
+msgstr "`-w`: не собирать world"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:159
+msgid "`-b`: do not build either kernel and world"
+msgstr "`-b`: не собирать ни ядро, ни систему"
+
+#. 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 ""
+"`-i`: не создавать образ диска. Поскольку файл не будет создан, его нельзя "
+"будет записать на носитель с помощью man:dd[1]."
+
+#. 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 ""
+"`-f`: не создавать образ диска первого раздела (что полезно для целей "
+"обновления)"
+
+#. 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 ""
+"`-n`: добавляет `-DNO_CLEAN` к `buildworld`, `buildkernel`. Кроме того, все "
+"файлы, которые уже были собраны в предыдущем запуске, сохраняются."
+
+#. 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 ""
+"Файл конфигурации можно использовать для настройки множества элементов. "
+"Загрузите его с помощью `-c`"
+
+#. 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 ""
+"`-K`: не устанавливать ядро. Образ диска без ядра не сможет выполнить "
+"нормальную последовательность загрузки."
+
+#. 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 ""
+"`run_early_customize`: команды, определенные в предоставленном файле "
+"конфигурации."
+
+#. 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 ""
+"`clean_build`: Просто очищает среду сборки, удаляя ранее созданные файлы."
+
+#. 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 ""
+"`make_conf_build`: Собрать make.conf из переменных `CONF_WORLD` и "
+"`CONF_BUILD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:180
+msgid "`build_world`: Build world."
+msgstr "`build_world`: Сборка системы."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:181
+msgid "`build_kernel`: Build the kernel files."
+msgstr "`build_kernel`: Собрать файлы ядра."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:182
+msgid "`clean_world`: Clean the destination directory."
+msgstr "`clean_world`: Очистить целевую директорию."
+
+#. 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 ""
+"`make_conf_install`: Собрать make.conf из переменных `CONF_WORLD` и "
+"`CONF_INSTALL`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:184
+msgid "`install_world`: Install all files built during `buildworld`."
+msgstr "`install_world`: Установить все файлы, собранные во время `buildworld`."
+
+#. 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 ""
+"`install_etc`: Установить необходимые файлы в директорию [.filename]#/etc#, "
+"используя команду `make distribution`."
+
+#. 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 ""
+"`setup_nanobsd_etc`: на этом этапе происходит первая специфичная для NanoBSD "
+"настройка. Создается [.filename]#/etc/diskless#, а корневая файловая система "
+"определяется как доступная только для чтения."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:187
+msgid "`install_kernel`: the kernel and modules files are installed."
+msgstr "`install_kernel`: устанавливаются файлы ядра и модулей."
+
+#. 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 ""
+"`run_customize`: будут вызваны все пользовательские процедуры настройки."
+
+#. 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 ""
+"`setup_nanobsd`: создаётся специальная структура конфигурационных каталогов. "
+"Каталог [.filename]#/usr/local/etc# перемещается в [.filename]#/etc/local#, "
+"а затем создаётся символическая ссылка из [.filename]#/etc/local# обратно в ["
+".filename]#/usr/local/etc#."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:190
+msgid "`prune_usr`: the empty directories from [.filename]#/usr# are removed."
+msgstr "`prune_usr`: пустые директории в [.filename]#/usr# удаляются."
+
+#. 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 ""
+"`run_late_customize`: на этом этапе могут быть выполнены самые последние "
+"пользовательские скрипты."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:192
+msgid "`fixup_before_diskimage`: List all installed files in a metalog"
+msgstr ""
+"`fixup_before_diskimage`: Вывести список всех установленных файлов в metalog"
+
+#. 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 ""
+"`create_diskimage`: создает образ диска на основе предоставленных параметров "
+"геометрии диска."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:194
+msgid "`last_orders`: does nothing for now."
+msgstr "`last_orders`: в настоящее время ничего не делает."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:195
+#, no-wrap
+msgid "Customizing a NanoBSD Image"
+msgstr "Настройка образа NanoBSD"
+
+#. 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 ""
+"Вероятно, это самая важная и интересная функция NanoBSD. Здесь же вы "
+"проведёте большую часть времени при разработке с NanoBSD."
+
+#. 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 ""
+"Вызов следующей команды заставит [.filename]#nanobsd.sh# прочитать "
+"конфигурацию из файла [.filename]#myconf.nano#, расположенного в текущем "
+"каталоге:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:205
+#, 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: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 ""
+"С помощью настроек конфигурации можно задать параметры, передаваемые как на "
+"этапах `buildworld`, так и `installworld` процесса сборки NanoBSD, а также "
+"внутренние параметры, передаваемые основному процессу сборки NanoBSD. Эти "
+"параметры позволяют сократить систему так, чтобы она помещалась всего на 64 "
+"МБ. Вы можете использовать конфигурационные опции для ещё большего урезания "
+"FreeBSD, пока она не будет состоять только из ядра и двух-трёх файлов в "
+"пользовательском пространстве."
+
+#. 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 ""
+"`NANO_NAME` - Имя сборки (используется для формирования имен рабочих "
+"каталогов)."
+
+#. 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 "`NANO_SRC` - Путь к исходному дереву, используемому для сборки образа."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:224
+msgid "`NANO_KERNEL` - Name of kernel configuration file used to build kernel."
+msgstr ""
+"`NANO_KERNEL` - Имя файла конфигурации ядра, используемого для сборки ядра."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:225
+msgid "`CONF_BUILD` - Options passed to the `buildworld` stage of the build."
+msgstr "`CONF_BUILD` - Параметры, передаваемые на этапе `buildworld` сборки."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:226
+msgid ""
+"`CONF_INSTALL` - Options passed to the `installworld` stage of the build."
+msgstr ""
+"`CONF_INSTALL` - Параметры, передаваемые на этапе `installworld` при сборке."
+
+#. 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 ""
+"`CONF_WORLD` - Параметры, передаваемые на этапах `buildworld` и "
+"`installworld` сборки."
+
+#. 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 ""
+"`FlashDevice` - Определяет тип носителя для использования. Подробности "
+"смотрите в [.filename]#FlashDevice.sub#."
+
+#. 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 ""
+"Существует множество дополнительных параметров конфигурации, которые могут "
+"быть актуальными в зависимости от типа NanoBSD."
+
+#. 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 "`run_early_customize`: до выполнения любых других действий."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:237
+msgid "`run_customize`: after all the standard files have been laid out"
+msgstr "`run_customize`: после того как все стандартные файлы будут размещены"
+
+#. 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 ""
+"`run_late_customize`: в самом конце процесса, непосредственно перед "
+"созданием фактического образа NanoBSD."
+
+#. 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 ""
+"Для настройки образа NanoBSD на любом из этих этапов лучше всего добавить "
+"конкретное значение в одну из соответствующих переменных."
+
+#. 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 ""
+"Переменная `NANO_EARLY_CUSTOMIZE` используется на первом этапе процесса "
+"сборки. На данный момент нет примера того, что можно сделать с помощью этой "
+"переменной, но это может измениться в будущем."
+
+#. 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 ""
+"Переменная `NANO_CUSTOMIZE` используется после установки ядра, системы и "
+"конфигурационных файлов etc, а также настройки файлов etc для установки "
+"NanoBSD. Таким образом, это правильный этап процесса сборки для изменения "
+"параметров конфигурации и добавления пакетов, как в примере cust_nobeastie."
+
+#. 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 ""
+"Переменная `NANO_LATE_CUSTOMIZE` используется непосредственно перед "
+"созданием образа диска, поэтому это последний момент для внесения изменений. "
+"Помните, что процедура `setup_nanobsd` уже выполнена и каталоги [."
+"filename]#etc#, [.filename]#conf# и [.filename]#cfg#, включая подкаталоги, "
+"уже изменены, поэтому сейчас не время их корректировать. Вместо этого можно "
+"добавить или удалить конкретные файлы."
+
+#. 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 ""
+"Существуют также переменные, которые могут изменить способ загрузки образа "
+"NanoBSD. Два параметра передаются в man:boot0cfg[8] для инициализации "
+"загрузочного сектора образа диска:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:257
+msgid "`NANO_BOOT0CFG`"
+msgstr "`NANO_BOOT0CFG`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:258
+msgid "`NANO_BOOTLOADER`"
+msgstr "`NANO_BOOTLOADER`"
+
+#. 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 ""
+"С помощью `NANO_BOOTLOADER` можно выбрать файл загрузчика. Наиболее "
+"распространённые варианты — [.filename]#boot0sio# и [.filename]#boot0#, в "
+"зависимости от наличия последовательного порта у устройства. Лучше не "
+"указывать другой загрузчик, но это возможно. Для этого рекомендуется "
+"предварительно ознакомиться с extref:{handbook}boot[главой FreeBSD Handbook] "
+"о процессе загрузки."
+
+#. 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 ""
+"С помощью `NANO_BOOT0CFG` можно настроить процесс загрузки, например, "
+"выбрать раздел, с которого будет загружаться образ NanoBSD. Перед изменением "
+"значения этой переменной рекомендуется ознакомиться со страницей руководства "
+"man:boot0cfg[8]. Один из интересных параметров, который можно изменить, — "
+"это таймаут процедуры загрузки. Для этого переменную `NANO_BOOT0CFG` можно "
+"изменить на `\"-o packet -s 1 -m 3 -t 36\"`. В этом случае процесс загрузки "
+"начнётся примерно через 2 секунды, так как редко возникает необходимость "
+"ждать 10 секунд перед началом загрузки."
+
+#. 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 ""
+"Хорошо знать: переменная `NANO_BOOT2CFG` используется только в подпрограмме "
+"`cust_comconsole`, которая может вызываться на этапе `NANO_CUSTOMIZE`, если "
+"устройство имеет последовательный порт и весь ввод и вывод консоли должен "
+"осуществляться через него. Обязательно проверьте соответствующие параметры "
+"последовательного порта, так как установка некорректного значения параметра "
+"может сделать его бесполезным."
+
+#. 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 ""
+"В конце процесса загрузки происходит создание образа диска. На этом этапе "
+"скрипт NanoBSD предоставляет файл, который можно просто скопировать на диск "
+"для устройства, и это позволит ему загрузиться и запуститься."
+
+#. 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 ""
+"Переменная `NANO_DRIVE` должна быть установлена в имя накопителя носителя во "
+"время выполнения. Обычно ожидается, что значение по умолчанию `ada0`, "
+"которое представляет первое устройство `IDE`/`ATA`/`SATA` на устройстве, "
+"будет правильным, но также может использоваться другой тип накопителя — "
+"например, USB-ключ, в этом случае это скорее будет `da0`."
+
+#. 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 ""
+"Переменная `NANO_MEDIASIZE` должна быть установлена в значение размера (в "
+"секторах по 512 байт) носителя данных, который будет использоваться. Если "
+"задать её неправильно, образ NanoBSD может вообще не загрузиться, а во время "
+"загрузки появится сообщение о некорректной геометрии диска."
+
+#. 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 ""
+"Каталоги [.filename]#/etc#, [.filename]#/var# и [.filename]#/tmp# выделяются "
+"как диски man:md[4] (malloc) при загрузке; их размеры могут быть настроены в "
+"соответствии с потребностями устройства. Переменная `NANO_RAM_ETCSIZE` "
+"задаёт размер [.filename]#/etc#, а переменная `NANO_RAM_TMPVARSIZE` "
+"определяет размер как [.filename]#/var#, так и [.filename]#/tmp#, поскольку ["
+".filename]#/tmp# символически ссылается на [.filename]#/var/tmp#. По "
+"умолчанию размер обоих дисков malloc установлен в 20 МБ каждый. Их можно "
+"изменить, но обычно [.filename]#/etc# не сильно увеличивается в размере, "
+"поэтому 20 МБ — хорошая начальная точка, тогда как [.filename]#/var# и "
+"особенно [.filename]#/tmp# могут стать значительно больше, если не следить "
+"за ними. Для систем с ограниченной памятью можно выбрать меньшие размеры "
+"файловых систем."
+
+#. 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 ""
+"Поскольку NanoBSD в основном предназначен для создания образа системы для "
+"устройства, предполагается, что используемые носители данных будут "
+"относительно небольшими. По этой причине файловая система настроена на "
+"использование небольшого размера блока (4 Кб) и небольшого размера фрагмента "
+"(512 байт). Параметры конфигурации файловой системы можно изменить с помощью "
+"переменной `NANO_NEWFS`, но синтаксис должен соответствовать формату команды "
+"man:newfs[8]. Кроме того, по умолчанию в файловой системе включены Soft "
+"Updates. Подробнее об этом можно узнать в extref:{handbook}[FreeBSD "
+"Handbook]."
+
+#. 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 ""
+"Различные размеры разделов могут быть заданы с использованием `NANO_CODESIZE`"
+", `NANO_CONFSIZE` и `NANO_DATASIZE` в виде кратного 512-байтным секторам. "
+"`NANO_CODESIZE` определяет размер первых двух разделов образа: `code#1` и "
+"`code#2`. Они должны быть достаточно большими, чтобы вместить все файлы, "
+"созданные в результате процессов `buildworld` и `buildkernel`. "
+"`NANO_CONFSIZE` определяет размер раздела для конфигурационных файлов, "
+"поэтому он не должен быть очень большим; однако не стоит делать его слишком "
+"маленьким, чтобы он мог вместить все конфигурационные файлы. Наконец, "
+"`NANO_DATASIZE` определяет размер дополнительного раздела, который может "
+"использоваться на устройстве. Последний раздел может быть использован, "
+"например, для хранения файлов, создаваемых на лету на диске."
+
+#. 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 ""
+"Возможно тонко настроить NanoBSD с помощью функций оболочки в "
+"конфигурационном файле. Следующий пример иллюстрирует базовую модель "
+"пользовательских функций:"
+
+#. 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 ""
+"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: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 ""
+"Более полезный пример функции настройки — следующий, который изменяет размер "
+"каталога [.filename]#/etc# по умолчанию с 5 МБ на 30 МБ:"
+
+#. 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 ""
+"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: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 ""
+"`cust_comconsole` - Отключает man:getty[8] на VGA-устройствах (узлы "
+"устройств [.filename]#/dev/ttyv*#) и позволяет использовать последовательный "
+"порт COM1 в качестве системной консоли."
+
+#. 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 "`cust_allow_ssh_root` - Разрешить `root` входить через man:sshd[8]."
+
+#. 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 ""
+"`cust_install_files` - Устанавливает файлы из каталога [.filename]#nanobsd/"
+"Files#, который содержит полезные скрипты для администрирования системы."
+
+#. 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 ""
+"`cust_pkgng` - Устанавливает пакеты из каталога [.filename]#nanobsd/Pkg# ("
+"также требуется пакет pkg-* для начальной загрузки)."
+
+#. 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 ""
+"Пакеты могут быть добавлены в образ NanoBSD для обеспечения специфических "
+"функциональных возможностей устройства. Для этого можно:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:325
+msgid "Add the `cust_pkgng` to the `NANO_CUSTOMIZE` variable, or"
+msgstr "Добавьте `cust_pkgng` в переменную `NANO_CUSTOMIZE` или"
+
+#. 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 ""
+"Добавьте команду `'customize_cmd cust_pkgng'` в настраиваемый "
+"конфигурационный файл."
+
+#. 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 ""
+"Оба метода приводят к одному результату: запуск процедуры `cust_pkgng`. Эта "
+"процедура проверит каталог `NANO_PACKAGE_DIR` для поиска всех пакетов или "
+"только списка пакетов, указанных в переменной `NANO_PACKAGE_LIST`."
+
+#. 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 ""
+"Обычно при установке приложений через pkg в стандартной среде FreeBSD "
+"процесс установки размещает конфигурационные файлы в каталоге [.filename]#"
+"usr/local/etc#, а скрипты запуска — в каталоге [.filename]#/usr/local/etc/rc."
+"d#. Поэтому после установки необходимых пакетов их нужно настроить, чтобы "
+"они запускались сразу после установки. Для этого необходимо разместить "
+"соответствующие конфигурационные файлы в правильных каталогах. Это можно "
+"сделать, написав специализированные процедуры, или использовать общую "
+"процедуру `cust_install_files` для корректного размещения файлов из каталога "
+"[.filename]#/usr/src/tools/tools/nanobsd/Files#. Обычно также требуется "
+"добавить одну или несколько записей в файл [.filename]#/etc/rc.conf# для "
+"каждого пакета."
+
+#. 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 ""
+"Полный пример конфигурационного файла для создания пользовательского образа "
+"NanoBSD может выглядеть следующим образом:"
+
+#. 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 ""
+"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:352
+#, 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: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 ""
+"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: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 ""
+"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:381
+#, no-wrap
+msgid "FlashDevice SanDisk 1G\n"
+msgstr "FlashDevice SanDisk 1G\n"
+
+#. 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 ""
+"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: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 ""
+"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: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 ""
+"Все параметры сборки и установки можно найти на странице Справочника man:src."
+"conf[5], но не все параметры можно или следует использовать при создании "
+"образа NanoBSD. Параметры сборки и установки должны определяться в "
+"соответствии с потребностями создаваемого образа."
+
+#. 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 ""
+"Например, FTP-клиент и сервер могут не потребоваться. Добавление "
+"`WITHOUT_FTP=TRUE` в файл конфигурации в разделе `CONF_BUILD` позволит "
+"избежать их сборки. Также, если устройство NanoBSD не будет использоваться "
+"для сборки программ, можно добавить `WITHOUT_BINUTILS=TRUE` в раздел "
+"`CONF_INSTALL`, но не в раздел `CONF_BUILD`, так как они будут "
+"использоваться для сборки образа NanoBSD."
+
+#. 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 "Обновление NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:405
+msgid "The update process of NanoBSD is relatively simple:"
+msgstr "Процесс обновления NanoBSD относительно прост:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:409
+msgid "Build a new NanoBSD image, as usual."
+msgstr "Соберите новый образ NanoBSD, как обычно."
+
+#. 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 ""
+"Загрузите новый образ в неиспользуемый раздел работающего устройства NanoBSD."
+
+#. 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 ""
+"Важнейшее отличие этого шага от первоначальной установки NanoBSD заключается "
+"в том, что теперь вместо использования [.filename]#\\_.disk.full# (который "
+"содержит образ всего диска), устанавливается образ [.filename]#_.disk.image# "
+"(который содержит образ одного системного раздела)."
+
+#. 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 ""
+"Для установки нового образа на работающую систему NanoBSD можно использовать "
+"скрипт [.filename]#updatep1# или [.filename]#updatep2#, расположенный в "
+"директории [.filename]#/root#, в зависимости от того, с какого раздела "
+"запущена текущая система."
+
+#. 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 ""
+"В зависимости от того, какие службы доступны на хосте, предоставляющем новый "
+"образ NanoBSD, и какой тип передачи предпочтителен, можно рассмотреть один "
+"из этих трех способов:"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:421
+#, no-wrap
+msgid "Using man:ftp[1]"
+msgstr "Использование man:ftp[1]"
+
+#. 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 ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:431
+#, no-wrap
+msgid "Using man:ssh[1]"
+msgstr "Использование man:ssh[1]"
+
+#. 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 "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:440
+#, no-wrap
+msgid "Using man:nc[1]"
+msgstr "Использование man:nc[1]"
+
+#. 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 ""
+"Попробуйте этот пример, если на удалённом хосте не запущены ни служба "
+"man:ftpd[8], ни служба man:sshd[8]:"
+
+#. 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 ""
+"Сначала откройте TCP-слушатель на хосте, обслуживающем образ, и настройте "
+"его на отправку образа клиенту:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:451
+#, 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:456
+msgid ""
+"Make sure that the used port is not blocked to receive incoming connections "
+"from NanoBSD host by firewall."
+msgstr ""
+"Убедитесь, что используемый порт не заблокирован для приёма входящих "
+"подключений с хоста NanoBSD межсетевым экраном."
+
+#. 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 ""
+"Подключитесь к хосту, предоставляющему новый образ, и выполните скрипт [."
+"filename]#updatep1#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:462
+#, no-wrap
+msgid "# nc myhost 2222 | sh updatep1\n"
+msgstr "# nc myhost 2222 | sh updatep1\n"
diff --git a/documentation/content/ru/articles/new-users/_index.adoc b/documentation/content/ru/articles/new-users/_index.adoc
index 541ef8470c..5338731a98 100644
--- a/documentation/content/ru/articles/new-users/_index.adoc
+++ b/documentation/content/ru/articles/new-users/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Пособие для новичков во FreeBSD и UNIX®
authors:
- - author: Annelise Anderson
+ -
+ author: 'Annelise Anderson'
email: andrsn@andrsn.stanford.edu
+description: 'Введение для пользователей, не знакомых с FreeBSD и UNIX®'
+tags: ["Introduction", "basics", "FreeBSD", "UNIX"]
+title: 'Для тех, кто новичок и в FreeBSD, и в UNIX®'
trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"]
---
@@ -49,11 +52,11 @@ toc::[]
[[in-and-out]]
== Регистрация в системе и выход из неё
-Зарегистрируйтесь в системе (когда увидите приглашение `login:`) как пользователь, которого вы создали во время установки, или войдите в систему как пользователь `root`. (В вашей установленной системе уже имеется учётная запись для пользователя `root`; который может переходить хоть куда и делать всё, что угодно, в том числе удаление необходимых для работы файлов, так что будьте внимательны!) Обозначения % и # в последующем тексте означают приглашения системы (ваше может отличаться от него), причём % обозначает обычного пользователя, а # пользователя `root`.
+Войдите в систему (когда увидите `login:`), используя пользователя, созданного во время установки, или как `root`. (В вашей установке FreeBSD уже будет учётная запись для `root`; этот пользователь может ходить куда угодно и делать что угодно, включая удаление важных файлов, так что будьте осторожны!) Символы % и # в дальнейшем обозначают приглашение командной строки (у вас оно может выглядеть иначе), где % означает обычного пользователя, а # — `root`.
Чтобы выйти из системы (и получить новое приглашение `login:`) наберите
-[source,shell]
+[source, shell]
....
# exit
....
@@ -62,21 +65,21 @@ toc::[]
Для завершения работы машины наберите
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -h now
....
Или, для перезагрузки нужно набрать
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -r now
....
или
-[source,shell]
+[source, shell]
....
# /sbin/reboot
....
@@ -88,7 +91,7 @@ toc::[]
Если при установке системы вы не создали ни одного пользователя, и поэтому вошли в систему как `root`, то теперь вы должны создать пользователя по команде
-[source,shell]
+[source, shell]
....
# adduser
....
@@ -97,7 +100,7 @@ toc::[]
Предположим, что вы создали пользователя `jack` с полным именем __Jack Benimble__. Назначьте пользователю `jack` пароль, если информационная безопасность имеет значение (даже если это дети, которые могут стучать по клавиатуре). Когда вам будет задан вопрос по включению пользователя `jack` в другие группы, наберите `wheel`
-[source,shell]
+[source, shell]
....
Login group is "jack". Invite jack into other groups: wheel
....
@@ -175,14 +178,14 @@ Login group is "jack". Invite jack into other groups: wheel
Некоторые из этих команд работают не очень хорошо? Обе команды man:locate[1] и man:whatis[1] зависят от базы данных, которая перестраивается еженедельно. Если ваша машина будет оставаться включенной на выходные (и она работает под FreeBSD), то вы можете пожелать запускать определённые команды раз в день, неделю, месяц. Запускайте их как `root` и дайте каждой отработать, прежде чем запускать следующую.
-[source,shell]
+[source, shell]
....
# periodic daily
-выдача опущена
+output omitted
# periodic weekly
-выдача опущена
+output omitted
# periodic monthly
-выдача опущена
+output omitted
....
Если вам надоело ждать, нажмите kbd:[Alt+F2] для перехода в другую _виртуальную консоль_, и войдите в систему снова. В конце концов, это многопользовательская и многозадачная система. Тем не менее эти команды, скорее всего, в процессе работы будут выдавать сообщения вам на экран; вы можете набрать `clear` в приглашении для очистки экрана. Пока они работают, вы можете смотреть в содержимое файлов [.filename]#/var/mail/root# и [.filename]#/var/log/messages#.
@@ -196,14 +199,14 @@ Login group is "jack". Invite jack into other groups: wheel
Перед тем, как редактировать файл, наверное, вы должны сохранить резервную копию. Предположим, что вы собираетесь отредактировать файл [.filename]#/etc/rc.conf#. Вы можете воспользоваться командой `cd /etc` для перехода в каталог [.filename]#/etc# и выполнить следующее:
-[source,shell]
+[source, shell]
....
# cp rc.conf rc.conf.orig
....
При этом файл [.filename]#rc.conf# скопируется в [.filename]#rc.conf.orig#, и в последующем вы сможете скопировать [.filename]#rc.conf.orig# в файл [.filename]#rc.conf# для восстановления оригинала. Но ещё лучше его переместить (переименовать), после чего скопировать обратно:
-[source,shell]
+[source, shell]
....
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
@@ -211,7 +214,7 @@ Login group is "jack". Invite jack into other groups: wheel
потому что команда `mv` сохраняет исходную информацию о дате и владельце файла. Теперь вы можете редактировать [.filename]#rc.conf#. Если вы захотите восстановить исходное состояние, то выполните `mv rc.conf rc.conf.myedit` (полагаем, что вы хотите сохранить отредактированную версию), а затем
-[source,shell]
+[source, shell]
....
# mv rc.conf.orig rc.conf
....
@@ -220,7 +223,7 @@ Login group is "jack". Invite jack into other groups: wheel
Для редактирования файла наберите
-[source,shell]
+[source, shell]
....
# vi filename
....
@@ -262,8 +265,8 @@ Login group is "jack". Invite jack into other groups: wheel
kbd:[Ctrl+L]::
для перерисовки экрана
-kbd:[Ctrl+b] и kbd:[Ctrl+f]::
-для перемотки на экран назад и вперёд, как при работе с `more` и `view`.
+kbd:[Ctrl+b] and kbd:[Ctrl+f]::
+для перелистывания экрана вперед и назад, как это делается в `more` и `view`.
Поупражняйтесь с редактором `vi` в своём домашнем каталоге, создав новый файл по команде `vi _filename_`, добавляя и удаляя текст, сохраняя файл и вызывая его снова. Редактор `vi` преподносит некоторые сюрпризы, потому что он на самом деле достаточно сложный, и иногда вы можете неправильно вызвать команду, которая сделает нечто, чего вы не ожидали. (Некоторым людям действительно нравится `vi`-он более мощный, чем EDIT из DOS-посмотрите команду `:r`.) Для того, чтобы удостовериться, что вы находитесь в режиме команд, нажимайте kbd:[Esc] один или несколько раз, и начинайте снова с этого места, если возникли какие-то проблемы, часто сохраняйте текст командой `:w` и используйте `:q!` для того, чтобы прекратить работу и начать всё сначала (с вашей последней команды `:w`), если это нужно.
@@ -295,7 +298,7 @@ kbd:[Ctrl+b] и kbd:[Ctrl+f]::
Используйте `find` для поиска [.filename]#filename# в [.filename]#/usr# или в любом из её подкаталогов при помощи команды
-[source,shell]
+[source, shell]
....
% find /usr -name "filename"
....
@@ -313,7 +316,7 @@ kbd:[Ctrl+b] и kbd:[Ctrl+f]::
Найдите нужный вам порт, скажем, `kermit`. На CDROM для него должен существовать каталог. Скопируйте этот подкаталог в каталог [.filename]#/usr/local# (хорошее место для программного обеспечения, которое вы добавляете, и которое должно быть доступно всем пользователям) такой командой:
-[source,shell]
+[source, shell]
....
# cp -R /cdrom/ports/comm/kermit /usr/local
....
@@ -324,7 +327,7 @@ kbd:[Ctrl+b] и kbd:[Ctrl+f]::
После этого по команде `cd` перейдите в подкаталог [.filename]#/usr/local/kermit#, в котором есть файл [.filename]#Makefile#. Наберите
-[source,shell]
+[source, shell]
....
# make all install
....
@@ -343,13 +346,14 @@ kbd:[Ctrl+b] и kbd:[Ctrl+f]::
Вот три шага по установке нового командного процессора:
[.procedure]
+====
. Установите командный процессор как порт или пакет, как вы обычно это делаете с другим портом или пакетом.
-. Работая как пользователь `root`, отредактируйте файл [.filename]#/etc/shells#, добавив в него строку с новой оболочкой, в нашем случае это [.filename]#/usr/local/bin/tcsh#, и сохраните файл. (Некоторые порты могут делать это за вас.)
-. Воспользуйтесь командой `chsh` для смены постоянно используемой вами оболочки на `tcsh`, либо наберите `tcsh` в командной строке для смены вашей оболочки без повторного входа в систему.
+. Используйте `chsh`, чтобы навсегда изменить оболочку на `tcsh`, или введите `tcsh` в командной строке, чтобы сменить оболочку без повторного входа в систему.
+====
[NOTE]
====
-Менять командный процессор для пользователя `root` на что-то, отличающееся от `sh` или `csh`, в ранних версиях FreeBSD и во многих других версиях UNIX(R) может быть опасно; вы можете лишиться работающей оболочки при переходе системы в однопользовательский режим. Решением является использование `su -m` для того, чтобы стать пользователем `root`, что даст в качестве оболочки `tcsh`, но вы будете являться пользователем `root`, потому что оболочка является частью окружения. Вы можете сделать это постоянным, добавив в ваш файл [.filename]#.tcshrc# в качестве алиаса по такой команде:
+Может быть опасно изменять оболочку `root` на что-то отличное от `sh` или `csh` в ранних версиях FreeBSD и многих других версиях UNIX(R); у вас может не оказаться рабочей оболочки, когда система переведёт вас в однопользовательский режим. Решение заключается в использовании `su -m` для получения прав `root`, что даст вам `tcsh` в качестве оболочки `root`, так как оболочка является частью окружения. Вы можете сделать это постоянным, добавив в ваш [.filename]#.tcshrc# алиас с:
[.programlisting]
....
@@ -369,7 +373,7 @@ set prompt = "%h %t %~ %# "
Перечень других установленных переменных окружения вы можете получить, набрав `env` в приглашении командной строки. В результате, кроме всего прочего, будут показаны редактор, используемый по умолчанию, программа постраничной выдачи и тип терминала. Командой, полезной при входе в систему с удалённого места и невозможности запуска программы, потому что терминал не обладает некоторыми возможностями, является команда `setenv TERM vt100`.
[[other]]
-== Остальное
+== Другие
Работая как пользователь `root`, вы можете отмонтировать CDROM по команде `/sbin/umount /cdrom`, вытащить его из привода, вставить другой диск и смонтировать его командой `/sbin/mount_cd9660 /dev/cd0a /cdrom`, при этом предполагается, что `cd0a` является именем устройства для вашего привода CDROM. Самые последние версии FreeBSD позволяют вам монтировать CDROM просто по команде `/sbin/mount /cdrom`.
diff --git a/documentation/content/ru/articles/new-users/_index.po b/documentation/content/ru/articles/new-users/_index.po
new file mode 100644
index 0000000000..e0c5a1b6e9
--- /dev/null
+++ b/documentation/content/ru/articles/new-users/_index.po
@@ -0,0 +1,1440 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-21 12:28+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesnew-users_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "Introduction for people new to both FreeBSD and UNIX®"
+msgstr "Введение для пользователей, не знакомых с FreeBSD и UNIX®"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX®"
+msgstr "Для тех, кто новичок и в FreeBSD, и в 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 "Пособие для новичков во FreeBSD и UNIX(R)"
+
+#. 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 ""
+"Поздравляем вас с установкой FreeBSD! Это вводное пособие предназначено для "
+"тех, кто является новичком в мире FreeBSD _и_ UNIX(R)-так что оно начнётся с "
+"основ."
+
+#. 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 ""
+"Войдите в систему (когда увидите `login:`), используя пользователя, "
+"созданного во время установки, или как `root`. (В вашей установке FreeBSD "
+"уже будет учётная запись для `root`; этот пользователь может ходить куда "
+"угодно и делать что угодно, включая удаление важных файлов, так что будьте "
+"осторожны!) Символы % и # в дальнейшем обозначают приглашение командной "
+"строки (у вас оно может выглядеть иначе), где % означает обычного "
+"пользователя, а # — `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 ""
+"Чтобы выйти из системы (и получить новое приглашение `login:`) наберите"
+
+#. 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 ""
+"столько раз, сколько нужно. Да, нажимайте kbd:[enter] после набора команд, и "
+"помните, что UNIX(R) чувствителен к регистру букв-набирайте `exit`, но не "
+"`EXIT`."
+
+#. 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 "# /sbin/shutdown -h now\n"
+
+#. 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 "# /sbin/shutdown -r now\n"
+
+#. 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 "# /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 ""
+"Перезагрузку можно также выполнить нажатием клавиш kbd:[Ctrl+Alt+Delete]. "
+"Подождите некоторое время, чтобы дать этой команде отработать. В последних "
+"релизах FreeBSD она эквивалента выдаче команды `/sbin/reboot` и гораздо, "
+"гораздо лучше, чем нажатие кнопки сброса. Вы ведь не хотите всё "
+"переустанавливать заново, не так ли?"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:96
+#, no-wrap
+msgid "Adding a User with Root Privileges"
+msgstr "Добавление пользователя с привилегиями 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 ""
+"Если при установке системы вы не создали ни одного пользователя, и поэтому "
+"вошли в систему как `root`, то теперь вы должны создать пользователя по "
+"команде"
+
+#. 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 ""
+"При первом использовании утилиты `adduser` она может запрашивать сохранение "
+"некоторых параметров для использования их по умолчанию. вы можете сделать "
+"оболочкой, используемой по умолчанию, командный процессор man:csh[1], а не "
+"man:sh[1], если по умолчанию вам предлагается `sh`. В противном случае "
+"просто нажимайте enter для принятия всех предлагаемых по умолчанию "
+"вариантов. Эти значения по умолчанию сохраняются в файле [.filename]#/etc/"
+"adduser.conf#, в форме, доступной для редактирования."
+
+#. 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 ""
+"Предположим, что вы создали пользователя `jack` с полным именем __Jack "
+"Benimble__. Назначьте пользователю `jack` пароль, если информационная "
+"безопасность имеет значение (даже если это дети, которые могут стучать по "
+"клавиатуре). Когда вам будет задан вопрос по включению пользователя `jack` в "
+"другие группы, наберите `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 ""
+"Это позволит входить в систему как пользователь `jack` и использовать "
+"команду man:su[1] для того, чтобы стать пользователем `root`. Тогда вас не "
+"будут больше обвинять в том, чтобы вы входите в систему как пользователь "
+"`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 ""
+"Вы можете прекратить работы с `adduser` в любой момент, нажав kbd:[Ctrl+C], "
+"а в завершении ввода у вас будет шанс подтвердить заведение нового "
+"пользователя или набрать kbd:[n] в качестве отрицательного ответа. Вам может "
+"захотеться создать второго нового пользователя, для того, чтобы при "
+"редактировании файлов для входа пользователя `jack` имелся горячий резерв на "
+"тот случай, если что-то пойдёт не так."
+
+#. 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 ""
+"После того, как вы это сделаете, воспользуйтесь командой `exit` для возврата "
+"к приглашению ко входу в систему и зарегистрируйтесь в ней как пользователь "
+"`jack`. Вообще говоря, лучше всего основную массу работы выполнять, работая "
+"как обычный пользователь, который не имеет мощь и опасность пользователя "
+"`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 ""
+"Если вы уже создали пользователя и хотите, чтобы он мог выполнять команду "
+"`su` для получения привилегий `root`, вы можете войти в систему как `root` и "
+"отредактировать файл [.filename]#/etc/group#, добавив пользователя `jack` в "
+"первую строчку (в группу `wheel`). Однако сначала вам нужно поупражняться с "
+"программой man:vi[1], текстовым редактором,-или использовать более простой "
+"редактор, man:ee[1], имеющийся в последней версии FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:132
+msgid "To delete a user, use `rmuser`."
+msgstr "Для удаления пользователя воспользуйтесь командой `rmuser`."
+
+#. 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 ""
+"Войдя в систему как обычный пользователь, оглянитесь вокруг и попробуйте "
+"выполнить некоторые команды, дающие доступ к источникам информации и помощи "
+"внутри FreeBSD."
+
+#. 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 "`id`"
+
+#. 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 "`pwd`"
+
+#. 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 "`ls`"
+
+#. 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 "`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 ""
+"Выдаёт перечень файлов, находящихся в текущем каталоге, добавляя символы "
+"`\\*` после выполнимых файлов, `/` после каталогов и `@` после символических "
+"ссылок."
+
+#. 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 ""
+"Выдаёт перечень файлов в расширенном формате-размер, дата и права доступа."
+
+#. 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 ""
+"Вместе со всеми выдаёт и список скрытых \"dot\"-файлов (начинающихся с "
+"точки). Если вы являетесь пользователем `root`, то \"dot\"-файлы выдаются и "
+"без указания флага `-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 ""
+"Смена каталогов. `cd ..` перемещает на один уровень выше; обратите внимание "
+"на промежуток после `cd`. `cd /usr/local` перейдёт в указанное место. `cd ~` "
+"перейдёт в домашний каталог человека, который вошёл в систему-к примеру, "
+"[.filename]#/usr/home/jack#. попробуйте выполнить команду `cd /cdrom`, а "
+"затем `ls` для проверки того, что ваш CDROM смонтирован и работает."
+
+#. 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 ""
+"Позволяет вам просмотреть файл (с именем _filename_) без внесения в него "
+"изменений. Попробуйте выполнить команду `less /etc/fstab`. Для выхода "
+"наберите `q`."
+
+#. 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 ""
+"Выдаёт содержимое _filename_ на экран. если он слишком длинный и вы можете "
+"увидеть только его конец, нажмите kbd:[ScrollLock] и используйте клавишу kbd:"
+"[стрелка вверх] для движения назад; вы можете также использовать kbd:"
+"[ScrollLock] и со страницами справки. Нажмите kbd:[ScrollLock] снова для "
+"прекращения прокрутки. Вам может захотеться попробовать команду `cat` с "
+"некоторыми из dot-файлов в вашем домашнем каталоге-`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 ""
+"В файле [.filename]#.cshrc# вы заметите алиасы для некоторых из команд `ls` "
+"(они очень удобны). Вы можете создать другие алиасы, отредактировав файл "
+"[.filename]#.cshrc#. Вы можете сделать эти алиасы доступными всем "
+"пользователям системы, поместив их в общесистемный конфигурационный файл для "
+"`csh`, [.filename]#/etc/csh.cshrc#."
+
+#. 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 ""
+"Вот несколько полезных источников получения помощи. Здесь _Text_ обозначает "
+"что-то по вашему выбору, что вы вводите-обычно команду или имя файла."
+
+#. 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 "Всё, что содержит строку _text_ в `базе 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 ""
+"Страница справки по _text_. Это главный источник документации в UNIX(R)-"
+"системах. `man ls` покажет вам все способы использования команды `ls`. "
+"Нажимайте kbd:[Enter] для передвижения по тексту, kbd:[Ctrl+B] для возврата "
+"на страницу назад, kbd:[Ctrl+F] для продвижения вперёд, kbd:[q] или kbd:"
+"[Ctrl+C] для выхода."
+
+#. 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 ""
+"Покажет, в каком месте из маршрута поиска пользователя находится команда "
+"_text_."
+
+#. 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 "Все маршруты, где находится строчка _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 ""
+"Описывает, что делает команда _text_ и её справочная страница. Команда "
+"`whatis *` расскажет вам обо всех двоичных файлах в текущем каталоге."
+
+#. 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 "Ищет файл _text_ и выдаёт полный путь до него."
+
+#. 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 ""
+"Вы можете захотеть попробовать использоваться команду `whatis` с некоторыми "
+"полезными командами типа `cat`, `more`, `grep`, `mv`, `find`, `tar`, "
+"`chmod`, `chown`, `date`, и `script`. Команда `more` позволит вам читать "
+"постранично, как и в DOS, например, `ls -l | more` или `more _filename_`. "
+"Знак `\\*` работает как общий шаблон-например, `ls w*` выдаст перечень "
+"файлов, начинающихся с буквы `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 ""
+"Некоторые из этих команд работают не очень хорошо? Обе команды man:locate[1] "
+"и man:whatis[1] зависят от базы данных, которая перестраивается еженедельно. "
+"Если ваша машина будет оставаться включенной на выходные (и она работает под "
+"FreeBSD), то вы можете пожелать запускать определённые команды раз в день, "
+"неделю, месяц. Запускайте их как `root` и дайте каждой отработать, прежде "
+"чем запускать следующую."
+
+#. 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 ""
+"Если вам надоело ждать, нажмите kbd:[Alt+F2] для перехода в другую "
+"_виртуальную консоль_, и войдите в систему снова. В конце концов, это "
+"многопользовательская и многозадачная система. Тем не менее эти команды, "
+"скорее всего, в процессе работы будут выдавать сообщения вам на экран; вы "
+"можете набрать `clear` в приглашении для очистки экрана. Пока они работают, "
+"вы можете смотреть в содержимое файлов [.filename]#/var/mail/root# и "
+"[.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 ""
+"Выполнение таких команд является частью системного администрирования-и как "
+"единственный пользователь UNIX(R)-системы вы являетесь собственным системным "
+"администратором. Практически всё, для чего вам нужно быть пользователем "
+"`root`, это системное администрирование. Эти обязанности не описываются "
+"достаточно хорошо даже в тех больших толстых книгах по UNIX(R), в которых "
+"слишком много места отдаётся описанию работы с меню в оконных менеджерах. "
+"Вам может понадобиться одна из двух лучших книг по системному "
+"администрированию, либо автора Эви Немет UNIX System Administration Handbook "
+"(Prentice-Hall, 1995, ISBN 0-13-15051-7)-второе издание с красной обложкой; "
+"или автора Æleen Frisch Essential System Administration (O'Reilly & "
+"Associates, 2002, ISBN 0-596-00343-9). Я использую книгу Немет."
+
+#. 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 ""
+"Для конфигурации вашей системы вам нужно редактировать текстовые файлы. "
+"Большинство из них будут находиться в каталоге [.filename]#/etc#; и вам "
+"необходимо командой `su` получить полномочия пользователя `root`, чтобы их "
+"править. Вы можете использовать простой редактор `ee`, однако в смысле "
+"перспективности лучше изучить текстовый редактор `vi`. В каталоге "
+"[.filename]#/usr/src/contrib/nvi/docs/tutorial# есть прекрасный учебник по "
+"vi, если у вас есть исходники системы."
+
+#. 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 ""
+"Перед тем, как редактировать файл, наверное, вы должны сохранить резервную "
+"копию. Предположим, что вы собираетесь отредактировать файл [.filename]#/etc/"
+"rc.conf#. Вы можете воспользоваться командой `cd /etc` для перехода в "
+"каталог [.filename]#/etc# и выполнить следующее:"
+
+#. 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 ""
+"При этом файл [.filename]#rc.conf# скопируется в [.filename]#rc.conf.orig#, "
+"и в последующем вы сможете скопировать [.filename]#rc.conf.orig# в файл "
+"[.filename]#rc.conf# для восстановления оригинала. Но ещё лучше его "
+"переместить (переименовать), после чего скопировать обратно:"
+
+#. 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 ""
+"потому что команда `mv` сохраняет исходную информацию о дате и владельце "
+"файла. Теперь вы можете редактировать [.filename]#rc.conf#. Если вы захотите "
+"восстановить исходное состояние, то выполните `mv rc.conf rc.conf.myedit` "
+"(полагаем, что вы хотите сохранить отредактированную версию), а затем"
+
+#. 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 "для возврата всего на место."
+
+#. 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 "# 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 ""
+"Передвигайтесь по тексту при помощи клавиш со стрелками. kbd:[Esc] (клавиша "
+"отмены) переводит редактор `vi` в командный режим. Вот некоторые из них:"
+
+#. 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 "удалить символ, на котором находится курсор"
+
+#. 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 ""
+"удалить целую строку (даже если на экране она не помещается в целую строку)"
+
+#. 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 "вставка текста в позиции курсора"
+
+#. 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 "вставка текста после курсора"
+
+#. 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 ""
+"Сразу после набора `i` или `a` вы можете вводить текст. `Esc` возвратит вас "
+"обратно в командный режим, где вы можете набрать"
+
+#. 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 "для записи ваших изменений на диск и продолжения редактирования"
+
+#. 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 "для записи и выхода"
+
+#. 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 "для выхода без сохранения изменений"
+
+#. 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 ""
+"для перемещения курсора на _text_; `/` kbd:[Enter] (клавиша ввода) для "
+"поиска следующего экземпляра _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 "для перехода в конец файла"
+
+#. 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 "Для перехода к строке _n_ в файле, где _n_ является числом"
+
+#. 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 "для перерисовки экрана"
+
+#. 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 ""
+"для перелистывания экрана вперед и назад, как это делается в `more` и `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 ""
+"Поупражняйтесь с редактором `vi` в своём домашнем каталоге, создав новый "
+"файл по команде `vi _filename_`, добавляя и удаляя текст, сохраняя файл и "
+"вызывая его снова. Редактор `vi` преподносит некоторые сюрпризы, потому что "
+"он на самом деле достаточно сложный, и иногда вы можете неправильно вызвать "
+"команду, которая сделает нечто, чего вы не ожидали. (Некоторым людям "
+"действительно нравится `vi`-он более мощный, чем EDIT из DOS-посмотрите "
+"команду `:r`.) Для того, чтобы удостовериться, что вы находитесь в режиме "
+"команд, нажимайте kbd:[Esc] один или несколько раз, и начинайте снова с "
+"этого места, если возникли какие-то проблемы, часто сохраняйте текст "
+"командой `:w` и используйте `:q!` для того, чтобы прекратить работу и начать "
+"всё сначала (с вашей последней команды `:w`), если это нужно."
+
+#. 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 ""
+"Теперь вы можете выполнить `cd` для перехода в каталог [.filename]#/etc#, "
+"`su` в пользователя `root`, использовать `vi` для редактирования файла "
+"[.filename]#/etc/group# и добавлять пользователя в группу `wheel`, чтобы он "
+"имел полномочия пользователя root. Просто добавьте запятую и имя входа "
+"пользователя в конце первой строки этого файла, нажмите kbd:[Esc] и "
+"воспользуйтесь `:wq` для записи файла на диск и выхода. Работает всегда. (Вы "
+"не поставили пробел после запятой, ведь так?)"
+
+#. 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 "`df`"
+
+#. 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 "`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 ""
+"показывает работающие процессы. `ps ax` является частоупотребительной формой."
+
+#. 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 "удаляет _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 "удаляет каталог _dir_ и все его подкаталоги-осторожно!"
+
+#. 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 ""
+"выдаёт список файлов в текущем каталоге и всех его подкаталогах; я "
+"использовал вариант, `ls -AFR > where.txt`, для получения перечня всех "
+"файлов в [.filename]#/# и (отдельно) [.filename]#/usr# до того, как узнал о "
+"более эффективном способе поиска файлов."
+
+#. 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 "для изменения пароля пользователя (или пароля `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 "справочная страница по файловой структуре 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 ""
+"Используйте `find` для поиска [.filename]#filename# в [.filename]#/usr# или "
+"в любом из её подкаталогов при помощи команды"
+
+#. 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 ""
+"Вы можете использовать `\\*` в качестве шаблона внутри `\"_filename_\"` (это "
+"выражение должно быть в кавычках). Если вы укажете команде `find` на поиск в "
+"[.filename]#/#, а не в [.filename]#/usr#, то она будет искать файл(ы) во "
+"всех смонтированных файловых системах, включая CDROM и раздел 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 ""
+"Прекрасным пособием, описывающим команды и утилиты UNIX(R), является книга "
+"Abrahams & Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). "
+"Масса информации по UNIX(R) есть и в Internet."
+
+#. 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 ""
+"Теперь вы должны иметь инструменты, которые необходимо держать под рукой и "
+"умеете редактировать файлы, так что вы должны суметь запустить всё, что "
+"угодно. Много полезной информации содержится в Руководстве по FreeBSD "
+"(которое, скорее всего, есть на вашем жёстком диске) и link:https://"
+"www.FreeBSD.org/[Web-сайте FreeBSD]. На CDROM, а также Web-сайте находятся "
+"различные пакеты и порты. В Руководстве рассказывается более подробно о том, "
+"как их использовать (получить пакет, если он существует, командой `pkg_add /"
+"cdrom/packages/All/_packagename_`, где _packagename_ является именем файла "
+"пакета). На CDROM находится перечни пакетов и портов с их краткими "
+"описаниями в файлах [.filename]#cdrom/packages/index#, [.filename]#cdrom/"
+"packages/index.txt# и [.filename]#cdrom/ports/index#, а более полные "
+"описания можно найти в [.filename]#/cdrom/ports/\\*/*/pkg/DESCR#, где знаки "
+"`*` обозначают тематические подкаталоги с программами и названиями программ, "
+"соответственно."
+
+#. 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 ""
+"Если вы посчитаете, что Руководство является слишком сложной книгой (что с "
+"`lndir` и всё) по установке портов с CDROM, вот рецепт, который обычно "
+"срабатывает:"
+
+#. 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 ""
+"Найдите нужный вам порт, скажем, `kermit`. На CDROM для него должен "
+"существовать каталог. Скопируйте этот подкаталог в каталог [.filename]#/usr/"
+"local# (хорошее место для программного обеспечения, которое вы добавляете, и "
+"которое должно быть доступно всем пользователям) такой командой:"
+
+#. 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 ""
+"В результате должен образоваться подкаталог [.filename]#/usr/local/kermit#, "
+"содержащий все файлы, что есть в подкаталоге `kermit` на 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 ""
+"Затем создайте каталог [.filename]#/usr/ports/distfiles#, если он ещё не "
+"существует, при помощи команды `mkdir`. Теперь проверьте содержимое "
+"[.filename]#/cdrom/ports/distfiles# на предмет наличия файла с именем, "
+"говорящем о том, что это тот порт, который вы хотите иметь. Скопируйте этот "
+"файл в каталог [.filename]#/usr/ports/distfiles#; в последних версиях вы "
+"можете пропустить этот шаг, и FreeBSD выполнит его за вас. В случае с "
+"`kermit`, дистрибутивного файла не существует."
+
+#. 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 ""
+"После этого по команде `cd` перейдите в подкаталог [.filename]#/usr/local/"
+"kermit#, в котором есть файл [.filename]#Makefile#. Наберите"
+
+#. 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 ""
+"Во время выполнения порт обратится к FTP для получения всех архивных файлов, "
+"нужных ему и которых не найдено на CDROM или в каталоге [.filename]#/usr/"
+"ports/distfiles#. Если сеть у вас ещё не работает, и файла для порта в "
+"каталоге [.filename]#/cdrom/ports/distfiles# нет, вам потребуется получить "
+"дистрибутивный файл на другой машине и скопировать его в каталог "
+"[.filename]#/usr/ports/distfiles#. Прочтите [.filename]#Makefile# (при "
+"помощи команд `cat`, `more` или `view`), чтобы понять, как называется файл и "
+"куда нужно обратиться (основной сайт распространения), чтобы его получить. "
+"(Используйте двоичный тип передачи файлов!) Затем перейдите обратно в "
+"каталог [.filename]#/usr/local/kermit#, найдите каталог с "
+"[.filename]#Makefile# и наберите `make all install`."
+
+#. 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 ""
+"Вместе с FreeBSD устанавливаются два командный процессора: `csh` и `sh`. "
+"`csh` хорош для работы в командной строке, однако скрипты должны писаться на "
+"языке оболочек `sh` (или `bash`). Вы можете выяснить, какой командный "
+"процессор у вас используется, набрав `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 ""
+"Оболочка `csh` подходящая, однако `tcsh` может всё, что умеет `csh` и ещё "
+"больше. Она позволяет вам восстанавливать прошлые команды клавишами со "
+"стрелками и редактировать их. В нём есть автозавершение имён файлов по "
+"нажатию клавиши табуляции (в `csh` используется клавиша kbd:[Esc]) и он "
+"позволяет вам переключаться в каталог, в котором вы были ранее, по команде "
+"`cd -`. Также в `tcsh` гораздо легче изменять системное приглашение. Это "
+"гораздо упрощает жизнь."
+
+#. 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 ""
+"Используйте `chsh`, чтобы навсегда изменить оболочку на `tcsh`, или введите "
+"`tcsh` в командной строке, чтобы сменить оболочку без повторного входа в "
+"систему."
+
+#. 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 ""
+"Может быть опасно изменять оболочку `root` на что-то отличное от `sh` или "
+"`csh` в ранних версиях FreeBSD и многих других версиях UNIX(R); у вас может "
+"не оказаться рабочей оболочки, когда система переведёт вас в "
+"однопользовательский режим. Решение заключается в использовании `su -m` для "
+"получения прав `root`, что даст вам `tcsh` в качестве оболочки `root`, так "
+"как оболочка является частью окружения. Вы можете сделать это постоянным, "
+"добавив в ваш [.filename]#.tcshrc# алиас с:"
+
+#. 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 ""
+"При запуске `tcsh` он будет считывать файлы [.filename]#/etc/csh.cshrc# и "
+"[.filename]#/etc/csh.login#, как и `csh`. Эта оболочка также читает файл "
+"[.filename]#.login# из вашего домашнего каталога, а также файл "
+"[.filename]#.cshrc#, если только вы не создали файл [.filename]#.tcshrc#. "
+"Это вы можете сделать простым копированием файла [.filename]#.cshrc# в "
+"[.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 ""
+"Теперь, когда у вас установлен командный процессор `tcsh`, вы можете "
+"настроить приглашение командной строки. Все подробности можно найти на "
+"странице справки по `tcsh`, но всё же вот строка, которая помещается в ваш "
+"файл [.filename]#.tcshrc#, которая может показать, сколько команд вы уже "
+"набрали, сколько сейчас времени и в каком каталоге вы находитесь. Она также "
+"выдаёт `>`, если вы являетесь обычным пользователем, и #, если вы являетесь "
+"пользователем `root`, однако tsch будет делать это в любом случае:"
+
+#. 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 ""
+"Эта строка должна быть поставлена на то же самое место, что и существующая "
+"строка установки приглашения, если она есть, либо после строки \"if($?"
+"prompt) then\", если её нет. Закомментируйте старую строку; вы всегда "
+"сможете вернуться к ней обратно, если предпочтёте её. Не забудьте о пробелах "
+"и кавычках. Вы можете заставить перечитать [.filename]#.tcshrc#, набрав "
+"`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 ""
+"Перечень других установленных переменных окружения вы можете получить, "
+"набрав `env` в приглашении командной строки. В результате, кроме всего "
+"прочего, будут показаны редактор, используемый по умолчанию, программа "
+"постраничной выдачи и тип терминала. Командой, полезной при входе в систему "
+"с удалённого места и невозможности запуска программы, потому что терминал не "
+"обладает некоторыми возможностями, является команда `setenv TERM vt100`."
+
+#. 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 ""
+"Работая как пользователь `root`, вы можете отмонтировать CDROM по команде `/"
+"sbin/umount /cdrom`, вытащить его из привода, вставить другой диск и "
+"смонтировать его командой `/sbin/mount_cd9660 /dev/cd0a /cdrom`, при этом "
+"предполагается, что `cd0a` является именем устройства для вашего привода "
+"CDROM. Самые последние версии FreeBSD позволяют вам монтировать CDROM просто "
+"по команде `/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 ""
+"Использование живой файловой системы-она находится на втором диске FreeBSD "
+"из набора CDROM-полезно при нехватке пространства. То, что находится в этой "
+"файловой системе, меняется от релиза к релизу. Вы можете попытаться поиграть "
+"в игры с CDROM. При этом применяется команда `lndir`, которая "
+"устанавливается с X Window System, и служит для указания программам, где "
+"искать необходимые файлы, потому что они находятся в файловой системе "
+"[.filename]#/cdrom#, а не в [.filename]#/usr# и её подкаталогах, где должны "
+"находиться. Прочтите справку по команде `man lndir`."
+
+#. 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 ""
+"Если вы используете это руководство, мне будет интересно знать, в каком "
+"месте оно написано непонятно и что упущено из того, что, по вашему мнению, "
+"должно быть включено ценного. Мои благодарности Eugene W. Stark, профессору "
+"информатики в SUNY-Stony Brook, и John Fieber за ценные советы."
+
+#. 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]"
diff --git a/documentation/content/ru/articles/pam/_index.adoc b/documentation/content/ru/articles/pam/_index.adoc
index 6735323179..cc392f3f4e 100644
--- a/documentation/content/ru/articles/pam/_index.adoc
+++ b/documentation/content/ru/articles/pam/_index.adoc
@@ -1,10 +1,48 @@
---
-title: Подключаемые Модули Аутентификации (PAM)
authors:
- - author: Dag-Erling Smørgrav
+ -
+ author: 'Dag-Erling Smørgrav'
+copyright: '2001-2003 Networks Associates Technology, Inc.'
+description: 'Руководство по системе PAM и модулям в FreeBSD'
+tags: ["pam", "introduction", "authentication", "modules", "FreeBSD"]
+title: 'Подключаемые Модули Аутентификации (PAM)'
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.
+////
+
= Подключаемые Модули Аутентификации (PAM)
:doctype: article
:toc: macro
@@ -40,7 +78,7 @@ include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
-Abstract
+Аннотация
В этой статье описываются принципы и механизмы, лежащие в основе библиотеки Подключаемых Модулей Аутентификации (PAM - Pluggable Authentication Modules), и рассказывается, как настроить PAM, как интегрировать PAM в приложения и как создавать модули PAM.
@@ -61,60 +99,59 @@ PAM описали и разработали Vipin Samar и Charlie Lai из Sun
== Термины и соглашения
[[pam-definitions]]
-== Определения
+=== Определения
Терминология, используемая в PAM, достаточно запутана. Ни оригинальная работа Samar и Lai, ни спецификация XSSO не делают никаких попыток формально определить термины для различных объектов и участвующих в PAM сторон, а термины, которые они используют (но не определяют) иногда неверны и неоднозначны. Первой попыткой создать недвусмысленную и согласованную терминологию была работа, которую написал Andrew G. Morgan (автор Linux-PAM) в 1999 году. Хотя выбор терминологии, которую сделал Морган, был гигантским скачком вперед, это, по мнению автора данной статьи, не означает ее правильность. Далее делается попытка, в значительной степени на основе работы Моргана, дать точные и недвусмысленные определения терминов для всех участников и объектов PAM.
-[.glosslist]
учётная запись (account)::
- Набор полномочий, которые аппликант запрашивает от арбитратора.
+Набор полномочий, которые аппликант запрашивает от арбитратора.
аппликант (applicant)::
- Пользователь или объект, запрашивающие аутентификацию.
+Пользователь или объект, запрашивающие аутентификацию.
арбитратор (arbitrator)::
- Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос.
+Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос.
цепочка (chain)::
- Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты.
+Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты.
клиент (client)::
- Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию.
+Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию.
подсистема (facility)::
- Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации.
+Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации.
модуль (module)::
- Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один (обычно динамически загружаемый) двоичный файл, идентифицируемый по имени.
+Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один (обычно динамически загружаемый) двоичный файл, идентифицируемый по имени.
политика (policy)::
- Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не все четыре подсистемы.
+Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не все четыре подсистемы.
сервер (server)::
- Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос.
+Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос.
сервис (service)::
- Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика.
+Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика.
сеанс (session)::
- Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста.
+Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста.
ключ (token)::
- Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации.
+Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации.
транзакция (transaction)::
- Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса.
+Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса.
[[pam-usage-examples]]
-== Примеры использования
+=== Примеры использования
Этот раздел предназначен для иллюстрации значений некоторых терминов, определенных выше, при помощи простых примеров.
-== Объединенные клиент и сервер
+==== Объединенные клиент и сервер
В этом простом примере показывается пользователь `alice`, выполняющий команду man:su[1] для того, чтобы стать пользователем `root`.
-[source,shell]
+[source, shell]
....
% whoami
alice
@@ -134,11 +171,11 @@ root
* Аутентификационным ключом является `xi3kiune`.
* Арбитратором выступает `root`, и именно поэтому у команды man:su[1] выставлен бит выполнения с правами `root`.
-== Клиент и сервер разделены
+==== Клиент и сервер разделены
В примере ниже рассматривается пользователь `eve`, пытающийся установить man:ssh[1]-соединение с `login.example.com`, и успешно входя как пользователь `bob`. Боб должен был выбрать пароль получше!
-[source,shell]
+[source, shell]
....
% whoami
eve
@@ -148,12 +185,11 @@ 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.
+ 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!
%
-%
....
@@ -164,18 +200,18 @@ Welcome to FreeBSD!
* Ключом аутентификации является `god`.
* Хотя этого не видно в примере, но арбитратором является `root`.
-== Пример политики
+==== Пример политики
Следующее является политикой, используемой во FreeBSD по умолчанию для `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
+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
....
* Эта политика применяется к службе `sshd` (что не обязательно ограничено сервером man:sshd[8]).
@@ -186,7 +222,7 @@ sshd password required pam_permit.so
== Основы PAM
[[pam-facilities-primitives]]
-== Подсистемы и примитивы
+=== Подсистемы и примитивы
API для PAM предоставляет шесть различных примитивов для аутентификации, сгруппированных в четыре подсистемы, каждая из которых описывается ниже.
@@ -213,17 +249,17 @@ _Управление паролем._ Эта подсистема исполь
** Функция man:pam_chauthtok[3] изменяет ключ аутентификации, опционально проверяя, что он труден для подбора, не использовался ранее и так далее.
[[pam-modules]]
-== Модули
+=== Модули
Модули являются центральной концепцией в PAM; в конце концов, им соответствует буква "M" в сокращении "PAM". Модуль PAM представляет собой самодостаточный кусок программного кода, который реализует примитивы одной или большего количества подсистем одного конкретного механизма; к возможным механизмам для подсистемы аутентификации, к примеру, относятся базы данных паролей UNIX(R), системы NIS, LDAP или Radius.
[[pam-module-naming]]
-== Именование модулей
+==== Именование модулей
Во FreeBSD каждый механизм реализуется в отдельном модуле с именем `pam_mechanism.so` (например, `pam_unix.so` для механизма UNIX(R).) В других реализациях иногда отдельные модули используются для разных подсистем, и в их имя включается, кроме названия механизма, и имя подсистемы. К примеру, в Solaris(TM) имеется модуль `pam_dial_auth.so.1`, который часто используется для аутентификации пользователей, работающих по коммутируемым каналам связи.
[[pam-module-versioning]]
-== Версии модулей
+==== Версии модулей
Изначальная реализация PAM во FreeBSD, которая была основана на Linux-PAM, не использовала номера версий для модулей PAM. Это будет приводить к проблемам при работе унаследованных приложений, которые могут быть скомпонованы со старыми версиями системных библиотек, так как способа подгрузить соответствующую версию требуемых модулей нет.
@@ -232,7 +268,7 @@ OpenPAM, с другой стороны, ищет модули, которые
Хотя модули PAM в Solaris(TM) имеют номер версии, по-настоящему номер версии в них не отслеживается, потому что номер является частью имени и должен включаться в конфигурацию.
[[pam-chains-policies]]
-== Цепочки и политики
+=== Цепочки и политики
Когда сервер инициирует PAM-транзакцию, библиотека PAM пытается загрузить политику для службы, указанной при вызове функции man:pam_start[3]. Политика определяет, как должны обрабатываться запросы на аутентификацию, и задаётся в конфигурационном файле. Это составляет другую основополагающую концепцию PAM: возможность администратору настраивать политику безопасности системы (в самом широком её понимании) простым редактированием текстового файла.
@@ -246,6 +282,7 @@ OpenPAM, с другой стороны, ищет модули, которые
Этот управляющий флаг был добавлен компанией Sun в Solaris(TM) 9 (SunOS(TM) 5.9), и поддерживается в OpenPAM.
`required`::
Если модуль возвратил положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль возвратит отрицательный ответ, остаток цепочки тоже отрабатывается, но запрос отвергается.
+
`requisite`::
Если модуль возвращает положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль отрабатывает отрицательно, то отработка цепочки немедленно прекращается, а запрос отвергается.
@@ -255,12 +292,13 @@ OpenPAM, с другой стороны, ищет модули, которые
Так как семантика этого флага может оказаться запутанной, особенно при его использовании с последним модулем в цепочке, рекомендуется вместо него использовать управляющий флаг `binding`, если реализация его поддерживает.
`optional`::
Модуль отрабатывается, но результат выполнения игнорируется. Если все модули в цепочке помечены как `optional`, то удовлетворяться будут все запросы.
+
Когда сервер вызывает один из шести PAM-примитивов, PAM запрашивает цепочку подсистемы, к которой принадлежит примитив, и запускает каждый модуль, перечисленный в цепочке в порядке их перечисления, пока список не будет исчерпан либо не будет определено, что дальнейшей обработки не нужно (по причине достижение модуля, вернувшего положительный ответ при условии `binding` или `sufficient`, либо отрицательный с условием `requisite`). Запрос подтверждается, если только был вызван по крайней мере один модуль, и все неопциональные модули вернули положительный ответ.
Заметьте, что возможно, хотя это не распространено, перечислять один и тот же модуль несколько раз в одной цепочке. К примеру, модуль, просматривающий имена и пароли пользователя в сервере каталога может быть вызван несколько раз с различными параметрами, задающими различные серверы каталогов для связи. PAM считает различные появления одного модуля в той же самой цепочке разными и не связанными модулями.
[[pam-transactions]]
-== Транзакции
+=== Транзакции
Жизненный цикл типичной PAM-транзакции описан ниже. Заметьте, что в случае, если любой из перечисленных шагов оканчивается неудачно, сервер должен выдать клиенту соответствующее сообщение об ошибке и прервать транзакцию.
@@ -280,10 +318,10 @@ OpenPAM, с другой стороны, ищет модули, которые
== Настройка PAM
[[pam-config-file]]
-== Файлы политик PAM
+=== Файлы политик PAM
[[pam-config-pam.conf]]
-== Файл [.filename]#/etc/pam.conf#
+==== Файл [.filename]#/etc/pam.conf#
Традиционно файлом политик PAM является [.filename]#/etc/pam.conf#. Он содержит все политики PAM для вашей системы. Каждая строка файла описывает один шаг в цепочке, как показано ниже:
@@ -297,7 +335,7 @@ login auth required pam_nologin.so no_warn
Для каждой пары сервис/подсистема составляется отдельная цепочка, и тогда получается, что, хотя порядок следования строк для одной и той же услуги и подсистемы является значимым, порядок перечисления отдельных сервисов не значим. В примерах из оригинальной работы по PAM строки конфигурации сгруппированы по подсистемам, в поставляемом с Solaris(TM) файле [.filename]#pam.conf# именно так и сделано, но в стандартном конфигурационном файле из поставки FreeBSD строки настроек сгруппированы по сервисам. Подходит любой из этих способов; они имеют один и тот же смысл.
[[pam-config-pam.d]]
-== Каталог [.filename]#/etc/pam.d#
+==== Каталог [.filename]#/etc/pam.d#
OpenPAM и Linux-PAM поддерживают альтернативный механизм настройки, который для FreeBSD является предпочтительным. В этой схеме каждая политика содержится в отдельном файле с именем, соответствующем сервису, к которому она применяется. Эти файлы размещаются в каталоге [.filename]#/etc/pam.d/#.
@@ -310,7 +348,7 @@ auth required pam_nologin.so no_warn
Как следствие такого упрощённого синтаксиса, возможно использование одних и тех же политик для нескольких сервисов, связывая каждое имя сервиса с тем же самым файлом политик. К примеру, для использования той же самой политики для сервисов `su` и `sudo`, можно сделать следующее:
-[source,shell]
+[source, shell]
....
# cd /etc/pam.d
# ln -s su sudo
@@ -321,14 +359,14 @@ auth required pam_nologin.so no_warn
Так как политика каждого сервиса хранится в отдельном файле, то механизм [.filename]#pam.d# делает установку дополнительных политик для программных пакетов сторонних разработчиков очень лёгкой задачей.
[[pam-config-file-order]]
-== Порядок поиска политик
+==== Порядок поиска политик
Как вы видели выше, политики PAM могут находиться в нескольких местах. Что будет, если политики для одного и того же сервиса имеются в разных местах?
Необходимо осознать, что система конфигурации PAM ориентирована на цепочки.
[[pam-config-breakdown]]
-== Структура строки настройки
+=== Структура строки настройки
Как это объяснено в <<pam-config-file>>, каждая строка файла [.filename]#/etc/pam.conf# состоит из четырёх или большего количества полей: имени сервиса, имени подсистемы, управляющего флага, имени модуля и дополнительных параметров модуля, которые могут отсутствовать.
@@ -338,10 +376,13 @@ auth required pam_nologin.so no_warn
Имя подсистемы представляет собой одно из четырёх ключевых слов, описанных в <<pam-facilities-primitives>>.
-Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в <<pam-chains-policies>>, в котором рассказано, как интерпретировать возвращаемый из модуля код. В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в Solaris(TM) и OpenPAM). Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается.
+Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в разделе
+ crossref:pam[pam-chains-policies, Цепочки и политики], в котором рассказано, как интерпретировать возвращаемый из модуля код.
+ В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в Solaris(TM) и OpenPAM).
+ Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается.
[[pam-policies]]
-== Политики
+=== Политики
Для корректной настройки PAM необходимо понимать, как происходит интерпретация политик.
@@ -449,18 +490,6 @@ auth required pam_nologin.so no_warn
Модуль man:pam_nologin[8] отвергает любые входы не пользователем root, если существует файл [.filename]#/var/run/nologin#. Обычно этот файл создаётся утилитой man:shutdown[8], когда до запланированного завершения работы системы остаётся менее пяти минут.
-[[pam-modules-opie]]
-=== man:pam_opie[8]
-
-Модуль man:pam_opie[8] реализует метод аутентификации man:opie[4]. Система man:opie[4] является механизмом работы по схеме запрос-ответ, при котором ответ на каждый запрос является прямой функцией от запроса и ключевой фразы, так что ответ может быть легко и "вовремя" вычислен любым, знающим ключевую фразу, что избавляет от необходимости передавать пароль. Кроме того, так как в man:opie[4] никогда повторно не используется запрос, ответ на который был корректно получен, эта схема является устойчивой к атакам, основанным на повторе действий.
-
-[[pam-modules-opieaccess]]
-=== man:pam_opieaccess[8]
-
-Модуль man:pam_opieaccess[8] дополняет модуль man:pam_opie[8]. Его работа заключается в выполнении ограничений, задаваемых файлом man:opieaccess[5], который определяет условия, при которых пользователь, нормально прошедший аутентификацию посредством man:opie[4], может использовать альтернативные методы. Чаще всего он используется для запрета использования аутентификации на основе паролей с непроверенных хостов.
-
-Для эффективности модуль man:pam_opieaccess[8] должен быть определён в цепочке `auth` как `requisite` сразу же после записи `sufficient` для man:pam_opie[8], но перед любыми другими модулями.
-
[[pam-modules-passwdqc]]
=== man:pam_passwdqc[8]
@@ -563,24 +592,24 @@ include::{include-path}converse.c[]
:sectnums!:
[[pam-further]]
-== Lectures complémentaires
+== Для дальнейшего ознакомления
-=== Publications
+=== Статьи
-_link:http://www.sun.com/software/solaris/pam/pam.external.pdf[Rendre les services de connexion indépendants des technologies d'authentification]_. Vipin Samar et Charlie Lai. Sun Microsystems.
+Making Login Services Independent of Authentication Technologies Vipin Samar. Charlie Lai. Sun Microsystems.
-_link:http://www.opengroup.org/pubs/catalog/p702.htm[X/Open Single Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June 1997.
+_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:http://www.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06.
+_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.
-=== Guides utilisateur
+=== Руководства пользователя
-_link:http://www.sun.com/software/solaris/pam/pam.admin.pdf[Administration de PAM]_. Sun Microsystems.
+_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[Администрирование PAM]_. Sun Microsystems.
-=== Page internet liées
+=== Веб страницы
-_link:http://openpam.sourceforge.net/[La page d'OpenPAM]_. Dag-Erling Smørgrav. ThinkSec AS.
+_link:https://www.openpam.org/[Домащняя страница OpenPAM]_ Dag-Erling Smørgrav. ThinkSec AS.
-_link:http://www.kernel.org/pub/linux/libs/pam/[La page de Linux-PAM]_. Andrew G. Morgan.
+_link:http://www.kernel.org/pub/linux/libs/pam/[Домашняя страница Linux-PAM]_ Andrew Morgan.
-_link:http://wwws.sun.com/software/solaris/pam/[La page de Solaris PAM]_. Sun Microsystems.
+_Домашняя страница Solaris PAM (Solaris PAM homepage)_. Sun Microsystems.
diff --git a/documentation/content/ru/articles/pam/_index.po b/documentation/content/ru/articles/pam/_index.po
new file mode 100644
index 0000000000..1236ee94df
--- /dev/null
+++ b/documentation/content/ru/articles/pam/_index.po
@@ -0,0 +1,2155 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-30 21:38+0300\n"
+"PO-Revision-Date: 2025-08-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespam_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/pam/_index.adoc:1
+#, no-wrap
+msgid "A guide to the PAM system and modules under FreeBSD"
+msgstr "Руководство по системе PAM и модулям в 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 "Подключаемые Модули Аутентификации (PAM)"
+
+#. 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 ""
+"В этой статье описываются принципы и механизмы, лежащие в основе библиотеки "
+"Подключаемых Модулей Аутентификации (PAM - Pluggable Authentication "
+"Modules), и рассказывается, как настроить PAM, как интегрировать PAM в "
+"приложения и как создавать модули 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 "Введение"
+
+#. 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 ""
+"Библиотека Pluggable Authentication Modules (PAM) является обобщённым API "
+"для служб, связанных с аутентификацией, которые позволяют системному "
+"администратору добавлять новые методы аутентификации простой установкой "
+"новых модулей PAM, и изменять политику аутентификации посредством "
+"редактирования конфигурационных файлов."
+
+#. 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 описали и разработали Vipin Samar и Charlie Lai из Sun Microsystems в "
+"1995 году, с тех он сильно не менялся. В 1997 году Open Group опубликовала "
+"предварительные спецификации на X/Open Single Sign-on (XSSO), что "
+"стандартизовало API для PAM и добавило расширения для одноразовой (или "
+"достаточно интегрированной) подписи. На момент написания этого документа эта "
+"спецификация ещё не была принята за стандарт."
+
+#. 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 ""
+"Хотя эта статья посвящена в основном FreeBSD 5.x, в которой используется "
+"OpenPAM, она подойдёт для FreeBSD 4.x, использующей Linux-PAM, и других "
+"операционных систем, таких, как Linux и Solaris(TM)."
+
+#. 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 ""
+"Терминология, используемая в PAM, достаточно запутана. Ни оригинальная "
+"работа Samar и Lai, ни спецификация XSSO не делают никаких попыток формально "
+"определить термины для различных объектов и участвующих в PAM сторон, а "
+"термины, которые они используют (но не определяют) иногда неверны и "
+"неоднозначны. Первой попыткой создать недвусмысленную и согласованную "
+"терминологию была работа, которую написал Andrew G. Morgan (автор Linux-PAM) "
+"в 1999 году. Хотя выбор терминологии, которую сделал Морган, был гигантским "
+"скачком вперед, это, по мнению автора данной статьи, не означает ее "
+"правильность. Далее делается попытка, в значительной степени на основе "
+"работы Моргана, дать точные и недвусмысленные определения терминов для всех "
+"участников и объектов PAM."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:111
+#, no-wrap
+msgid "account"
+msgstr "учётная запись (account)"
+
+#. 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 "аппликант (applicant)"
+
+#. 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 "арбитратор (arbitrator)"
+
+#. 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 "цепочка (chain)"
+
+#. 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 ""
+"Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В "
+"цепочку включена информация о последовательности вызовов модулей, "
+"аргументах, которые нужно им передать, и о том, как интерпретировать "
+"результаты."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:124
+#, no-wrap
+msgid "client"
+msgstr "клиент (client)"
+
+#. 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 "подсистема (facility)"
+
+#. 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 ""
+"Одна из четырех основных групп функциональности, которые дает PAM: "
+"аутентификация, управление учетными записями, управление сеансом и "
+"обновление ключом аутентификации."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:130
+#, no-wrap
+msgid "module"
+msgstr "модуль (module)"
+
+#. 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 "политика (policy)"
+
+#. 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 ""
+"Полный набор конфигурационных деклараций, описывающих, как обрабатывать "
+"запросы PAM к определенной услуге. Политика обычно состоит из четырех "
+"цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не "
+"все четыре подсистемы."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:137
+#, no-wrap
+msgid "server"
+msgstr "сервер (server)"
+
+#. 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 "сервис (service)"
+
+#. 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 ""
+"Класс серверов, предоставляющих похожую или связанную функциональность, и "
+"требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, "
+"так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет "
+"применяться одна и та же политика."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:144
+#, no-wrap
+msgid "session"
+msgstr "сеанс (session)"
+
+#. 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 ""
+"Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех "
+"подсистем PAM, управление сеансом, касается исключительно настройке и "
+"очистке этого контекста."
+
+#. 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 ""
+"Блок информации, связанный с учётной записью, например, пароль или ключевая "
+"фраза, которую аппликант должен предоставить для своей идентификации."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:151
+#, no-wrap
+msgid "transaction"
+msgstr "транзакция (transaction)"
+
+#. 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 ""
+"В этом простом примере показывается пользователь `alice`, выполняющий "
+"команду man:su[1] для того, чтобы стать пользователем `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 "Аппликантом является `alice`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:179
+msgid "The account is `root`."
+msgstr "Учетной записью является `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:180
+msgid "The man:su[1] process is both client and server."
+msgstr "Процесс man:su[1] является как клиентом, так и сервером."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:181
+msgid "The authentication token is `xi3kiune`."
+msgstr "Аутентификационным ключом является `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 ""
+"Арбитратором выступает `root`, и именно поэтому у команды man:su[1] "
+"выставлен бит выполнения с правами `root`."
+
+#. 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 ""
+"В примере ниже рассматривается пользователь `eve`, пытающийся установить "
+"man:ssh[1]-соединение с `login.example.com`, и успешно входя как "
+"пользователь `bob`. Боб должен был выбрать пароль получше!"
+
+#. 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 "Аппликантом является `eve`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:208
+msgid "The client is Eve's man:ssh[1] process."
+msgstr "Клиентом является процесс man:ssh[1] пользователя 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 "Сервером является процесс man:sshd[8] на машине `login.example.com`"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:210
+msgid "The account is `bob`."
+msgstr "Учетной записью является `bob`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:211
+msgid "The authentication token is `god`."
+msgstr "Ключом аутентификации является `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 "Хотя этого не видно в примере, но арбитратором является `root`."
+
+#. 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 ""
+"Следующее является политикой, используемой во FreeBSD по умолчанию для "
+"`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 ""
+"Эта политика применяется к службе `sshd` (что не обязательно ограничено "
+"сервером 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` и `password` являются подсистемами."
+
+#. 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# и "
+"[.filename]#pam_permit.so# являются модулями. Из этого примера видно, что "
+"[.filename]#pam_unix.so# реализует по крайней мере две подсистемы "
+"(аутентификацию и управление учётными записями)."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:232
+#, no-wrap
+msgid "PAM Essentials"
+msgstr "Основы PAM"
+
+#. 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 ""
+"API для PAM предоставляет шесть различных примитивов для аутентификации, "
+"сгруппированных в четыре подсистемы, каждая из которых описывается ниже."
+
+#. 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 ""
+"_Аутентификация._ Эта подсистема, собственно говоря, реализует "
+"аутентификацию аппликанта и выяснение полномочий учётной записи. Она "
+"предоставляет два примитива:"
+
+#. 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] аутентифицирует аппликанта, обычно "
+"запрашивая аутентификационный ключ и сравнивая его со значением, хранящимся "
+"в базе данных или получаемым от сервера аутентификации."
+
+#. 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] устанавливает полномочия учётной записи, такие, "
+"как идентификатор пользователя, членство в группах и ограничения на "
+"использование ресурсов."
+
+#. 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 ""
+"_Управление учётной записью._ Эта подсистема обрабатывает вопросы "
+"доступности учетной записи, не связанные с аутентификацией, такие, как "
+"ограничения в доступе на основе времени суток или загрузки сервера. Он "
+"предоставляет единственный примитив:"
+
+#. 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] проверяет, доступна ли запрашиваемая учётная "
+"запись."
+
+#. 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 ""
+"_Управление сеансом._ Эта подсистема отрабатывает задачи, связанные с "
+"установлением и закрытием сеанса, такие, как учет входов пользователей. Она "
+"предоставляет два примитива:"
+
+#. 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] выполняет действия, связанные с "
+"установлением сеанса: добавление записей в базы данных [.filename]#utmp# и "
+"[.filename]#wtmp#, запуск агента SSH и так далее."
+
+#. 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] выполняет действия, связанные с закрытием "
+"сеанса: добавление записей в базы данных [.filename]#utmp# и "
+"[.filename]#wtmp#, завершение работы агента SSH и так далее."
+
+#. 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 ""
+"_Управление паролем._ Эта подсистема используется для изменения ключа "
+"аутентификации, связанного с учетной записью, по причине истечения его срока "
+"действия или желания пользователя изменить его. Она предоставляет "
+"единственный примитив:"
+
+#. 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] изменяет ключ аутентификации, опционально "
+"проверяя, что он труден для подбора, не использовался ранее и так далее."
+
+#. 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 ""
+"Модули являются центральной концепцией в PAM; в конце концов, им "
+"соответствует буква \"M\" в сокращении \"PAM\". Модуль PAM представляет "
+"собой самодостаточный кусок программного кода, который реализует примитивы "
+"одной или большего количества подсистем одного конкретного механизма; к "
+"возможным механизмам для подсистемы аутентификации, к примеру, относятся "
+"базы данных паролей UNIX(R), системы NIS, LDAP или Radius."
+
+#. 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 ""
+"Во FreeBSD каждый механизм реализуется в отдельном модуле с именем "
+"`pam_mechanism.so` (например, `pam_unix.so` для механизма UNIX(R).) В других "
+"реализациях иногда отдельные модули используются для разных подсистем, и в "
+"их имя включается, кроме названия механизма, и имя подсистемы. К примеру, в "
+"Solaris(TM) имеется модуль `pam_dial_auth.so.1`, который часто используется "
+"для аутентификации пользователей, работающих по коммутируемым каналам связи."
+
+#. 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 ""
+"Изначальная реализация PAM во FreeBSD, которая была основана на Linux-PAM, "
+"не использовала номера версий для модулей PAM. Это будет приводить к "
+"проблемам при работе унаследованных приложений, которые могут быть "
+"скомпонованы со старыми версиями системных библиотек, так как способа "
+"подгрузить соответствующую версию требуемых модулей нет."
+
+#. 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, с другой стороны, ищет модули, которые имеют тот же самый номер "
+"версии, что и библиотека PAM (на данный момент 2), и использует модуль без "
+"версии, только если модуль с известной версией не был загружен. Поэтому для "
+"старых приложений могут предоставляться старые модули, при этом новые (или "
+"заново построенные) приложения будут использовать все возможности последних "
+"версий модулей."
+
+#. 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 ""
+"Хотя модули PAM в Solaris(TM) имеют номер версии, по-настоящему номер версии "
+"в них не отслеживается, потому что номер является частью имени и должен "
+"включаться в конфигурацию."
+
+#. 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 ""
+"Когда сервер инициирует PAM-транзакцию, библиотека PAM пытается загрузить "
+"политику для службы, указанной при вызове функции man:pam_start[3]. Политика "
+"определяет, как должны обрабатываться запросы на аутентификацию, и задаётся "
+"в конфигурационном файле. Это составляет другую основополагающую концепцию "
+"PAM: возможность администратору настраивать политику безопасности системы (в "
+"самом широком её понимании) простым редактированием текстового файла."
+
+#. 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 ""
+"Политика состоит из четырёх цепочек, по одной на каждый из методов PAM. "
+"Каждое звено представляет собой последовательность конфигурационных "
+"утверждений, задающих вызываемый модуль, некоторые (необязательные) "
+"параметры для передачи в модуль, и управляющий флаг, описывающий, как "
+"интерпретировать возвращаемый из модуля код."
+
+#. 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 ""
+"Понимание смысла управляющего флага необходимо для понимания "
+"конфигурационных файлов PAM. Существуют четыре различных управляющих флага:"
+
+#. 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 ""
+"Если модуль отработал успешно, и ни один из предыдущих модулей в цепочке не "
+"сработал отрицательно, то цепочка прерывается, а запрос подтверждается. Если "
+"же модуль отработает неудачно, то выполняется оставшаяся часть цепочки, "
+"однако запрос отвергается."
+
+#. 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 ""
+"Этот управляющий флаг был добавлен компанией Sun в Solaris(TM) 9 (SunOS(TM) "
+"5.9), и поддерживается в 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 ""
+"Если модуль возвратил положительный ответ, выполняется оставшаяся часть "
+"цепочки, запрос удовлетворяется, если никакой другой модуль не отработает "
+"отрицательно. Если же модуль возвратит отрицательный ответ, остаток цепочки "
+"тоже отрабатывается, но запрос отвергается."
+
+#. 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 ""
+"Если модуль возвращает положительный ответ, выполняется оставшаяся часть "
+"цепочки, запрос удовлетворяется, если никакой другой модуль не отработает "
+"отрицательно. Если же модуль отрабатывает отрицательно, то отработка цепочки "
+"немедленно прекращается, а запрос отвергается."
+
+#. 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 ""
+"Если модуль возвратит положительный ответ, и ни один из предыдущих модулей в "
+"цепочке на отработал отрицательно, то отработка цепочки немедленно "
+"прекращается, а запрос удовлетворяется. Если модуль отработал отрицательно, "
+"то результат игнорируется и цепочка отрабатывается дальше."
+
+#. 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 ""
+"Так как семантика этого флага может оказаться запутанной, особенно при его "
+"использовании с последним модулем в цепочке, рекомендуется вместо него "
+"использовать управляющий флаг `binding`, если реализация его поддерживает."
+
+#. 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 ""
+"Модуль отрабатывается, но результат выполнения игнорируется. Если все модули "
+"в цепочке помечены как `optional`, то удовлетворяться будут все запросы."
+
+#. 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 ""
+"Когда сервер вызывает один из шести PAM-примитивов, PAM запрашивает цепочку "
+"подсистемы, к которой принадлежит примитив, и запускает каждый модуль, "
+"перечисленный в цепочке в порядке их перечисления, пока список не будет "
+"исчерпан либо не будет определено, что дальнейшей обработки не нужно (по "
+"причине достижение модуля, вернувшего положительный ответ при условии "
+"`binding` или `sufficient`, либо отрицательный с условием `requisite`). "
+"Запрос подтверждается, если только был вызван по крайней мере один модуль, и "
+"все неопциональные модули вернули положительный ответ."
+
+#. 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 ""
+"Заметьте, что возможно, хотя это не распространено, перечислять один и тот "
+"же модуль несколько раз в одной цепочке. К примеру, модуль, просматривающий "
+"имена и пароли пользователя в сервере каталога может быть вызван несколько "
+"раз с различными параметрами, задающими различные серверы каталогов для "
+"связи. PAM считает различные появления одного модуля в той же самой цепочке "
+"разными и не связанными модулями."
+
+#. 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 ""
+"Жизненный цикл типичной PAM-транзакции описан ниже. Заметьте, что в случае, "
+"если любой из перечисленных шагов оканчивается неудачно, сервер должен "
+"выдать клиенту соответствующее сообщение об ошибке и прервать транзакцию."
+
+#. 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 ""
+"Если это необходимо, сервер получает полномочия арбитратора через "
+"независимый от PAM механизм-чаще всего по факту запуска пользователем `root` "
+"или с установленным setuid-битом `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 ""
+"Сервер вызывает функцию man:pam_start[3] для инициализации библиотеки PAM и "
+"задания имени сервиса и целевой учётной записи, а также регистрации "
+"подходящего способа общения."
+
+#. 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 ""
+"Сервер получает различную информацию, относящуюся к транзакции (такую, как "
+"имя пользователя аппликанта и имя хоста, на котором запущен клиент), и "
+"отправляет её в PAM при помощи функции man:pam_set_item[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 ""
+"Сервер вызывает функцию man:pam_authenticate[3] для аутентификации "
+"аппликанта."
+
+#. 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 ""
+"Сервер вызывает функцию man:pam_acct_mgmt[3] для проверки того, что "
+"запрошенная учётная запись доступна и корректна. Если пароль верен, но его "
+"срок истёк, man:pam_acct_mgmt[3] возвратит результат `PAM_NEW_AUTHTOK_REQD`, "
+"а не `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 ""
+"Если на предыдущем шаге был получен результат `PAM_NEW_AUTHTOK_REQD`, то "
+"сервер вызывает функцию man:pam_chauthtok[3] для того, чтобы вынудить "
+"клиента изменить ключ аутентификации для запрошенной учётной записи."
+
+#. 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 ""
+"Теперь, когда аппликант полностью аутентифицирован, сервер вызывает функцию "
+"man:pam_setcred[3] для получения полномочий запрошенной учётной записи. "
+"Сделать это возможно, потому что он работает как арбитратор, и оставляет за "
+"собой полномочия арбитратора."
+
+#. 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 ""
+"После получения необходимых полномочий, сервер вызывает функцию "
+"man:pam_open_session[3] для установления сеанса."
+
+#. 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 ""
+"После того, как сервер закончил обслуживание клиента, он вызывает функцию "
+"man:pam_close_session[3] для закрытия сеанса."
+
+#. 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 ""
+"Наконец, сервер вызывает функцию man:pam_end[3] для оповещения библиотеки "
+"PAM о том, что работа с ней завершена и какие-либо выделенные в течение "
+"сеанса ресурсы можно освободить."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:351
+#, no-wrap
+msgid "PAM Configuration"
+msgstr "Настройка PAM"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:354
+#, no-wrap
+msgid "PAM Policy Files"
+msgstr "Файлы политик PAM"
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:357
+#, no-wrap
+msgid "The [.filename]#/etc/pam.conf#"
+msgstr "Файл [.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 ""
+"Традиционно файлом политик PAM является [.filename]#/etc/pam.conf#. Он "
+"содержит все политики PAM для вашей системы. Каждая строка файла описывает "
+"один шаг в цепочке, как показано ниже:"
+
+#. 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 ""
+"Поля следуют в таком порядке: имя службы, имя подсистемы, управляющий флаг, "
+"имя модуля и параметры модуля. Любые дополнительные поля интерпретируются "
+"как дополнительные параметры модуля."
+
+#. 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 ""
+"Для каждой пары сервис/подсистема составляется отдельная цепочка, и тогда "
+"получается, что, хотя порядок следования строк для одной и той же услуги и "
+"подсистемы является значимым, порядок перечисления отдельных сервисов не "
+"значим. В примерах из оригинальной работы по PAM строки конфигурации "
+"сгруппированы по подсистемам, в поставляемом с Solaris(TM) файле "
+"[.filename]#pam.conf# именно так и сделано, но в стандартном "
+"конфигурационном файле из поставки FreeBSD строки настроек сгруппированы по "
+"сервисам. Подходит любой из этих способов; они имеют один и тот же смысл."
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:376
+#, no-wrap
+msgid "The [.filename]#/etc/pam.d#"
+msgstr "Каталог [.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 и Linux-PAM поддерживают альтернативный механизм настройки, который "
+"для FreeBSD является предпочтительным. В этой схеме каждая политика "
+"содержится в отдельном файле с именем, соответствующем сервису, к которому "
+"она применяется. Эти файлы размещаются в каталоге [.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 ""
+"Такие файлы политик, ориентированные на сервисы, имеют только четыре поля, "
+"вместо пяти полей в файле [.filename]#pam.conf#: поле имени сервиса опущено. "
+"Таким образом, вместо примера строки файла [.filename]#pam.conf# из "
+"предыдущего раздела получится следующая строка в файле [.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 ""
+"Как следствие такого упрощённого синтаксиса, возможно использование одних и "
+"тех же политик для нескольких сервисов, связывая каждое имя сервиса с тем же "
+"самым файлом политик. К примеру, для использования той же самой политики для "
+"сервисов `su` и `sudo`, можно сделать следующее:"
+
+#. 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 ""
+"Это работает, потому что имя сервиса определяется именем файла, а не его "
+"указанием в файле политики, так что один и тот же файл может использоваться "
+"для нескольких сервисов с разными названиями."
+
+#. 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 ""
+"Так как политика каждого сервиса хранится в отдельном файле, то механизм "
+"[.filename]#pam.d# делает установку дополнительных политик для программных "
+"пакетов сторонних разработчиков очень лёгкой задачей."
+
+#. 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 ""
+"Как вы видели выше, политики PAM могут находиться в нескольких местах. Что "
+"будет, если политики для одного и того же сервиса имеются в разных местах?"
+
+#. 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 ""
+"Необходимо осознать, что система конфигурации PAM ориентирована на цепочки."
+
+#. 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 crossref:pam[pam-config-file, PAM Policy Files], 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 ""
+"Как это объяснено в <<pam-config-file>>, каждая строка файла [.filename]#/"
+"etc/pam.conf# состоит из четырёх или большего количества полей: имени "
+"сервиса, имени подсистемы, управляющего флага, имени модуля и дополнительных "
+"параметров модуля, которые могут отсутствовать."
+
+#. 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 ""
+"Заметьте, что если вы используете [.filename]#/etc/pam.d/# вместо "
+"[.filename]#/etc/pam.conf#, то имя сервиса задается именем файла политики, и "
+"опускается из строк настройки, которые в таком случае начинаются с названия "
+"подсистемы."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:423
+msgid ""
+"The facility is one of the four facility keywords described in "
+"crossref:pam[pam-facilities-primitives, Facilities and Primitives]."
+msgstr ""
+"Имя подсистемы представляет собой одно из четырёх ключевых слов, описанных в "
+"<<pam-facilities-primitives>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:428
+#, no-wrap
+msgid ""
+"Likewise, the control flag is one of the four keywords described in\n"
+"\tcrossref:pam[pam-chains-policies, Chains and Policies], describing how to interpret the return code from the module. \n"
+"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.) \n"
+"Unsurprisingly, OpenPAM does not support this syntax.\n"
+msgstr ""
+"Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в разделе\n"
+"\tcrossref:pam[pam-chains-policies, Цепочки и политики], в котором рассказано, как интерпретировать возвращаемый из модуля код.\n"
+" В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в Solaris(TM) и OpenPAM).\n"
+" Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:430
+#, no-wrap
+msgid "Policies"
+msgstr "Политики"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:433
+msgid ""
+"To configure PAM correctly, it is essential to understand how policies are "
+"interpreted."
+msgstr ""
+"Для корректной настройки PAM необходимо понимать, как происходит "
+"интерпретация политик."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:436
+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 ""
+"В момент, когда приложение вызывает функцию man:pam_start[3], библиотека PAM "
+"загружает политику для указанного сервиса и выстраивает четыре цепочки "
+"модулей (по одной для каждой подсистемы). Если одна или большее количество "
+"этих цепочек являются пустыми, то будут выполняться подстановки "
+"соответствующих цепочек из политики для сервиса `other`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:440
+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 ""
+"Когда затем приложение вызывает одну из шести примитивов PAM, библиотека PAM "
+"выделяет из цепочки нужную подсистему и вызывает функцию, соответствующую "
+"сервису, в каждом модуле, перечисленном в цепочке, в том порядке, в каком "
+"они перечислены в конфигурации. После каждого обращения к функции сервиса, "
+"тип модуля и возвращённый из этой функции код результата выполнения "
+"используются для того, что делать дальше. За некоторыми исключениями, "
+"которые будут описаны ниже, применяется такая таблица:"
+
+#. type: Block title
+#: documentation/content/en/articles/pam/_index.adoc:441
+#, no-wrap
+msgid "PAM Chain Execution Summary"
+msgstr "Сводная таблица отработки цепочек PAM"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:446
+#, no-wrap
+msgid "PAM_SUCCESS"
+msgstr "PAM_SUCCESS"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:447
+#, no-wrap
+msgid "PAM_IGNORE"
+msgstr "PAM_IGNORE"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:449
+#, no-wrap
+msgid "other"
+msgstr "other"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:450
+#, no-wrap
+msgid "binding"
+msgstr "binding"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:451
+#: documentation/content/en/articles/pam/_index.adoc:466
+#, no-wrap
+msgid "if (!fail) break;"
+msgstr "if (!fail) break;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:452
+#: documentation/content/en/articles/pam/_index.adoc:456
+#: documentation/content/en/articles/pam/_index.adoc:457
+#: documentation/content/en/articles/pam/_index.adoc:461
+#: documentation/content/en/articles/pam/_index.adoc:462
+#: documentation/content/en/articles/pam/_index.adoc:467
+#: documentation/content/en/articles/pam/_index.adoc:469
+#: documentation/content/en/articles/pam/_index.adoc:471
+#: documentation/content/en/articles/pam/_index.adoc:472
+#: documentation/content/en/articles/pam/_index.adoc:473
+#, no-wrap
+msgid "-"
+msgstr "-"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:454
+#: documentation/content/en/articles/pam/_index.adoc:459
+#, no-wrap
+msgid "fail = true;"
+msgstr "fail = true;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:455
+#, no-wrap
+msgid "required"
+msgstr "required"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:460
+#, no-wrap
+msgid "requisite"
+msgstr "requisite"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:464
+#, no-wrap
+msgid "fail = true; break;"
+msgstr "fail = true; break;"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:465
+#, no-wrap
+msgid "sufficient"
+msgstr "sufficient"
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:470
+#, no-wrap
+msgid "optional"
+msgstr "optional"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:477
+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 ""
+"Если переменная `fail` принимает истинное значение в конце отработки "
+"цепочки, или когда достигнут \"break\", диспетчер возвращает код ошибки, "
+"возвращённый первым модулем, отработавшим неудачно. В противном случае "
+"возвращается `PAM_SUCCESS`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:479
+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 ""
+"Первым исключением является то, что код ошибки `PAM_NEW_AUTHTOK_REQD` "
+"интерпретируется как успешный результат, кроме случая, когда модуль "
+"отработал успешно, и по крайней мере один модуль возвратил "
+"`PAM_NEW_AUTHTOK_REQD`, тогда диспетчер возвратит результат "
+"`PAM_NEW_AUTHTOK_REQD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:481
+msgid ""
+"The second exception is that man:pam_setcred[3] treats `binding` and "
+"`sufficient` modules as if they were `required`."
+msgstr ""
+"Вторым исключением является то, что man:pam_setcred[3] считает, что модули "
+"`binding` и `sufficient` являются равнозначными `required`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:483
+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 ""
+"Третьим и последним исключением является то, что функция "
+"man:pam_chauthtok[3] отрабатывает полную цепочку дважды (один раз для "
+"предварительных проверок, и ещё раз для реального задания пароля), и на "
+"подготовительной фазе она считает, что модули `binding` и `sufficient` "
+"являются равнозначными `required`."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:485
+#, no-wrap
+msgid "FreeBSD PAM Modules"
+msgstr "Модули PAM во FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:488
+#, no-wrap
+msgid "man:pam_deny[8]"
+msgstr "man:pam_deny[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:492
+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 ""
+"Модуль man:pam_deny[8] является одним из простейших доступных модулей; на "
+"любой запрос он возвращает результат `PAM_AUTH_ERR`. Он полезен для быстрого "
+"отключения сервиса (добавьте его на верх каждой цепочки) или завершения "
+"цепочек модулей `sufficient`."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:494
+#, no-wrap
+msgid "man:pam_echo[8]"
+msgstr "man:pam_echo[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:498
+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 ""
+"Модуль man:pam_echo[8] просто передаёт свои параметры в функцию "
+"взаимодействия как сообщение `PAM_TEXT_INFO`. В основном полезна для "
+"отладки, но также может использоваться для вывода сообщений, таких как "
+"\"Unauthorized access will be prosecuted\" до запуска процедуры "
+"аутентификации."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:500
+#, no-wrap
+msgid "man:pam_exec[8]"
+msgstr "man:pam_exec[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:504
+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 ""
+"Модуль man:pam_exec[8] воспринимает первый переданный ему параметр как имя "
+"программы для выполнения, а остальные аргументы передаются этой программе в "
+"качестве параметров командной строки. Одним из возможных применений является "
+"его использование для запуска в момент регистрации в системе программы "
+"монтирования домашнего каталога пользователя."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:506
+#, no-wrap
+msgid "man:pam_ftpusers[8]"
+msgstr "man:pam_ftpusers[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:509
+msgid "The man:pam_ftpusers[8] module"
+msgstr "Модуль man:pam_ftpusers[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:511
+#, no-wrap
+msgid "man:pam_group[8]"
+msgstr "man:pam_group[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:515
+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 ""
+"Модуль man:pam_group[8] принимает или отвергает аппликантов в зависимости от "
+"их членства в определённой файловой группе (обычно `wheel` для man:su[1]). В "
+"первую очередь предназначен для сохранения традиционного поведения утилиты "
+"BSD man:su[1], хотя имеет и много других применений, таких как отключение "
+"определённых групп пользователей от некоторого сервиса."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:517
+#, no-wrap
+msgid "man:pam_guest[8]"
+msgstr "man:pam_guest[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:522
+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 ""
+"Модуль man:pam_guest[8] позволяет осуществлять гостевые входы с "
+"использованием фиксированных имён входа в систему. На пароль могут "
+"накладываться различные ограничения, однако действием по умолчанию является "
+"ввод любого пароля при использовании имени, соответствующего гостевому "
+"входу. Модуль man:pam_guest[8] можно легко использовать для реализации "
+"анонимных входов на FTP."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:524
+#, no-wrap
+msgid "man:pam_krb5[8]"
+msgstr "man:pam_krb5[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:527
+msgid "The man:pam_krb5[8] module"
+msgstr "Модуль man:pam_krb5[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:529
+#, no-wrap
+msgid "man:pam_ksu[8]"
+msgstr "man:pam_ksu[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:532
+msgid "The man:pam_ksu[8] module"
+msgstr "Модуль man:pam_ksu[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:534
+#, no-wrap
+msgid "man:pam_lastlog[8]"
+msgstr "man:pam_lastlog[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:537
+msgid "The man:pam_lastlog[8] module"
+msgstr "Модуль man:pam_lastlog[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:539
+#, no-wrap
+msgid "man:pam_login_access[8]"
+msgstr "man:pam_login_access[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:542
+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 ""
+"Модуль man:pam_login_access[8] предоставляет реализацию примитива для "
+"управления учётными записями, который вводит в действие ограничения на вход, "
+"задаваемые в таблице man:login.access[5]."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:544
+#, no-wrap
+msgid "man:pam_nologin[8]"
+msgstr "man:pam_nologin[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:548
+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 ""
+"Модуль man:pam_nologin[8] отвергает любые входы не пользователем root, если "
+"существует файл [.filename]#/var/run/nologin#. Обычно этот файл создаётся "
+"утилитой man:shutdown[8], когда до запланированного завершения работы "
+"системы остаётся менее пяти минут."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:550
+#, no-wrap
+msgid "man:pam_passwdqc[8]"
+msgstr "man:pam_passwdqc[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:553
+msgid "The man:pam_passwdqc[8] module"
+msgstr "Модуль man:pam_passwdqc[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:555
+#, no-wrap
+msgid "man:pam_permit[8]"
+msgstr "man:pam_permit[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:559
+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 ""
+"Модуль man:pam_permit[8] является одним из самых простым из имеющихся; на "
+"любой запрос он отвечает `PAM_SUCCESS`. Он полезен в качестве замены пустого "
+"места для сервисов, когда одна или большее количество цепочек в противном "
+"случае останутся пустыми."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:561
+#, no-wrap
+msgid "man:pam_radius[8]"
+msgstr "man:pam_radius[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:564
+msgid "The man:pam_radius[8] module"
+msgstr "Модуль man:pam_radius[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:566
+#, no-wrap
+msgid "man:pam_rhosts[8]"
+msgstr "man:pam_rhosts[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:569
+msgid "The man:pam_rhosts[8] module"
+msgstr "Модуль man:pam_rhosts[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:571
+#, no-wrap
+msgid "man:pam_rootok[8]"
+msgstr "man:pam_rootok[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:575
+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 ""
+"Модуль man:pam_rootok[8] возвращает положительный результат в том и только в "
+"том случае, если реальный id пользователя процесса, его вызвавшего "
+"(предполагается, что его запускает аппликант) равен 0. Это полезно для "
+"несетевых сервисов, таких как man:su[1] или man:passwd[1], к которым "
+"пользователь `root` должен иметь автоматический доступ."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:577
+#, no-wrap
+msgid "man:pam_securetty[8]"
+msgstr "man:pam_securetty[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:580
+msgid "The man:pam_securetty[8] module"
+msgstr "Модуль man:pam_securetty[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:582
+#, no-wrap
+msgid "man:pam_self[8]"
+msgstr "man:pam_self[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:586
+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 ""
+"Модуль man:pam_self[8] возвращает положительный результат тогда и только "
+"тогда, когда имена аппликанта соответствуют целевой учётной записи. Больше "
+"всего это пригодится в несетевых сервисах, таких как man:su[1], в которых "
+"идентификация аппликанта может быть с лёгкостью проверена."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:588
+#, no-wrap
+msgid "man:pam_ssh[8]"
+msgstr "man:pam_ssh[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:594
+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 ""
+"Модуль man:pam_ssh[8] предоставляет как сервис аутентификации, так и сеанса. "
+"Сервис аутентификации позволяет пользователям, имеющим секретные ключи SSH, "
+"защищённые паролями, в своих каталогах [.filename]#~/.ssh#, "
+"аутентифицироваться посредством этих паролей. Сеансовый сервис запускает "
+"man:ssh-agent[1] и загружает ключи, которые были расшифрованы на фазе "
+"аутентификации. Такая возможность, в частности, полезна для локальных входов "
+"в систему, как в систему X (посредством man:xdm[1] или другого X-менеджера "
+"входов, умеющего работать с PAM), так и на консоль."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:596
+#, no-wrap
+msgid "man:pam_tacplus[8]"
+msgstr "man:pam_tacplus[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:599
+msgid "The man:pam_tacplus[8] module"
+msgstr "Модуль man:pam_tacplus[8]"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:601
+#, no-wrap
+msgid "man:pam_unix[8]"
+msgstr "man:pam_unix[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:606
+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 ""
+"Модуль man:pam_unix[8] реализует традиционную аутентификацию UNIX(R) на "
+"основе паролей, использующую функцию man:getpwnam[3] для получения пароля "
+"целевой учётной записи и сравнивающую её с тем, что представил аппликант. Он "
+"также предоставляет средства управления учётными записями (отслеживая время "
+"действия учётной записи и пароля) и смены паролей. Наверное, это самый "
+"полезный модуль, так как подавляющее большинство администраторов хотят "
+"сохранить исторически сложившееся поведение по крайней мере некоторых "
+"сервисов."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:608
+#, no-wrap
+msgid "PAM Application Programming"
+msgstr "Программирование приложений с PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:611
+#: documentation/content/en/articles/pam/_index.adoc:616
+msgid "This section has not yet been written."
+msgstr "Этот раздел ещё не написан."
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:613
+#, no-wrap
+msgid "PAM Module Programming"
+msgstr "Программирование модуля PAM"
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:621
+#, no-wrap
+msgid "Sample PAM Application"
+msgstr "Пример PAM-приложения"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:628
+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 crossref:pam[pam-"
+"sample-conv, Sample PAM Conversation Function] is a good starting point, but "
+"should not be used in real-world applications."
+msgstr ""
+"Далее следует минимальная реализация программы man:su[1] с использованием "
+"PAM. Заметьте, что в ней используется специфичная для OpenPAM функция "
+"взаимодействия man:openpam_ttyconv[3], объявление которой расположено в "
+"файле [.filename]#security/openpam.h#. Если вы собираетесь строить это "
+"приложение в системе с другой библиотекой PAM, вам необходимо будет создать "
+"собственную функцию взаимодействия. Надёжную функцию взаимодействия "
+"неожиданно трудно написать; та, что находится в <<pam-sample-conv>>, хороша "
+"в качестве отправной точки, но в реальных приложениях использоваться не "
+"может."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:632
+#, 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:638
+#, no-wrap
+msgid "Sample PAM Module"
+msgstr "Пример PAM-модуля"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:642
+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 ""
+"Далее приведена минимальная реализация man:pam_unix[8], предоставляющая "
+"только сервисы аутентификации. Она должна строиться и работать с "
+"большинством из реализаций PAM, но использует возможности расширений "
+"OpenPAM, если они присутствуют: отметьте использование функции "
+"man:pam_get_authtok[3], которая кардинально упрощает организацию ввода "
+"пароля пользователем."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:646
+#, 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:652
+#, no-wrap
+msgid "Sample PAM Conversation Function"
+msgstr "Пример функции взаимодействия PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:657
+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 ""
+"Функция взаимодействия, приводимая ниже, является значительно упрощённой "
+"версией функции man:openpam_ttyconv[3] из OpenPAM. Она полнофункциональна, и "
+"должна послужить источником идей о том, как должна себя вести функция "
+"взаимодействия, однако она слишком проста для реальных приложений. Даже если "
+"вы не используете OpenPAM, можете сгрузить исходный код и использовать "
+"man:openpam_ttyconv[3] в своих целях; мы надеемся, что она достаточно "
+"надёжна в качестве функции для взаимодействия с терминальными устройствами."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:661
+#, 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:666
+#, no-wrap
+msgid "Further Reading"
+msgstr "Для дальнейшего ознакомления"
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:668
+#, no-wrap
+msgid "Papers"
+msgstr "Статьи"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:671
+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:673
+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:675
+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:676
+#, no-wrap
+msgid "User Manuals"
+msgstr "Руководства пользователя"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:679
+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]_. Sun Microsystems."
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:680
+#, no-wrap
+msgid "Related Web Pages"
+msgstr "Веб страницы"
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:683
+msgid ""
+"_link:https://www.openpam.org/[OpenPAM homepage]_ Dag-Erling Smørgrav. "
+"ThinkSec AS."
+msgstr ""
+"_link:https://www.openpam.org/[Домащняя страница OpenPAM]_ Dag-Erling "
+"Smørgrav. ThinkSec AS."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:685
+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]_ Andrew Morgan."
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:686
+msgid "_Solaris PAM homepage_. Sun Microsystems."
+msgstr ""
+"_Домашняя страница Solaris PAM (Solaris PAM homepage)_. Sun Microsystems."
diff --git a/documentation/content/ru/articles/pgpkeys/_index.adoc b/documentation/content/ru/articles/pgpkeys/_index.adoc
new file mode 100644
index 0000000000..aed397d2cb
--- /dev/null
+++ b/documentation/content/ru/articles/pgpkeys/_index.adoc
@@ -0,0 +1,1548 @@
+---
+description: 'Список OpenPGP-ключей, которые можно использовать для проверки подписей или отправки зашифрованной электронной почты офицерам или разработчикам FreeBSD.org.'
+tags: ["OpenPGP", "Developers", "Officers", "FreeBSD"]
+title: 'Ключи OpenPGP'
+---
+
+= Ключи 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::[]
+
+Эти OpenPGP-ключи можно использовать для проверки подписи или отправки зашифрованной электронной почты офицерам или разработчикам `FreeBSD.org`. Полный набор ключей можно загрузить по ссылке: 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]]
+== Офицеры
+
+=== {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]]
+== Участники Core Team
+
+=== `{allanjude}`
+include::{include-path}allanjude.key[]
+
+=== `{dch}`
+include::{include-path}dch.key[]
+
+=== `{glebius}`
+include::{include-path}glebius.key[]
+
+=== `{hrs}`
+include::{include-path}hrs.key[]
+
+=== `{lwhsu}`
+include::{include-path}lwhsu.key[]
+
+=== `{mat}`
+include::{include-path}mat.key[]
+
+=== `{olivier}`
+include::{include-path}olivier.key[]
+
+=== `{tcberner}`
+include::{include-path}tcberner.key[]
+
+[[pgpkeys-developers]]
+== Разработчики
+
+=== `{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[]
+
+=== `{jbo}`
+include::{include-path}jbo.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[]
+
+=== `{dab}`
+include::{include-path}dab.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[]
+
+=== `{olce}`
+include::{include-path}olce.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[]
+
+=== `{dch}`
+include::{include-path}dch.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[]
+
+=== `{jlduran}`
+include::{include-path}jlduran.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[]
+
+=== `{kgalazka}`
+include::{include-path}kgalazka.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[]
+
+=== `{akiyano}`
+include::{include-path}akiyano.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[]
+
+=== `{rcm}`
+include::{include-path}rcm.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[]
+
+=== `{dumbbell}`
+include::{include-path}dumbbell.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[]
+
+=== `{michaelo}`
+include::{include-path}michaelo.key[]
+
+=== `{igoro}`
+include::{include-path}igoro.key[]
+
+=== `{dtxdf}`
+include::{include-path}dtxdf.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[]
+
+=== `{ashafer}`
+include::{include-path}ashafer.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[]
+
+=== `{uzsolt}`
+include::{include-path}uzsolt.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[]
+
+=== `{obiwac}`
+include::{include-path}obiwac.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[]
+
+=== `{bnovkov}`
+include::{include-path}bnovkov.key[]
+
+=== `{ivy}`
+include::{include-path}ivy.key[]
+
+=== `{khorben}`
+include::{include-path}khorben.key[]
+
+=== `{vexeduxr}`
+include::{include-path}vexeduxr.key[]
+
+=== `{alven}`
+include::{include-path}alven.key[]
+
+[[pgpkeys-other]]
+== Другие владельцы учётных записей
+
+=== `{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/ru/articles/pgpkeys/_index.po b/documentation/content/ru/articles/pgpkeys/_index.po
new file mode 100644
index 0000000000..36f246b46f
--- /dev/null
+++ b/documentation/content/ru/articles/pgpkeys/_index.po
@@ -0,0 +1,3003 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-24 18:23+0300\n"
+"PO-Revision-Date: 2025-08-19 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespgpkeys_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Список OpenPGP-ключей, которые можно использовать для проверки подписей или отправки зашифрованной электронной почты офицерам или разработчикам 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 "Ключи 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 ""
+"Эти OpenPGP-ключи можно использовать для проверки подписи или отправки "
+"зашифрованной электронной почты офицерам или разработчикам `FreeBSD.org`. "
+"Полный набор ключей можно загрузить по ссылке: 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 "Офицеры"
+
+#. 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 "Участники Core Team"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:78
+#: documentation/content/en/articles/pgpkeys/_index.adoc:645
+#, no-wrap
+msgid "`{allanjude}`"
+msgstr "`{allanjude}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:81
+#: documentation/content/en/articles/pgpkeys/_index.adoc:339
+#, no-wrap
+msgid "`{dch}`"
+msgstr "`{dch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:84
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1248
+#, no-wrap
+msgid "`{glebius}`"
+msgstr "`{glebius}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:87
+#, no-wrap
+msgid "`{hrs}`"
+msgstr "`{hrs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:90
+#: documentation/content/en/articles/pgpkeys/_index.adoc:597
+#, no-wrap
+msgid "`{lwhsu}`"
+msgstr "`{lwhsu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:93
+#: documentation/content/en/articles/pgpkeys/_index.adoc:147
+#, no-wrap
+msgid "`{mat}`"
+msgstr "`{mat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:96
+#: documentation/content/en/articles/pgpkeys/_index.adoc:336
+#, no-wrap
+msgid "`{olivier}`"
+msgstr "`{olivier}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:99
+#: documentation/content/en/articles/pgpkeys/_index.adoc:198
+#, no-wrap
+msgid "`{tcberner}`"
+msgstr "`{tcberner}`"
+
+#. 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 "`{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: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:171
+#, no-wrap
+msgid "`{jhb}`"
+msgstr "`{jhb}`"
+
+#. 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 "`{jbo}`"
+msgstr "`{jbo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:213
+#, no-wrap
+msgid "`{novel}`"
+msgstr "`{novel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:216
+#, no-wrap
+msgid "`{garga}`"
+msgstr "`{garga}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:219
+#, no-wrap
+msgid "`{kbowling}`"
+msgstr "`{kbowling}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:222
+#, no-wrap
+msgid "`{alexbl}`"
+msgstr "`{alexbl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:225
+#, no-wrap
+msgid "`{ebrandi}`"
+msgstr "`{ebrandi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:228
+#, no-wrap
+msgid "`{harti}`"
+msgstr "`{harti}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:231
+#, no-wrap
+msgid "`{obraun}`"
+msgstr "`{obraun}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:234
+#, no-wrap
+msgid "`{makc}`"
+msgstr "`{makc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:237
+#, no-wrap
+msgid "`{jmb}`"
+msgstr "`{jmb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:240
+#, no-wrap
+msgid "`{dab}`"
+msgstr "`{dab}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:243
+#, no-wrap
+msgid "`{antoine}`"
+msgstr "`{antoine}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:246
+#, no-wrap
+msgid "`{db}`"
+msgstr "`{db}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:249
+#, no-wrap
+msgid "`{brueffer}`"
+msgstr "`{brueffer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:252
+#, no-wrap
+msgid "`{markus}`"
+msgstr "`{markus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:255
+#, no-wrap
+msgid "`{br}`"
+msgstr "`{br}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:258
+#, no-wrap
+msgid "`{jch}`"
+msgstr "`{jch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:261
+#, no-wrap
+msgid "`{jchandra}`"
+msgstr "`{jchandra}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:264
+#, no-wrap
+msgid "`{jcamou}`"
+msgstr "`{jcamou}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:267
+#, no-wrap
+msgid "`{acm}`"
+msgstr "`{acm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:270
+#, no-wrap
+msgid "`{olce}`"
+msgstr "`{olce}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:273
+#, no-wrap
+msgid "`{gahr}`"
+msgstr "`{gahr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:276
+#, no-wrap
+msgid "`{dchagin}`"
+msgstr "`{dchagin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:279
+#, no-wrap
+msgid "`{perky}`"
+msgstr "`{perky}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:282
+#, no-wrap
+msgid "`{jon}`"
+msgstr "`{jon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:285
+#, no-wrap
+msgid "`{jonathan}`"
+msgstr "`{jonathan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:288
+#, no-wrap
+msgid "`{loader}`"
+msgstr "`{loader}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:291
+#, no-wrap
+msgid "`{luoqi}`"
+msgstr "`{luoqi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:294
+#, no-wrap
+msgid "`{ache}`"
+msgstr "`{ache}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:297
+#, no-wrap
+msgid "`{melifaro}`"
+msgstr "`{melifaro}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:300
+#, no-wrap
+msgid "`{cjh}`"
+msgstr "`{cjh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:303
+#, no-wrap
+msgid "`{davidch}`"
+msgstr "`{davidch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:306
+#, no-wrap
+msgid "`{milki}`"
+msgstr "`{milki}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:309
+#, no-wrap
+msgid "`{cjc}`"
+msgstr "`{cjc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:312
+#, no-wrap
+msgid "`{marcus}`"
+msgstr "`{marcus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:315
+#, no-wrap
+msgid "`{fuz}`"
+msgstr "`{fuz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:318
+#, no-wrap
+msgid "`{nik}`"
+msgstr "`{nik}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:321
+#, no-wrap
+msgid "`{benjsc}`"
+msgstr "`{benjsc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:324
+#, no-wrap
+msgid "`{lcook}`"
+msgstr "`{lcook}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:327
+#, no-wrap
+msgid "`{ngie}`"
+msgstr "`{ngie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:330
+#, no-wrap
+msgid "`{rakuco}`"
+msgstr "`{rakuco}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:333
+#, no-wrap
+msgid "`{alc}`"
+msgstr "`{alc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:342
+#, no-wrap
+msgid "`{bcran}`"
+msgstr "`{bcran}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:345
+#, no-wrap
+msgid "`{cc}`"
+msgstr "`{cc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:348
+#, no-wrap
+msgid "`{culot}`"
+msgstr "`{culot}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:351
+#, no-wrap
+msgid "`{alfredo}`"
+msgstr "`{alfredo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:354
+#, no-wrap
+msgid "`{bapt}`"
+msgstr "`{bapt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:357
+#, no-wrap
+msgid "`{ceri}`"
+msgstr "`{ceri}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:360
+#, no-wrap
+msgid "`{edavis}`"
+msgstr "`{edavis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:363
+#, no-wrap
+msgid "`{alexey}`"
+msgstr "`{alexey}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:366
+#, no-wrap
+msgid "`{bsd}`"
+msgstr "`{bsd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:369
+#, no-wrap
+msgid "`{carl}`"
+msgstr "`{carl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:372
+#, no-wrap
+msgid "`{carlavilla}`"
+msgstr "`{carlavilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:375
+#, no-wrap
+msgid "`{vd}`"
+msgstr "`{vd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:378
+#, no-wrap
+msgid "`{rdivacky}`"
+msgstr "`{rdivacky}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:381
+#, no-wrap
+msgid "`{danfe}`"
+msgstr "`{danfe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:384
+#, no-wrap
+msgid "`{dd}`"
+msgstr "`{dd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:387
+#, no-wrap
+msgid "`{bdrewery}`"
+msgstr "`{bdrewery}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:390
+#, no-wrap
+msgid "`{gad}`"
+msgstr "`{gad}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:393
+#, no-wrap
+msgid "`{kd}`"
+msgstr "`{kd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:396
+#, no-wrap
+msgid "`{olivierd}`"
+msgstr "`{olivierd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:399
+#, no-wrap
+msgid "`{bruno}`"
+msgstr "`{bruno}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:402
+#, no-wrap
+msgid "`{ale}`"
+msgstr "`{ale}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:405
+#, no-wrap
+msgid "`{jlduran}`"
+msgstr "`{jlduran}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:408
+#, no-wrap
+msgid "`{nemysis}`"
+msgstr "`{nemysis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:411
+#, no-wrap
+msgid "`{peadar}`"
+msgstr "`{peadar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:414
+#, no-wrap
+msgid "`{deischen}`"
+msgstr "`{deischen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:417
+#, no-wrap
+msgid "`{diizzy}`"
+msgstr "`{diizzy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:420
+#, no-wrap
+msgid "`{ue}`"
+msgstr "`{ue}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:423
+#, no-wrap
+msgid "`{madpilot}`"
+msgstr "`{madpilot}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:426
+#, no-wrap
+msgid "`{rafan}`"
+msgstr "`{rafan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:429
+#, no-wrap
+msgid "`{kami}`"
+msgstr "`{kami}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:432
+#, no-wrap
+msgid "`{farrokhi}`"
+msgstr "`{farrokhi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:435
+#, no-wrap
+msgid "`{jedgar}`"
+msgstr "`{jedgar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:438
+#, no-wrap
+msgid "`{mfechner}`"
+msgstr "`{mfechner}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:441
+#, no-wrap
+msgid "`{feld}`"
+msgstr "`{feld}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:444
+#, no-wrap
+msgid "`{green}`"
+msgstr "`{green}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:447
+#, no-wrap
+msgid "`{fanf}`"
+msgstr "`{fanf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:450
+#, no-wrap
+msgid "`{blackend}`"
+msgstr "`{blackend}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:453
+#, no-wrap
+msgid "`{petef}`"
+msgstr "`{petef}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:456
+#, no-wrap
+msgid "`{decke}`"
+msgstr "`{decke}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:459
+#, no-wrap
+msgid "`{landonf}`"
+msgstr "`{landonf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:462
+#, no-wrap
+msgid "`{billf}`"
+msgstr "`{billf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:465
+#, no-wrap
+msgid "`{grembo}`"
+msgstr "`{grembo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:468
+#, no-wrap
+msgid "`{sgalabov}`"
+msgstr "`{sgalabov}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:471
+#, no-wrap
+msgid "`{kgalazka}`"
+msgstr "`{kgalazka}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:474
+#, no-wrap
+msgid "`{avg}`"
+msgstr "`{avg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:477
+#, no-wrap
+msgid "`{beat}`"
+msgstr "`{beat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:480
+#, no-wrap
+msgid "`{sjg}`"
+msgstr "`{sjg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:483
+#, no-wrap
+msgid "`{gibbs}`"
+msgstr "`{gibbs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:486
+#, no-wrap
+msgid "`{pfg}`"
+msgstr "`{pfg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:489
+#, no-wrap
+msgid "`{girgen}`"
+msgstr "`{girgen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:492
+#, no-wrap
+msgid "`{eugen}`"
+msgstr "`{eugen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:495
+#, no-wrap
+msgid "`{pgollucci}`"
+msgstr "`{pgollucci}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:498
+#, no-wrap
+msgid "`{trociny}`"
+msgstr "`{trociny}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:501
+#, no-wrap
+msgid "`{dmgk}`"
+msgstr "`{dmgk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:504
+#, no-wrap
+msgid "`{daichi}`"
+msgstr "`{daichi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:507
+#, no-wrap
+msgid "`{grehan}`"
+msgstr "`{grehan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:510
+#, no-wrap
+msgid "`{jamie}`"
+msgstr "`{jamie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:513
+#, no-wrap
+msgid "`{adridg}`"
+msgstr "`{adridg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:516
+#, no-wrap
+msgid "`{wg}`"
+msgstr "`{wg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:519
+#, no-wrap
+msgid "`{bar}`"
+msgstr "`{bar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:522
+#, no-wrap
+msgid "`{jmg}`"
+msgstr "`{jmg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:525
+#, no-wrap
+msgid "`{mjg}`"
+msgstr "`{mjg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:528
+#, no-wrap
+msgid "`{jhale}`"
+msgstr "`{jhale}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:531
+#, no-wrap
+msgid "`{jah}`"
+msgstr "`{jah}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:534
+#, no-wrap
+msgid "`{dannyboy}`"
+msgstr "`{dannyboy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:537
+#, no-wrap
+msgid "`{dhartmei}`"
+msgstr "`{dhartmei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:540
+#, no-wrap
+msgid "`{ohauer}`"
+msgstr "`{ohauer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:543
+#, no-wrap
+msgid "`{ehaupt}`"
+msgstr "`{ehaupt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:546
+#, no-wrap
+msgid "`{jhay}`"
+msgstr "`{jhay}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:549
+#, no-wrap
+msgid "`{bhd}`"
+msgstr "`{bhd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:552
+#, no-wrap
+msgid "`{sheldonh}`"
+msgstr "`{sheldonh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:555
+#, no-wrap
+msgid "`{mikeh}`"
+msgstr "`{mikeh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:558
+#, no-wrap
+msgid "`{mheinen}`"
+msgstr "`{mheinen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:561
+#, no-wrap
+msgid "`{niels}`"
+msgstr "`{niels}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:564
+#, no-wrap
+msgid "`{ghelmer}`"
+msgstr "`{ghelmer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:567
+#, no-wrap
+msgid "`{mux}`"
+msgstr "`{mux}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:570
+#, no-wrap
+msgid "`{wen}`"
+msgstr "`{wen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:573
+#, no-wrap
+msgid "`{dhn}`"
+msgstr "`{dhn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:576
+#, no-wrap
+msgid "`{jhibbits}`"
+msgstr "`{jhibbits}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:579
+#, no-wrap
+msgid "`{jhixson}`"
+msgstr "`{jhixson}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:582
+#, no-wrap
+msgid "`{pho}`"
+msgstr "`{pho}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:585
+#, no-wrap
+msgid "`{oh}`"
+msgstr "`{oh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:588
+#, no-wrap
+msgid "`{mhorne}`"
+msgstr "`{mhorne}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:591
+#, no-wrap
+msgid "`{bhughes}`"
+msgstr "`{bhughes}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:594
+#, no-wrap
+msgid "`{sunpoet}`"
+msgstr "`{sunpoet}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:600
+#, no-wrap
+msgid "`{foxfair}`"
+msgstr "`{foxfair}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:603
+#, no-wrap
+msgid "`{whu}`"
+msgstr "`{whu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:606
+#, no-wrap
+msgid "`{chinsan}`"
+msgstr "`{chinsan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:609
+#, no-wrap
+msgid "`{zlei}`"
+msgstr "`{zlei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:612
+#, no-wrap
+msgid "`{davide}`"
+msgstr "`{davide}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:615
+#, no-wrap
+msgid "`{jkh}`"
+msgstr "`{jkh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:618
+#, no-wrap
+msgid "`{versus}`"
+msgstr "`{versus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:621
+#, no-wrap
+msgid "`{pi}`"
+msgstr "`{pi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:624
+#, no-wrap
+msgid "`{weongyo}`"
+msgstr "`{weongyo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:627
+#, no-wrap
+msgid "`{peterj}`"
+msgstr "`{peterj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:630
+#, no-wrap
+msgid "`{jinmei}`"
+msgstr "`{jinmei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:633
+#, no-wrap
+msgid "`{ahze}`"
+msgstr "`{ahze}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:636
+#, no-wrap
+msgid "`{markj}`"
+msgstr "`{markj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:639
+#, no-wrap
+msgid "`{trevor}`"
+msgstr "`{trevor}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:642
+#, no-wrap
+msgid "`{erj}`"
+msgstr "`{erj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:648
+#, no-wrap
+msgid "`{bjk}`"
+msgstr "`{bjk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:651
+#, no-wrap
+msgid "`{phk}`"
+msgstr "`{phk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:654
+#, no-wrap
+msgid "`{pluknet}`"
+msgstr "`{pluknet}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:657
+#, no-wrap
+msgid "`{cokane}`"
+msgstr "`{cokane}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:660
+#, no-wrap
+msgid "`{karels}`"
+msgstr "`{karels}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:663
+#, no-wrap
+msgid "`{kato}`"
+msgstr "`{kato}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:666
+#, no-wrap
+msgid "`{vkashyap}`"
+msgstr "`{vkashyap}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:669
+#, no-wrap
+msgid "`{pkubaj}`"
+msgstr "`{pkubaj}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:672
+#, no-wrap
+msgid "`{kris}`"
+msgstr "`{kris}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:675
+#, no-wrap
+msgid "`{keramida}`"
+msgstr "`{keramida}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:678
+#, no-wrap
+msgid "`{fjoe}`"
+msgstr "`{fjoe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:681
+#, no-wrap
+msgid "`{manolis}`"
+msgstr "`{manolis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:684
+#, no-wrap
+msgid "`{stevek}`"
+msgstr "`{stevek}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:687
+#, no-wrap
+msgid "`{jkim}`"
+msgstr "`{jkim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:690
+#, no-wrap
+msgid "`{zack}`"
+msgstr "`{zack}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:693
+#, no-wrap
+msgid "`{akiyano}`"
+msgstr "`{akiyano}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:696
+#, no-wrap
+msgid "`{jceel}`"
+msgstr "`{jceel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:699
+#, no-wrap
+msgid "`{andreas}`"
+msgstr "`{andreas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:702
+#, no-wrap
+msgid "`{kai}`"
+msgstr "`{kai}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:705
+#, no-wrap
+msgid "`{corvink}`"
+msgstr "`{corvink}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:708
+#, no-wrap
+msgid "`{jkois}`"
+msgstr "`{jkois}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:711
+#, no-wrap
+msgid "`{sergei}`"
+msgstr "`{sergei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:714
+#, no-wrap
+msgid "`{maxim}`"
+msgstr "`{maxim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:717
+#, no-wrap
+msgid "`{taras}`"
+msgstr "`{taras}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:720
+#, no-wrap
+msgid "`{tobik}`"
+msgstr "`{tobik}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:723
+#, no-wrap
+msgid "`{jkoshy}`"
+msgstr "`{jkoshy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:726
+#, no-wrap
+msgid "`{wkoszek}`"
+msgstr "`{wkoszek}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:729
+#, no-wrap
+msgid "`{ak}`"
+msgstr "`{ak}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:732
+#, no-wrap
+msgid "`{gabor}`"
+msgstr "`{gabor}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:735
+#, no-wrap
+msgid "`{anchie}`"
+msgstr "`{anchie}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:738
+#, no-wrap
+msgid "`{rushani}`"
+msgstr "`{rushani}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:741
+#, no-wrap
+msgid "`{kuriyama}`"
+msgstr "`{kuriyama}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:744
+#, no-wrap
+msgid "`{rene}`"
+msgstr "`{rene}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:747
+#, no-wrap
+msgid "`{jlaffaye}`"
+msgstr "`{jlaffaye}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:750
+#, no-wrap
+msgid "`{clement}`"
+msgstr "`{clement}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:753
+#, no-wrap
+msgid "`{mlaier}`"
+msgstr "`{mlaier}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:756
+#, no-wrap
+msgid "`{martymac}`"
+msgstr "`{martymac}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:759
+#, no-wrap
+msgid "`{glarkin}`"
+msgstr "`{glarkin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:762
+#, no-wrap
+msgid "`{dru}`"
+msgstr "`{dru}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:765
+#, no-wrap
+msgid "`{lawrance}`"
+msgstr "`{lawrance}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:768
+#, no-wrap
+msgid "`{njl}`"
+msgstr "`{njl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:771
+#, no-wrap
+msgid "`{jlh}`"
+msgstr "`{jlh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:774
+#, no-wrap
+msgid "`{leeym}`"
+msgstr "`{leeym}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:777
+#, no-wrap
+msgid "`{sam}`"
+msgstr "`{sam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:780
+#, no-wrap
+msgid "`{jylefort}`"
+msgstr "`{jylefort}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:783
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:786
+#, no-wrap
+msgid "`{oliver}`"
+msgstr "`{oliver}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:789
+#, no-wrap
+msgid "`{netchild}`"
+msgstr "`{netchild}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:792
+#, no-wrap
+msgid "`{leitao}`"
+msgstr "`{leitao}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:795
+#, no-wrap
+msgid "`{ae}`"
+msgstr "`{ae}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:798
+#, no-wrap
+msgid "`{lesi}`"
+msgstr "`{lesi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:801
+#, no-wrap
+msgid "`{achim}`"
+msgstr "`{achim}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:804
+#, no-wrap
+msgid "`{cel}`"
+msgstr "`{cel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:807
+#, no-wrap
+msgid "`{glewis}`"
+msgstr "`{glewis}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:810
+#, no-wrap
+msgid "`{vishwin}`"
+msgstr "`{vishwin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:813
+#, no-wrap
+msgid "`{delphij}`"
+msgstr "`{delphij}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:816
+#, no-wrap
+msgid "`{avatar}`"
+msgstr "`{avatar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:819
+#, no-wrap
+msgid "`{ijliao}`"
+msgstr "`{ijliao}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:822
+#, no-wrap
+msgid "`{rlibby}`"
+msgstr "`{rlibby}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:825
+#, no-wrap
+msgid "`{pclin}`"
+msgstr "`{pclin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:828
+#, no-wrap
+msgid "`{yzlin}`"
+msgstr "`{yzlin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:831
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:834
+#, no-wrap
+msgid "`{arved}`"
+msgstr "`{arved}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:837
+#, no-wrap
+msgid "`{dryice}`"
+msgstr "`{dryice}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:840
+#, no-wrap
+msgid "`{nemoliu}`"
+msgstr "`{nemoliu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:843
+#, no-wrap
+msgid "`{kevlo}`"
+msgstr "`{kevlo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:846
+#, no-wrap
+msgid "`{zml}`"
+msgstr "`{zml}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:849
+#, no-wrap
+msgid "`{nox}`"
+msgstr "`{nox}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:852
+#, no-wrap
+msgid "`{avl}`"
+msgstr "`{avl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:855
+#, no-wrap
+msgid "`{scottl}`"
+msgstr "`{scottl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:858
+#, no-wrap
+msgid "`{rmacklem}`"
+msgstr "`{rmacklem}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:861
+#, no-wrap
+msgid "`{vmaffione}`"
+msgstr "`{vmaffione}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:864
+#, no-wrap
+msgid "`{bmah}`"
+msgstr "`{bmah}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:867
+#, no-wrap
+msgid "`{rm}`"
+msgstr "`{rm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:870
+#, no-wrap
+msgid "`{mtm}`"
+msgstr "`{mtm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:873
+#, no-wrap
+msgid "`{dwmalone}`"
+msgstr "`{dwmalone}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:876
+#, no-wrap
+msgid "`{christos}`"
+msgstr "`{christos}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:879
+#, no-wrap
+msgid "`{marino}`"
+msgstr "`{marino}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:882
+#, no-wrap
+msgid "`{cherry}`"
+msgstr "`{cherry}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:885
+#, no-wrap
+msgid "`{matusita}`"
+msgstr "`{matusita}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:888
+#, no-wrap
+msgid "`{mm}`"
+msgstr "`{mm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:891
+#, no-wrap
+msgid "`{sem}`"
+msgstr "`{sem}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:894
+#, no-wrap
+msgid "`{rcm}`"
+msgstr "`{rcm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:897
+#, no-wrap
+msgid "`{mckusick}`"
+msgstr "`{mckusick}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:900
+#, no-wrap
+msgid "`{tmclaugh}`"
+msgstr "`{tmclaugh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:903
+#, no-wrap
+msgid "`{jmelo}`"
+msgstr "`{jmelo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:906
+#, no-wrap
+msgid "`{mmel}`"
+msgstr "`{mmel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:909
+#, no-wrap
+msgid "`{jmmv}`"
+msgstr "`{jmmv}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:912
+#, no-wrap
+msgid "`{kadesai}`"
+msgstr "`{kadesai}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:915
+#, no-wrap
+msgid "`{ken}`"
+msgstr "`{ken}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:918
+#, no-wrap
+msgid "`{markm}`"
+msgstr "`{markm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:921
+#, no-wrap
+msgid "`{dinoex}`"
+msgstr "`{dinoex}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:924
+#, no-wrap
+msgid "`{sanpei}`"
+msgstr "`{sanpei}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:927
+#, no-wrap
+msgid "`{rmh}`"
+msgstr "`{rmh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:930
+#, no-wrap
+msgid "`{driesm}`"
+msgstr "`{driesm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:933
+#, no-wrap
+msgid "`{jrm}`"
+msgstr "`{jrm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:936
+#, no-wrap
+msgid "`{freqlabs}`"
+msgstr "`{freqlabs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:939
+#, no-wrap
+msgid "`{mmoll}`"
+msgstr "`{mmoll}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:942
+#, no-wrap
+msgid "`{cmt}`"
+msgstr "`{cmt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:945
+#, no-wrap
+msgid "`{stephen}`"
+msgstr "`{stephen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:948
+#, no-wrap
+msgid "`{marcel}`"
+msgstr "`{marcel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:951
+#, no-wrap
+msgid "`{dougm}`"
+msgstr "`{dougm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:954
+#, no-wrap
+msgid "`{kmoore}`"
+msgstr "`{kmoore}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:957
+#, no-wrap
+msgid "`{marck}`"
+msgstr "`{marck}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:960
+#, no-wrap
+msgid "`{mav}`"
+msgstr "`{mav}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:963
+#, no-wrap
+msgid "`{rich}`"
+msgstr "`{rich}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:966
+#, no-wrap
+msgid "`{knu}`"
+msgstr "`{knu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:969
+#, no-wrap
+msgid "`{tmm}`"
+msgstr "`{tmm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:972
+#, no-wrap
+msgid "`{max}`"
+msgstr "`{max}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:975
+#, no-wrap
+msgid "`{maho}`"
+msgstr "`{maho}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:978
+#, no-wrap
+msgid "`{yoichi}`"
+msgstr "`{yoichi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:981
+#, no-wrap
+msgid "`{bland}`"
+msgstr "`{bland}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:984
+#, no-wrap
+msgid "`{gnn}`"
+msgstr "`{gnn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:987
+#, no-wrap
+msgid "`{khng}`"
+msgstr "`{khng}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:990
+#, no-wrap
+msgid "`{simon}`"
+msgstr "`{simon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:993
+#, no-wrap
+msgid "`{rnoland}`"
+msgstr "`{rnoland}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:996
+#, no-wrap
+msgid "`{anders}`"
+msgstr "`{anders}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:999
+#, no-wrap
+msgid "`{lofi}`"
+msgstr "`{lofi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1002
+#, no-wrap
+msgid "`{obrien}`"
+msgstr "`{obrien}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1005
+#, no-wrap
+msgid "`{olgeni}`"
+msgstr "`{olgeni}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1008
+#, no-wrap
+msgid "`{philip}`"
+msgstr "`{philip}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1011
+#, no-wrap
+msgid "`{jpaetzel}`"
+msgstr "`{jpaetzel}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1014
+#, no-wrap
+msgid "`{zirias}`"
+msgstr "`{zirias}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1017
+#, no-wrap
+msgid "`{hiren}`"
+msgstr "`{hiren}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1020
+#, no-wrap
+msgid "`{hmp}`"
+msgstr "`{hmp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1023
+#, no-wrap
+msgid "`{fluffy}`"
+msgstr "`{fluffy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1026
+#, no-wrap
+msgid "`{sat}`"
+msgstr "`{sat}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1029
+#, no-wrap
+msgid "`{np}`"
+msgstr "`{np}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1032
+#, no-wrap
+msgid "`{royger}`"
+msgstr "`{royger}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1035
+#, no-wrap
+msgid "`{rpaulo}`"
+msgstr "`{rpaulo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1038
+#, no-wrap
+msgid "`{misha}`"
+msgstr "`{misha}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1041
+#, no-wrap
+msgid "`{dumbbell}`"
+msgstr "`{dumbbell}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1044
+#, no-wrap
+msgid "`{rpokala}`"
+msgstr "`{rpokala}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1047
+#, no-wrap
+msgid "`{mp}`"
+msgstr "`{mp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1050
+#, no-wrap
+msgid "`{roam}`"
+msgstr "`{roam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1053
+#, no-wrap
+msgid "`{den}`"
+msgstr "`{den}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1056
+#, no-wrap
+msgid "`{csjp}`"
+msgstr "`{csjp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1059
+#, no-wrap
+msgid "`{grahamperrin}`"
+msgstr "`{grahamperrin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1062
+#, no-wrap
+msgid "`{gerald}`"
+msgstr "`{gerald}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1065
+#, no-wrap
+msgid "`{scottph}`"
+msgstr "`{scottph}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1068
+#, no-wrap
+msgid "`{jacula}`"
+msgstr "`{jacula}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1071
+#, no-wrap
+msgid "`{0mp}`"
+msgstr "`{0mp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1074
+#, no-wrap
+msgid "`{jdp}`"
+msgstr "`{jdp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1077
+#, no-wrap
+msgid "`{krion}`"
+msgstr "`{krion}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1080
+#, no-wrap
+msgid "`{sepotvin}`"
+msgstr "`{sepotvin}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1083
+#, no-wrap
+msgid "`{cpm}`"
+msgstr "`{cpm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1086
+#, no-wrap
+msgid "`{markp}`"
+msgstr "`{markp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1089
+#, no-wrap
+msgid "`{alepulver}`"
+msgstr "`{alepulver}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1092
+#, no-wrap
+msgid "`{kp}`"
+msgstr "`{kp}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1095
+#, no-wrap
+msgid "`{thomas}`"
+msgstr "`{thomas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1098
+#, no-wrap
+msgid "`{hq}`"
+msgstr "`{hq}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1101
+#, no-wrap
+msgid "`{bofh}`"
+msgstr "`{bofh}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1104
+#, no-wrap
+msgid "`{fox}`"
+msgstr "`{fox}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1107
+#, no-wrap
+msgid "`{lbr}`"
+msgstr "`{lbr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1110
+#, no-wrap
+msgid "`{crees}`"
+msgstr "`{crees}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1113
+#, no-wrap
+msgid "`{rees}`"
+msgstr "`{rees}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1116
+#, no-wrap
+msgid "`{mr}`"
+msgstr "`{mr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1119
+#, no-wrap
+msgid "`{bcr}`"
+msgstr "`{bcr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1122
+#, no-wrap
+msgid "`{trhodes}`"
+msgstr "`{trhodes}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1125
+#, no-wrap
+msgid "`{benno}`"
+msgstr "`{benno}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1128
+#, no-wrap
+msgid "`{beech}`"
+msgstr "`{beech}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1131
+#, no-wrap
+msgid "`{roberto}`"
+msgstr "`{roberto}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1134
+#, no-wrap
+msgid "`{rodrigc}`"
+msgstr "`{rodrigc}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1137
+#, no-wrap
+msgid "`{michaelo}`"
+msgstr "`{michaelo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1140
+#, no-wrap
+msgid "`{igoro}`"
+msgstr "`{igoro}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1143
+#, no-wrap
+msgid "`{dtxdf}`"
+msgstr "`{dtxdf}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1146
+#, no-wrap
+msgid "`{ler}`"
+msgstr "`{ler}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1149
+#, no-wrap
+msgid "`{leres}`"
+msgstr "`{leres}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1152
+#, no-wrap
+msgid "`{robak}`"
+msgstr "`{robak}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1155
+#, no-wrap
+msgid "`{guido}`"
+msgstr "`{guido}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1158
+#, no-wrap
+msgid "`{rea}`"
+msgstr "`{rea}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1161
+#, no-wrap
+msgid "`{ray}`"
+msgstr "`{ray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1164
+#, no-wrap
+msgid "`{niklas}`"
+msgstr "`{niklas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1167
+#, no-wrap
+msgid "`{salvadore}`"
+msgstr "`{salvadore}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1170
+#, no-wrap
+msgid "`{bsam}`"
+msgstr "`{bsam}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1173
+#, no-wrap
+msgid "`{marks}`"
+msgstr "`{marks}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1176
+#, no-wrap
+msgid "`{bschmidt}`"
+msgstr "`{bschmidt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1179
+#, no-wrap
+msgid "`{wosch}`"
+msgstr "`{wosch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1182
+#, no-wrap
+msgid "`{cy}`"
+msgstr "`{cy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1185
+#, no-wrap
+msgid "`{das}`"
+msgstr "`{das}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1188
+#, no-wrap
+msgid "`{scheidell}`"
+msgstr "`{scheidell}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1191
+#, no-wrap
+msgid "`{matthew}`"
+msgstr "`{matthew}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1194
+#, no-wrap
+msgid "`{tmseck}`"
+msgstr "`{tmseck}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1197
+#, no-wrap
+msgid "`{johans}`"
+msgstr "`{johans}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1200
+#, no-wrap
+msgid "`{bakul}`"
+msgstr "`{bakul}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1203
+#, no-wrap
+msgid "`{gshapiro}`"
+msgstr "`{gshapiro}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1206
+#, no-wrap
+msgid "`{wxs}`"
+msgstr "`{wxs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1209
+#, no-wrap
+msgid "`{nork}`"
+msgstr "`{nork}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1212
+#, no-wrap
+msgid "`{syrinx}`"
+msgstr "`{syrinx}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1215
+#, no-wrap
+msgid "`{vanilla}`"
+msgstr "`{vanilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1218
+#, no-wrap
+msgid "`{ashafer}`"
+msgstr "`{ashafer}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1221
+#, no-wrap
+msgid "`{ashish}`"
+msgstr "`{ashish}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1224
+#, no-wrap
+msgid "`{asiciliano}`"
+msgstr "`{asiciliano}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1227
+#, no-wrap
+msgid "`{chs}`"
+msgstr "`{chs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1230
+#, no-wrap
+msgid "`{bms}`"
+msgstr "`{bms}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1233
+#, no-wrap
+msgid "`{demon}`"
+msgstr "`{demon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1236
+#, no-wrap
+msgid "`{jesper}`"
+msgstr "`{jesper}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1239
+#, no-wrap
+msgid "`{scop}`"
+msgstr "`{scop}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1242
+#, no-wrap
+msgid "`{anray}`"
+msgstr "`{anray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1245
+#, no-wrap
+msgid "`{flo}`"
+msgstr "`{flo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1251
+#, no-wrap
+msgid "`{kensmith}`"
+msgstr "`{kensmith}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1254
+#, no-wrap
+msgid "`{ben}`"
+msgstr "`{ben}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1257
+#, no-wrap
+msgid "`{des}`"
+msgstr "`{des}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1260
+#, no-wrap
+msgid "`{sobomax}`"
+msgstr "`{sobomax}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1263
+#, no-wrap
+msgid "`{asomers}`"
+msgstr "`{asomers}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1266
+#, no-wrap
+msgid "`{brian}`"
+msgstr "`{brian}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1269
+#, no-wrap
+msgid "`{sson}`"
+msgstr "`{sson}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1272
+#, no-wrap
+msgid "`{nsouch}`"
+msgstr "`{nsouch}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1275
+#, no-wrap
+msgid "`{ssouhlal}`"
+msgstr "`{ssouhlal}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1278
+#, no-wrap
+msgid "`{loos}`"
+msgstr "`{loos}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1281
+#, no-wrap
+msgid "`{brnrd}`"
+msgstr "`{brnrd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1284
+#, no-wrap
+msgid "`{rink}`"
+msgstr "`{rink}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1287
+#, no-wrap
+msgid "`{vsevolod}`"
+msgstr "`{vsevolod}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1290
+#, no-wrap
+msgid "`{pstef}`"
+msgstr "`{pstef}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1293
+#, no-wrap
+msgid "`{zi}`"
+msgstr "`{zi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1296
+#, no-wrap
+msgid "`{lstewart}`"
+msgstr "`{lstewart}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1299
+#, no-wrap
+msgid "`{murray}`"
+msgstr "`{murray}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1302
+#, no-wrap
+msgid "`{vs}`"
+msgstr "`{vs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1305
+#, no-wrap
+msgid "`{xride}`"
+msgstr "`{xride}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1308
+#, no-wrap
+msgid "`{marius}`"
+msgstr "`{marius}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1311
+#, no-wrap
+msgid "`{cs}`"
+msgstr "`{cs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1314
+#, no-wrap
+msgid "`{clsung}`"
+msgstr "`{clsung}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1317
+#, no-wrap
+msgid "`{gsutter}`"
+msgstr "`{gsutter}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1320
+#, no-wrap
+msgid "`{metal}`"
+msgstr "`{metal}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1323
+#, no-wrap
+msgid "`{ryusuke}`"
+msgstr "`{ryusuke}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1326
+#, no-wrap
+msgid "`{nyan}`"
+msgstr "`{nyan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1329
+#, no-wrap
+msgid "`{sahil}`"
+msgstr "`{sahil}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1332
+#, no-wrap
+msgid "`{tota}`"
+msgstr "`{tota}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1335
+#, no-wrap
+msgid "`{romain}`"
+msgstr "`{romain}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1338
+#, no-wrap
+msgid "`{eduardo}`"
+msgstr "`{eduardo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1341
+#, no-wrap
+msgid "`{sylvio}`"
+msgstr "`{sylvio}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1344
+#, no-wrap
+msgid "`{itetcu}`"
+msgstr "`{itetcu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1347
+#, no-wrap
+msgid "`{mi}`"
+msgstr "`{mi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1350
+#, no-wrap
+msgid "`{gordon}`"
+msgstr "`{gordon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1353
+#, no-wrap
+msgid "`{lth}`"
+msgstr "`{lth}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1356
+#, no-wrap
+msgid "`{fabient}`"
+msgstr "`{fabient}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1359
+#, no-wrap
+msgid "`{thierry}`"
+msgstr "`{thierry}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1362
+#, no-wrap
+msgid "`{thompsa}`"
+msgstr "`{thompsa}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1365
+#, no-wrap
+msgid "`{flz}`"
+msgstr "`{flz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1368
+#, no-wrap
+msgid "`{jilles}`"
+msgstr "`{jilles}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1371
+#, no-wrap
+msgid "`{ganbold}`"
+msgstr "`{ganbold}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1374
+#, no-wrap
+msgid "`{tuexen}`"
+msgstr "`{tuexen}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1377
+#, no-wrap
+msgid "`{gonzo}`"
+msgstr "`{gonzo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1380
+#, no-wrap
+msgid "`{uzsolt}`"
+msgstr "`{uzsolt}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1383
+#, no-wrap
+msgid "`{ume}`"
+msgstr "`{ume}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1386
+#, no-wrap
+msgid "`{ups}`"
+msgstr "`{ups}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1389
+#, no-wrap
+msgid "`{fsu}`"
+msgstr "`{fsu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1392
+#, no-wrap
+msgid "`{mikael}`"
+msgstr "`{mikael}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1395
+#, no-wrap
+msgid "`{manu}`"
+msgstr "`{manu}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1398
+#, no-wrap
+msgid "`{ram}`"
+msgstr "`{ram}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1401
+#, no-wrap
+msgid "`{bryanv}`"
+msgstr "`{bryanv}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1404
+#, no-wrap
+msgid "`{nectar}`"
+msgstr "`{nectar}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1407
+#, no-wrap
+msgid "`{avilla}`"
+msgstr "`{avilla}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1410
+#, no-wrap
+msgid "`{nivit}`"
+msgstr "`{nivit}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1413
+#, no-wrap
+msgid "`{ivoras}`"
+msgstr "`{ivoras}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1416
+#, no-wrap
+msgid "`{stefan}`"
+msgstr "`{stefan}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1419
+#, no-wrap
+msgid "`{kaiw}`"
+msgstr "`{kaiw}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1422
+#, no-wrap
+msgid "`{adamw}`"
+msgstr "`{adamw}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1425
+#, no-wrap
+msgid "`{naddy}`"
+msgstr "`{naddy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1428
+#, no-wrap
+msgid "`{peter}`"
+msgstr "`{peter}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1431
+#, no-wrap
+msgid "`{nwhitehorn}`"
+msgstr "`{nwhitehorn}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1434
+#, no-wrap
+msgid "`{obiwac}`"
+msgstr "`{obiwac}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1437
+#, no-wrap
+msgid "`{miwi}`"
+msgstr "`{miwi}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1440
+#, no-wrap
+msgid "`{nate}`"
+msgstr "`{nate}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1443
+#, no-wrap
+msgid "`{twinterg}`"
+msgstr "`{twinterg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1446
+#, no-wrap
+msgid "`{def}`"
+msgstr "`{def}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1449
+#, no-wrap
+msgid "`{wollman}`"
+msgstr "`{wollman}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1452
+#, no-wrap
+msgid "`{joerg}`"
+msgstr "`{joerg}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1455
+#, no-wrap
+msgid "`{ygy}`"
+msgstr "`{ygy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1458
+#, no-wrap
+msgid "`{emax}`"
+msgstr "`{emax}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1461
+#, no-wrap
+msgid "`{oshogbo}`"
+msgstr "`{oshogbo}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1464
+#, no-wrap
+msgid "`{riggs}`"
+msgstr "`{riggs}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1467
+#, no-wrap
+msgid "`{egypcio}`"
+msgstr "`{egypcio}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1470
+#, no-wrap
+msgid "`{bz}`"
+msgstr "`{bz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1473
+#, no-wrap
+msgid "`{dsl}`"
+msgstr "`{dsl}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1476
+#, no-wrap
+msgid "`{zeising}`"
+msgstr "`{zeising}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1479
+#, no-wrap
+msgid "`{phantom}`"
+msgstr "`{phantom}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1482
+#, no-wrap
+msgid "`{tz}`"
+msgstr "`{tz}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1485
+#, no-wrap
+msgid "`{rigoletto}`"
+msgstr "`{rigoletto}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1488
+#, no-wrap
+msgid "`{kaktus}`"
+msgstr "`{kaktus}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1491
+#, no-wrap
+msgid "`{samm}`"
+msgstr "`{samm}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1494
+#, no-wrap
+msgid "`{arrowd}`"
+msgstr "`{arrowd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1497
+#, no-wrap
+msgid "`{ronald}`"
+msgstr "`{ronald}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1500
+#, no-wrap
+msgid "`{meta}`"
+msgstr "`{meta}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1503
+#, no-wrap
+msgid "`{rnagy}`"
+msgstr "`{rnagy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1506
+#, no-wrap
+msgid "`{vvd}`"
+msgstr "`{vvd}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1509
+#, no-wrap
+msgid "`{gbe}`"
+msgstr "`{gbe}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1512
+#, no-wrap
+msgid "`{bnovkov}`"
+msgstr "`{bnovkov}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1515
+#, no-wrap
+msgid "`{ivy}`"
+msgstr "`{ivy}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1518
+#, no-wrap
+msgid "`{khorben}`"
+msgstr "`{khorben}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1521
+#, no-wrap
+msgid "`{vexeduxr}`"
+msgstr "`{vexeduxr}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1524
+#, no-wrap
+msgid "`{alven}`"
+msgstr "`{alven}`"
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1528
+#, no-wrap
+msgid "Other Cluster Account Holders"
+msgstr "Другие владельцы учётных записей"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1530
+#, no-wrap
+msgid "`{bk}`"
+msgstr "`{bk}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1533
+#, no-wrap
+msgid "`{deb}`"
+msgstr "`{deb}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1536
+#, no-wrap
+msgid "`{debdrup}`"
+msgstr "`{debdrup}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1539
+#, no-wrap
+msgid "`{dutchdaemon}`"
+msgstr "`{dutchdaemon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1542
+#, no-wrap
+msgid "`{keymaster}`"
+msgstr "`{keymaster}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1545
+#, no-wrap
+msgid "`{mwlucas}`"
+msgstr "`{mwlucas}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1548
+#, no-wrap
+msgid "`{dhw}`"
+msgstr "`{dhw}`"
diff --git a/documentation/content/ru/articles/port-mentor-guidelines/_index.adoc b/documentation/content/ru/articles/port-mentor-guidelines/_index.adoc
new file mode 100644
index 0000000000..bc304f10bc
--- /dev/null
+++ b/documentation/content/ru/articles/port-mentor-guidelines/_index.adoc
@@ -0,0 +1,118 @@
+---
+copyright: '2011 Thomas Abthorpe, Chris Rees'
+description: 'Руководство для наставников портов FreeBSD'
+organizations:
+ -
+ organization: 'The FreeBSD Ports Management Team'
+tags: ["port", "mentor", "mentee", "guidelines", "FreeBSD"]
+title: 'Руководство для наставников портов'
+---
+
+= Руководство для наставников портов
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/port-mentor-guidelines/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+'''
+
+toc::[]
+
+[[port-mentor.guidelines]]
+== Рекомендации по взаимоотношениям наставника и подопечного
+
+Этот раздел предназначен для того, чтобы помочь развеять таинственность процесса наставничества, а также открыто способствовать конструктивному обсуждению для адаптации и развития руководящих принципов. В нашей жизни слишком много правил; мы не государственная организация, навязывающая регулирование, а скорее коллектив единомышленников, работающих для достижения общей цели — поддержания гарантии качества продукта, который мы называем Деревом Портов.
+
+[[why.mentor]]
+=== Почему наставник (mentor)?
+
+* У большинства из нас были наставники, и это наставничество в Проекте было важным и полезным, поэтому верните эти усилия, предложив стать наставником для кого-то другого.
+* У вас есть непреодолимое желание делиться знаниями с другими.
+* В наказание за это вы обрекаете себя на добровольную каторгу коммитить хорошую работу, сделанную другими!
+
+[[mentor.comentor]]
+=== Наставник/Сонаставник
+
+Причины для совместного наставничества:
+
+* Значительная разница во времени. Доступные, интерактивные наставники, доступные через IM, крайне полезны!
+* Потенциальный языковой барьер. Да, FreeBSD, как и большинство разработок программного обеспечения, ориентирована на английский язык, однако наличие наставника, говорящего на родном языке, может быть очень полезным.
+* ВРЕМЕНИ НЕТ! Пока в сутках не станет 30 часов, а в неделе — 8 дней, у некоторых из нас просто не хватает времени. Разделение нагрузки с кем-то другим облегчит задачу.
+* Наставник для новичков может получить пользу от опыта старшего коммиттера/наставника.
+* Две головы лучше, чем одна.
+
+Причины индивидуального наставничества:
+
+* Вы не играете по правилам с другими.
+* Вы предпочитаете иметь индивидуальные отношения.
+* Причины для совместного наставничества к вам не относятся.
+
+[[mentor.expectations]]
+=== Ожидания
+
+Мы ожидаем, что наставники будут проверять и тестировать все предлагаемые исправления, по крайней мере, в течение начального периода, длящегося более одной или двух недель.
+
+Мы ожидаем, что наставники должны нести ответственность за действия своих подопечных. Наставник должен отслеживать все коммиты, сделанные подопечным, как одобренные, так и неявные.
+
+Мы ожидаем, что наставники убедятся, что их подопечные прочитали extref:{porters-handbook}[Руководство портировщика], extref:{pr-guidelines}[руководство по обработке PR] и extref:{committers-guide}[Руководство коммиттера]. Хотя и не обязательно запоминать все детали, каждый коммиттер должен иметь общее представление об этих вещах, чтобы быть эффективной частью сообщества (и избежать как можно больше ошибок новичка).
+
+[[mentees]]
+=== Выбор подопечного
+
+Не существует определённого правила, по которому кандидат считается готовым; это может быть комбинация количества поданных PR, количества поддерживаемых портов, частоты обновлений портов и/или уровня участия в определённой области интересов, такой как GNOME, KDE, Gecko или других.
+
+Кандидат должен практически не допускать тайм-aутов, оперативно реагировать на запросы и в целом оказывать помощь в поддержке своих портов.
+
+Должна быть история вовлечённости, так как общеизвестно, что обучение коммиттера требует времени и усилий. Длительное участие в проекте и наблюдение за процессами предполагают накопление знаний. Слишком часто мы видели, как сопровождающий отправляет несколько PR, появляется в IRC и спрашивает, когда ему дадут право на коммит.
+
+Подписка и активное участие в почтовых рассылках очень полезны. Нет прямой связи и ожидания быстрого результата, что отправка сообщений в списки рассылок сделает кого-то коммиттером, но это демонстрирует вовлечённость. Некоторые письма позволяют оценить знания кандидата, а также его взаимодействие с другими. Аналогично, участие в IRC может повысить заметность человека.
+
+Спросите у шести разных коммиттеров, сколько PR должен отправить сопровождающий перед тем, как его номинируют, и вы получите шесть разных ответов. Спросите у тех же людей, как долго кто-то должен участвовать, и та же дилемма. Сколько портов у него должно быть как минимум? Теперь у нас есть повод для бесконечных споров! Некоторые вещи просто трудно измерить, наставнику придется полагаться на свое лучшее суждение и надеяться, что portmgr согласится.
+
+[[mentorship.duration]]
+=== Продолжительность наставничества
+
+По мере развития и укрепления уровня доверия, подопечному могут быть предоставлены «неявные» права на внесение изменений. Это может включать тривиальные изменения в [.filename]#Makefile#, [.filename]#pkg-descr# и т. д. Аналогично, это может включать обновления `PORTVERSION`, которые не требуют изменений в `plist`. Другие обстоятельства могут быть определены на усмотрение Наставника. Однако в период наставничества изменения версии порта, затрагивающие зависимые порты, должны проверяться наставником.
+
+Как и все мы разные личности, у каждого подопечного свои кривые обучения, временные обязательства и другие влияющие факторы, которые будут влиять на время, необходимое перед тем, как они смогут «летать самостоятельно». Эмпирически, за подопечным следует наблюдать как минимум 3 месяца. 90-100 коммитов — это ещё один ориентир, который может использовать наставник перед тем, как отпустить подопечного. Другие факторы, которые следует учитывать перед освобождением подопечного, — это количество ошибок, которые они могли совершить, полученные QAT и т.д. Если они всё ещё делают ошибки новичка, им всё ещё требуется руководство наставника.
+
+[[mentor.comentor.debate]]
+=== Дискуссия о роли наставника/сонаставника
+
+Когда запрос поступает в portmgr, он обычно звучит так: «Я предлагаю «foo» для права коммита в порты, я буду со-наставником вместе с «bar»». Предложение получено, проголосовано и принято.
+
+Наставник является основным контактным лицом или "первым среди равных", а сонаставник — его заместитель.
+
+Один "ответственный" участник, чьё имя мы опустим, сделал https://lists.freebsd.org/pipermail/cvs-ports/2007-September/134614.html[первый зарегистрированный коммит с сонаставником]. Подобные коммиты с со-менторами также были замечены в дереве src. Делает ли это их правильными? Делает ли это их неправильными? Похоже, это часть эволюции того, как всё устроено.
+
+[[mentee.expectations]]
+=== Ожидания
+
+Мы ожидаем, что подопечные будут готовы к конструктивной критике от сообщества. Здесь еще много "преданий" и традиций, неписанных правил. Умение правильно реагировать на конструктивную критику — это то, на что мы обращаем внимание в первую очередь, оценивая вклад подопечных в IRC и в почтовых рассылках.
+
+Мы предупреждаем подопечных, что часть критики может быть менее "конструктивной", чем остальная (будь то из-за проблем с языком общения или излишней придирчивости), и что умение достойно принимать такую критику — это часть участия в большом сообществе. В случае конкретных проблем с определёнными людьми или любых вопросов мы надеемся, что они обратятся к членам portmgr в IRC или по электронной почте.
diff --git a/documentation/content/ru/articles/port-mentor-guidelines/_index.po b/documentation/content/ru/articles/port-mentor-guidelines/_index.po
new file mode 100644
index 0000000000..b9e70a556e
--- /dev/null
+++ b/documentation/content/ru/articles/port-mentor-guidelines/_index.po
@@ -0,0 +1,408 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-24 18:29+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesport-mentor-guidelines_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:1
+#, no-wrap
+msgid "Port Mentor Guidelines for FreeBSD Mentors"
+msgstr "Руководство для наставников портов 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 "Руководство для наставников портов"
+
+#. 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 "Почему наставник (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 ""
+"У большинства из нас были наставники, и это наставничество в Проекте было "
+"важным и полезным, поэтому верните эти усилия, предложив стать наставником "
+"для кого-то другого."
+
+#. 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 ""
+"Значительная разница во времени. Доступные, интерактивные наставники, "
+"доступные через IM, крайне полезны!"
+
+#. 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 ""
+"Потенциальный языковой барьер. Да, FreeBSD, как и большинство разработок "
+"программного обеспечения, ориентирована на английский язык, однако наличие "
+"наставника, говорящего на родном языке, может быть очень полезным."
+
+#. 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 ""
+"ВРЕМЕНИ НЕТ! Пока в сутках не станет 30 часов, а в неделе — 8 дней, у "
+"некоторых из нас просто не хватает времени. Разделение нагрузки с кем-то "
+"другим облегчит задачу."
+
+#. 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 ""
+"Мы ожидаем, что наставники убедятся, что их подопечные прочитали extref:"
+"{porters-handbook}[Руководство портировщика], extref:{pr-guidelines}"
+"[руководство по обработке PR] и extref:{committers-guide}[Руководство "
+"коммиттера]. Хотя и не обязательно запоминать все детали, каждый коммиттер "
+"должен иметь общее представление об этих вещах, чтобы быть эффективной "
+"частью сообщества (и избежать как можно больше ошибок новичка)."
+
+#. 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 ""
+"Не существует определённого правила, по которому кандидат считается готовым; "
+"это может быть комбинация количества поданных PR, количества поддерживаемых "
+"портов, частоты обновлений портов и/или уровня участия в определённой "
+"области интересов, такой как GNOME, KDE, Gecko или других."
+
+#. 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 ""
+"Кандидат должен практически не допускать тайм-aутов, оперативно реагировать "
+"на запросы и в целом оказывать помощь в поддержке своих портов."
+
+#. 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 ""
+"Должна быть история вовлечённости, так как общеизвестно, что обучение "
+"коммиттера требует времени и усилий. Длительное участие в проекте и "
+"наблюдение за процессами предполагают накопление знаний. Слишком часто мы "
+"видели, как сопровождающий отправляет несколько PR, появляется в IRC и "
+"спрашивает, когда ему дадут право на коммит."
+
+#. 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 ""
+"Подписка и активное участие в почтовых рассылках очень полезны. Нет прямой "
+"связи и ожидания быстрого результата, что отправка сообщений в списки "
+"рассылок сделает кого-то коммиттером, но это демонстрирует вовлечённость. "
+"Некоторые письма позволяют оценить знания кандидата, а также его "
+"взаимодействие с другими. Аналогично, участие в IRC может повысить "
+"заметность человека."
+
+#. 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 ""
+"Спросите у шести разных коммиттеров, сколько PR должен отправить "
+"сопровождающий перед тем, как его номинируют, и вы получите шесть разных "
+"ответов. Спросите у тех же людей, как долго кто-то должен участвовать, и та "
+"же дилемма. Сколько портов у него должно быть как минимум? Теперь у нас есть "
+"повод для бесконечных споров! Некоторые вещи просто трудно измерить, "
+"наставнику придется полагаться на свое лучшее суждение и надеяться, что "
+"portmgr согласится."
+
+#. 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 ""
+"По мере развития и укрепления уровня доверия, подопечному могут быть "
+"предоставлены «неявные» права на внесение изменений. Это может включать "
+"тривиальные изменения в [.filename]#Makefile#, [.filename]#pkg-descr# и т. "
+"д. Аналогично, это может включать обновления `PORTVERSION`, которые не "
+"требуют изменений в `plist`. Другие обстоятельства могут быть определены на "
+"усмотрение Наставника. Однако в период наставничества изменения версии "
+"порта, затрагивающие зависимые порты, должны проверяться наставником."
+
+#. 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 ""
+"Как и все мы разные личности, у каждого подопечного свои кривые обучения, "
+"временные обязательства и другие влияющие факторы, которые будут влиять на "
+"время, необходимое перед тем, как они смогут «летать самостоятельно». "
+"Эмпирически, за подопечным следует наблюдать как минимум 3 месяца. 90-100 "
+"коммитов — это ещё один ориентир, который может использовать наставник перед "
+"тем, как отпустить подопечного. Другие факторы, которые следует учитывать "
+"перед освобождением подопечного, — это количество ошибок, которые они могли "
+"совершить, полученные QAT и т.д. Если они всё ещё делают ошибки новичка, им "
+"всё ещё требуется руководство наставника."
+
+#. 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 ""
+"Когда запрос поступает в portmgr, он обычно звучит так: «Я предлагаю «foo» "
+"для права коммита в порты, я буду со-наставником вместе с «bar»». "
+"Предложение получено, проголосовано и принято."
+
+#. 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 ""
+"Один \"ответственный\" участник, чьё имя мы опустим, сделал https://"
+"lists.freebsd.org/pipermail/cvs-ports/2007-September/134614.html[первый "
+"зарегистрированный коммит с сонаставником]. Подобные коммиты с со-менторами "
+"также были замечены в дереве src. Делает ли это их правильными? Делает ли "
+"это их неправильными? Похоже, это часть эволюции того, как всё устроено."
+
+#. 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 ""
+"Мы ожидаем, что подопечные будут готовы к конструктивной критике от "
+"сообщества. Здесь еще много \"преданий\" и традиций, неписанных правил. "
+"Умение правильно реагировать на конструктивную критику — это то, на что мы "
+"обращаем внимание в первую очередь, оценивая вклад подопечных в IRC и в "
+"почтовых рассылках."
+
+#. 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 ""
+"Мы предупреждаем подопечных, что часть критики может быть менее "
+"\"конструктивной\", чем остальная (будь то из-за проблем с языком общения "
+"или излишней придирчивости), и что умение достойно принимать такую критику — "
+"это часть участия в большом сообществе. В случае конкретных проблем с "
+"определёнными людьми или любых вопросов мы надеемся, что они обратятся к "
+"членам portmgr в IRC или по электронной почте."
diff --git a/documentation/content/ru/articles/pr-guidelines/_index.adoc b/documentation/content/ru/articles/pr-guidelines/_index.adoc
index 4ee096306b..10c764f08a 100644
--- a/documentation/content/ru/articles/pr-guidelines/_index.adoc
+++ b/documentation/content/ru/articles/pr-guidelines/_index.adoc
@@ -1,12 +1,16 @@
---
-title: Рекомендации по работе с сообщениями о проблемах
authors:
- - author: Dag-Erling Smørgrav
- - author: Hiten Pandya
-trademarks: ["freebsd", "opengroup", "general"]
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Hiten Pandya'
+description: 'Эти рекомендации описывают рекомендуемые методы обработки отчётов о проблемах FreeBSD (PR — Problem Reports).'
+tags: ["PR", "guideline", "bugs", "maintenance", "BugZilla", "FreeBSD"]
+title: 'Руководство по обработке отчетов о проблемах'
+trademarks: ["freebsd", "general"]
---
-= Рекомендации по работе с сообщениями о проблемах
+= Руководство по обработке отчетов о проблемах
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,7 +44,7 @@ endif::[]
[.abstract-title]
Аннотация
-Это руководство описывает рекомендуемую практику обработки сообщений об ошибках FreeBSD (Problem Reports - PR). Хотя эти рекомендации предназначены для Группы поддержки базы данных сообщений о проблемах FreeBSD (PR Database Maintenance Team) mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], им должны следовать все, кто работает с этими сообщениями.
+Эти рекомендации описывают рекомендуемые методы работы с отчетами о проблемах FreeBSD (PR). Хотя они разработаны для команды сопровождения базы данных PR FreeBSD mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], эти рекомендации следует соблюдать всем, кто работает с PR FreeBSD.
'''
@@ -49,102 +53,93 @@ toc::[]
[[intro]]
== Введение
-GNATS является системой управления неисправностями (сообщениями об ошибках), которая используется в Проекте FreeBSD. Так как тщательное отслеживание заметных изъянов в программном обеспечении важно для обеспечения качества FreeBSD, правильное использование GNATS необходимо для дальнейшего развития Проекта.
+Bugzilla — это система управления задачами, используемая проектом FreeBSD. Поскольку точный учёт неисправленных программных ошибок важен для качества FreeBSD, правильное использование данного ПО критически необходимо для развития проекта.
-Доступ к GNATS даётся разработчикам FreeBSD, а также более широкому сообществу. Для того, чтобы поддерживать целостность базы данных и единства работы с пользователями, были выработаны рекомендации, покрывающие общие вопросы управления проблемами, такие, как написание отклика, обработку уже закрытых вопросов и так далее.
+Доступ к Bugzilla предоставлен всему сообществу FreeBSD. Для поддержания согласованности в базе данных и обеспечения единообразного взаимодействия с пользователями были установлены руководящие принципы, охватывающие общие аспекты управления ошибками, такие как предоставление последующих действий, обработка запросов на закрытие и так далее.
[[pr-lifecycle]]
-== Жизненный цикл сообщения о проблеме
+== Жизненный цикл отчета о проблеме
-* Респондент посылает PR при помощи утилиты man:send-pr[1] и получает подтверждающее сообщение.
-* Среднестатистический коммиттер (Вася) проявляет интерес к PR и назначает его самому себе, или другой любитель ошибок (Петя) решает, что лучше всех с описанной проблемой справится именно Вася, и назначает её Васе.
-* Вася связывается с Респондентом (при этом вся переписка должна фиксироваться) и выясняет причину появления проблемы. Затем он документирует причину в журнале аудита, и переводит PR в состояние "analyzed" (проанализировано).
-* Вася проводит бессонную ночь и выпускает патч, который, по его мнению, решает означенную проблему, и затем посылает её ответом, прося Респондента протестировать его. Затем он переводит PR в состояние "feedback".
-* Через несколько таких итераций Вася и Респондент удовлетворяются получающимся патчем, и Вася переносит его в дерево `-CURRENT` (или непосредственно в `-STABLE`, если этой проблемы в `-CURRENT` не наблюдается), при этом при выполнении коммита в сопутствующем сообщении делается ссылка на сообщение о проблеме (а также упоминается Респондент, если он предоставил весь или часть патча), и, если это нужно, начинается отсчёт для MFC.
-* Если патчу не нужно выполнение MFC, Вася закрывает PR.
-* Если патч требует выполнения MFC, Вася оставляет Сообщение о проблеме в состоянии "patched" до выполнения операции MFC, а затем закрывает его.
+* Репортер отправляет отчет об ошибке на веб-сайте. Ошибка находится в состоянии `Needs Triage`.
+* Джейн Рэндом БагБастер подтверждает, что отчёт об ошибке содержит достаточно информации для её воспроизведения. Если нет, она взаимодействует с отправителем, чтобы получить необходимые данные. На этом этапе ошибке присваивается статус `Open`.
+* Джо Рандом Коммиттер проявляет интерес к PR и назначает его себе, или Джейн Рандом БагБастер решает, что Джо лучше всего подходит для его решения и назначает PR Джону. Ошибка должна быть переведена в состояние `In Discussion`.
+* Джо кратко общается с инициатором (убедившись, что всё заносится в журнал аудита) и определяет причину проблемы.
+* Джо засиживается всю ночь и создает патч, который, как он считает, исправляет проблему, и отправляет его в ответном сообщении, прося автора PR проверить его. Затем он устанавливает состояние PR в `Patch Ready`.
+* После нескольких итераций и Джо, и автор патча остаются довольны результатом, и Джо фиксирует его в `-CURRENT` (или напрямую в `-STABLE`, если проблема отсутствует в `-CURRENT`), обязательно указывая в логе коммита ссылку на отчёт о проблеме (а также упоминая автора, если он предоставил патч целиком или частично) и, если необходимо, запускает отсчёт для MFC. Ошибка переводится в состояние `Needs MFC`.
+* Если исправление не требует переноса в стабильную ветку (MFC), Джо закрывает PR с пометкой `Issue Resolved`.
[NOTE]
====
-Многие PR присылаются с очень слабым описанием проблемы, а некоторые из них либо очень сложно решить, либо являются вершиной айсберга другой, более широкой проблемы; в этих случаях очень важно получить всю информацию, требуемую для решения проблемы. Если описанная проблема не может быть решена, или проявится снова, необходимо повторно открыть PR.
-====
-
-[NOTE]
-====
-Адрес "электронной почты" может оказаться недоступным. В этом случае ответьте на PR обычным образом и попросите Респондента (в своём сообщении) предоставить рабочий адрес электронной почты. Обычно это происходит в случаях использования man:send-pr[1] в системах с выключенной или неустановленной почтовой системой.
+Многие PR отправляются с очень небольшим количеством информации о проблеме, а некоторые либо очень сложны для решения, либо лишь поверхностно затрагивают более крупную проблему; в таких случаях крайне важно получить всю необходимую информацию для решения проблемы. Если проблему внутри нельзя решить или она возникла снова, необходимо переоткрыть PR.
====
[[pr-states]]
-== Состояние сообщений о проблемах
+== Состояние отчета о проблеме
-При выполнении некоторых действий очень важно обновлять состояние PR. Это состояние должно в точности отражать текущее состояние работы над PR.
+Важно обновлять состояние PR при выполнении определённых действий. Состояние должно точно отражать текущий статус работы над PR.
-.Маленький пример того, когда именно нужно менять состояние PR
+.Небольшой пример, когда следует изменить состояние PR
[example]
====
-
-Когда PR находится в работе и ответственный разработчик(и) удовлетворён получающимся решением, то он отвечает на PR и меняет его состояние на "feedback". В этот момент Респондент должен изучить исправление в своей ситуации и ответить, действительно ли был устранён дефект.
+Когда работа над PR завершена и ответственные разработчики уверены в исправлении, они отправят обновление в PR и изменят его состояние на «feedback». На этом этапе автор должен оценить исправление в своём контексте и ответить, была ли действительно устранена проблема.
====
-Сообщение о проблеме может находится в одном из следующих состояний:
+Отчет о проблеме может находиться в одном из следующих состояний:
-[.glosslist]
-open::
- Начальное состояние; проблема была поставлена и её необходимо рассмотреть.
+open (открыто)::
+Начальное состояние; проблема была указана и требует рассмотрения.
-analyzed::
- Проблема была рассмотрена, ищется её решение.
+analyzed (проанализировано)::
+Проблема была рассмотрена, и решение находится в разработке.
-feedback::
- Дальнейшая работа требует дополнительной информации от Респондента или сообщества; возможно помещение информации о предлагаемом решении.
+feedback (обратная связь)::
+Дальнейшая работа требует дополнительной информации от инициатора или сообщества; возможно, информации относительно предлагаемого решения.
-patched::
- Патч был перенесён в дерево исходных текстов, но что-то (выполнение MFC или, возможно, подтверждение Респондента) ещё требуется доделать.
+patched (исправленно)::
+Патч был закоммичен, но что-то (MFC или, возможно, подтверждение от автора) ещё ожидается.
-suspended::
- Работа над проблемой была остановлена из-за отсутствия информации или необходимых ресурсов. Это первый кандидат для тех, кто ищет проект для работы над ним. Если проблема вообще не может быть решена, она будет закрыта, а не приостановлена. Проект создания документации использует suspended для желательных нововведений, которые требуют значительной работы, для которой ни у кого пока нет времени.
+suspended (приостановлено)::
+Проблема не решается из-за недостатка информации или ресурсов. Это отличный вариант для тех, кто ищет проект для реализации. Если проблему не удастся решить вовсе, она будет закрыта, а не приостановлена. Документационный проект использует статус «приостановлено» для пунктов списка пожеланий, требующих значительного объема работы, на который у участников сейчас нет времени.
-repocopy (устаревшее)::
- Решение проблемы зависит от завершения операции копирования репозитория (внутренние операции репозитория CVS).
-
-closed::
- Сообщение о проблеме было закрыто, когда все изменения были перенесены, задокументированы и протестированы, либо когда исправление проблемы было отвергнуто.
+closed (закрыто)::
+Проблемный отчет закрывается, когда все изменения внедрены, задокументированы и протестированы, или когда исправление проблемы прекращено.
[NOTE]
====
-Состояние "patched" напрямую связано с предлагаемыми решениями, так что вы можете перейти сразу к состоянию "closed", если Респондент не может протестировать патч, либо на ваших тестовых прогонах он работает.
+Состояние "исправлено" (patched) напрямую связано с обратной связью, поэтому вы можете перейти сразу в состояние "закрыто", если автор не может протестировать исправление, и оно работает в ваших собственных тестах.
====
[[pr-types]]
-== Типы сообщений о проблемах
+== Типы отчетов о проблемах
-При обработке сообщений об ошибках, либо в качестве разработчика, имеющего непосредственный доступ к базе данных GNATS, либо в качестве контрибутора, который просматривает базу данных и посылает свои отклики с патчами, комментариями, пожеланиями или запросами на изменение, вы будете иметь дело с несколькими различными типами PR.
+При обработке отчетов о проблемах, будь вы разработчиком с прямым доступом к базе данных отчетов или участником, который просматривает базу данных и отправляет ответы с исправлениями, комментариями, предложениями или запросами на изменения, вы столкнетесь с несколькими различными типами PR.
-* <<pr-unassigned>>
-* <<pr-assigned>>
-* <<pr-dups>>
-* <<pr-stale>>
-* <<pr-misfiled>>
+* crossref:pr-guidelines[pr-unassigned, Неназначенные PR]
+* crossref:pr-guidelines[pr-assigned, Назначенные PR]
+* crossref:pr-guidelines[pr-dups, Дублирующие PR]
+* crossref:pr-guidelines[pr-stale, Устаревшие PR]
+* crossref:pr-guidelines[pr-misfiled-notpr, Несвязанные с ошибками PR]
-В последующих разделах описывается, для чего предназначены те или иные типы PR, условия отнесения PR к одному из этих типов, и какую обработку требует каждый из этих типов.
+Следующие разделы описывают, для чего используется каждый из различных типов PR, когда PR относится к одному из этих типов и как обрабатывается каждый из различных типов.
[[pr-unassigned]]
== Неназначенные PR
-По прибытии сообщениям о проблемах устанавливаются общие назначения (generic assignee). Они всегда предваряются префиксом `freebsd-`. Точное название назначения (assignee) зависит от категории и в большинстве случаев оно соответствует определенному списку рассылки FreeBSD. Далее следует текущий перечень назначений (assignee), составленный в порядке от общих к частным:
+Когда поступают PR, они изначально назначаются на обобщённого исполнителя. Такие исполнители всегда начинаются с префикса `freebsd-`. Точное значение по умолчанию зависит от категории; в большинстве случаев оно соответствует определённому списку рассылки FreeBSD. Вот текущий список, с наиболее распространёнными значениями в начале:
+
[[default-assignees-common]]
-.Назначения по умолчанию - наиболее общие
+.Назначенные по умолчанию исполнители — наиболее распространенные
[cols="1,1,1", options="header"]
|===
| Тип
-| Категория
-| Назначение по умолчанию
+| Категории
+| Назначенный по умолчанию
|базовая система
|bin, conf, gnu, kern, misc
|freebsd-bugs
-|специфичные для архитектуры
+|специфичные от архитектуры
|alpha, amd64, arm, i386, ia64, powerpc, sparc64
|freebsd-_arch_
@@ -156,20 +151,20 @@ closed::
|docs
|freebsd-doc
-|страницы сайта FreeBSD (за исключением документации)
-|www
+|веб-страницы FreeBSD (за исключением документации)
+|Website
|freebsd-www
|===
[[default-assignees-other]]
-.Назначения по умолчанию - остальные
+.Назначенные по умолчанию - другие
[cols="1,1,1", options="header"]
|===
| Тип
-| Категория
-| Назначение по умолчанию
+| Категории
+| Назначенный по умолчанию
-|в защиту FreeBSD (advocacy efforts)
+|усилия по продвижению
|advocacy
|freebsd-advocacy
@@ -181,7 +176,7 @@ closed::
|standards
|freebsd-standards
-|тредовые библиотеки
+|библиотеки потоков
|threads
|freebsd-threads
@@ -190,27 +185,27 @@ closed::
|freebsd-usb
|===
-Не удивляйтесь, если обнаружите, что автор PR присвоил ему неправильную категорию. Если вы исправите категорию, то не забудьте также подправить и назначение. (В частности, для посылающих PR является трудностью понять, что если проблема возникает на системе с архитектурой i386, то она также может быть общей для всех архитектур FreeBSD, и поэтому более подходящей будет категория `kern`. Несомненно, обратное также справедливо).
+Не удивляйтесь, если обнаружите, что автор PR назначил ему неверную категорию. Если вы исправите категорию, не забудьте также исправить назначение. (В частности, наши авторы, похоже, с трудом понимают, что даже если их проблема проявилась на системе i386, она может быть общей для всей FreeBSD и, следовательно, более уместна в `kern`. Обратное, конечно, тоже верно.)
-Назначения некоторых PR могут быть переопределены из общих любым лицом, имеющим соответствующие привилегии. Существует несколько типов назначений: специализированные списки рассылки; почтовые алиасы (расширяемые в списки электронных адресов заинтересованных людей) и назначения отдельным лицам.
+Некоторые PR могут быть переназначены с этих общих ответственных любым человеком. Существует несколько типов ответственных: специализированные почтовые рассылки, почтовые алиасы (используются для определённых элементов с ограниченным интересом) и отдельные лица.
-Если назначением является список рассылки, пожалуйста, выполняя переназначение, используйте длинную форму (например, `freebsd-foo` вместо `foo`); благодаря этому сообщение, посылаемое в список рассылки, не будет дублироваться.
+Для назначений, которые являются списками рассылки, используйте полную форму при назначении (например, `freebsd-foo` вместо `foo`); это позволит избежать дублирования писем, отправляемых в список рассылки.
[NOTE]
====
-Так как список лиц добровольно согласившихся принимать назначения для некоторых типов PR изменяется часто, то наиболее подходящим местом для его размещения является http://wiki.freebsd.org/AssigningPRs[FreeBSD wiki].
+Поскольку список людей, которые добровольно согласились быть ответственными по умолчанию за определённые типы PR, меняется так часто, эта информация гораздо лучше подходит для https://wiki.freebsd.org/AssigningPRs[вики FreeBSD].
====
-Ниже приведен (возможно, неполный) перечень назначений.
+Вот примерный список таких объектов; возможно, он не полный.
[[common-assignees-base]]
-.Общие назначения - базовая система
+.Общие ответственные исполнители — базовая система
[cols="1,1,1,1", options="header"]
|===
| Тип
| Предполагаемая категория
-| Предполагаемое назначение
-| Тип назначения
+| Предполагаемый исполнитель
+| Тип Назначенного
|проблема, специфичная для архитектуры ARM(R)
|arm
@@ -232,12 +227,12 @@ closed::
|freebsd-acpi
|список рассылки
-|проблема с драйверами ATM
+|проблема с драйверами Asynchronous Transfer Mode (ATM)
|kern
|freebsd-atm
|список рассылки
-|проблема с встраиваемой системой или минимальным дистрибутивом FreeBSD (например, NanoBSD/PicoBSD/FreeBSD-arm)
+|проблема со встроенными или компактными системами FreeBSD (например, NanoBSD/PicoBSD/FreeBSD-arm)
|kern
|freebsd-embedded
|список рассылки
@@ -247,7 +242,7 @@ closed::
|freebsd-firewire
|список рассылки
-|проблема в исходном коде файловой системы
+|проблема с кодом файловой системы
|kern
|freebsd-fs
|список рассылки
@@ -262,7 +257,7 @@ closed::
|freebsd-ipfw
|список рассылки
-|проблема с драйверами ISDN
+|проблема с драйверами Integrated Services Digital Network (ISDN)
|kern
|freebsd-isdn
|список рассылки
@@ -277,7 +272,7 @@ closed::
|freebsd-emulation
|список рассылки
-|проблема с сетевым стеком
+|проблема со стеком сетевых протоколов
|kern
|freebsd-net
|список рассылки
@@ -292,27 +287,27 @@ closed::
|freebsd-scsi
|список рассылки
-|проблема с звуковой подсистемой (man:sound[4])
+|проблема с подсистемой man:sound[4]
|kern
|freebsd-multimedia
|список рассылки
-|проблема с подсистемой man:wlan[4] или с драйвером беспроводного устройства
+|проблемы с подсистемой man:wlan[4] и беспроводными драйверами
|kern
|freebsd-wireless
|список рассылки
-|проблема с man:sysinstall[8] или с man:bsdinstall[8]
+|проблема с man:sysinstall[8] или man:bsdinstall[8]
|bin
|freebsd-sysinstall
|список рассылки
-|проблема с системными стартовыми скриптами (man:rc[8])
+|проблема со скриптами запуска системы (man:rc[8])
|kern
|freebsd-rc
|список рассылки
-|проблемы в работе VIMAGE, VNET, или проблемы в их коде
+|проблема с функциональностью VIMAGE или VNET и связанным кодом
|kern
|freebsd-virtualization
|список рассылки
@@ -324,260 +319,175 @@ closed::
|===
[[common-assignees-ports]]
-.Общие назначения - коллекция портов
+.Общие ответственные исполнители — Коллекция портов
[cols="1,1,1,1", options="header"]
|===
| Тип
| Предполагаемая категория
-| Предполагаемое назначение
-| Тип назначения
+| Предполагаемый исполнитель
+| Тип Назначенного
-|проблема с инфраструктурой системы портов (__не__ с конкретным портом!)
+|проблема с фреймворком портов (__не__ с отдельным портом!)
|ports
|portmgr
-|алиас
+|alias
-|порт, у которого мейнтейнер apache@FreeBSD.org
+|порт, который поддерживается apache@FreeBSD.org
|ports
|apache
|список рассылки
-|порт, у которого мейнтейнер autotools@FreeBSD.org
+|порт, который поддерживается autotools@FreeBSD.org
|ports
|autotools
-|алиас
+|alias
-|порт, у которого мейнтейнер doceng@FreeBSD.org
+|порт, который поддерживается doceng@FreeBSD.org
|ports
|doceng
-|алиас
+|alias
-|порт, у которого мейнтейнер eclipse@FreeBSD.org
+|порт, который поддерживается eclipse@FreeBSD.org
|ports
|freebsd-eclipse
|список рассылки
-|порт, у которого мейнтейнер gecko@FreeBSD.org
+|порт, который поддерживается gecko@FreeBSD.org
|ports
|gecko
|список рассылки
-|порт, у которого мейнтейнер gnome@FreeBSD.org
+|порт, который поддерживается gnome@FreeBSD.org
|ports
|gnome
|список рассылки
-|порт, у которого мейнтейнер hamradio@FreeBSD.org
+|порт, который поддерживается hamradio@FreeBSD.org
|ports
|hamradio
-|алиас
+|alias
-|порт, у которого мейнтейнер haskell@FreeBSD.org
+|порт, который поддерживается haskell@FreeBSD.org
|ports
|haskell
-|алиас
+|alias
-|порт, у которого мейнтейнер java@FreeBSD.org
+|порт, который поддерживается java@FreeBSD.org
|ports
|freebsd-java
|список рассылки
-|порт, у которого мейнтейнер kde@FreeBSD.org
+|порт, который поддерживается kde@FreeBSD.org
|ports
|kde
|список рассылки
-|порт, у которого мейнтейнер mono@FreeBSD.org
+|порт, который поддерживается mono@FreeBSD.org
|ports
|mono
|список рассылки
-|порт, у которого мейнтейнер office@FreeBSD.org
+|порт, который поддерживается office@FreeBSD.org
|ports
|freebsd-office
|список рассылки
-|порт, у которого мейнтейнер perl@FreeBSD.org
+|порт, который поддерживается perl@FreeBSD.org
|ports
|perl
|список рассылки
-|порт, у которого мейнтейнер python@FreeBSD.org
+|порт, который поддерживается python@FreeBSD.org
|ports
|freebsd-python
|список рассылки
-|порт, у которого мейнтейнер ruby@FreeBSD.org
+|порт, который поддерживается ruby@FreeBSD.org
|ports
|freebsd-ruby
|список рассылки
-|порт, у которого мейнтейнер secteam@FreeBSD.org
+|порт, который поддерживается secteam@FreeBSD.org
|ports
|secteam
-|алиас
+|alias
-|порт, у которого мейнтейнер box@FreeBSD.org
+|порт, который поддерживается vbox@FreeBSD.org
|ports
|vbox
-|алиас
+|alias
-|порт, у которого мейнтейнер x11@FreeBSD.org
+|порт, который поддерживается x11@FreeBSD.org
|ports
|freebsd-x11
|список рассылки
|===
-PR для портов, у которых мейнтейнером является коммиттер порта, могут быть переназначены любым лицом (только учтите, что не каждый FreeBSD коммиттер в обязательном порядке является коммиттером портов, поэтому вы не должны судить только по почтовому адресу).
+PR портов, у которых есть сопровождающий, являющийся коммиттером портов, могут быть переназначены кем угодно (но обратите внимание, что не каждый коммиттер FreeBSD обязательно является коммиттером портов, поэтому нельзя ориентироваться только на адрес электронной почты.)
+
+Для других PR (запросов на включение изменений) не перераспределяйте их между участниками (кроме себя), если вы не уверены, что назначенный участник действительно хочет отслеживать PR. Это поможет избежать ситуации, когда никто не занимается исправлением конкретной проблемы, потому что все предполагают, что назначенный участник уже работает над ней.
-Для остальных PR, пожалуйста не переназначайте их другим людям (за исключением себя), если вы не уверены, что человек действительно будет работать над ними. Это поможет избежать ситуации, когда решение проблемы игнорируется другими людьми, так как подразумевается, что некто уже над ней работает.
[[common-assignees-other]]
-.Общие назначения - остальные
+.Общие ответственные исполнители — Прочие
[cols="1,1,1,1", options="header"]
|===
| Тип
| Предполагаемая категория
-| Предполагаемое назначение
-| Тип назначения
+| Предполагаемый исполнитель
+| Тип Назначенного
-|неполадки с самой GNATS(man:send-pr[1])
+|проблема с базой данных PR
|bin
|bugmeister
-|алиас
+|alias
-|неполадки с веб интерфейсом GNATS
-|www
+|проблема с https://bugs.freebsd.org/submit/[веб-формой] Bugzilla.
+|doc
|bugmeister
-|алиас
+|alias
|===
[[pr-assigned]]
-== Назначение PR
+== Назначенные PR
-Если в PR в заполненном поле `responsible` указано имя разработчика FreeBSD, это значит, что PR взята этим человеком для дальнейшей работы.
+Если в PR поле `responsible` содержит имя пользователя разработчика FreeBSD, это означает, что PR передан этому конкретному человеку для дальнейшей работы.
-Уже назначенное PR не должно трогаться никем, кроме администраторов GNATS (bugmeister) и того, кому эта проблема назначена. Если у вас есть комментарии, напишите отклик. Если по какой-то причине вы думаете, что PR должна изменить своё состояние или её необходимо назначить кому-то другому, пошлите сообщение тому, кто назначен ответственным. Если этот человек не ответит в течение двух недель, смените назначение PR, а дальше действуйте по своему усмотрению.
+Назначенные PR не должны изменяться никем, кроме назначенного исполнителя или bugmeister. Если у вас есть комментарии, отправьте последующее сообщение. Если по какой-либо причине вы считаете, что PR должен изменить состояние или быть переназначен, отправьте сообщение назначенному исполнителю. Если назначенный исполнитель не ответит в течение двух недель, снимите назначение с PR и действуйте по своему усмотрению.
[[pr-dups]]
-== Повторные PR
+== Дублирующие PR
-Если вы обнаружите, что один и тот же вопрос описывается более чем в одном PR, выберите то, что содержит максимальный объём полезной информации и закройте все остальные, чётко указав номер более полного PR. Если несколько PR содержат не пересекающуюся информацию, перенесите всю недостающую информацию в какой-либо отклик, включая ссылки на остальные PR; затем закройте другие PR (которые теперь полностью перекрыты).
+Если вы обнаружили несколько PR, описывающих одну и ту же проблему, выберите тот, который содержит наибольшее количество полезной информации, и закройте остальные, явно указав номер заменяющего PR. Если в нескольких PR содержится неперекрывающаяся полезная информация, добавьте всю недостающую информацию в один из них в виде последующего сообщения, включая ссылки на остальные PR; затем закройте другие PR (которые теперь полностью заменены).
[[pr-stale]]
-== Просроченные PR
-
-PR считается простроченным, если оно не модифицировалось в течение более полугода. При обработке просроченных PR используйте следующую процедуру:
-
-* Если PR достаточно подробна, попытайтесь воспроизвести проблему в дереве `-CURRENT` и `-STABLE`. Если вам это удалось, напишите отклик, описывающий ваши изыскания и попытайтесь найти кого-то, кому эту проблему можно назначить. Если это подходит, измените состояние на "analyzed".
-* Если PR описывает проблему, которая, как вы знаете, является результатом неправильного использования (некорректная настройка или что-то ещё), напишите отклик, в котором опишите, что автор исходного сделал не так, а затем закройте PR с описанием "User error" или "Configuration error".
-* Если в PR описывается ошибка, которая, как вы знаете, была исправлена как в `-CURRENT`, так и `-STABLE`, закройте его с сообщением, указывающим на даты исправлений в каждой ветке.
-* Если PR описывает ошибку, которая, по вашим данным, была исправлена в `-CURRENT`, но не в `-STABLE`, попытайтесь выяснить, когда человек, исправивший эту ошибку, планирует выполнить MFC, либо попробуйте найти для этого кого-то ещё (может, это будете вы сами?). Измените состояние сообщения на "patched" и переназначьте его кому-либо, кто будет делать MFC.
-* В остальных случаях запросите у автора исходного сообщения подтверждения того, что проблема всё ещё присутствует в новых версиях. Если автор не отвечает в течение месяца, закройте PR с пометкой "Feedback timeout".
-
-[[pr-misfiled]]
-== Незаполненные PR
-
-GNATS требовательно подходит к формату присылаемых сообщений об ошибках. Вот почему много PR заканчивают жизнь в состоянии "misfiled", если посылающий забыл заполнить поле или ввёл неправильные данные в некоторые поля PR. Этот раздел поможет предоставить основной объём необходимых подробностей для разработчиков FreeBSD, который может помочь им закрыть или повторно заполнить эти PR.
-
-Если система GNATS не может понять, что делать с сообщением об ошибке, которое достигло базы данных, она определяет `gnats-admin` в качестве ответственного за PR и помещает сообщение в категорию `pending`. Теперь это PR в состоянии "misfiled" и оно не будет появляться в списках сообщений об ошибках, если только кто-то специально не запросит перечень всех незаполненных PR. Если у вас есть доступ к машинам в кластере FreeBSD, можете воспользоваться командой `query-pr` для просмотра списка PR, которые были некорректно сформированы:
-
-[source,shell]
-....
-% query-pr -x -q -r gnats-admin
-52458 gnats-ad open serious medium Re: declaration clash f
- 52510 gnats-ad open serious medium Re: lots of sockets in
- 52557 gnats-ad open serious medium
- 52570 gnats-ad open serious medium Jigdo maintainer update
-....
-
-Как правило, PR вроде перечисленных выше оказываются незаполненными по одной из следующих причин:
-
-* Отклик на существующее PR, посланный по электронной почте, имеет неверный формат заголовка `Subject:`.
-* Автор PR отправил копию (Cc:) в список рассылки, а кто-нибудь ответил на этот пост вместо сообщения, сформированного GNATS. В копии, отосланной в список рассылки, нету тега категория/PRномер. (Вот почему мы рекомендуем посылающим _не_ делать подобных движений).
-* При заполнении шаблона man:send-pr[1] посылающий забыл указать правильное значение для категории или класса PR.
-* При заполнении шаблона man:send-pr[1] посылающий установил значение поля Confidential в `yes`. (Так как мы позволяем каждому зеркалировать GNATS при помощи rsync, информация о PR-ах является общедоступной. Сообщения, касающиеся безопасности, не следует слать через GNATS, их необходимо отправлять на адрес команды офицеров безопасности).
-* Это не реальное PR, а какое-то случайное сообщение, посланное на адрес mailto:bug-followup@FreeBSD.org[bug-followup@FreeBSD.org] или mailto:freebsd-gnats-submit@FreeBSD.org[freebsd-gnats-submit@FreeBSD.org].
-
-[[pr-misfiled-followups]]
-== Отклики неправильно оформлены как новые PR
+== Устаревшие PR
-К наиболее массовой категории неправильно оформленных PR относятся те, у которых неверна тема письма, и именно они на самом деле требует самых больших усилий от разработчиков. Это не настоящие PR, описывающие отдельные ошибки. Когда по одному из адресов, который "прослушивает" GNATS на предмет обработки входящих сообщений, принимается ответ на существующее PR, то тема ответа должна быть всегда в таком виде:
+PR считается устаревшим, если он не изменялся более шести месяцев. Для обработки устаревших PR примените следующую процедуру:
-[.programlisting]
-....
-Subject: Re: category/number: старая тема
-....
-
-Большинство почтовых программ, когда вы отвечаете на оригинальное почтовое сообщение с PR, будут добавлять часть "`Re:`". Часть "`category/number:`" является соглашением, специфичным для GNATS, которое вы должны выполнить, вручную поставив его в тему письма с откликом.
-
-Все разработчики FreeBSD, имеющие прямой доступ к базе данных GNATS, могут регулярно проверять наличие таких PR и перемещать заинтересовавшие их в отклики к оригинальному PR (послав корректный отклик на сообщение об ошибке на адрес {bugfollowup}). Затем неправильно оформленное PR может быть закрыто с примерно таким пояснением:
-
-[.programlisting]
-....
-Your problem report was misfiled. Please use the format
-"Subject: category/number: original text" when following
-up to older, existing PRs. I've added the relevant bits
-from the body of this PR to kern/12345
-....
-
-Поиск по команде `query-pr` оригинального PR, на которое отвечает неправильно оформленный отклик, легко выполняется следующим образом:
-
-[source,shell]
-....
-% query-pr -q -y "some text"
-....
-
-После того, как вы обнаружили оригинальное PR и неправильно оформленный отклик на него, воспользуйтесь параметром `-F` команды `query-pr` для сохранения полного текста всех относящихся к делу PR в файле формата почтового ящика UNIX(R), то есть:
-
-[source,shell]
-....
-% query-pr -F 52458 52474 > mbox
-....
-
-Теперь вы можете использовать любую почтовую программу для просмотра всех PR, которые вы сохранили в файле [.filename]#mbox#. Скопируйте текст всех неверно оформленных PR в отклике на оригинальное сообщение о проблеме, и обязательно включите правильный заголовок `Subject:`. После этого закройте неверно оформленное PR. Когда вы закрываете такие PR, помните, что автор получает оповещение по почте о том, что его PR сменило состояние на "closed". В пояснении обязательно описывайте в подробностях, почему это состояние изменилось. Обычно подойдёт примерно следующий текст:
-
-[.programlisting]
-....
-Followup to ports/45364 misfiled as a new PR.
-This was misfiled because the subject did not have the format:
-
- Re: ports/45364: ...
-....
-
-В этом случае автор неправильно оформленного PR будет знать, чего необходимо избегать при отправке отклика на существующее PR.
-
-[[pr-misfiled-format]]
-== Некорректные PR с отсутствующими полями
-
-Ко второму типу неправильно оформленных PR обычно относят те, что являются результатом забывчивости авторов, которые не заполнили все необходимые поля при написании первоначального PR.
-
-Отсутствие или ошибочное задание полей "category" или "class" может привести к появлению некорректного сообщения. Разработчики могут использовать man:edit-pr[1] для смены значений категории или класса этих неправильно оформленных PR на более подходящие и сохранить PR.
-
-Другой распространённой причиной появления неправильно оформленных PR являются вопросы форматирования, квотирование, изменение или удаление шаблона `send-pr`, как по вине пользователя, редактирующего шаблон, так и почтовых программ, которые проделывают странные вещи с обычными текстовыми сообщениями. Это изредка случается и может быть исправлено программой `edit-pr`, что требует некоторых усилий со стороны разработчика, корректирующего PR, однако в большинстве случаев это можно сделать относительно легко.
+* Если PR содержит достаточно деталей, попробуйте воспроизвести проблему в `-CURRENT` и `-STABLE`. Если удастся, отправьте уточнение с вашими находками и попытайтесь найти, кому можно назначить задачу. Установите состояние "analyzed" (проанализировано), если это уместно.
+* Если PR описывает проблему, которая, как вам известно, является результатом ошибки использования (неправильной конфигурации или иной), отправьте комментарий с объяснением, что сделал не так автор, затем закройте PR с причиной "Ошибка пользователя" или "Ошибка конфигурации".
+* Если PR описывает ошибку, которая, как вам известно, была исправлена в обеих ветках `-CURRENT` и `-STABLE`, закройте его с сообщением, указывающим, когда она была исправлена в каждой из веток.
+* Если PR описывает ошибку, которая, как вам известно, исправлена в `-CURRENT`, но не в `-STABLE`, попытайтесь выяснить, когда планируется перенос исправления (MFC), или найдите кого-то (возможно, себя?), кто сможет это сделать. Установите статус "patched" и назначьте задачу тому, кто займётся переносом исправления (MFC).
+* В других случаях попросите автора подтвердить, сохраняется ли проблема в более новых версиях. Если автор не ответит в течение месяца, закройте PR с пометкой "Истекло время ожидания ответа".
[[pr-misfiled-notpr]]
-== Неправильные PR, которые на самом деле не являются сообщениями об ошибках
-
-Иногда пользователь желает сообщить об ошибке и посылает GNATS по электронной почте обычное сообщение. Скрипты GNATS работает с сообщениями об ошибках, которые форматированы при помощи шаблона man:send-pr[1]. Они не могут обрабатывать любые сообщения электронной почты. Вот почему сообщения об ошибках, посылаемые на адрес mailto:freebsd-gnats-submit@FreeBSD.org[freebsd-gnats-submit@FreeBSD.org], должны быть оформлены по шаблону команды `send-pr`, хотя сообщения по электронной почте можно послать на {freebsd-bugs}.
-
-Разработчики, которые видят PR, выглядящие так, будто они должны были быть посланы в адрес {freebsd-bugs} или какого-то другого списка рассылки, должны закрыть PR, проинформировав его автора в протоколе изменения состояния о причинах, по которых это не является настоящим PR и куда следует посылать сообщения.
+== Не связанные с ошибками PR
-Электронный адрес, который использует GNATS для приёма поступающих PR, опубликован в документации к FreeBSD, объявлялся и указан на Web-сайте. Это значит, что спамеры его увидели. Спам-сообщения, достигшие GNATS, немедленно определяются в категорию "pending" и остаются там до тех пор, пока кто-нибудь их не пересмотрит. Закрытие любого из таких сообщений при помощи man:edit-pr[1] весьма раздражает, потому что GNATS отвечает автору, а адрес отправителя спам-почты никогда не бывает настоящим. Для каждого закрытого PR будут приходить сообщения о невозможности доставки.
+Разработчики, которые сталкиваются с PR, которые, по их мнению, должны были быть отправлены в {freebsd-bugs} или какой-либо другой список, должны закрыть PR, сообщив отправителю в комментарии, почему это не является PR и куда следует отправить сообщение.
-На данный момент с установкой некоторых фильтров против спама, проверяющих все добавления в базу данных GNATS, количество спама, достигающего состояния "pending", весьма мало.
+Адреса электронной почты, которые Bugzilla использует для входящих PR, были опубликованы как часть документации FreeBSD, объявлены и перечислены на веб-сайте. Это означает, что спамеры их обнаружили.
-Все разработчики, имеющие доступ к машинам кластера FreeBSD.org, приглашаются к проверке неправильно оформленных PR и немедленному закрытию тех, что являются почтовым спамом. Когда вы закрываете такое PR, пожалуйста, сделайте следующее:
+Всякий раз, когда вы закрываете один из этих PR, пожалуйста, выполните следующее:
-* Выставьте Category в `junk`.
-* Установите Confidential в `no`.
-* Установите Responsible в `gnats-admin`.
-* Смените State в `closed`.
+* Установите компонент в значение `junk` (в разделе `Поддерживающие сервисы`).
+* Установить Responsible в `nobody@FreeBSD.org`.
+* Установите состояние `Issue Resolved`.
-Для PR категории junk не выполняется резервное копирование, следовательно, перевод спам сообщений в эту категорию обозначает, что мы не желаем хранить их или тратить дисковое пространство на них. Если вы просто закрываете их без смены категории, они остаются как в главной базе, так и во всех копиях базы, зеркалируемых через CVSup.
+Установка категории в `junk` делает очевидным отсутствие полезного содержимого в PR и помогает уменьшить беспорядок в основных категориях.
[[references]]
-== Дополнительная литература
+== Для дальнейшего ознакомления
-Это перечень ресурсов, относящихся к качественному написанию и обработке сообщений об ошибках. Несомненно, этот список не является полным.
+Это список информационных ресурсов, относящихся к правильному написанию и обработке сообщений о проблемах. Он, без сомнения, не полон.
-* extref:{problem-reports}[Как писать Сообщения об ошибках FreeBSD]-руководство для авторов PR.
+* extref:{problem-reports}[Как писать отчёты о проблемах в FreeBSD]-рекомендации для авторов отчётов.
diff --git a/documentation/content/ru/articles/pr-guidelines/_index.po b/documentation/content/ru/articles/pr-guidelines/_index.po
new file mode 100644
index 0000000000..b2d979b520
--- /dev/null
+++ b/documentation/content/ru/articles/pr-guidelines/_index.po
@@ -0,0 +1,1595 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-03 18:14+0300\n"
+"PO-Revision-Date: 2025-10-03 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlespr-guidelines_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Эти рекомендации описывают рекомендуемые методы обработки отчётов о проблемах FreeBSD (PR — Problem Reports)."
+
+#. 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 ""
+"Эти рекомендации описывают рекомендуемые методы работы с отчетами о "
+"проблемах FreeBSD (PR). Хотя они разработаны для команды сопровождения базы "
+"данных PR FreeBSD mailto:freebsd-bugbusters@FreeBSD.org[freebsd-"
+"bugbusters@FreeBSD.org], эти рекомендации следует соблюдать всем, кто "
+"работает с PR 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 "Введение"
+
+#. 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 — это система управления задачами, используемая проектом FreeBSD. "
+"Поскольку точный учёт неисправленных программных ошибок важен для качества "
+"FreeBSD, правильное использование данного ПО критически необходимо для "
+"развития проекта."
+
+#. 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 ""
+"Доступ к Bugzilla предоставлен всему сообществу FreeBSD. Для поддержания "
+"согласованности в базе данных и обеспечения единообразного взаимодействия с "
+"пользователями были установлены руководящие принципы, охватывающие общие "
+"аспекты управления ошибками, такие как предоставление последующих действий, "
+"обработка запросов на закрытие и так далее."
+
+#. 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 ""
+"Репортер отправляет отчет об ошибке на веб-сайте. Ошибка находится в "
+"состоянии `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 ""
+"Джейн Рэндом БагБастер подтверждает, что отчёт об ошибке содержит достаточно "
+"информации для её воспроизведения. Если нет, она взаимодействует с "
+"отправителем, чтобы получить необходимые данные. На этом этапе ошибке "
+"присваивается статус `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 ""
+"Джо Рандом Коммиттер проявляет интерес к PR и назначает его себе, или Джейн "
+"Рандом БагБастер решает, что Джо лучше всего подходит для его решения и "
+"назначает PR Джону. Ошибка должна быть переведена в состояние `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 ""
+"Джо кратко общается с инициатором (убедившись, что всё заносится в журнал "
+"аудита) и определяет причину проблемы."
+
+#. 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 ""
+"Джо засиживается всю ночь и создает патч, который, как он считает, "
+"исправляет проблему, и отправляет его в ответном сообщении, прося автора PR "
+"проверить его. Затем он устанавливает состояние PR в `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 ""
+"После нескольких итераций и Джо, и автор патча остаются довольны "
+"результатом, и Джо фиксирует его в `-CURRENT` (или напрямую в `-STABLE`, "
+"если проблема отсутствует в `-CURRENT`), обязательно указывая в логе коммита "
+"ссылку на отчёт о проблеме (а также упоминая автора, если он предоставил "
+"патч целиком или частично) и, если необходимо, запускает отсчёт для 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 ""
+"Если исправление не требует переноса в стабильную ветку (MFC), Джо закрывает "
+"PR с пометкой `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 ""
+"Многие PR отправляются с очень небольшим количеством информации о проблеме, "
+"а некоторые либо очень сложны для решения, либо лишь поверхностно "
+"затрагивают более крупную проблему; в таких случаях крайне важно получить "
+"всю необходимую информацию для решения проблемы. Если проблему внутри нельзя "
+"решить или она возникла снова, необходимо переоткрыть PR."
+
+#. 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 ""
+"Важно обновлять состояние PR при выполнении определённых действий. Состояние "
+"должно точно отражать текущий статус работы над 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 "Небольшой пример, когда следует изменить состояние 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 ""
+"Когда работа над PR завершена и ответственные разработчики уверены в "
+"исправлении, они отправят обновление в PR и изменят его состояние на "
+"«feedback». На этом этапе автор должен оценить исправление в своём контексте "
+"и ответить, была ли действительно устранена проблема."
+
+#. 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 "open (открыто)"
+
+#. 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 "analyzed (проанализировано)"
+
+#. 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 "feedback (обратная связь)"
+
+#. 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 "patched (исправленно)"
+
+#. 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 ""
+"Патч был закоммичен, но что-то (MFC или, возможно, подтверждение от автора) "
+"ещё ожидается."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:105
+#, no-wrap
+msgid "suspended"
+msgstr "suspended (приостановлено)"
+
+#. 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 "closed (закрыто)"
+
+#. 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 ""
+"Состояние \"исправлено\" (patched) напрямую связано с обратной связью, "
+"поэтому вы можете перейти сразу в состояние \"закрыто\", если автор не может "
+"протестировать исправление, и оно работает в ваших собственных тестах."
+
+#. 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 ""
+"При обработке отчетов о проблемах, будь вы разработчиком с прямым доступом к "
+"базе данных отчетов или участником, который просматривает базу данных и "
+"отправляет ответы с исправлениями, комментариями, предложениями или "
+"запросами на изменения, вы столкнетесь с несколькими различными типами PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:125
+msgid "crossref:pr-guidelines[pr-unassigned, Unassigned PRs]"
+msgstr "crossref:pr-guidelines[pr-unassigned, Неназначенные PR]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:126
+msgid "crossref:pr-guidelines[pr-assigned, Assigned PRs]"
+msgstr "crossref:pr-guidelines[pr-assigned, Назначенные PR]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:127
+msgid "crossref:pr-guidelines[pr-dups, Duplicate PRs]"
+msgstr "crossref:pr-guidelines[pr-dups, Дублирующие PR]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:128
+msgid "crossref:pr-guidelines[pr-stale, Stale PRs]"
+msgstr "crossref:pr-guidelines[pr-stale, Устаревшие PR]"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:129
+msgid "crossref:pr-guidelines[pr-misfiled-notpr, Non-Bug PRs]"
+msgstr "crossref:pr-guidelines[pr-misfiled-notpr, Несвязанные с ошибками PR]"
+
+#. 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 ""
+"Следующие разделы описывают, для чего используется каждый из различных типов "
+"PR, когда PR относится к одному из этих типов и как обрабатывается каждый из "
+"различных типов."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:133
+#, no-wrap
+msgid "Unassigned PRs"
+msgstr "Неназначенные PR"
+
+#. 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 ""
+"Когда поступают PR, они изначально назначаются на обобщённого исполнителя. "
+"Такие исполнители всегда начинаются с префикса `freebsd-`. Точное значение "
+"по умолчанию зависит от категории; в большинстве случаев оно соответствует "
+"определённому списку рассылки FreeBSD. Вот текущий список, с наиболее "
+"распространёнными значениями в начале:"
+
+#. 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 "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 "специфичные от архитектуры"
+
+#. 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 "коллекция портов"
+
+#. 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 "документация, поставляемая с системой"
+
+#. 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 "веб-страницы FreeBSD (за исключением документации)"
+
+#. 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 "Назначенные по умолчанию - другие"
+
+#. 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 "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 "проблемы с 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 "соответствие стандартам"
+
+#. 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 "библиотеки потоков"
+
+#. 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 "подсистема 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 ""
+"Не удивляйтесь, если обнаружите, что автор PR назначил ему неверную "
+"категорию. Если вы исправите категорию, не забудьте также исправить "
+"назначение. (В частности, наши авторы, похоже, с трудом понимают, что даже "
+"если их проблема проявилась на системе i386, она может быть общей для всей "
+"FreeBSD и, следовательно, более уместна в `kern`. Обратное, конечно, тоже "
+"верно.)"
+
+#. 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 ""
+"Некоторые PR могут быть переназначены с этих общих ответственных любым "
+"человеком. Существует несколько типов ответственных: специализированные "
+"почтовые рассылки, почтовые алиасы (используются для определённых элементов "
+"с ограниченным интересом) и отдельные лица."
+
+#. 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 ""
+"Для назначений, которые являются списками рассылки, используйте полную форму "
+"при назначении (например, `freebsd-foo` вместо `foo`); это позволит избежать "
+"дублирования писем, отправляемых в список рассылки."
+
+#. 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 ""
+"Поскольку список людей, которые добровольно согласились быть ответственными "
+"по умолчанию за определённые типы PR, меняется так часто, эта информация "
+"гораздо лучше подходит для https://wiki.freebsd.org/AssigningPRs[вики "
+"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 "Вот примерный список таких объектов; возможно, он не полный."
+
+#. 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 "проблема, специфичная для архитектуры 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 "список рассылки"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:231
+#, no-wrap
+msgid "problem specific to the MIPS(R) architecture"
+msgstr "проблема, специфичная для архитектуры 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 "проблема, специфичная для архитектуры 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 "проблема с Advanced Configuration and Power Management (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 "проблема с драйверами Asynchronous Transfer Mode (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 "проблема со встроенными или компактными системами FreeBSD (например, 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 "проблема с драйверами 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 "проблема с кодом файловой системы"
+
+#. 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 "проблема с подсистемой 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 "проблема с подсистемой 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 "проблема с драйверами Integrated Services Digital Network (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 "подсистема 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 "проблема с эмуляцией Linux(R) или 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 "проблема со стеком сетевых протоколов"
+
+#. 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 "проблема с подсистемой 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 "проблема с подсистемой 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 "проблема с подсистемой 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 "проблемы с подсистемой man:wlan[4] и беспроводными драйверами"
+
+#. 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 "проблема с man:sysinstall[8] или 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 "проблема со скриптами запуска системы (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 "проблема с функциональностью VIMAGE или 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 "проблема с эмуляцией 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 "Общие ответственные исполнители — Коллекция портов"
+
+#. 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 "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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 "порт, который поддерживается 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 ""
+"PR портов, у которых есть сопровождающий, являющийся коммиттером портов, "
+"могут быть переназначены кем угодно (но обратите внимание, что не каждый "
+"коммиттер FreeBSD обязательно является коммиттером портов, поэтому нельзя "
+"ориентироваться только на адрес электронной почты.)"
+
+#. 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 ""
+"Для других PR (запросов на включение изменений) не перераспределяйте их "
+"между участниками (кроме себя), если вы не уверены, что назначенный участник "
+"действительно хочет отслеживать PR. Это поможет избежать ситуации, когда "
+"никто не занимается исправлением конкретной проблемы, потому что все "
+"предполагают, что назначенный участник уже работает над ней."
+
+#. 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 "проблема с базой данных PR"
+
+#. 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 "проблема с https://bugs.freebsd.org/submit/[веб-формой] 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 "Назначенные PR"
+
+#. 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 ""
+"Если в PR поле `responsible` содержит имя пользователя разработчика FreeBSD, "
+"это означает, что PR передан этому конкретному человеку для дальнейшей "
+"работы."
+
+#. 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 ""
+"Назначенные PR не должны изменяться никем, кроме назначенного исполнителя "
+"или bugmeister. Если у вас есть комментарии, отправьте последующее "
+"сообщение. Если по какой-либо причине вы считаете, что PR должен изменить "
+"состояние или быть переназначен, отправьте сообщение назначенному "
+"исполнителю. Если назначенный исполнитель не ответит в течение двух недель, "
+"снимите назначение с PR и действуйте по своему усмотрению."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:477
+#, no-wrap
+msgid "Duplicate PRs"
+msgstr "Дублирующие PR"
+
+#. 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 ""
+"Если вы обнаружили несколько PR, описывающих одну и ту же проблему, выберите "
+"тот, который содержит наибольшее количество полезной информации, и закройте "
+"остальные, явно указав номер заменяющего PR. Если в нескольких PR содержится "
+"неперекрывающаяся полезная информация, добавьте всю недостающую информацию в "
+"один из них в виде последующего сообщения, включая ссылки на остальные PR; "
+"затем закройте другие PR (которые теперь полностью заменены)."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:483
+#, no-wrap
+msgid "Stale PRs"
+msgstr "Устаревшие PR"
+
+#. 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 ""
+"PR считается устаревшим, если он не изменялся более шести месяцев. Для "
+"обработки устаревших PR примените следующую процедуру:"
+
+#. 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 ""
+"Если PR содержит достаточно деталей, попробуйте воспроизвести проблему в `-"
+"CURRENT` и `-STABLE`. Если удастся, отправьте уточнение с вашими находками и "
+"попытайтесь найти, кому можно назначить задачу. Установите состояние "
+"\"analyzed\" (проанализировано), если это уместно."
+
+#. 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 ""
+"Если PR описывает проблему, которая, как вам известно, является результатом "
+"ошибки использования (неправильной конфигурации или иной), отправьте "
+"комментарий с объяснением, что сделал не так автор, затем закройте PR с "
+"причиной \"Ошибка пользователя\" или \"Ошибка конфигурации\"."
+
+#. 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 ""
+"Если PR описывает ошибку, которая, как вам известно, была исправлена в обеих "
+"ветках `-CURRENT` и `-STABLE`, закройте его с сообщением, указывающим, когда "
+"она была исправлена в каждой из веток."
+
+#. 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 ""
+"Если PR описывает ошибку, которая, как вам известно, исправлена в `-"
+"CURRENT`, но не в `-STABLE`, попытайтесь выяснить, когда планируется перенос "
+"исправления (MFC), или найдите кого-то (возможно, себя?), кто сможет это "
+"сделать. Установите статус \"patched\" и назначьте задачу тому, кто займётся "
+"переносом исправления (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 ""
+"В других случаях попросите автора подтвердить, сохраняется ли проблема в "
+"более новых версиях. Если автор не ответит в течение месяца, закройте PR с "
+"пометкой \"Истекло время ожидания ответа\"."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:494
+#, no-wrap
+msgid "Non-Bug PRs"
+msgstr "Не связанные с ошибками PR"
+
+#. 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 ""
+"Разработчики, которые сталкиваются с PR, которые, по их мнению, должны были "
+"быть отправлены в {freebsd-bugs} или какой-либо другой список, должны "
+"закрыть PR, сообщив отправителю в комментарии, почему это не является PR и "
+"куда следует отправить сообщение."
+
+#. 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 ""
+"Адреса электронной почты, которые Bugzilla использует для входящих PR, были "
+"опубликованы как часть документации FreeBSD, объявлены и перечислены на веб-"
+"сайте. Это означает, что спамеры их обнаружили."
+
+#. 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 ""
+"Всякий раз, когда вы закрываете один из этих PR, пожалуйста, выполните "
+"следующее:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:504
+msgid "Set the component to `junk` (under `Supporting Services`."
+msgstr ""
+"Установите компонент в значение `junk` (в разделе `Поддерживающие сервисы`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:505
+msgid "Set Responsible to `nobody@FreeBSD.org`."
+msgstr "Установить Responsible в `nobody@FreeBSD.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:506
+msgid "Set State to `Issue Resolved`."
+msgstr "Установите состояние `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 ""
+"Установка категории в `junk` делает очевидным отсутствие полезного "
+"содержимого в PR и помогает уменьшить беспорядок в основных категориях."
+
+#. 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 ""
+"extref:{problem-reports}[Как писать отчёты о проблемах в FreeBSD]-"
+"рекомендации для авторов отчётов."
diff --git a/documentation/content/ru/articles/problem-reports/_index.adoc b/documentation/content/ru/articles/problem-reports/_index.adoc
index 307dc95049..47827186a6 100644
--- a/documentation/content/ru/articles/problem-reports/_index.adoc
+++ b/documentation/content/ru/articles/problem-reports/_index.adoc
@@ -1,9 +1,13 @@
---
-title: Составление сообщений о проблеме во FreeBSD
authors:
- - author: Dag-Erling Smørgrav
- - author: Mark Linimon
-trademarks: ["freebsd", "ibm", "intel", "sparc", "sun", "general"]
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Mark Linimon'
+description: 'Как лучше сформулировать и отправить отчет о проблеме в проект FreeBSD'
+tags: ["formulate", "submit", "FreeBSD", "PR"]
+title: 'Составление сообщений о проблеме во FreeBSD'
+trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
---
= Составление сообщений о проблеме во FreeBSD
@@ -67,12 +71,8 @@ toc::[]
Вот некоторые случаи, в которых может оказаться полезным отправить сообщение о чем-то, что не является ошибкой:
* Уведомление об обновлении программного обеспечения, которое поддерживается сторонними разработчиками (в основном порты, но также и компоненты базовой системы, разрабатываемые сторонними организациями, такие, как BIND или различные утилиты GNU).
-+
-Для не поддерживаемых никем портов (переменная `MAINTAINER` содержит `ports@FreeBSD.org`), такие уведомления о обновлении будут замечены заинтересовавшимся коммиттером и вас могут попросить предоставить патч для обновления порта; предоставление патча до того, как вас попросят об этом сильно увеличит шансы того, что порт будет обновлён вовремя.
-+
-Если порт поддерживается, PR-ы, указывающие о появлении новых улучшенных (upstream) релизов обычно не очень полезны, так как они прибавляют много вспомогательной работы для коммиттеров, а мэйнтейнер наверняка уже знает о новой версии. Они уже наверняка работали с разработчиками над ней или они возможно тестируют её, чтобы убедиться в отсутствии регрессии и т.п.
-+
-В любом случае, следование процессу, описанному в extref:{porters-handbook}[Руководстве по созданию портов, port-upgrading] даст наилучшие результаты. (Также можно ознакомиться с статьей link:{contributing-ports}[Контрибуция в коллекцию портов FreeBSD].)
+* Для не поддерживаемых никем портов (переменная `MAINTAINER` содержит `ports@FreeBSD.org`), такие уведомления о обновлении будут замечены заинтересовавшимся коммиттером и вас могут попросить предоставить патч для обновления порта; предоставление патча до того, как вас попросят об этом сильно увеличит шансы того, что порт будет обновлён вовремя.
+* В любом случае, следование процессу, описанному в extref:{porters-handbook}upgrading[Руководстве по созданию портов] даст наилучшие результаты. (Также можно ознакомиться с статьей extref:{contributing}[Вклад в коллекцию портов FreeBSD, ports-contributing].)
Ошибка, которую нельзя воспроизвести, вряд ли будет исправлена. Если ошибка возникла только единожды, и вы не можете ее воспроизвести, к тому же никто с ней больше не сталкивался, нет никаких шансов, что разработчики смогут ее воспроизвести или понять, что делается неправильно. Это не значит, что такого не случается, но это значит, что шансов у вашего сообщения дойти когда-либо до стадии исправления ошибки очень малы. Часто эти виды ошибок возникают из-за неудовлетворительной работы жёстких дисков, перегревшихся процессоров. Всегда, когда это возможно вы должны отслеживать такие случаи перед посылкой сообщения об ошибке.
@@ -84,40 +84,41 @@ toc::[]
Затем вы должны убедиться, действительно ли проблема существует. Существует всего несколько вещей, которые раздражают разработчика больше, чем получение сообщения об ошибке, которую он уже исправил.
-Если проблема в базовой системе, то вам нужно сначала прочесть раздел extref:{faq}[версии FreeBSD, LATEST-VERSION] из FAQ, если вы ещё не знакомы с данной темой. Для FreeBSD возможно исправлять проблемы только для некоторых недавних веток базовой системы, поэтому отправка сообщения об ошибке для более старой версии приведёт к тому, что разработчик посоветует вам обновиться до поддерживаемой версии, чтобы посмотреть присутствует ли в ней проблема. Команда офицеров безопасности поддерживает link:https://www.FreeBSD.org/security/[список поддерживаемых версий.].
+Если проблема в базовой системе, то вам нужно сначала прочесть раздел extref:{faq}[версии FreeBSD, latest-version] из FAQ, если вы ещё не знакомы с данной темой. Для FreeBSD возможно исправлять проблемы только для некоторых недавних веток базовой системы, поэтому отправка сообщения об ошибке для более старой версии приведёт к тому, что разработчик посоветует вам обновиться до поддерживаемой версии, чтобы посмотреть присутствует ли в ней проблема. Команда офицеров безопасности поддерживает link:https://www.FreeBSD.org/security/[список поддерживаемых версий.].
-Если проблема связана с портами, помните, что вы сначала должны обновиться до самой последней версии Коллекции Портов и проверить, существует ли в ней проблема. Из-за быстрых внесений изменений в эти приложения, неосуществимым для FreeBSD является поддержка чего-либо, кроме самых последних версий, и проблемы со устаревшими версиями приложений просто не могут быть исправлены.
+Если проблема в порте, рассмотрите возможность сообщить об ошибке разработчикам исходного проекта. Проект FreeBSD не может исправлять все ошибки во всём программном обеспечении.
[[pr-prep]]
== Подготовка
Нужно следовать хорошему правилу всегда сначала выполнять дополнительные исследования перед тем, как послать сообщение о проблеме. Может быть, о вашей проблеме уже сообщено; может быть, она недавно обсуждалась или обсуждается в списках рассылки; она может быть уже исправлена в более новой версии, чем та, что вы используете. Поэтому вы должны проверить все обычные места до того, как послать ваше сообщение о проблеме. Для FreeBSD это значит:
-* FreeBSD extref:{faq}[FAQ] (Ответы на часто задаваемые вопросы). FAQ содержит ответы на вопросы из самых разных категорий, в частности, extref:{faq}[аппаратной совместимости, hardware], extref:{faq}[пользовательских программ, applications] и extref:{faq}[конфигурации ядра, kernelconfig].
-* extref:{handbook}[Списки рассылки]-если Вы не подписаны на них, воспользуйтесь http://www.FreeBSD.org/search/#mailinglists[поиском в архивах] на сайте FreeBSD. Если ваша проблема не обсуждалась в списках рассылки, вы можете попытаться опубликовать сообщение о ней и подождать несколько дней, пока кто-нибудь не сможет увидеть то, что вы не заметили.
+* Список extref:{faq}[Часто задаваемых вопросов] (FAQ) по FreeBSD. FAQ содержит ответы на широкий круг вопросов, таких как вопросы, касающиеся extref:{faq}[совместимости оборудования, hardware], extref:{faq}[пользовательских приложений, applications] и extref:{faq}[конфигурации ядра, kernelconfig].
+* extref:{handbook}eresources/[Списки рассылки, eresources-mail] — если Вы не подписаны на них, воспользуйтесь https://www.FreeBSD.org/search/#mailinglists[поиском в архивах] на сайте FreeBSD. Если ваша проблема не обсуждалась в списках рассылки, вы можете попытаться опубликовать сообщение о ней и подождать несколько дней, пока кто-нибудь не сможет увидеть то, что вы не заметили.
* Как вариант, весь веб-используйте вашу любимую поисковую систему для поиска каких-либо ссылок по вашей проблеме. Вы можете даже увидеть ссылки на архивы списков рассылки или телеконференций, о которых вы не знали или не думали там искать.
-* Следующим пунктом должна быть http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[ база данных PR FreeBSD] (GNATS). Если только ваша проблема не нова или редка, есть некоторый шанс, что о ней уже сообщено.
+* Следующим пунктом должна быть https://bugs.freebsd.org/bugzilla/query.cgi[ база данных PR FreeBSD] (Bugzilla). Если только ваша проблема не нова или редка, есть некоторый шанс, что о ней уже сообщено.
* И самое важное, вы должны посмотреть не затрагивает ли документация в базовой системе вашу проблему.
-+
-Для основного кода FreeBSD вы должны тщательно изучить содержимое файла [.filename]#/usr/src/UPDATING# или его текущую версию по адресу http://svnweb.freebsd.org/base/head/UPDATING?view=log[http://svnweb.freebsd.org/base/head/UPDATING?view=log]. (Если вы переходите с одной версии на другую, особенно если вы обновляетесь до FreeBSD-CURRENT, то в этом файле вы можете найти много важной информации).
-+
-Если же ваша проблема связана с коллекцией портов FreeBSD, вы должны обратиться к файлу [.filename]#/usr/ports/UPDATING# (изменения, касающиеся индивидуальных портов) или к [.filename]#/usr/ports/CHANGES# (изменения, касающиеся всей коллекции портов). Они также доступны через интерфейс svnweb: http://svnweb.freebsd.org/ports/head/UPDATING?view=log[http://svnweb.freebsd.org/ports/head/UPDATING?view=log] и http://svnweb.freebsd.org/ports/head/CHANGES?view=log[http://svnweb.freebsd.org/ports/head/CHANGES?view=log].
++
+Для основного кода FreeBSD вы должны тщательно изучить содержимое файла [.filename]#/usr/src/UPDATING# или его текущую версию по адресу https://cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/UPDATING]. (Если вы переходите с одной версии на другую, особенно если вы обновляетесь до FreeBSD-CURRENT, то в этом файле вы можете найти много важной информации).
++
+Если же ваша проблема связана с коллекцией портов FreeBSD, вы должны обратиться к файлу [.filename]#/usr/ports/UPDATING# (изменения, касающиеся индивидуальных портов) или к [.filename]#/usr/ports/CHANGES# (изменения, касающиеся всей коллекции портов). Они также доступны через интерфейс cgit: https://cgit.freebsd.org/ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] и https://cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/tree/CHANGES] .
[[pr-writing]]
== Написание сообщения о проблеме
Теперь, после того, как вы решили, что ваш вопрос подпадает под категорию сообщения о проблеме, и это проблема FreeBSD, самое время написать собственно сообщение о проблеме (PR). Прежде чем мы углубимся в частности использования программы для создания и отправки PR, вот несколько советов, которые помогут вам сделать PR более эффективным.
+[[pr-writing-tips]]
== Как писать хорошие сообщения о проблемах
-* Основным языком общения разработчиков FreeBSD является английский. База данных по проблемам также ведется на английском. Если вы испытываете проблемы с формулировкой описания проблемы по-английски, свяжитесь со своими соотечественниками, которые помогут вам составить PR.
-+
-* _Не оставляйте поле "Synopsis" (краткое описание) пустым._ Сообщения о проблемах попадают как в списки рассылки, которые затем расходятся по всему миру (в них поле "Synopsis" определяет тему письма), так и в базу данных. Просматривающий эту базу, как правило, пройдет мимо PR с пустым кратким описанием. Не забудьте, что PR остается в базе до тех пор, пока кто-либо не закроет его; сообщение-аноним, скорее всего, просто потеряется на общем фоне.
-* __Избегайте туманных описаний в поле "Synopsis"__. Не стоит предполагать, что читающий ваше сообщение владеет контекстом; поэтому, чем подробнее вы опишете ситуацию, тем лучше. В частности, к какой части системы относится ваша проблема? Проявляется ли она на этапе установки или во время нормальной работы? Например, вместо строки `Synopsis: portupgrade is broken` следовало бы написать что-то вроде `Synopsis: port ports-mgmt/portupgrade coredumps on -current`. В случае портированных приложений в поле "Synopsis" полезно указывать не только имя порта, но и категорию.
-* _Если у вас есть готовый патч, скажите об этом._ PR, содержащий патч, имеет куда больше шансов быть рассмотренным. В этом случае добавьте строку `[patch]` (включая квадратные скобки) в начало поля "Synopsis" (хотя использование именно этой формы необязательно, она является стандартом де-факто).
-* _Если вы отвечаете за исходные тексты, сообщите об этом._ Если вы отвечаете за часть исходных текстов (например, порт), вы можете добавить в начало поля "Synopsis" строку `[maintainer update]` (включая квадратные скобки), а также установить класс вашего PR (поле "Class") в `maintainer-update`. В этом случае коммиттеру, обрабатывающему ваш PR, не придётся лишний раз проверять.
+* _Не оставляйте поле "Summary" (краткое описание) пустым._ Сообщения о проблемах попадают как в списки рассылки, которые затем расходятся по всему миру (в них поле "Summary" определяет тему письма), так и в базу данных. Просматривающий эту базу, как правило, пройдет мимо PR с пустым кратким описанием. Не забудьте, что PR остается в базе до тех пор, пока кто-либо не закроет его; сообщение-аноним, скорее всего, просто потеряется на общем фоне.
+* __Избегайте туманных описаний в поле "Summary"__. Не стоит предполагать, что читающий ваше сообщение владеет контекстом; поэтому, чем подробнее вы опишете ситуацию, тем лучше. В частности, к какой части системы относится ваша проблема? Проявляется ли она на этапе установки или во время нормальной работы? Например, вместо строки `Summary: portupgrade is broken` следовало бы написать что-то вроде `Summary: port ports-mgmt/portupgrade coredumps on -current`. В случае портированных приложений в поле "Summary" полезно указывать не только имя порта, но и категорию.
+* _Если у вас есть патч, сообщите об этом._ Наличие патча значительно упрощает обработку отчёта.
+** Не используйте ключевые слова `patch` или `patch-ready` — они устарели.
+* _Если вы сопровождаете код, укажите это._ Если вы сопровождаете часть исходного кода (например, существующий порт), обязательно установите «Class» вашего PR в значение `maintainer-update`. Таким образом, любой коммиттер, обрабатывающий ваш PR, не будет вынужден проверять это.
* _Будьте точны в формулировках._ Чем больше информации вы можете предоставить о проблеме, тем больше у вас шансов получить ответ.
-** Включите информацию о версии FreeBSD, которую вы используйте (существует специальное поле для его включения, смотрите ниже) и на какой архитектуре. Сообщите, используете ли вы release версию (установили с компакт-диска либо загрузили) или скачали её с помощью Subversion (и если так, то сообщите номер ревизии). Если вы используете FreeBSD-CURRENT, то первый вопрос, который вам могут задать, будет про номер ревизии, так как исправления для этой ветки (особенно в случае серьёзных проблем) имеют тенденцию появляться слишком быстро.
+
+** Включите версию FreeBSD, которую вы используете (для этого есть специальное поле, см. ниже), и архитектуру. Укажите, используете ли вы релиз (например, с CD-ROM или загруженный) или систему, поддерживаемую через Git (и, если да, укажите хэш и ветку). Если вы используете ветку FreeBSD-CURRENT, укажите это в первую очередь, так как исправления (особенно для известных проблем) часто добавляются очень быстро, и пользователи FreeBSD-CURRENT должны следить за обновлениями.
** Включите информацию о том, какие глобальные опции вы указали в [.filename]#make.conf#. На заметку: Объявление опций наподобие `-02` и других, описанных в man:gcc[1] во многих случаях может быть причиной ошибок. Хотя и разработчики FreeBSD будут принимать патчи, у них не будет желания исследовать такие случаи из-за отсутствия времени и добровольцев, и вместо этого они могут ответить, что это не поддерживается.
** Если проблему можно легко повторить, включите необходимую информацию, чтобы разработчик смог воспроизвести ее самостоятельно. Если проблема проявляется при некоторых вводимых данных, то, по возможности, приведите их вместе с получаемым и ожидаемым выводом. Если же вводимых данных много или же их нельзя разглашать, то попробуйте выделить из них лишь небольшой фрагмент, приводящий к возникновению проблемы, и включите его в PR.
** Если ваша проблема связана с ядром, будьте готовы предоставить следующую информацию (вам не обязательно включать её всю, она пойдёт лишь на заполнение базы данных, но вы должны включить информацию, которая по вашему мнению актуальна):
@@ -136,37 +137,24 @@ toc::[]
*** Прочли ли вы [.filename]#ports/UPDATING#, и описана ли там ваша проблема (кто-нибудь спросит обязательно)
* _Избегайте нечетких запросов о новых возможностях._ Сообщение типа "кто-то обязательно должен сделать так, чтобы такая-то утилита вела себя так-то" имеет куда меньше шансов встретить позитивный отклик, чем более четко сформулированный запрос. Помните, что исходные тексты доступны всем, так что если вам нужна реализация какого-то нового свойства, лучший способ- взяться за работу самому! Не забудьте также, что такие моменты лучше обсуждать в списках рассылки, таких как `freebsd-questions`, чем делать это посредством базы данных PR.
-* _Убедитесь, что ваша проблема еще никем не описана._ Мы уже говорили об этом, но стоит повториться. Потратьте пару минут на составление запросов к базе PR: http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query]. (Несмотря на повторы, об этом постоянно забывают)
+* _Убедитесь, что ваша проблема еще никем не описана._ Мы уже говорили об этом, но стоит повториться. Потратьте пару минут на составление запросов к базе PR: https://bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Несмотря на повторы, об этом постоянно забывают)
* _Сообщайте об одной проблеме в одном PR._ Избегайте описания двух и более проблем в одном сообщении (исключением являются взаимосвязанные проблемы). Оформляя патчи, не пытайтесь в них добавлять множество функциональных возможностей или исправлять ими несколько ошибок в одном и том же сообщении о проблеме (опять же, за исключением взаимосвязанных проблем) - для таких PR-ов потребуется значительно больше времени на обработку.
-* _Избегайте полемики._ Если ваше сообщение касается области или способов реализации, которые ранее вызвали разногласия, вам стоит быть готовым предоставить не только патчи, но и внятные аргументы, почему следует поступать именно так (то есть, это "Правильный Путь"). Как отмечалось выше, аккуратный поиск по архиву списков рассылки http://www.FreeBSD.org/search/#mailinglists[http://www.FreeBSD.org/search#mailinglists] никогда не помешает.
+* _Избегайте полемики._ Если ваше сообщение касается области или способов реализации, которые ранее вызвали разногласия, вам стоит быть готовым предоставить не только патчи, но и внятные аргументы, почему следует поступать именно так (то есть, это "Правильный Путь"). Как отмечалось выше, аккуратный поиск по архиву списков рассылки https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] никогда не помешает.
* _Будьте вежливы._ Почти каждый из тех, кто может заниматься вашим сообщением, является добровольцем. Никому не понравятся указания, как и что делать, когда он и так занимается этим, да еще и по каким-либо причинам, отличным от финансовых. Вообще говоря, этого подхода следует придерживаться, имея дело с любым проектом с Открытыми Исходными текстами (Open Source).
+[[pr-writing-before-beginning]]
== Прежде всего
-Если вы используйте утилиту man:send-pr[1] проверьте, что переменная вашего окружения `VISUAL` (или `EDITOR`, если `VISUAL` не задана) задана подходящим образом.
-
-Следует также проверить работоспособность системы электронной почты. Утилита man:send-pr[1] использует почтовую систему для отправки и отслеживания сообщения о проблеме. Если с машины, на которой вы запускаете man:send-pr[1], нельзя отправить почту, сообщение не попадёт в базу данных GNATS. О настройке электронной почты во FreeBSD можно прочитать в главе "Электронная почта" Руководства по FreeBSD по адресу extref:{handbook}mail[Electronic Mail, mail].
-
-Убедитесь, что ваш почтовый клиент не исказит сообщение по пути в GNATS. В частности, если ваш почтовый клиент автоматически переносит строки, изменяет символы табуляции на пробелы или предотвращает интерпретацию символов новой строки, любой патч, который вы пришлёте окажется непригодным. Для текста мы хотели бы, чтобы вы делали строчки размером примерно в 70 символов для читабельности PR на веб странице.
-
-Примерные соображения должны учитываться при отправке сообщения об ошибке через link:https://www.FreeBSD.org/send-pr/[веб-форму] вместо man:send-pr[1]. Помните, что операции копирования-вставки могут иметь сторонние эффекты в форматировании текста. В определённых случаях может быть необходимо использовать man:uuencode[1] для гарантии того, что патчи придут не изменёнными.
+Аналогичные соображения применимы к использованию https://bugs.freebsd.org/bugzilla/enter_bug.cgi[веб-формы для отправки PR]. Будьте осторожны с операциями копирования и вставки, которые могут изменить пробелы или другое форматирование текста.
-И наконец, если ваше сообщение будет объёмным, вы должны приготовить его в offline, чтобы ничего не потерялось в случае, если будет проблема при его отправке. Это особенно касается link:https://www.FreeBSD.org/send-pr/[веб-формы].
+И наконец, если ваше сообщение будет объёмным, вы должны приготовить его в offline, чтобы ничего не потерялось в случае, если будет проблема при его отправке.
+[[pr-writing-attaching-patches]]
== Вложение патчей или файлов
-Нижеследующее применимо к передаче сообщения о проблеме посредством электронной почты:
+В общем, мы рекомендуем использовать `git format-patch` для создания одного или серии унифицированных diff-файлов относительно базовой ветки (например, `origin/main`). Патчи, созданные таким образом, будут содержать хеши Git, а также ваше имя и адрес электронной почты, что упростит применение вашего патча коммиттерами и правильное указание вас как автора (с помощью `git am`). Для небольших изменений, где вы предпочитаете не использовать git, убедитесь, что используете man:diff[1] с опцией `-u` для создания унифицированного diff-файла, так как это даст разработчикам больше контекста и сделает его более читаемым по сравнению с другими форматами diff.
-Программа man:send-pr[1] предусматривает присоединение файлов к сообщению о проблеме. Вы можете вложить сколько угодно файлов, но каждый с уникальным именем (имеется в виду имя файла без маршрута). Просто используйте параметр командной строки `-a` для задания имен файлов, которые вы хотите присоединить:
-
-[source,shell]
-....
-% send-pr -a /var/run/dmesg -a /tmp/errors
-....
-
-Не беспокойтесь о бинарных файлах, они будут автоматически перекодированы для того, чтобы не повредить работе вашей почтовой программы.
-
-Если вы вкладываете патч, обязательно используйте параметр `-c` или `-u` вместе с командой man:diff[1] для создания контекстного или унифицированного diff-файла (унифицированный формат предпочтителен), и обязательно укажите точные номера SVN ревизий файлов, которые вы изменяли, чтобы разработчики, которые будут читать ваше сообщение, смогли легко его применить. Для проблем, связанных с ядром или с базовыми утилитами, предпочтительнее будет патч относительно ветки FreeBSD-CURRENT (или Subversion-ветки HEAD), так как весь новый код должен быть сначала протестирован в ней. После завершения тестирования код будет интегрирован в ветвь FreeBSD-STABLE.
+Для проблем с ядром или базовыми утилитами предпочтителен патч для FreeBSD-CURRENT (основной ветки Git), поскольку весь новый код должен сначала применяться и тестироваться там. После проведения соответствующих или достаточных тестов код будет объединён/перенесён в ветку FreeBSD-STABLE.
Если вы вставляете патч в тело сообщения, учтите, что некоторые почтовые программы имеют тенденцию заменять табуляции серией пробелов, что полностью разрушит, например, часть файла сборки (Makefile).
@@ -176,201 +164,89 @@ toc::[]
Вы должны также помнить, что пока вы явно не укажете обратного в вашем сообщении о проблеме или в самих патчах, будет предполагаться, что они подпадают под те же условия лицензирования, что и оригинальный файл, измененный вами.
+[[pr-writing-filling-template]]
== Заполнение шаблона
-Следующие несколько абзацев применимы только к способу подачи PR через электронную почту:
-
-После запуска утилиты man:send-pr[1] вам будет представлен шаблон сообщения о проблеме. Шаблон состоит из списка полей, некоторые из которых уже заполнены, а некоторые содержат комментарии, объясняющие назначение поля или перечисляющие подходящие значения. Не беспокойтесь о комментариях; они будут автоматически удалены, если вы их не изменяли (или удалите их сами).
-
-Вверху шаблона, ниже строк `SEND-PR:` находятся заголовки почтового сообщения. Вам обычно не нужно их изменять, если только вы не посылаете сообщение о проблеме с машины или от учетной записи, которая может посылать, но не может получать электронную почту, в случае чего вы можете задать в полях `From:` и `Reply-To:` ваши реальные адреса электронной почты. Вы можете также послать самому себе (или кому-то еще) копию сообщения о проблеме, добавив один или большее количество адресов к заголовку `Cc:`.
-
-В шаблоне вы найдете два однострочных поля:
-
-* _Submitter-Id:_ Не меняйте его. Значение по умолчанию `current-users` правильно, даже если вы используете FreeBSD-STABLE.
-* _Confidential:_ Предварительно заполнено как `no`, его изменение не имеет значения, так как нет такого понятия, как конфиденциальное сообщение о проблеме - база данных PR распространяется по всему миру.
-
-Далее описаны общие поля для почтового и link:https://www.FreeBSD.org/send-pr/[веб интерфейса]:
-
-* _Originator:_ Пожалуйста, укажите ваше реальное имя, за которым опционально следует адрес вашей электронной почты в угловых скобках. Обычно, man:send-pr[1] заполняет поле Originator содержимым поля `gecos` из учетной записи текущего пользователя.
-+
[NOTE]
====
-Предоставленный вами адрес электронной почты станет публичной информацией и может стать доступным спамерам. Поэтому совсем не лишними будут меры по борьбе со спамом на вашей стороне, или же можно воспользоваться временным адресом электронной почты. Однако, если вы укажете несуществующий почтовый адрес, то у нас не будет возможности уточнять детали по вашему PR.
+Используемый вами адрес электронной почты станет общедоступной информацией и может попасть к спамерам. У вас должны быть процедуры обработки спама или следует использовать временный почтовый аккаунт. Однако учтите, что если вы вообще не используете действительный почтовый аккаунт, мы не сможем задать вам вопросы о вашем PR.
====
-* _Organization:_ Все, что вы захотите здесь указать. Это поле не содержит значительной информации.
-* _Synopsis:_ Заполняется кратким и точным описанием проблемы. Краткое описание используется в качестве темы сообщения электронной почты о проблеме, и используется при выдаче списков и выборках сообщений о проблемах; сообщения о проблемах с непонятными краткими описаниями чаще всего игнорируются.
-+
-Повторим: если к вашему сообщению о проблеме приложен патч, то, пожалуйста, начните краткое описание с `[patch]` (включая квадратные скобки); если PR принадлежит к категории ports и вы являетесь его мейнтейнером, то начните описание с `[maintainer update]` (включая квадратные скобки) и установите класс проблемы (поле "Class") в `maintainer-update`.
-* _Severity:_ Одно из `non-critical`, `serious` или `critical`. Не переусердствуйте; избегайте пометки вашей проблемы как `critical`, если только это не действительно критичная проблема (повреждение данных, существенная потеря функциональности в -CURRENT), или `serious`, если только это не касается многих пользователей (паники ядра, блокировки (freezes), проблемы с конкретными драйверами устройств или с системными утилитами). Разработчики FreeBSD не обязательно будут работать над вашей проблемой быстрее, если вы установите слишком высокий уровень важности, т.к. существует много других людей, которые сделали тоже самое - некоторые разработчики всё же уделят этому полю немного внимания и перейдут к следующему сообщению именно из-за этого поля.
+
+При подаче сообщения об ошибке вы увидите следующие поля:
+
+* _Краткое описание:_ Заполните это кратким и точным описанием проблемы. Краткое описание используется как тема письма с отчётом о проблеме, а также в списках и сводках отчётов; отчёты с неясными описаниями часто остаются без внимания.
+* _Серьезность:_ Одно из значений: `Затрагивает только меня (Affects only me)`, `Затрагивает некоторых людей (Affects some people)` или `Затрагивает многих людей (Affects many people)`. Не переоценивайте проблему; избегайте отмечать её как `Затрагивает многих людей`, если это не так. Разработчики FreeBSD не обязательно будут работать над вашей проблемой быстрее, если вы преувеличите её важность, поскольку многие другие уже поступали точно так же.
+* _Категория:_ Выберите подходящую категорию.
+
-[NOTE]
-====
-Большинство проблем с безопасностью _не_ следует отправлять в GNATS, потому что вся эта информация становится публичной. Пожалуйста, направляйте подобные отчеты на электронный адрес `{security-officer}`.
-====
-* _Priority:_ Одно из `low`, `medium` или `high`. `high` должен использоваться для проблем, которые затронут конкретно каждого пользователя FreeBSD, а `medium` для чего-то, что затронет многих пользователей.
+Первое, что вам нужно сделать, — это определить, в какой части системы находится ваша проблема. Помните, что FreeBSD — это полноценная операционная система, которая включает в себя ядро, стандартные библиотеки, множество драйверов периферийных устройств и большое количество утилит («базовая система»). Однако в Коллекции портов доступны тысячи дополнительных приложений. Сначала вам нужно выяснить, связана ли проблема с базовой системой или с чем-то, установленным через Коллекцию портов.
+
-[NOTE]
-====
-Ввиду массовых злоупотреблений это поле потеряло свое значение.
-====
-* _Category:_ Выберите соответствующую категорию.
-+
-Первым делом необходимо решить, к какой части системы относится ваша проблема. Помните: FreeBSD - завершенная операционная система, которая устанавливает ядро, стандартные библиотеки, множество драйверов периферийного оборудования, а также - большой набор системных утилит ("базовая система"). В дополнение к этому, в коллекции портов имеются тысячи приложений. Следовательно, определитесь: обнаруженная вами проблема находится в базовой системе или в чем-то, установленным через коллекцию портов.
-+
Вот описание основных категорий:
** Если проблема в ядре, в библиотеках (таких как стандартная библиотека С `libc`) или в драйвере из базовой системы, то используйте категорию `kern`. (Есть несколько исключений, описанных ниже). В общем, это всё, что описано в разделах 2, 3 или 4 справочника.
** Если проблема с бинарной программой, например с man:sh[1] или man:mount[8], то вам прежде всего необходимо определить принадлежность программы к базовой системе или к установке из коллекции портов. Если вы не уверены, выполните команду `whereis _имя программы_`. В FreeBSD для коллекции портов существует договоренность: установка ведется в [.filename]#/usr/local#, однако это может быть переопределено системным администратором. Для таких программ следует использовать категорию `ports` (даже если категория порта `www`; см. ниже). Если программа располагается в [.filename]#/bin#, [.filename]#/usr/bin#, [.filename]#/sbin# или в [.filename]#/usr/sbin#, то это часть базовой системы, и вам следует использовать категорию `bin`. (Несколько программ, например man:gcc[1], на самом деле используют категорию `gnu`, но не беспокойтесь об этом сейчас.) Программы этой категории описаны в разделах 1 и 8 справочной системы.
** Если вы уверены, что в стартовых скриптах `(rc)` или в каком-то ином неисполняемом конфигурационном файле присутствует ошибка, тогда верной категорией будет `conf` (configuration). Эти сущности описываются в разделе 5 справочной системы.
** Если вы нашли проблему в наборе документации (статьи, книги, страницы справочной системы), правильным выбором будет `docs`.
-** Если вы наблюдаете проблему на страницах http://www.FreeBSD.org[сайта FreeBSD], то правильным выбором будет `www`.
+
[NOTE]
====
-Если проблема с чем-то из порта, называемого `www/_someportname_`, то она все же принадлежит к категории `ports`.
+Если проблема с чем-то из порта, называемого `www/_имяпорта_`, то она все же принадлежит к категории `ports`.
====
-+
++
Далее представлены более специализированные категории.
** Если проблема принадлежит к `kern`, но в то же время имеет дело с подсистемой USB, то правильным выбором будет `usb`.
** Если проблема принадлежит к `kern` и найдена в потоковых библиотеках, правильным выбором будет `threads`.
** Если проблема принадлежит к базовой системе и касается соблюдения стандартов, таких как POSIX(R), правильным выбором будет `standards`.
-** Если проблема связана с ошибками внутри Java Virtual Machine(TM) (JVM(TM)), даже если Java(TM) была установлена из коллекции портов, вам следует выбрать категорию `java`. Более общие проблемы с портами Java(TM) попадают под категорию `ports`.
-+
-Далее перечислены остальные категории.
-
-** Если вы уверены, что проблема проявляется только на используемой вами процессорной архитектуре, выберите одну из архитектурно-специфичных категорий: это `i386` для Intel-совместимых машин в 32-битном режиме; `amd64` для AMD машин в 64-битном режиме (сюда также входят Intel-совместимые машины работающие в режиме EMT64); и менее распространенные `arm`, `ia64`, `powerpc` и `sparc64`.
+** Если вы уверены, что проблема возникнет только на используемой вами архитектуре процессора, выберите одну из архитектурно-зависимых категорий: обычно `i386` для Intel-совместимых машин в 32-битном режиме; `amd64` для машин AMD, работающих в 64-битном режиме (это также включает Intel-совместимые машины, работающие в режиме EMT64); и реже `arm` или `powerpc`.
+
[NOTE]
====
Люди часто ошибаются в выборе категории. Если вы не уверены в правильности выбора, то лучше не гадать, а выбрать `misc`.
====
+
-.Правильное использование категории
+.Правильное использование архитектурно-зависимых категорий
[example]
====
-
У вас простой ПК, и вы подозреваете, что столкнулись с проблемой, специфичной для конкретного чипсета или материнской платы: верная категория - `i386`.
====
+
-.Неправильное использование категории
+.Некорректное использование категории, зависящей от архитектуры
[example]
====
-
Если вы наблюдаете проблему с периферийной картой расширения на распространенной шине или неполадки с конкретного типа жестким диском: в этом случае возможно, что неисправность наблюдается на более чем одной архитектуре, и верным выбором будет `kern`.
====
** Если вы не знаете в чем проблема (или вам кажется, что описание не попадает ни под какую из вышеобозначенных), используйте категорию `misc`. Перед тем, как написать PR, можно для начала спросить помощи в {freebsd-questions}. Возможно, там вам подскажут, какую из существующих категорий следует выбрать.
-+
-Вот текущий перечень категорий (взят из http://svnweb.freebsd.org/base/head/gnu/usr.bin/send-pr/categories[http://svnweb.freebsd.org/base/head/gnu/usr.bin/send-pr/categories]):
-
-** `advocacy:` проблемы, связанные с общественным мнением о FreeBSD. Вышло из употребления.
-** `amd64:` проблемы, специфичные для платформы AMD64.
-** `arm:` проблемы, специфичные для платформы ARM.
-** `bin:` проблемы с пользовательскими программами из базовой системы.
-** `conf:` проблемы с файлами настройки, используемыми по умолчанию значениями и прочее.
-** `docs:` проблемы со страницами справочной системы или онлайновой документацией.
-** `gnu:` проблемы с портированным программным обеспечением GNU, таким как man:gcc[1] или man:grep[1].
-** `i386:` проблемы, специфичные для платформы i386(TM).
-** `ia64:` проблемы, специфичные для платформы ia64.
-** `java:` проблемы, связанные с виртуальной машиной Java(TM).
-** `kern:` проблемы с ядром или с библиотеками в базовой системе, или с драйверами устройств, не связанными с какой-либо конкретной платформой.
-** `misc:` все, что не подпадает ни под какую другую категорию. (Надо отметить, что нет почти ничего, чтобы действительно соответствовало этой категории, за исключением проблем с релизами и с инфраструктурой сборки. Временные отказы при построении ветки `HEAD` не принадлежат к данной категории. Также надо отметить, что проблемы этой категории имеют тенденцию теряться легче всего).
-** `ports:` проблемы, связанные с коллекцией портов.
-** `powerpc:` проблемы, специфичные для платформы PowerPC(R).
-** `sparc64:` проблемы, специфичные для платформы Sparc64(R).
-** `standards:` проблемы, связанные с соответствием стандартам.
-** `threads:` проблемы, касающиеся реализации тредов во FreeBSD (особенно во FreeBSD-CURRENT).
-** `usb:` проблемы, относящиеся к реализации USB во FreeBSD.
-** `www:` изменения или улучшения сайта FreeBSD
-
-* _Class:_ Выберите одно из следующего:
-
-** `sw-bug:` ошибки в программном обеспечении.
-** `doc-bug:` ошибки в документации.
-** `change-request:` запросы на расширение функций или изменение в существующих.
-** `update:` обновления портов или другого программного обеспечения сторонних разработчиков.
-** `maintainer-update:` обновления в портах, для которых вы являетесь ответственной персоной.
-
-* _Release:_ Используемая вами версия FreeBSD. Оно заполняется автоматически программой man:send-pr[1] и требует изменения, если только вы отсылаете сообщение о проблеме с системы, отличающейся от той, где вы столкнулись с проблемой.
-
-И наконец, последовательность многострочных полей:
-
* _Environment:_ Оно должно максимально точно описывать окружение, в котором встречается проблема. Сюда включается версия операционной системы, версия конкретной программы или файла, содержащего проблему, и любая другая информация, такая, как конфигурация системы, другое программное обеспечение, которое влияет на проблему, и так далее-просто все, что разработчик должен знать для создания условий появления проблемы.
-* _Description:_ Полное и точное описание проблемы, с которой вы столкнулись. Попытайтесь избежать своих предположений о причинах проблемы, если только вы не уверены, что правы, так как вы можете привести разработчика к неправильным предположениям о проблеме.
-* _How-To-Repeat:_ Последовательность действий, которые должны быть выполнены для повторения проблемы.
-* _Fix:_ Предпочтителен патч, или по крайней мере обходной путь (который не только поможет другим людям обойти ту же самую проблему, но также поможет разработчику понять ее причины), однако если у вас нет никаких здравых идей, то лучше оставить это поле пустым, чем строит догадки.
-
-== Отправка сообщения о проблеме
-
-Если вы используете man:send-pr[1]:
-
-Как только вы заполните шаблон, сохраните его и выйдете из редактора, man:send-pr[1] запросит вас `s)end, e)dit or a)bort?`. Вы можете нажать `s` для продолжения и отправки сообщения о проблеме, `e` для повторного запуска редактора и выполнения дальнейших изменений, или `a` для отказа от вашего сообщения. Если вы выберете последнее, то ваше сообщение о проблеме останется на диске (man:send-pr[1] укажет вам имя файла перед завершением работы), так что вы сможете отредактировать его на свой вкус или передать в систему с лучшим подключением к сети, перед тем, как послать его при помощи параметра `-F` программы man:send-pr[1]:
-
-[source,shell]
-....
-% send-pr -f ~/my-problem-report
-....
-
-При этом будет прочитан указанный файл, будет проверено содержимое, убраны комментарии и сообщение будет отослано.
-
-Если вы используете link:https://www.FreeBSD.org/send-pr/[веб форму]:
-
-Перед нажатием `submit` вам потребуется заполнить проверочное поле текстом, представленным на картинке рядом. Эта непопулярная мера была принята в связи со злоупотреблениями со стороны роботов и некоторых неверно сориентированных индивидуумов. Это необходимая мера, которая никому не нравится, и, пожалуйста, не просите нас убрать её.
-
-Отметим, что вам `настоятельно рекомендуется` сохранить вашу работу (PR) куда-нибудь перед нажатием кнопки `submit`. Распространенная пользовательская ошибка: отображение браузером устаревшей проверочной картинки из его кэша. Если это произойдет в вашем случае, ваше сообщение будет отвергнуто и ваши труды пропадут.
-
-Если по какой-либо причине вы не имеете возможности видеть проверочную картинку, а также не можете воспользоваться man:send-pr[1], пожалуйста примите наши извинения за неудобства и пришлите ваш PR электронной почтой команде mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org].
+* _Описание:_ Полное и точное описание проблемы, с которой вы столкнулись. Старайтесь избегать предположений о причинах проблемы, если не уверены в своей правоте, так как это может ввести разработчика в заблуждение и привести к неверным выводам. В описании должны быть указаны действия, необходимые для воспроизведения проблемы. Если вам известен обходной путь, укажите его. Это не только поможет другим людям с той же проблемой временно её решить, но и может помочь разработчику понять причину возникновения проблемы.
[[pr-followup]]
== Отслеживание
После того, как ваше сообщение будет принято, вы получите по электронной почте уведомление, в котором будет указан номер для отслеживания, который был назначен вашему сообщению о проблеме и URL, который вы можете использовать для проверки его состояния. В случае удачи кто-нибудь проявит интерес к вашей проблеме и попытается ее решить, или, как это бывает, описать, почему это не является проблемой. Вы будете автоматически оповещаться о любом изменении состояния и получать копии всех комментариев или патчей, которые будут присоединяться в процессе отработки вашего сообщения о проблеме.
-Если кто-то запросит дополнительную информацию от вас, или вы вспомните или обнаружите нечто, что не указали в начальном сообщении, пожалуйста пошлите ваше дополнение (отклик) с помощью одного из этих способов:
+Если кто-то запросит у вас дополнительную информацию, или вы вспомните или обнаружите что-то, что не упомянули в первоначальном отчёте, пожалуйста, отправьте уточнение. Основная причина, по которой ошибка не исправляется, — это отсутствие связи с автором отчёта. Проще всего воспользоваться опцией комментария на веб-странице конкретного PR, которую можно открыть с https://bugs.freebsd.org/bugzilla/query.cgi[страницы поиска PR].
-* Самый простой путь это использовать соответствующую ссылку (followup) на индивидуальной веб страничке сообщения об ошибки, к которой можно перейти, используя http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[страничку поиска PR]. Кликнув на этой ссылке откроется окно для отправки email с уже корректно заполненными полями To: и Subject: (если ваш браузер сконфигурирован для этого).
-* Или просто пошлите письмо на адрес {bugfollowup}, включив отслеживаемый номер в теме письма, чтобы система отслеживания сообщений могла знать, к какому сообщению о проблеме его присоединить.
-+
-[NOTE]
-====
-Если вы _не_ включите отслеживаемый номер, GNATS растеряется и создаст совершенно новое PR, которое будет закреплено за администратором GNATS. В результате ваш отклик затеряется до тех пор пока кто-нибудь не начнёт разгребать скопившийся мусор, что может произойти спустя дни или даже недели.
+Если проблема исчезла, но отчёт о ней остаётся открытым, просто добавьте комментарий с указанием, что отчёт можно закрыть, и, по возможности, объясните, как или когда проблема была устранена.
-Неправильно:
+Иногда возникает задержка в одну-две недели, когда отчёт о проблеме остаётся без внимания — никто не назначается на него и не оставляет комментариев. Такое может произойти при увеличении очереди отчётов о проблемах или во время праздничного сезона. Если отчёт о проблеме не получил внимания в течение нескольких недель, стоит найти коммиттера, особенно заинтересованного в работе над ним.
-[.programlisting]
-....
-Subject: that PR I sent
-....
+Существует несколько способов сделать это, желательно в следующем порядке, с перерывом в несколько дней между попытками использования каждого канала связи:
-Правильно:
-
-[.programlisting]
-....
-Subject: Re: ports/12345: compilation problem with foo/bar
-....
-
-====
+* Отправить письмо по электронной почте в extref:{handbook}eresources/[соответствующий список, eresources-summary] для получения комментариев к отчету.
+* Присоединитесь к соответствующим IRC-каналам. Частичный список доступен здесь: https://wiki.freebsd.org/IRC/Channels[]. Сообщите участникам канала о проблеме и запросите помощь. Будьте терпеливы и оставайтесь в канале после отправки сообщения, чтобы у людей из разных часовых поясов была возможность отреагировать.
+* Найдите коммиттеров, заинтересованных в сообщенной проблеме. Если проблема касается конкретного инструмента, бинарного файла, порта, документа или исходного файла, проверьте https://cgit.FreeBSD.org[Git Repository]. Определите последних коммиттеров, внесших существенные изменения в файл, и попытайтесь связаться с ними через IRC или электронную почту. Список коммиттеров и их адреса электронной почты можно найти в статье extref:{contributors}[Участники проекта FreeBSD].
-Если сообщение о проблеме остается открытым после того, как проблема была решена, просто отправьте сообщение (так, как это описано выше), с указанием, что сообщение о проблеме может быть закрыто, и если это возможно, объясните, как и когда проблема была устранена.
+Помните, что эти люди — добровольцы, как и сопровождающие и пользователи, поэтому они могут быть не сразу доступны для помощи с отчётом о проблеме. Терпение и последовательность в дальнейших действиях крайне рекомендуются и ценятся. При достаточном внимании и усилиях, посвящённых этому процессу, найти коммиттера, который займётся отчётом о проблеме — лишь вопрос времени.
[[pr-problems]]
-== Проблемы взаимодействия с GNATS
-
-Большинство PR проходят сквозь систему и принимаются быстро; однако, во время загруженности GNATS, подтверждение на ваше сообщение о проблеме может задержаться на 10 и более минут. Пожалуйста, сохраняйте спокойствие.
-
-Помимо всего прочего, так как GNATS получает все данные через электронную почту, становится понятным, почему FreeBSD пропускает все сообщения через спамфильтры. Если подтверждение не приходит на протяжении часа-двух, то, возможно, что ваше сообщение попало под них; если так, то, пожалуйста, свяжитесь с администраторами GNATS по адресу mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org] и попросите помощи.
-
-[NOTE]
-====
-Среди антиспам мер есть одна, которая сопоставляет сообщения с множеством злоупотреблений, наблюдаемых в электронной почте с HTML-форматированием текста (однако, сюда не относится простое включение HTML в PR). Мы настоятельно рекомендуем не использовать HTML-форматированный текст при посылке PR: не только из-за вероятности попадания в спамфильтры, но и из-за загромождения базы данных. Отдайте предпочтение простому старому текстовому формату.
-====
+== Если возникли проблемы
-В редких случаях вы можете столкнуться с ошибкой GNATS, когда PR принят и ему присвоен номер, но он не отображается в списках PR ни на одной из страниц веб поиска PR. Вероятно, что рассинхронизировался индекс базы с самой базой. Этот случай можно проверить, обратившись к страничке http://www.FreeBSD.org/cgi/query-pr.cgi[Query PR Database] и проконтролировав наличие вашего PR. Если он есть, пожалуйста, известите администраторов GNATS (mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]). Следует отметить, что перестройка базы выполняется периодически по `cron`, и если вам не к спеху, то не предпринимайте никаких шагов.
+Если вы обнаружили проблему в системе отслеживания ошибок, сообщите об ошибке! Для этого существует специальная категория. Если у вас не получается это сделать, свяжитесь с ответственными за обработку ошибок по адресу mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
[[pr-further]]
-== Дополнительная литература
+== Для дальнейшего ознакомления
Это список информационных ресурсов, относящихся к правильному написанию и обработке сообщений о проблемах. Он, без сомнения, не полон.
-* http://www.chiark.greenend.org.uk/~sgtatham/bugs.html[How to Report Bugs Effectively]-прекрасное эссе, которое написал Simon G. Tatham о составлении полезных (не специфичных для FreeBSD) сообщений о проблемах.
+* https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/ENGLISH.md[How to Report Bugs Effectively]-прекрасное эссе, которое написал Simon G. Tatham о составлении полезных (не специфичных для FreeBSD) сообщений о проблемах.
* extref:{pr-guidelines}[Problem Report Handling Guidelines]-интересный взгляд на обработку сообщений о проблемах самими разработчиками FreeBSD.
diff --git a/documentation/content/ru/articles/problem-reports/_index.po b/documentation/content/ru/articles/problem-reports/_index.po
new file mode 100644
index 0000000000..4b7ed7aceb
--- /dev/null
+++ b/documentation/content/ru/articles/problem-reports/_index.po
@@ -0,0 +1,1433 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 12:50+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesproblem-reports_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Как лучше сформулировать и отправить отчет о проблеме в проект FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/problem-reports/_index.adoc:1
+#: documentation/content/en/articles/problem-reports/_index.adoc:11
+#, no-wrap
+msgid "Writing FreeBSD Problem Reports"
+msgstr "Составление сообщений о проблеме во FreeBSD"
+
+#. 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 ""
+"Эта статья описывает, как наилучшим образом сформулировать и отправить "
+"сообщение о проблеме в Проект FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. 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 ""
+"Одной из самых разочаровывающих практик, которую можно получить в качестве "
+"пользователя программного обеспечения, является отправка сообщения о "
+"проблеме, которое вскоре закрывается с кратким и ничему не помогающим "
+"объяснением типа \"это не проблема\" или \"неправильное PR\". Подобным же "
+"образом одной из самых разочаровывающих практик, которую можно получить в "
+"качестве разработчика программного обеспечения, является получение массы "
+"сообщений о проблемах, которые на самом деле не являются сообщениями о "
+"проблемах, а запросами на получение поддержки, или которые содержат мало или "
+"вообще не содержат никакой информации о сути проблемы или способе ее "
+"воспроизведения."
+
+#. 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 ""
+"Хотя в основном статья фокусируется на сообщениях о проблемах во FreeBSD, "
+"большей частью она должна хорошо подходить и другим программным проектам."
+
+#. 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 ""
+"Но как же определить, что является ошибкой, а что нет? Простым правилом, "
+"которому нужно следовать, является следующее - ваша проблема _не_ является "
+"ошибкой, если она формулируется как вопрос (обычно в форме \"Как сделать X?"
+"\" или \"Где можно найти Y?\"). Не всегда это так однозначно, но правило "
+"вопроса покрывает большинство случаев. Если Вам нужен ответ, лучше всего "
+"задать свой вопрос в {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 ""
+"Вот некоторые случаи, в которых может оказаться полезным отправить сообщение "
+"о чем-то, что не является ошибкой:"
+
+#. 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 ""
+"Уведомление об обновлении программного обеспечения, которое поддерживается "
+"сторонними разработчиками (в основном порты, но также и компоненты базовой "
+"системы, разрабатываемые сторонними организациями, такие, как BIND или "
+"различные утилиты GNU)."
+
+#. 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 ""
+"Для не поддерживаемых никем портов (переменная `MAINTAINER` содержит "
+"`ports@FreeBSD.org`), такие уведомления о обновлении будут замечены "
+"заинтересовавшимся коммиттером и вас могут попросить предоставить патч для "
+"обновления порта; предоставление патча до того, как вас попросят об этом "
+"сильно увеличит шансы того, что порт будет обновлён вовремя."
+
+#. 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 ""
+"В любом случае, следование процессу, описанному в extref:{porters-handbook}"
+"upgrading[Руководстве по созданию портов] даст наилучшие результаты. "
+"(Также можно ознакомиться с статьей extref:{contributing}[Вклад в "
+"коллекцию портов 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 ""
+"Ошибка, которую нельзя воспроизвести, вряд ли будет исправлена. Если ошибка "
+"возникла только единожды, и вы не можете ее воспроизвести, к тому же никто с "
+"ней больше не сталкивался, нет никаких шансов, что разработчики смогут ее "
+"воспроизвести или понять, что делается неправильно. Это не значит, что "
+"такого не случается, но это значит, что шансов у вашего сообщения дойти "
+"когда-либо до стадии исправления ошибки очень малы. Часто эти виды ошибок "
+"возникают из-за неудовлетворительной работы жёстких дисков, перегревшихся "
+"процессоров. Всегда, когда это возможно вы должны отслеживать такие случаи "
+"перед посылкой сообщения об ошибке."
+
+#. 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 ""
+"Теперь, чтобы определить кому вы должны отправить ваше сообщение об ошибке, "
+"вы должны понимать, что программное обеспечение, которое входит во FreeBSD, "
+"составляется из нескольких различных частей:"
+
+#. 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 ""
+"Код в базовой системе, который пишется и поддерживается контрибьюторами "
+"FreeBSD. Такой, как ядро, библиотека C, драйвера устройств (входят в "
+"категорию `kern`); утилиты (`bin`); страницы справочника и документация "
+"(`docs`); веб-страницы (`www`). Все ошибки в этих областях должны быть "
+"сообщены разработчикам 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 ""
+"Код в базовой системе, который пишется и поддерживается другим, "
+"импортируется во FreeBSD и адаптируется. Примеры включают в себя: bind, "
+"man:gcc[1] и man:sendmail[8]. Большинство ошибок, попадающие в данные "
+"области должны быть сообщены разработчикам FreeBSD, но в некоторых случаях "
+"они должны быть отправлены изначальным разработчикам, если проблемы не "
+"являются специфичными для FreeBSD. Обычно ошибки такого рода попадают под "
+"категории `bin` или `gnu`."
+
+#. 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 ""
+"Отдельные приложения, не входящие в базовую систему, но являющиеся частью "
+"Коллекции Портов FreeBSD (категория `ports`). Большинство этих приложений не "
+"пишется разработчиками FreeBSD; что предоставляет FreeBSD, так это только "
+"лишь инфраструктуру для установки приложения. Следовательно, вы должны "
+"отправлять сообщение об ошибке разработчикам FreeBSD только тогда, когда вы "
+"уверены в том, что проблема специфична для FreeBSD - иначе отправляйте её "
+"авторам программного обеспечения."
+
+#. 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 ""
+"Если проблема в базовой системе, то вам нужно сначала прочесть раздел extref:"
+"{faq}[версии FreeBSD, latest-version] из FAQ, если вы ещё не знакомы с "
+"данной темой. Для FreeBSD возможно исправлять проблемы только для некоторых "
+"недавних веток базовой системы, поэтому отправка сообщения об ошибке для "
+"более старой версии приведёт к тому, что разработчик посоветует вам "
+"обновиться до поддерживаемой версии, чтобы посмотреть присутствует ли в ней "
+"проблема. Команда офицеров безопасности поддерживает link:https://"
+"www.FreeBSD.org/security/[список поддерживаемых версий.]."
+
+#. 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 ""
+"Если проблема в порте, рассмотрите возможность сообщить об ошибке "
+"разработчикам исходного проекта. Проект FreeBSD не может исправлять все "
+"ошибки во всём программном обеспечении."
+
+#. 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 ""
+"Нужно следовать хорошему правилу всегда сначала выполнять дополнительные "
+"исследования перед тем, как послать сообщение о проблеме. Может быть, о "
+"вашей проблеме уже сообщено; может быть, она недавно обсуждалась или "
+"обсуждается в списках рассылки; она может быть уже исправлена в более новой "
+"версии, чем та, что вы используете. Поэтому вы должны проверить все обычные "
+"места до того, как послать ваше сообщение о проблеме. Для FreeBSD это значит:"
+
+#. 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 ""
+"Список extref:{faq}[Часто задаваемых вопросов] (FAQ) по FreeBSD. FAQ "
+"содержит ответы на широкий круг вопросов, таких как вопросы, касающиеся "
+"extref:{faq}[совместимости оборудования, hardware], extref:{faq}"
+"[пользовательских приложений, applications] и extref:{faq}[конфигурации "
+"ядра, 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 ""
+"extref:{handbook}eresources/[Списки рассылки, eresources-mail] — если Вы не "
+"подписаны на них, воспользуйтесь https://www.FreeBSD.org/search/"
+"#mailinglists[поиском в архивах] на сайте FreeBSD. Если ваша проблема не "
+"обсуждалась в списках рассылки, вы можете попытаться опубликовать сообщение "
+"о ней и подождать несколько дней, пока кто-нибудь не сможет увидеть то, что "
+"вы не заметили."
+
+#. 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 ""
+"Следующим пунктом должна быть https://bugs.freebsd.org/bugzilla/"
+"query.cgi[ база данных PR FreeBSD] (Bugzilla). Если только ваша проблема не "
+"нова или редка, есть некоторый шанс, что о ней уже сообщено."
+
+#. 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 ""
+"Для основного кода FreeBSD вы должны тщательно изучить содержимое файла "
+"[.filename]#/usr/src/UPDATING# или его текущую версию по адресу https://"
+"cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/"
+"UPDATING]. (Если вы переходите с одной версии на другую, особенно если вы "
+"обновляетесь до 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 ""
+"Если же ваша проблема связана с коллекцией портов FreeBSD, вы должны "
+"обратиться к файлу [.filename]#/usr/ports/UPDATING# (изменения, касающиеся "
+"индивидуальных портов) или к [.filename]#/usr/ports/CHANGES# (изменения, "
+"касающиеся всей коллекции портов). Они также доступны через интерфейс cgit: "
+"https://cgit.freebsd.org/ports/tree/UPDATING[https://cgit.freebsd.org/ports/"
+"tree/UPDATING] и https://cgit.freebsd.org/ports/tree/CHANGES[https://"
+"cgit.freebsd.org/ports/tree/CHANGES] ."
+
+#. 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 ""
+"Теперь, после того, как вы решили, что ваш вопрос подпадает под категорию "
+"сообщения о проблеме, и это проблема FreeBSD, самое время написать "
+"собственно сообщение о проблеме (PR). Прежде чем мы углубимся в частности "
+"использования программы для создания и отправки PR, вот несколько советов, "
+"которые помогут вам сделать PR более эффективным."
+
+#. 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 ""
+"_Не оставляйте поле \"Summary\" (краткое описание) пустым._ Сообщения о "
+"проблемах попадают как в списки рассылки, которые затем расходятся по всему "
+"миру (в них поле \"Summary\" определяет тему письма), так и в базу данных. "
+"Просматривающий эту базу, как правило, пройдет мимо PR с пустым кратким "
+"описанием. Не забудьте, что PR остается в базе до тех пор, пока кто-либо не "
+"закроет его; сообщение-аноним, скорее всего, просто потеряется на общем фоне."
+
+#. 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 ""
+"__Избегайте туманных описаний в поле \"Summary\"__. Не стоит предполагать, "
+"что читающий ваше сообщение владеет контекстом; поэтому, чем подробнее вы "
+"опишете ситуацию, тем лучше. В частности, к какой части системы относится "
+"ваша проблема? Проявляется ли она на этапе установки или во время нормальной "
+"работы? Например, вместо строки `Summary: portupgrade is broken` следовало "
+"бы написать что-то вроде `Summary: port ports-mgmt/portupgrade coredumps on "
+"-current`. В случае портированных приложений в поле \"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 ""
+"_Если у вас есть патч, сообщите об этом._ Наличие патча значительно упрощает "
+"обработку отчёта."
+
+#. 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 ""
+"Не используйте ключевые слова `patch` или `patch-ready` — они устарели."
+
+#. 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 ""
+"_Если вы сопровождаете код, укажите это._ Если вы сопровождаете часть "
+"исходного кода (например, существующий порт), обязательно установите «Class» "
+"вашего PR в значение `maintainer-update`. Таким образом, любой коммиттер, "
+"обрабатывающий ваш PR, не будет вынужден проверять это."
+
+#. 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 ""
+"Включите версию FreeBSD, которую вы используете (для этого есть специальное "
+"поле, см. ниже), и архитектуру. Укажите, используете ли вы релиз (например, "
+"с CD-ROM или загруженный) или систему, поддерживаемую через Git (и, если да, "
+"укажите хэш и ветку). Если вы используете ветку FreeBSD-CURRENT, укажите это "
+"в первую очередь, так как исправления (особенно для известных проблем) часто "
+"добавляются очень быстро, и пользователи FreeBSD-CURRENT должны следить за "
+"обновлениями."
+
+#. 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 ""
+"Включите информацию о том, какие глобальные опции вы указали в "
+"[.filename]#make.conf#. На заметку: Объявление опций наподобие `-02` и "
+"других, описанных в man:gcc[1] во многих случаях может быть причиной ошибок. "
+"Хотя и разработчики FreeBSD будут принимать патчи, у них не будет желания "
+"исследовать такие случаи из-за отсутствия времени и добровольцев, и вместо "
+"этого они могут ответить, что это не поддерживается."
+
+#. 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 ""
+"Если проблему можно легко повторить, включите необходимую информацию, чтобы "
+"разработчик смог воспроизвести ее самостоятельно. Если проблема проявляется "
+"при некоторых вводимых данных, то, по возможности, приведите их вместе с "
+"получаемым и ожидаемым выводом. Если же вводимых данных много или же их "
+"нельзя разглашать, то попробуйте выделить из них лишь небольшой фрагмент, "
+"приводящий к возникновению проблемы, и включите его в 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 ""
+"Если ваша проблема связана с ядром, будьте готовы предоставить следующую "
+"информацию (вам не обязательно включать её всю, она пойдёт лишь на "
+"заполнение базы данных, но вы должны включить информацию, которая по вашему "
+"мнению актуальна):"
+
+#. 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 ""
+"Включены ли у вас опции отладки (например, `WITNESS`), и если так, то "
+"существует ли проблема после изменения значения этой опции"
+
+#. 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 ""
+"Полный вывод обратной трассировки (backtrace), паники или иного консольного "
+"вывода, или же записи из [.filename]#/var/log/messages#, если они были "
+"сгенерированы"
+
+#. 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 ""
+"Вывод команды `pciconf -l`, а также соответствующие части вывода `dmesg`, в "
+"случае, если проблема связана с конкретным оборудованием"
+
+#. 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 ""
+"Прочли ли вы [.filename]#src/UPDATING#, описана ли там ваша проблема (кто-"
+"нибудь спросит обязательно)"
+
+#. 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 ""
+"Имеются ли какие-либо переменные окружения, которые переписывают "
+"первоначально-установленные в [.filename]#bsd.port.mk#, такие как, "
+"`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 ""
+"Прочли ли вы [.filename]#ports/UPDATING#, и описана ли там ваша проблема "
+"(кто-нибудь спросит обязательно)"
+
+#. 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 ""
+"_Избегайте нечетких запросов о новых возможностях._ Сообщение типа \"кто-то "
+"обязательно должен сделать так, чтобы такая-то утилита вела себя так-то\" "
+"имеет куда меньше шансов встретить позитивный отклик, чем более четко "
+"сформулированный запрос. Помните, что исходные тексты доступны всем, так что "
+"если вам нужна реализация какого-то нового свойства, лучший способ- взяться "
+"за работу самому! Не забудьте также, что такие моменты лучше обсуждать в "
+"списках рассылки, таких как `freebsd-questions`, чем делать это посредством "
+"базы данных PR."
+
+#. 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 ""
+"_Убедитесь, что ваша проблема еще никем не описана._ Мы уже говорили об "
+"этом, но стоит повториться. Потратьте пару минут на составление запросов к "
+"базе PR: https://bugs.freebsd.org/bugzilla/query.cgi[https://"
+"bugs.freebsd.org/bugzilla/query.cgi]. (Несмотря на повторы, об этом "
+"постоянно забывают)"
+
+#. 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 ""
+"_Сообщайте об одной проблеме в одном PR._ Избегайте описания двух и более "
+"проблем в одном сообщении (исключением являются взаимосвязанные проблемы). "
+"Оформляя патчи, не пытайтесь в них добавлять множество функциональных "
+"возможностей или исправлять ими несколько ошибок в одном и том же сообщении "
+"о проблеме (опять же, за исключением взаимосвязанных проблем) - для таких PR-"
+"ов потребуется значительно больше времени на обработку."
+
+#. 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 ""
+"_Избегайте полемики._ Если ваше сообщение касается области или способов "
+"реализации, которые ранее вызвали разногласия, вам стоит быть готовым "
+"предоставить не только патчи, но и внятные аргументы, почему следует "
+"поступать именно так (то есть, это \"Правильный Путь\"). Как отмечалось "
+"выше, аккуратный поиск по архиву списков рассылки https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] никогда "
+"не помешает."
+
+#. 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 ""
+"_Будьте вежливы._ Почти каждый из тех, кто может заниматься вашим "
+"сообщением, является добровольцем. Никому не понравятся указания, как и что "
+"делать, когда он и так занимается этим, да еще и по каким-либо причинам, "
+"отличным от финансовых. Вообще говоря, этого подхода следует придерживаться, "
+"имея дело с любым проектом с Открытыми Исходными текстами (Open Source)."
+
+#. 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 ""
+"Аналогичные соображения применимы к использованию https://bugs.freebsd.org/"
+"bugzilla/enter_bug.cgi[веб-формы для отправки PR]. Будьте осторожны с "
+"операциями копирования и вставки, которые могут изменить пробелы или другое "
+"форматирование текста."
+
+#. 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 ""
+"И наконец, если ваше сообщение будет объёмным, вы должны приготовить его в "
+"offline, чтобы ничего не потерялось в случае, если будет проблема при его "
+"отправке."
+
+#. 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 ""
+"В общем, мы рекомендуем использовать `git format-patch` для создания одного "
+"или серии унифицированных diff-файлов относительно базовой ветки (например, "
+"`origin/main`). Патчи, созданные таким образом, будут содержать хеши Git, а "
+"также ваше имя и адрес электронной почты, что упростит применение вашего "
+"патча коммиттерами и правильное указание вас как автора (с помощью `git "
+"am`). Для небольших изменений, где вы предпочитаете не использовать git, "
+"убедитесь, что используете man:diff[1] с опцией `-u` для создания "
+"унифицированного diff-файла, так как это даст разработчикам больше контекста "
+"и сделает его более читаемым по сравнению с другими форматами diff."
+
+#. 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 ""
+"Для проблем с ядром или базовыми утилитами предпочтителен патч для FreeBSD-"
+"CURRENT (основной ветки Git), поскольку весь новый код должен сначала "
+"применяться и тестироваться там. После проведения соответствующих или "
+"достаточных тестов код будет объединён/перенесён в ветку 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 ""
+"Если вы вставляете патч в тело сообщения, учтите, что некоторые почтовые "
+"программы имеют тенденцию заменять табуляции серией пробелов, что полностью "
+"разрушит, например, часть файла сборки (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 ""
+"Не отсылайте патчи в виде вложений, используя `Content-Transfer-Encoding: "
+"quoted-printable`. Это выполнит экранирование (escaping) символов и весь "
+"патч будет бесполезным."
+
+#. 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 ""
+"Следует также заметить, что включение небольших патчей в сообщение о "
+"проблеме является приемлемой практикой, в особенности если они решают "
+"проблему, описанную в сообщении, большие же патчи, а в особенности новый "
+"код, который может требовать значительного просмотра перед тем, как он будет "
+"внесен в дерево исходных текстов, должны быть размещены на web- или ftp-"
+"сервере, а в сообщение о проблеме должен быть включён только URL указывающий "
+"на этот патч. Очень часто патчи, пересылаемые по электронной почте, а в "
+"особенности если задействована GNATS, бывают искажены, и, как следствие, чем "
+"больше патч, тем труднее будет для заинтересованных людей привести его к "
+"нормальному виду. Также то, что патч будет размещён отдельно от сообщения о "
+"проблеме, даёт возможность изменять его не отсылая полный патч в дополнение "
+"к изначальному сообщению о проблеме. И наконец, большие патчи просто "
+"увеличивают размер базы данных, так как закрытые сообщения об ошибках на "
+"самом деле не удаляются, а сохраняются и помечаются, как `closed`."
+
+#. 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 ""
+"Используемый вами адрес электронной почты станет общедоступной информацией и "
+"может попасть к спамерам. У вас должны быть процедуры обработки спама или "
+"следует использовать временный почтовый аккаунт. Однако учтите, что если вы "
+"вообще не используете действительный почтовый аккаунт, мы не сможем задать "
+"вам вопросы о вашем 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 "При подаче сообщения об ошибке вы увидите следующие поля:"
+
+#. 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 ""
+"_Серьезность:_ Одно из значений: `Затрагивает только меня (Affects only "
+"me)`, `Затрагивает некоторых людей (Affects some people)` или `Затрагивает "
+"многих людей (Affects many people)`. Не переоценивайте проблему; избегайте "
+"отмечать её как `Затрагивает многих людей`, если это не так. Разработчики "
+"FreeBSD не обязательно будут работать над вашей проблемой быстрее, если вы "
+"преувеличите её важность, поскольку многие другие уже поступали точно так же."
+
+#. 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 ""
+"Первое, что вам нужно сделать, — это определить, в какой части системы "
+"находится ваша проблема. Помните, что FreeBSD — это полноценная операционная "
+"система, которая включает в себя ядро, стандартные библиотеки, множество "
+"драйверов периферийных устройств и большое количество утилит («базовая "
+"система»). Однако в Коллекции портов доступны тысячи дополнительных "
+"приложений. Сначала вам нужно выяснить, связана ли проблема с базовой "
+"системой или с чем-то, установленным через Коллекцию портов."
+
+#. 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 ""
+"Если проблема в ядре, в библиотеках (таких как стандартная библиотека С "
+"`libc`) или в драйвере из базовой системы, то используйте категорию `kern`. "
+"(Есть несколько исключений, описанных ниже). В общем, это всё, что описано в "
+"разделах 2, 3 или 4 справочника."
+
+#. 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 ""
+"Если проблема с бинарной программой, например с man:sh[1] или man:mount[8], "
+"то вам прежде всего необходимо определить принадлежность программы к базовой "
+"системе или к установке из коллекции портов. Если вы не уверены, выполните "
+"команду `whereis _имя программы_`. В FreeBSD для коллекции портов существует "
+"договоренность: установка ведется в [.filename]#/usr/local#, однако это "
+"может быть переопределено системным администратором. Для таких программ "
+"следует использовать категорию `ports` (даже если категория порта `www`; см. "
+"ниже). Если программа располагается в [.filename]#/bin#, [.filename]#/usr/"
+"bin#, [.filename]#/sbin# или в [.filename]#/usr/sbin#, то это часть базовой "
+"системы, и вам следует использовать категорию `bin`. (Несколько программ, "
+"например man:gcc[1], на самом деле используют категорию `gnu`, но не "
+"беспокойтесь об этом сейчас.) Программы этой категории описаны в разделах 1 "
+"и 8 справочной системы."
+
+#. 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 ""
+"Если вы уверены, что в стартовых скриптах `(rc)` или в каком-то ином "
+"неисполняемом конфигурационном файле присутствует ошибка, тогда верной "
+"категорией будет `conf` (configuration). Эти сущности описываются в разделе "
+"5 справочной системы."
+
+#. 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 ""
+"Если вы нашли проблему в наборе документации (статьи, книги, страницы "
+"справочной системы), правильным выбором будет `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 ""
+"Если проблема с чем-то из порта, называемого `www/_имяпорта_`, то она все же "
+"принадлежит к категории `ports`."
+
+#. 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 ""
+"Если проблема принадлежит к `kern`, но в то же время имеет дело с "
+"подсистемой USB, то правильным выбором будет `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 ""
+"Если проблема принадлежит к `kern` и найдена в потоковых библиотеках, "
+"правильным выбором будет `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 ""
+"Если проблема принадлежит к базовой системе и касается соблюдения "
+"стандартов, таких как POSIX(R), правильным выбором будет `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 ""
+"Если вы уверены, что проблема возникнет только на используемой вами "
+"архитектуре процессора, выберите одну из архитектурно-зависимых категорий: "
+"обычно `i386` для Intel-совместимых машин в 32-битном режиме; `amd64` для "
+"машин AMD, работающих в 64-битном режиме (это также включает Intel-"
+"совместимые машины, работающие в режиме EMT64); и реже `arm` или `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 ""
+"Люди часто ошибаются в выборе категории. Если вы не уверены в правильности "
+"выбора, то лучше не гадать, а выбрать `misc`."
+
+#. 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 ""
+"У вас простой ПК, и вы подозреваете, что столкнулись с проблемой, "
+"специфичной для конкретного чипсета или материнской платы: верная категория "
+"- `i386`."
+
+#. 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 ""
+"Если вы наблюдаете проблему с периферийной картой расширения на "
+"распространенной шине или неполадки с конкретного типа жестким диском: в "
+"этом случае возможно, что неисправность наблюдается на более чем одной "
+"архитектуре, и верным выбором будет `kern`."
+
+#. 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 ""
+"Если вы не знаете в чем проблема (или вам кажется, что описание не попадает "
+"ни под какую из вышеобозначенных), используйте категорию `misc`. Перед тем, "
+"как написать PR, можно для начала спросить помощи в {freebsd-questions}. "
+"Возможно, там вам подскажут, какую из существующих категорий следует выбрать."
+
+#. 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:_ Оно должно максимально точно описывать окружение, в котором "
+"встречается проблема. Сюда включается версия операционной системы, версия "
+"конкретной программы или файла, содержащего проблему, и любая другая "
+"информация, такая, как конфигурация системы, другое программное обеспечение, "
+"которое влияет на проблему, и так далее-просто все, что разработчик должен "
+"знать для создания условий появления проблемы."
+
+#. 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 ""
+"После того, как ваше сообщение будет принято, вы получите по электронной "
+"почте уведомление, в котором будет указан номер для отслеживания, который "
+"был назначен вашему сообщению о проблеме и URL, который вы можете "
+"использовать для проверки его состояния. В случае удачи кто-нибудь проявит "
+"интерес к вашей проблеме и попытается ее решить, или, как это бывает, "
+"описать, почему это не является проблемой. Вы будете автоматически "
+"оповещаться о любом изменении состояния и получать копии всех комментариев "
+"или патчей, которые будут присоединяться в процессе отработки вашего "
+"сообщения о проблеме."
+
+#. 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 ""
+"Если кто-то запросит у вас дополнительную информацию, или вы вспомните или "
+"обнаружите что-то, что не упомянули в первоначальном отчёте, пожалуйста, "
+"отправьте уточнение. Основная причина, по которой ошибка не исправляется, — "
+"это отсутствие связи с автором отчёта. Проще всего воспользоваться опцией "
+"комментария на веб-странице конкретного PR, которую можно открыть с https://"
+"bugs.freebsd.org/bugzilla/query.cgi[страницы поиска PR]."
+
+#. 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 ""
+"Отправить письмо по электронной почте в extref:{handbook}eresources/"
+"[соответствующий список, eresources-summary] для получения комментариев к "
+"отчету."
+
+#. 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 ""
+"Присоединитесь к соответствующим IRC-каналам. Частичный список доступен "
+"здесь: https://wiki.freebsd.org/IRC/Channels[]. Сообщите участникам канала о "
+"проблеме и запросите помощь. Будьте терпеливы и оставайтесь в канале после "
+"отправки сообщения, чтобы у людей из разных часовых поясов была возможность "
+"отреагировать."
+
+#. 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 ""
+"Найдите коммиттеров, заинтересованных в сообщенной проблеме. Если проблема "
+"касается конкретного инструмента, бинарного файла, порта, документа или "
+"исходного файла, проверьте https://cgit.FreeBSD.org[Git Repository]. "
+"Определите последних коммиттеров, внесших существенные изменения в файл, и "
+"попытайтесь связаться с ними через IRC или электронную почту. Список "
+"коммиттеров и их адреса электронной почты можно найти в статье extref:"
+"{contributors}[Участники проекта 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 ""
+"Помните, что эти люди — добровольцы, как и сопровождающие и пользователи, "
+"поэтому они могут быть не сразу доступны для помощи с отчётом о проблеме. "
+"Терпение и последовательность в дальнейших действиях крайне рекомендуются и "
+"ценятся. При достаточном внимании и усилиях, посвящённых этому процессу, "
+"найти коммиттера, который займётся отчётом о проблеме — лишь вопрос времени."
+
+#. 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 ""
+"Если вы обнаружили проблему в системе отслеживания ошибок, сообщите об "
+"ошибке! Для этого существует специальная категория. Если у вас не получается "
+"это сделать, свяжитесь с ответственными за обработку ошибок по адресу "
+"mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]."
+
+#. 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 ""
+"https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/"
+"ENGLISH.md[How to Report Bugs Effectively]-прекрасное эссе, которое написал "
+"Simon G. Tatham о составлении полезных (не специфичных для 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]-интересный взгляд "
+"на обработку сообщений о проблемах самими разработчиками FreeBSD."
diff --git a/documentation/content/ru/articles/releng/_index.adoc b/documentation/content/ru/articles/releng/_index.adoc
index 5b539f65dc..055890b07c 100644
--- a/documentation/content/ru/articles/releng/_index.adoc
+++ b/documentation/content/ru/articles/releng/_index.adoc
@@ -1,10 +1,13 @@
---
-title: Подготовка релизов FreeBSD
authors:
- - author: Murray Stokely
+ -
+ author: 'Murray Stokely'
email: murray@FreeBSD.org
webpage: https://people.FreeBSD.org/~murray/
-trademarks: ["freebsd", "cvsup", "intel", "general"]
+description: 'В этом документе описывается подход, ранее использовавшийся командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества'
+tags: ["Release", "Engineering", "Historical", "FreeBSD"]
+title: 'Устаревшая разработка релизов FreeBSD'
+trademarks: ["freebsd", "intel", "general"]
---
= Подготовка релизов FreeBSD
@@ -41,7 +44,12 @@ endif::[]
[.abstract-title]
Аннотация
-В этой статье описывается подход, который используется группой подготовки релизов FreeBSD для создания качественных версий Операционной Системы FreeBSD. В ней детально описывается методология, используемая для официальных релизов FreeBSD и рассказывается об инструментах, доступных тем, кто интересуется созданием модифицированных релизов FreeBSD для тиражирования внутри организации или в коммерческих целях.
+[NOTE]
+====
+Этот документ устарел и не точно описывает текущие процедуры выпуска релизов команды FreeBSD Release Engineering. Он сохранен в исторических целях. Текущие процедуры, используемые командой FreeBSD Release Engineering, доступны в статье extref:{freebsd-releng}[FreeBSD Release Engineering].
+====
+
+В этом документе описывается подход, используемый командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества. Подробно излагается методология, применяемая для официальных выпусков FreeBSD, а также описываются инструменты, доступные тем, кто заинтересован в создании собственных релизов FreeBSD для корпоративного внедрения или использования в коммерческой деятельности.
'''
@@ -50,112 +58,128 @@ toc::[]
[[introduction]]
== Введение
-Разработка FreeBSD представляет собой весьма открытый процесс. FreeBSD составляется в результате общих усилий тысяч людей по всему миру. Проект FreeBSD предоставляет анонимный публичный доступ по протоколу CVS[1], так что любой может получить доступ к журналу изменений, разницам (патчам) между ветками разработки и другим продвинутым возможностям, которые даёт строгое управление исходным кодом. Это сильно помогает в привлечении к FreeBSD всё большего количества талантливых разработчиков. Однако, и я думаю, что все со мной согласятся, наступит хаос, если доступ по записи будет открыт всем в Internet. Поэтому только "избранная" группа примерно из 300 человек имеет доступ по записи в CVS-хранилище. Эти _коммиттеры[5]_ отвечают в целом за разработку FreeBSD. Выбираемая из самых заслуженных разработчиков _группа правления[6]_ обеспечивает некоторый уровень управления проектом.
+Разработка FreeBSD — это очень открытый процесс. FreeBSD создается благодаря вкладу тысяч людей по всему миру. Проект FreeBSD предоставляет доступ к Subversion footnote:[Subversion, http://subversion.apache.org] для широкой публики, чтобы другие могли просматривать сообщения журнала, различия (патчи) между ветками разработки и другие улучшения производительности, которые предоставляет система управления исходным кодом. Это значительно помогло привлечь больше талантливых разработчиков в FreeBSD. Однако, я думаю, все согласятся, что хаос быстро воцарился бы, если бы право записи в основной репозиторий было открыто для всех в Интернете. Поэтому только «избранная» группа из почти 300 человек имеет право записи в репозиторий Subversion. Эти extref:{contributors}[коммиттеры FreeBSD, staff-committers]footnote:[extref:{contributors}[коммиттеры FreeBSD, staff-committers]] обычно являются людьми, которые выполняют основную часть разработки FreeBSD. Избранная группа разработчиков — link:https://www.FreeBSD.org/administration/#t-core[Core Team]footnote:[link:https://www.FreeBSD.org/administration/#t-core[Core Team FreeBSD]] — обеспечивает некоторый уровень руководства проектом.
+
+Быстрый темп разработки `FreeBSD` делает основную ветку разработки непригодной для повседневного использования широкой публикой. В частности, требуются усилия по стабилизации для доведения системы разработки до релиза производственного качества. Для решения этого конфликта разработка продолжается по нескольким параллельным направлениям. Основная ветка разработки — это _HEAD_ или _trunk_ нашего дерева Subversion, известная как "FreeBSD-CURRENT" или сокращённо "-CURRENT".
+
+Набор более стабильных ветвей поддерживается под названием "FreeBSD-STABLE" или сокращённо "-STABLE". Все ветви находятся в главном хранилище Subversion, которое поддерживается проектом FreeBSD. FreeBSD-CURRENT — это "передний край" разработки FreeBSD, куда сначала попадают все новые изменения. FreeBSD-STABLE — это ветвь разработки, на основе которой выпускаются основные релизы. Изменения попадают в эту ветвь с другой скоростью и с общим предположением, что они сначала попали в FreeBSD-CURRENT и были тщательно протестированы сообществом пользователей.
-Темп разработок, ведущихся во `FreeBSD`, оставляет мало времени на тщательную доводку системы до качества продуктивного релиза. Для решения этой проблемы разработка ведётся в два параллельных потока. Основной веткой разработки является __HEAD__, она же _основная линия_ нашего дерева CVS, известная также под именем "FreeBSD-CURRENT" или, для краткости, "-CURRENT".
+Термин _stable_ в названии ветки относится к предполагаемой стабильности бинарного интерфейса приложений (ABI), которую гарантирует проект. Это означает, что пользовательское приложение, скомпилированное на более старой версии системы из той же ветки, будет работать на более новой системе из той же ветки. Стабильность ABI значительно улучшилась по сравнению с предыдущими выпусками. В большинстве случаев бинарные файлы со старых систем _STABLE_ работают без изменений на более новых системах, включая __HEAD__, при условии, что не используются интерфейсы управления системой.
-Поддерживается и более стабильная ветка, известная как "FreeBSD-STABLE" или, для краткости, "-STABLE". Обе ветки находятся в основном CVS-хранилище в Калифорнии и реплицируются при помощи CVSup[2] на зеркала по всему миру. FreeBSD-CURRENT[7] является "передним краем" работ над FreeBSD, через который попадают все изменения в системе. FreeBSD-STABLE является веткой разработки, из которой создаются основные релизы. В эту ветку изменения попадают разными путями, и предполагается, что сначала они попали в FreeBSD-CURRENT, где были тщательно протестированы сообществом наших пользователей.
+В промежуточный период между выпусками еженедельные снимки состояния системы автоматически создаются сборщиками FreeBSD Project и доступны для загрузки по адресу `https:/download.FreeBSD.org/snapshots/`. Широкое распространение бинарных снимков выпусков, а также склонность нашего сообщества пользователей следить за разработкой -STABLE с помощью Subversion и команды "`make buildworld`" footnote:[extref:{handbook}[Пересборка world, makeworld]] помогает поддерживать FreeBSD-STABLE в очень надежном состоянии даже до того, как активизируются мероприятия по обеспечению качества перед основным выпуском.
-В промежутке между релизами машинами Проекта FreeBSD, выделенными для построения системы, ежемесячно автоматически собираются снэпшоты, которые доступны для закачки по адресу `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/`. Общедоступность снэпшотов бинарных релизов, а также желание сообщества наших пользователей отслеживать работу над -STABLE при помощи CVSup и "`make world`"[7] помогает поддержать весьма хорошее качество FreeBSD-STABLE, даже до выполнения мероприятий проверки качества, предваряющих выпуск основных релизов.
+Помимо снимков установочных ISO, также предоставляются еженедельные образы виртуальных машин для использования с VirtualBox, qemu или другим популярным эмуляционным программным обеспечением. Образы виртуальных машин можно загрузить с `https://download.FreeBSD.org/snapshots/VM-IMAGES/`.
-В процессе выпуска релиза пользователи постоянно присылают сообщения об ошибках и пожелания по расширению функциональности. Сообщения о проблемах попадают в нашу базу данных GNATS[8] по электронной почте, посредством утилиты man:send-pr[1] или через Web-интерфейс, доступный по адресу http://www.FreeBSD.org/send-pr/[http://www.FreeBSD.org/send-pr/].
+Образы виртуальных машин сжаты с помощью man:xz[1] и занимают примерно 150 МБ, а при подключении к виртуальной машине содержат разреженную файловую систему размером 10 ГБ.
-Для удовлетворения наших самых консервативно настроенных пользователей, начиная с FreeBSD 4.3, появились ветки для отдельных релизов. Эти ветки создаются вскоре после того, как выпускается окончательный релиз. После его выхода в ветку релиза помещаются только самые критичные исправления и добавления, касающиеся безопасности. Кроме обновлений исходных текстов посредством CVS, для систем веток RELENG_``__X_Y__`` имеются и бинарные наборы патчей.
+Отчеты об ошибках и запросы функций постоянно отправляются пользователями в течение цикла выпуска. Сообщения о проблемах вносятся в нашу базу данных Bugzilla через веб-интерфейс, доступный по адресу https://www.freebsd.org/support/bugreports/[https://www.freebsd.org/support/bugreports/].
-=== Что обсуждается в данном документе?
+Для обслуживания наиболее консервативных пользователей, начиная с FreeBSD 4.3, были введены индивидуальные ветки релизов. Эти ветки создаются незадолго до выпуска финального релиза. После выхода релиза на ветку вносятся только самые критические исправления безопасности и дополнения. Помимо обновлений исходного кода через Subversion, доступны бинарные патч-наборы для поддержания актуальности систем на ветках _releng/X.Y_.
-В последующих главах этой статьи обсуждаются:
+=== Что описывает эта статья
-<<release-proc>>::
-Различные этапы процесса подготовки релиза вплоть до построения актуальной системы.
+Следующие разделы этой статьи описывают:
-<<release-build>>::
-Процесс сборки.
+crossref:releng[release-proc, Процесс выпуска релиза]::
+Различные этапы процесса разработки релиза, предшествующие непосредственной сборке системы.
-<<extensibility>>::
-Как базовый релиз может быть расширен третьими сторонами.
+crossref:releng[release-build, Сборка релиза]::
+Фактический процесс сборки.
-<<lessons-learned>>::
-Некоторые из уроков, полученных при выпуске релиза FreeBSD 4.4.
+crossref:releng[extensibility, Расширяемость]::
+Как базовый выпуск может быть расширен третьими сторонами.
-<<future>>::
-Направления будущих работ.
+crossref:releng[lessons-learned, Уроки, извлеченные из FreeBSD 4.4]::
+Некоторые уроки, извлеченные в процессе выпуска FreeBSD 4.4.
+
+crossref:releng[future, Перспективы развития]::
+Перспективные направления развития.
[[release-proc]]
== Процесс выпуска релиза
-Новые релизы FreeBSD выпускаются из ветки -STABLE с интервалом примерно в четыре месяца. Процесс выпуска релизов FreeBSD начинается за 45 дней до предполагаемой даты релиза с того, что ответственный за релиз посылает сообщение по электронной почте в адрес списков рассылки для разработчиков, чтобы напомнить последним о наличии всего лишь 15 дней на внесение новых изменений до момента заморозки кода. В этот период многие разработчики выполняют действия, известные как "MFC-переносы". MFC означает "Merge From CURRENT" (перенос из CURRENT) и описывает процесс переноса протестированных изменений из нашего дерева разработки -CURRENT в наше дерево -STABLE.
+Новые выпуски FreeBSD выходят из ветки -STABLE примерно с интервалом в четыре месяца. Процесс выпуска FreeBSD начинает набирать обороты за 70-80 дней до предполагаемой даты выпуска, когда инженер выпуска отправляет электронное письмо в списки рассылки разработчиков, напоминая им, что у них осталось всего 15 дней для интеграции новых изменений до заморозки кода. В это время многие разработчики выполняют так называемые "MFC-проверки".
+
+MFC означает "Merge From CURRENT" и описывает процесс переноса проверенного изменения из нашей ветки разработки -CURRENT в ветку -STABLE. Политика проекта требует, чтобы любое изменение сначала было применено к основной ветке, а затем перенесено в ветки -STABLE после достаточного внешнего тестирования пользователями -CURRENT (ожидается, что разработчики тщательно проверят изменение перед внесением в -CURRENT, но невозможно для одного человека проверить все варианты использования универсальной операционной системы). Минимальный срок для MFC составляет 3 дня, который обычно используется только для тривиальных или критических исправлений ошибок.
-=== Просмотр кода
+=== Проверка кода
-За тридцать дней до предполагаемого релиза хранилище исходных текстов переводится в режим "стабилизации кода". В этот период все изменения в дереве -STABLE должны подтверждаться `{re}`. В первый 15-дневный период разрешены следующие типы изменений:
+За шестьдесят дней до предполагаемого релиза репозиторий исходного кода переходит в режим «заморозки кода». В этот период все коммиты в ветку -STABLE должны быть одобрены `{re}`. Процесс утверждения технически обеспечивается предкоммитным хуком. В этот период допускаются следующие виды изменений:
* Исправления ошибок.
-* Обновление документации.
-* Исправления любого характера, касающиеся безопасности.
-* Незначительные исправления в драйверах устройств, такие, как, например, добавление новых ID устройств.
-* Любые другие изменения, которые одобряет группа подготовки релиза, с учётом потенциального риска.
+* Обновления документации.
+* Исправления, связанные с безопасностью, любого рода.
+* Незначительные изменения в драйверах устройств, такие как добавление новых идентификаторов устройств.
+* Обновления драйверов от поставщиков.
+* Любое дополнительное изменение, которое команда разработки релизов сочтет оправданным, учитывая потенциальный риск.
+
+Вскоре после начала заморозки кода создаётся образ _BETA1_ и выпускается для широкого тестирования. В период заморозки кода не реже чем раз в две недели выпускается как минимум один бета-образ или кандидат в релизы, пока не будет готов финальный выпуск. В дни, предшествующие финальному релизу, команда разработки выпусков постоянно взаимодействует с командой security-officer, сопровождающими документации и сопровождающими портов, чтобы убедиться, что все необходимые компоненты для успешного релиза доступны.
-После первых 15 дней стабилизации кода выпускается __предварительный релиз__, предназначенный для широкого тестирования, а код переводится в состояние "заморозки", когда становится гораздо труднее доказывать необходимость внесения новых изменений в систему, если они не касаются исправления серьёзных ошибок или информационной безопасности. Во время заморозки кода каждую неделю выпускается не менее одной предварительной версии релиза, до тех пор, пока не будет готов окончательный вариант релиза. В дни, предшествующие выпуску окончательного релиза, группа его подготовки работает в постоянном контакте со службой безопасности и людьми, поддерживающими документацию и порты, чтобы обеспечить доступность всех компонентов, необходимых для успешного выпуска релиза.
+После того, как качество BETA-образов становится достаточно удовлетворительным и не планируется крупных и потенциально рискованных изменений, создается ветка релиза, и образы _Release Candidate_ (RC) собираются из ветки релиза, вместо BETA-образов из ветки STABLE. Также снимается заморозка изменений в ветке STABLE, а ветка релиза переходит в режим "жесткой заморозки кода", когда становится значительно сложнее обосновать новые изменения в системе, за исключением исправления серьезных ошибок или проблем безопасности.
-=== Контрольный список для проверки окончательного релиза
+=== Контрольный список финального выпуска
-После того, как для широкого тестирования было выпущено несколько предварительных релизов и все основные проблемы были решены, может начаться процесс "шлифовки" окончательного релиза.
+Когда несколько образов BETA станут доступны для широкого тестирования и все основные проблемы будут устранены, можно приступать к финальной "доводке" выпуска.
[[rel-branch]]
==== Создание ветки релиза
-Как сказано во вводной части, ветка `RELENG_X_Y` является сравнительно новым добавлением в нашей методологии подготовки релизов. Первым шагом в создании этой ветки является проверка того, что вы работаете с самой последней версией исходных текстов `RELENG_X`, из _которой_ вы хотите создать новую ветку.
+[NOTE]
+====
+Во всех примерах ниже `$FSVN` указывает на расположение репозитория Subversion FreeBSD, `svn+ssh://svn.FreeBSD.org/base/`.
+====
+
+Расположение веток FreeBSD в Subversion описано в extref:{committers-guide}[Руководстве коммиттера, subversion-primer-base-layout]. Первым шагом в создании ветки является определение ревизии исходников `stable/_X_`, от которой вы хотите сделать _ответвление_.
-[source,shell]
+[source, shell]
....
-/usr/src# cvs update -rRELENG_4 -P -d
+# svn log -v $FSVN/stable/9
....
-Следующим шагом является создание _тэга_ точки ответвления, чтобы диффы облегчили работу с началом ветки в CVS:
+Следующий шаг — создание _ветки релиза_
-[source,shell]
+[source, shell]
....
-/usr/src# cvs rtag -rRELENG_4 RELENG_4_8_BP src
+# svn cp $FSVN/stable/9@REVISION $FSVN/releng/9.2
....
-После этого создаётся тэг новой ветки по команде:
+Эту ветку можно извлечь:
-[source,shell]
+[source, shell]
....
-/usr/src# cvs rtag -b -rRELENG_4_8_BP RELENG_4_8 src
+# svn co $FSVN/releng/9.2 src
....
[NOTE]
====
-__Использование тэгов `RELENG_*` разрешено только менеджерам CVS и участникам группы по выпуску релизов.__
+Создание ветки `releng` и тегов `release` выполняется командой link:https://www.FreeBSD.org/administration/#t-re[Release Engineering Team].
====
-"_Тэгом_ " в понятии CVS называют метку, которая идентифицирует исходный текст в некоторый момент времени. Вводя тэг в дерево, мы обеспечиваем то, что в будущем тот, кто строит релиз, всегда сможет воспользоваться тем же самым кодом, что использовался нами для создания официальных релизов Проекта FreeBSD.
-
-image::branches-head.png[Ветви разработки FreeBSD]
+image::branches-head.png["Ветка разработки FreeBSD"]
-image::branches-releng3.png[Ветка FreeBSD 3.x STABLE]
+image::branches-releng3.png["Ветка STABLE FreeBSD 3.x"]
-image::branches-releng4.png[Ветка FreeBSD 4.x STABLE]
+image::branches-releng4.png["Ветка FreeBSD 4.x STABLE"]
-image::branches-releng5.png[Ветка FreeBSD 5.x STABLE]
+image::branches-releng5.png["Ветка STABLE FreeBSD 5.x"]
-image::branches-releng6.png[Ветка FreeBSD 6.x STABLE]
+image::branches-releng6.png["Ветка FreeBSD 6.x STABLE"]
-image::branches-releng7.png[Ветка FreeBSD 7.x STABLE]
+image::branches-releng7.png["Ветка FreeBSD 7.x STABLE"]
-image::branches-releng8.png[Ветка FreeBSD 8.x STABLE]
+image::branches-releng8.png["Ветка FreeBSD 8.x STABLE"]
-image::branches-releng9.png[Ветка FreeBSD 9.x STABLE]
+image::branches-releng9.png["Ветка FreeBSD 9.x STABLE"]
[[versionbump]]
==== Увеличение номера версии
-Перед тем, как окончательный релиз будет помечен, построен и выпущен, необходимо модифицировать следующие файлы, отразив в них корректную версию FreeBSD:
+Перед тем как финальный выпуск может быть помечен, собран и выпущен, следующие файлы должны быть изменены, чтобы отражать корректную версию FreeBSD:
-* [.filename]#doc/ru_RU.KOI8-R/books/handbook/mirrors/chapter.xml#
+* [.filename]#doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml#
* [.filename]#doc/en_US.ISO8859-1/books/porters-handbook/book.xml#
+* [.filename]#doc/en_US.ISO8859-1/htdocs/cgi/ports.cgi#
+* [.filename]#ports/Tools/scripts/release/config#
* [.filename]#doc/shared/xml/freebsd.ent#
* [.filename]#src/Makefile.inc1#
* [.filename]#src/UPDATING#
@@ -164,154 +188,125 @@ image::branches-releng9.png[Ветка FreeBSD 9.x STABLE]
* [.filename]#src/release/doc/en_US.ISO8859-1/shared/xml/release.dsl#
* [.filename]#src/release/doc/shared/examples/Makefile.relnotesng#
* [.filename]#src/release/doc/shared/xml/release.ent#
-* [.filename]#src/shared/examples/cvsup/standard-supfile#
* [.filename]#src/sys/conf/newvers.sh#
* [.filename]#src/sys/sys/param.h#
* [.filename]#src/usr.sbin/pkg_install/add/main.c#
-* [.filename]#www/en/docs/man.xml#
-* [.filename]#www/en/cgi/ports.cgi#
-* [.filename]#ports/Tools/scripts/release/config#
+* [.filename]#doc/en_US.ISO8859-1/htdocs/search/opensearch/man.xml#
-Новый релиз должен быть также отражён в файлах замечаний к релизу и информации о замеченных ошибках (в ветке релиза), а файлы соответствующим образом обрезаны (в ветке stable/current):
+Заметки о выпуске и файлы с опечатками также необходимо адаптировать для нового выпуска (в ветке выпуска) и соответствующим образом обрезать (в ветке stable/current):
* [.filename]#src/release/doc/en_US.ISO8859-1/relnotes/common/new.xml#
* [.filename]#src/release/doc/en_US.ISO8859-1/errata/article.xml#
-Утилита Sysinstall должна быть обновлена и указывать количество доступных портов и объём дискового пространства, требуемого для Коллекции Портов[4]. На данный момент эта информация хранится в файле [.filename]#src/usr.sbin/sysinstall/dist.c#.
-
-После построения релиза для оповещения мирового сообщества о выпуске релиза необходимо обновить некоторые файлы.
+В Sysinstall следует добавить информацию о количестве доступных портов и объеме дискового пространства, необходимого для коллекции портов. footnote:[Коллекция портов FreeBSD https://ports.FreeBSD.org] В настоящее время эта информация хранится в [.filename]#src/usr.sbin/bsdinstall/dist.c#.
-* [.filename]#doc/shared/images/articles/releng/branches-relengX.pic#
-* [.filename]#www/shared/xml/advisories.xml#
-* [.filename]#www/shared/xml/includes.release.xml#
-* [.filename]#www/shared/xml/includes.release.xsl#
-* [.filename]#www/en/releases/*#
-* [.filename]#www/en/releng/index.xml#
-* [.filename]#www/en/news/news.xml#
-* [.filename]#www/en/search/web.atoz#
-* [.filename]#src/shared/misc/bsd-family-tree#
+После сборки выпуска следует обновить ряд файлов, чтобы объявить о выпуске. Эти файлы находятся относительно `head/` в поддереве `doc/` Subversion.
-[[versionbump-major]]
-==== Подготовка новой старшей релиз ветки (RELENG_X)
+* [.filename]#share/images/articles/releng/branches-relengX.pic#
+* [.filename]#head/shared/xml/release.ent#
+* [.filename]#en_US.ISO8859-1/htdocs/releases/*#
+* [.filename]#en_US.ISO8859-1/htdocs/releng/index.xml#
+* [.filename]#share/xml/news.xml#
-Когда новая старшая релиз ветка, такая как `RELENG_6` ответвляется из HEAD, некоторые дополнительные файлы должны быть обновлены перед тем, как релизы будут созданы из этой новой ветки.
+Кроме того, обновите файл "Генеалогическое древо BSD":
-* [.filename]#src/shared/examples/cvsup/stable-supfile# - когда применимо, должен быть обновлен, чтобы указывать на новую -STABLE ветку.
+* [.filename]#src/shared/misc/bsd-family-tree#
-==== Создание тэгов релиза
+==== Создание тега релиза
-При готовности окончательного релиза следующая команда создаст тэг `RELENG_4_8_0_RELEASE`.
+Когда финальный выпуск будет готов, следующая команда создаст тег `release/9.2.0`.
-[source,shell]
+[source, shell]
....
-/usr/src# cvs rtag -rRELENG_4_8 RELENG_4_8_0_RELEASE src
+# svn cp $FSVN/releng/9.2 $FSVN/release/9.2.0
....
-Менеджеры документации и портов отвечают за внесение тэга в соответствующие ветки с тэгом `RELEASE_4_8_0`.
+Менеджеры документации и портов ответственны за добавление тега `tags/RELEASE_9_2_0` в соответствующие деревья.
-Иногда в последний момент, уже _после_ создания последних тэгов может потребоваться внесение исправлений. На практике это не является проблемой, так как CVS позволяет выполнять манипуляции с тэгами по команде `cvs tag -d _tagname filename_`. Очень важно, чтобы все последние изменения были помечены соответствующим тэгом, как часть релиза. Релизы FreeBSD должны быть всегда повторяемыми. Локальные изменения в параметры окружения выпускающего релиз недопустимы.
+Когда команда Subversion `svn cp` используется для создания __тега релиза (release tag)__, это идентифицирует исходный код на определённый момент времени. Создавая теги, мы гарантируем, что будущие сборщики релизов всегда смогут использовать тот же исходный код, который использовался для создания официальных релизов проекта FreeBSD.
[[release-build]]
-== Построение релизов
-
-"Релизы" FreeBSD могут быть построены любым человеком, имеющим быстродействующую машину и доступ к хранилищу исходных текстов. (Это должен быть любой, так как мы предоставляем анонимный доступ к CVS! Обратитесь к Руководству для прояснения деталей.) _Единственным_ особым требованием является наличие устройства man:md[4]. Если устройство в вашем ядре не подгружено, то модуль ядра должен быть подгружен автоматически при выполнении команды man:mdconfig[8] на этапе создания носителя для загрузки. Все инструменты, необходимые для построения релиза, доступны из хранилища CVS в каталоге [.filename]#src/release#. Эти инструменты предоставляют единый метод построения релизов FreeBSD. Полный релиз может быть реально построен при помощи лишь одной команды, включая создание ISO-образов, подходящих для записи на CDROM, установочных дискет и установочного каталога FTP. Эта команда называется соответствующим образом: `make release`.
+== Сборка релиза
-=== `make release`
+Сборка "релизов" FreeBSD может быть выполнена любым пользователем, имеющим быстрый компьютер и доступ к репозиторию исходного кода. (Это должно быть доступно каждому, так как мы предоставляем доступ через Subversion! Подробности см. в extref:{handbook}[разделе Subversion в Руководстве, svn].) _Единственное_ специальное требование — доступность устройства man:md[4]. Если устройство не загружено в ваше ядро, то модуль ядра должен автоматически загрузиться при выполнении man:mdconfig[8] во время этапа создания загрузочного носителя. Все необходимые инструменты для сборки релиза доступны в репозитории Subversion в [.filename]#src/release#. Эти инструменты предназначены для обеспечения единообразного способа сборки релизов FreeBSD. Полный релиз может быть собран всего одной командой, включая создание ISO-образов, пригодных для записи на CDROM или DVD, а также каталога для установки по FTP. man:release[7] полностью документирует скрипт `src/release/generate-release.sh`, который используется для сборки релиза. `generate-release.sh` является обёрткой для цели Makefile: `make release`.
-Для успешного построения релиза вы должны сначала заполнить каталог [.filename]#/usr/obj#, запустив команду `make world` или просто `make buildworld`. Цель, выполняемая для построения релиза, требует корректного задания нескольких переменных, используемых при его сборке:
+=== Сборка релиза
-* `CHROOTDIR` - Каталог, используемый в среде с изменённой корневой файловой системой при построении полного релиза.
-* `BUILDNAME` - Наименование строящегося релиза.
-* `CVSROOT` - Местонахождение CVS-хранилища.
-* `RELEASETAG` - Тэг CVS, соответствующий релизу, который вы собираетесь строить.
+man:release[7] документирует точные команды, необходимые для сборки релиза FreeBSD. Следующая последовательность команд может собрать релиз 9.2.0:
-Если у вас ещё нет доступа к локальному CVS-хранилищу, то вы можете зеркалировать одно из них при помощи extref:{handbook}[CVSup, svn]. Поставляемый sup-файл, [.filename]#/usr/shared/examples/cvsup/cvs-supfile#, может служить хорошей отправной точкой для зеркалирования хранилища CVS.
+[source, shell]
+....
+# cd /usr/src/release
+# sh generate-release.sh release/9.2.0 /local3/release
+....
-Если `RELEASETAG` опущен, то релиз будет строиться из ветки `HEAD` (известной как -CURRENT). Релизы, строящиеся из этой ветки обычно называют "снэпшотами -CURRENT".
+После выполнения этих команд все подготовленные файлы релиза будут доступны в каталоге [.filename]#/local3/release/R#.
-Для настройки построения релиза существует много других переменных Большинство из этих переменных описаны в начале файла [.filename]#src/release/Makefile#. Точная команда, служащая для построения официального релиза FreeBSD 4.7 (x86) такова:
+Файл [.filename]#Makefile# для выпуска можно разбить на несколько отдельных этапов.
-[source,shell]
-....
-make release CHROOTDIR=/local3/release \
- BUILDNAME=4.7-RELEASE \
- CVSROOT=/host/cvs/usr/home/ncvs \
- RELEASETAG=RELENG_4_7_0_RELEASE
-....
+* Создание изолированного окружения системы в отдельной иерархии каталогов с помощью "`make installworld`".
+* Извлечение из Subversion чистой версии исходного кода системы, документации и портов в иерархию сборки релиза.
+* Заполнение каталогов [.filename]#/etc# и [.filename]#/dev# в chroot-окружении.
+* Изменение корневой директории на верхний каталог иерархии сборки релиза с помощью `chroot`, чтобы усложнить влияние внешней среды на эту сборку.
+* Запуск `make world` в окружении `chroot`.
+* Сборка связанных с Kerberos бинарных файлов.
+* Сборка ядра [.filename]#GENERIC#.
+* Создание промежуточной структуры каталогов, в которой будут собираться и упаковываться бинарные дистрибутивы.
+* Сборка и установка инструментария для документации, необходимого для преобразования исходников документации (SGML) в HTML и текстовые документы, которые будут поставляться с релизом.
+* Сборка и установка непосредственно документации (руководства пользователя, учебные пособия, примечания к выпуску, списки совместимого оборудования и так далее).
+* Создание распространяемых tar-архивов с бинарными файлами и исходными кодами.
+* Создание иерархии установки FTP.
+* _(необязательно)_ Создание ISO-образов для носителей CDROM/DVD.
-[.filename]#Makefile# для релиза может быть разбит на несколько различных шагов.
-
-* Создание чистого системного окружения в отдельной иерархии каталогов по команде "`make installworld`".
-* Выгрузка из CVS чистой версии исходных текстов системы, документации и портов в иерархию для построения релиза.
-* Создание копии [.filename]#/etc# и [.filename]#/dev# в окружении с изменённым корнем файловой системы.
-* Смена корневой файловой системы на иерархию построения релиза, чтобы избежать влияния внешнего окружения на построение.
-* Выполнение `make world` в окружении с изменённой корневой файловой системой.
-* Построение бинарных файлов для работы с Kerberos.
-* Построение ядра [.filename]#GENERIC#.
-* Создание промежуточного дерева каталогов, где будут строиться бинарные файлы и формироваться дистрибутивы.
-* Построение и установка инструментов для работы с документацией, необходимых для преобразования исходных текстов документации (SGML) в формат HTML и текстовые документы, которые сопутствуют релиз.
-* Построение и установка актуальной документации (руководства пользователей, учебники, замечания к релизу, перечень аппаратной совместимости и так далее.)
-* Построение "свёрнутых" бинарных файлов, используемых на установочных дискетах.
-* Подготовка дистрибутивных архивов бинарных файлов и исходных текстов.
-* Создание загрузочного носителя и "fixit"-дискеты.
-* Создание иерархии для установки при помощи FTP.
-* _(опционально)_ Создание образов ISO для носителей CDROM/DVD.
-
-Для получения более полной информации об инфраструктуре построения релизов, пожалуйста, обратитесь к справочной странице по man:release[7].
+Для получения дополнительной информации о инфраструктуре сборки релизов, обратитесь к man:release[7].
[NOTE]
====
-Важно, чтобы из файла [.filename]#/etc/make.conf# были удалены все установки, специфичные для конкретного хоста. К примеру, будет глупо распространять бинарные файлы, построенные на системе с переменной `CPUTYPE`, указывающей на определённый тип процессора.
+Важно удалить все специфичные для сайта настройки из [.filename]#/etc/make.conf#. Например, было бы неразумно распространять бинарные файлы, собранные на системе с установленным `CPUTYPE` для конкретного процессора.
====
-=== Программное обеспечение третьих лиц ("ports")
+=== Предоставленное программное обеспечение ("порты")
-http://www.FreeBSD.org/ports[Коллекция портов FreeBSD] содержит более {numports} программных пакетов сторонних разработчиков, которые доступны для FreeBSD. За поддержку целостности дерева портов, которое может использоваться для создания бинарных пакетов, поставляемых с официальными релизами FreeBSD, отвечает `{portmgr}`.
+https://ports.FreeBSD.org[Коллекция портов FreeBSD] представляет собой набор из более чем {numports} сторонних программных пакетов, доступных для FreeBSD. `{portmgr}` отвечает за поддержание согласованного дерева портов, которое может быть использовано для создания бинарных пакетов, поставляемых с официальными выпусками FreeBSD.
-Рассмотрение работ с нашей коллекцией пакетов сторонних разработчиков при подготовке релизов выходит за рамки этого документа. Этот вопрос глубоко рассмотрен в отдельной статье, link:{releng-packages}[The Release Engineering of Third Party Packages].
+=== Релизные ISO-образы
-=== ISO с релизами
+Начиная с FreeBSD 4.4, проект FreeBSD решил выпустить все четыре образа ISO, которые ранее продавались на «официальных» дистрибутивах CDROM от _BSDi/Wind River Systems/FreeBSD Mall_. Каждый из четырёх дисков должен содержать файл [.filename]#README.TXT#, объясняющий содержимое диска, файл [.filename]#CDROM.INF#, предоставляющий метаданные для диска, чтобы man:bsdinstall[8] мог проверить и использовать содержимое, и файл [.filename]#filename.txt#, содержащий манифест диска. Этот _манифест_ можно создать простой командой:
-Начиная с FreeBSD 4.4, Проект FreeBSD принял решение распространять все четыре образа ISO, ранее продаваемые через _BSDi/Wind River Systems/FreeBSD Mall_ как "официальные" дистрибутивы на CDROM. Каждый из четырёх дисков должен содержать файл [.filename]#README.TXT#, описывающий содержимое диска, файл [.filename]#CDROM.INF#, в котором находятся мета-данные о диске для того, чтобы man:sysinstall[8] мог проверять и использовать содержимое, а также файл [.filename]#filename.txt#, содержащий перечень содержимого на диске. Этот _перечень_ может быть создан простой командой:
-
-[source,shell]
+[source, shell]
....
/stage/cdrom# find . -type f | sed -e 's/^\.\///' | sort > filename.txt
....
-Специфичные требования для каждого CD описываются ниже.
+Конкретные требования для каждого CD приведены ниже.
==== Диск 1
-Первый диск практически полностью создаётся командой `make release`. Единственным изменением, которое нужно внести в каталог [.filename]#disc1#, является добавление подкаталога [.filename]#tools#, а также перенос максимально возможного количества программных пакетов сторонних разработчиков, которые поместятся на диск. Каталог [.filename]#tools# содержит программное обеспечение, позволяющее пользователям создавать установочные дискеты из других операционных систем. Этот диск нужно сделать загрузочным, чтобы пользователям современных ПК не нужно было создавать установочные дискеты.
+Первый диск почти полностью создаётся командой `make release`. Единственные изменения, которые следует внести в каталог [.filename]#disc1#, — это добавление директории [.filename]#tools# и как можно большего количества популярных сторонних программных пакетов, которые поместятся на диск. В каталоге [.filename]#tools# содержится программное обеспечение, позволяющее пользователям создавать установочные дискеты из других операционных систем. Этот диск должен быть загрузочным, чтобы пользователям современных ПК не требовалось создавать установочные дискеты.
-Если в релиз необходимо включить специализированное ядро, то необходимо модифицировать man:sysinstall[8] и man:release[7], добавив в них инструкции по установке. Соответствующий код находится в [.filename]#src/release# и [.filename]#src/usr.sbin/sysinstall#. В частности, в [.filename]#src/usr.sbin/sysinstall# необходимо будет редактировать [.filename]#src/release/Makefile#, [.filename]#dist.c#, [.filename]#dist.h#, [.filename]#menus.c#, [.filename]#install.c# и [.filename]#Makefile#. Также может потребоваться обновить [.filename]#sysinstall.8#.
+Если требуется включить пользовательское ядро FreeBSD, необходимо обновить man:bsdinstall[8] и man:release[7], чтобы включить инструкции по установке. Соответствующий код содержится в [.filename]#src/release# и [.filename]#src/usr.sbin/bsdinstall#. В частности, потребуется обновить файл [.filename]#src/release/Makefile#, а также [.filename]#dist.c#, [.filename]#dist.h#, [.filename]#menus.c#, [.filename]#install.c# и [.filename]#Makefile# в каталоге [.filename]#src/usr.sbin/bsdinstall#. При желании можно также обновить [.filename]#bsdinstall.8#.
==== Диск 2
-Второй диск также в основном создаётся по команде `make release`. Он содержит "живую файловую систему", которую можно использовать из man:sysinstall[8] для исправления процесса установки FreeBSD. Этот диск должен быть загрузочным и содержать также упакованную копию хранилища CVS в каталоге [.filename]#CVSROOT# и демонстрационные версии коммерческого программного обеспечения в каталоге [.filename]#commerce#.
-
-==== Диски 3 и 4
-
-Оставшиеся два диска содержат дополнительные программные пакеты для FreeBSD. Они должны быть объединены в группы (кластеры), чтобы отдельный пакет и все его _зависимости_ находились на одном и том же диске. Дополнительная информация о создании этих дисков находится в статье link:{releng-package}[The Release Engineering of Third Party Packages].
+Второй диск также в основном создаётся командой `make release`. Этот диск содержит «живую файловую систему», которая может использоваться через man:bsdinstall[8] для диагностики установки FreeBSD. Этот диск должен быть загрузочным и также содержать сжатую копию репозитория CVS в директории [.filename]#CVSROOT# и демонстрационные версии коммерческого ПО в директории [.filename]#commerce#.
-==== Поддержка нескольких дисков
+==== Поддержка нескольких томов
-Sysinstall поддерживает установку пакетов с нескольких дисков. Для это нужно, чтобы на каждом диске был файл [.filename]#INDEX#, содержащий названия всех пакетов со всех дисков, с дополнительным полем, указывающем на каком диске содержится данный конкретный пакет. Также, на каждом диске, в файле [.filename]#cdrom.inf# должна быть указана переменная `CD_VOLUME` для того, чтобы sysinstall мог определить какой этой диск. Когда пользователь будет пытаться установить пакет, которого нет на текущем диске, sysinstall выдаст запрос на вставку соответствующего диска.
+Sysinstall поддерживает установку пакетов с нескольких томов. Для этого каждый диск должен содержать файл [.filename]#INDEX#, в котором перечислены все пакеты на всех томах набора, а также дополнительное поле, указывающее, на каком именно томе находится конкретный пакет. Каждый том в наборе также должен иметь установленную переменную `CD_VOLUME` в файле [.filename]#cdrom.inf#, чтобы bsdinstall мог определить, какой том является каким. Когда пользователь пытается установить пакет, которого нет на текущем диске, bsdinstall предложит ему вставить соответствующий диск.
[[distribution]]
== Распространение
[[dist-ftp]]
-=== Серверы FTP
+=== Сайты FTP
-После того, как релиз был тщательно протестирован и подготовлен к распространению, должен быть обновлён главный FTP-сервер. Все официальные общедоступные серверы FTP-серверы FreeBSD являются зеркалами главного сервера, открытого только другим серверам FTP. Этот сервер известен под именем `ftp-master`. Когда релиз готов, на сервере `ftp-master` должны быть изменены следующие строки:
+Когда выпуск тщательно протестирован и упакован для распространения, необходимо обновить главный FTP-сайт. Официальные публичные FTP-сайты FreeBSD являются зеркалами главного сервера, который доступен только другим FTP-сайтам. Этот сервер известен как `ftp-master`. Когда выпуск готов, следующие файлы должны быть изменены на `ftp-master`:
[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/#::
-Установочный каталог FTP, получаемый по команде `make release`.
+Устанавливаемый каталог FTP, полученный в результате выполнения `make release`.
[.filename]#/pub/FreeBSD/ports/arch/packages-X.Y-release/#::
-Полный комплект построенных пакетов для этого релиза.
+Полная сборка пакетов для этого выпуска.
[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/tools#::
Символическая ссылка на [.filename]#../../../tools#.
@@ -320,88 +315,44 @@ Sysinstall поддерживает установку пакетов с нес
Символическая ссылка на [.filename]#../../../ports/arch/packages-X.Y-release#.
[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso#::
-ISO-образы. Здесь "*" это [.filename]#disc1#, [.filename]#disc2# и так далее. Только если здесь есть [.filename]#disc1# и альтернативный первый установочный CD (например, обрезанная установка без оконной системы), то здесь может быть также и [.filename]#mini#.
+Образы ISO. Символ "*" обозначает [.filename]#disc1#, [.filename]#disc2# и так далее. Только если существует [.filename]#disc1# и есть альтернативный первый установочный CD (например, упрощённая установка без графической оболочки), может также присутствовать [.filename]#mini#.
-Для получения дополнительной информации о системе зеркальных FTP-серверов FreeBSD, пожалуйста, прочтите статью о extref:{hubs}[Зеркалировании FreeBSD].
+Для получения дополнительной информации об архитектуре зеркал распространения FTP-сайтов FreeBSD, пожалуйста, ознакомьтесь со статьей extref:{hubs}[Поддержка зеркал FreeBSD].
-Может пройти от нескольких часов до двух дней между тем, как обновится `ftp-master`, и на основной массе FTP-серверов 1-го уровня появится новое программное обеспечение, в зависимости от того, в тоже самое ли время пакет был загружен. Обязательно, чтобы выпускающие релиз координировали свои действия с {mirror-announce} до того, как объявлять об общедоступности нового программного обеспечения с серверов FTP. В идеальном случае набор пакетов к релизу должен быть загружен по крайней мере за четыре дня до момента выпуска релиза. Релиз должен быть загружен в промежутке от 24 до 48 часов до момента выхода запланированного релиза с выключенными полномочиями "other". Это позволит зеркалирующим серверам сгрузить его, но никто не сможет получить его с зеркальных серверов. В момент выхода релиза должно быть послано сообщение в адрес {mirror-announce}, говорящее о том, что релиз выпущен и наступило время для открытия доступа на зеркальных серверах. Обязательно вместе со временем укажите и часовой пояс, например, относительно GMT.
+Может потребоваться от нескольких часов до двух дней после обновления `ftp-master`, прежде чем большинство FTP-сайтов Tier-1 получат новое программное обеспечение, в зависимости от того, был ли загружен набор пакетов одновременно. Крайне важно, чтобы инженеры по выпуску скоординировались с {mirror-announce} перед объявлением общей доступности нового программного обеспечения на FTP-сайтах. В идеале набор пакетов для выпуска должен быть загружен как минимум за четыре дня до дня выпуска. Выпускные файлы должны быть загружены за 24–48 часов до запланированного времени выпуска с отключёнными разрешениями для "других" пользователей. Это позволит зеркальным сайтам загрузить их, но широкая публика не сможет скачать их с зеркальных сайтов. Письмо должно быть отправлено в {mirror-announce} в момент публикации выпускных файлов, уведомляя о том, что выпуск подготовлен, и указывая время, когда зеркальные сайты должны начать разрешать доступ. Обязательно укажите часовой пояс для указанного времени, например, относительно GMT.
[[dist-cdrom]]
-=== Тиражирование CD-ROM
+=== Репликация CD-ROM
-Вскоре появится: Советы по передаче ISO-образов FreeBSD на тиражирование и применяемые меры по контролю качества.
+Скоро: Советы по отправке ISO-образов FreeBSD репликатору и меры по обеспечению качества.
[[extensibility]]
== Расширяемость
-Хотя FreeBSD представляет собой законченную операционную систему, ничего не заставляет вас использовать систему только в том виде, который приготовлен нами для распространения. Мы попытались спроектировать систему максимально расширяемой, чтобы она могла выполнять роль платформы, на основе которой можно строить другие коммерческие продукты. Единственным "правилом", которое мы налагаем, является настоятельная рекомендация документировать улучшения, вносимые вами в дистрибутив FreeBSD с нетривиальными изменениями! Сообщество FreeBSD может помогать только пользователям того программного обеспечения, которое распространяем мы. Мы определённо приветствуем улучшения в форме, например, инструментов установки и администрирования, но не можем отвечать на вопросы о них.
-
-=== Создание модифицированных загрузочных дискет
-
-Во многих местах имеются сложные условия, которые требуют размещения дополнительных модулей ядра или пользовательских инструментов на установочные дискеты. "Быстрым и неаккуратным" способом сделать это является изменение промежуточного каталога в существующей иерархии при выполнении `make release`:
-
-* Примените патчи или добавьте дополнительные файлы в каталог построения релиза с изменённых корнем файловой системы.
-* `rm ${CHROOTDIR}/usr/obj/usr/src/release/release.[59]`
-* перестройте man:sysinstall[8], ядро и остальные части системы, которые коснулись ваши изменения.
-* `chroot ${CHROOTDIR} ./mk floppies`
+Хотя FreeBSD представляет собой законченную операционную систему, ничто не обязывает вас использовать её именно в том виде, в каком мы упаковали её для распространения. Мы постарались разработать систему максимально расширяемой, чтобы она могла служить платформой для создания других коммерческих продуктов. Единственное «правило», которое у нас есть на этот счёт, — если вы собираетесь распространять FreeBSD с существенными изменениями, мы рекомендуем документировать ваши улучшения! Сообщество FreeBSD может оказывать поддержку только пользователям того программного обеспечения, которое мы предоставляем. Мы, безусловно, приветствуем инновации, такие как продвинутые инструменты установки и администрирования, но не можем отвечать на вопросы о них.
-Дискеты нового релиза будут находиться в [.filename]#${CHROOTDIR}/R/stage/floppies#.
+=== Скриптинг `bsdinstall`
-Либо может быть вызвана цель [.filename]#boot.flp# построения или скрипт создания файловой системы, [.filename]#src/release/scripts/doFS.sh#, которые может быть вызван напрямую.
-
-Локальные патчи могут быть также приложены к построению релиза при помощи задания переменной `LOCAL_PATCH` при выполнении `make release`.
-
-=== Скрипты `sysinstall`
-
-Инструмент установки и настройки системы FreeBSD, man:sysinstall[8], может работать по сценарию, полезному для автоматизированной установки в больших компаниях. Эта функциональность может использоваться совместно с технологией Intel(R) PXE[12] для первоначальной установки систем из сети, или с модифицированными загрузочными дискетами со скриптами sysinstall. Пример скрипта для sysinstall доступен в дереве CVS в виде файла [.filename]#src/release/sysinstall/install.cfg#.
+Инструмент установки и настройки системы FreeBSD, man:bsdinstall[8], может быть настроен для автоматизированной установки на крупных площадках. Эта функциональность может использоваться совместно с Intel(R) PXE footnote:[extref:{handbook}[Запуск системы по сети (PXE) без использования локальных накопителей, network-diskless]] для загрузки систем по сети.
[[lessons-learned]]
-== Уроки, извлечённые из FreeBSD 4.4
+== Уроки, извлеченные из FreeBSD 4.4
-Формально процесс подготовки релиза для 4.4 начался 1 августа 2001 года. После этой даты все без исключения изменения в ветке `RELENG_4` FreeBSD подтверждались `{re}`. Первый предварительный релиз для архитектуры x86 был выпущен 16 августа, за ним выходило ещё 4 предварительных релиза, и всё закончилось 18 августа выпуском окончательного релиза. Руководитель службы безопасности очень плотно занимался процессом выпуска в последнюю неделю, так как в предыдущих предварительных релизах были найдены проблемы, касающиеся информационной безопасности. Чуть более чем за месяц в адрес `{re}` поступило более _500_ писем.
+Процесс разработки релиза 4.4 официально начался 1 августа 2001 года. После этой даты все коммиты в ветку `RELENG_4` FreeBSD должны были быть явно одобрены `{re}`. Первый релиз-кандидат для архитектуры x86 был выпущен 16 августа, за ним последовали ещё 4 релиз-кандидата, что привело к финальному релизу 18 сентября. Сотрудник по безопасности был очень вовлечён в последнюю неделю процесса, так как несколько проблем безопасности было обнаружено в ранних релиз-кандидатах. Всего за чуть более месяца было отправлено более _500_ писем `{re}`.
-Сообщество наших пользователей весьма чётко показало, что безопасность и стабильность релиза FreeBSD не должна приноситься в жертву любым назначенным срокам окончания работ или планируемым датам выхода релиза. Проект FreeBSD за время своего существования значительно вырос, и никогда ранее необходимость в стандартизации процедур подготовки релизов не стояла так остро. Это стало ещё более важно, когда FreeBSD была перенесена на новые аппаратные платформы.
+Наше сообщество пользователей ясно дало понять, что безопасность и стабильность выпуска FreeBSD не должны приноситься в жертву из-за самостоятельно установленных сроков или целевых дат выпуска. Проект FreeBSD значительно вырос за время своего существования, и необходимость стандартизированных процедур управления выпусками никогда не была столь очевидной. Это станет ещё более важным по мере переноса FreeBSD на новые платформы.
[[future]]
-== Направления будущих работ
+== Перспективы развития
-Нашим работам по подготовке релизов жизненно важно расти вместе с увеличением количества пользователей системы. Вместе с этим мы очень плотно работаем над документированием действий, выполняемых при выпуске релизов FreeBSD.
+Для обеспечения масштабирования наших процессов релиз-инжиниринга с растущей пользовательской базой мы прилагаем значительные усилия по документированию процедур, связанных с созданием выпусков FreeBSD.
-* _Параллелизм_ - некоторые этапы построения релиза на самом деле выполнять параллельно "затруднительно". Большинство выполняемых задач весьма интенсивно работают с I/O, так что для ускорения процесса `make release` наличие нескольких высокоскоростных дисков гораздо более важно, чем использование нескольких процессоров. Если для различных иерархий в man:chroot[2]-окружении используется несколько дисков, то извлечение из CVS деревьев [.filename]#ports# и [.filename]#doc# может выполняться одновременно с командой `make world` на другом диске. Использование `RAID`-решений (аппаратных или программных) может значительно сократить общее время построения.
-* _Кроссплатформенное построение релизов_ - Построить релиз для IA-64 или Alpha на x86-оборудовании? `make TARGET=ia64 release`.
-* _Тестирование_ - Нам нужна улучшенная автоматизированная система тестирования корректности для FreeBSD.
-* _Инструменты установки_ - Наша программа установки давно пережила свой век. В разработке находятся несколько проектов, которые должны дать улучшенную технологию установки. Одним из таких проектов был libh, целью которого было создание новой интеллектуальной технологии работы с пакетами и программы установки с GUI.
+* _Параллелизм_ — Некоторые этапы сборки релиза действительно "тривиально параллельны". Большинство задач очень интенсивно используют ввод-вывод, поэтому наличие нескольких высокоскоростных дисков важнее, чем использование нескольких процессоров для ускорения процесса `make release`. Если в среде man:chroot[2] разные иерархии размещены на разных дисках, то выгрузка CVS для деревьев [.filename]#ports# и [.filename]#doc# может происходить одновременно с выполнением `make world` на другом диске. Использование RAID (аппаратного или программного) может значительно сократить общее время сборки.
+* _Кросс-сборка релизов_ - Сборка релиза для IA-64 или Alpha на x86 оборудовании? `make TARGET=ia64 release`.
+* _Регрессионное тестирование_ - Нам необходимы более совершенные автоматизированные тесты на корректность для FreeBSD.
+* _Инструменты установки_ - Наша программа установки уже давно вышла за рамки своего первоначального срока службы. В разработке находится несколько проектов, призванных обеспечить более продвинутый механизм установки. Проект libh был одним из таких проектов, целью которого было создание интеллектуальной новой системы управления пакетами и программы установки с графическим интерфейсом.
[[ackno]]
== Благодарности
-Я рад поблагодарить Джордана Хаббарда (Jordan Hubbard) за то, что он дал мне возможность взять под свою ответственность некоторые части процесса подготовки релиза FreeBSD 4.4, а также за все годы его работы, сделавшие FreeBSD такой, какой она является сейчас. Конечно, релиз не был бы возможен без той работы, которую проделали `{asami}`, `{steve}`, `{bmah}`, `{nik}`, `{obrien}`, `{kris}`, `{jhb}` и остальные члены сообщества разработчиков FreeBSD. Я также рад выразить благодарность `{rgrimes}` и `{phk}`, а также остальным, работавшим над инструментами подготовки релизов в первые годы существования FreeBSD. Эта статья была также написана под впечатлением документации по подготовке релизов от CSRG[13], NetBSD Project[10] и замечаний Джона Балдвина (John Baldwin) по предлагаемому процессу подготовки релизов[11].
-
-[[biblio]]
-== Справочная литература
-
-(1) CVS - Concurrent Versions System http://www.cvshome.org[http://www.cvshome.org]
-
-(2) CVSup - The CVS-Optimized General Purpose Network File Distribution System http://www.polstra.com/projects/freeware/CVSup[http://www.polstra.com/projects/freeware/CVSup]
-
-(3) http://pointyhat.FreeBSD.org[http://pointyhat.FreeBSD.org]
-
-(4) Коллекция портов FreeBSD http://www.FreeBSD.org/ports[http://www.FreeBSD.org/ports]
-
-(5) extref:{contributors}[Коммиттеры FreeBSD, staff-committers]
-
-(6) Правление FreeBSD link:https://www.FreeBSD.org/administration/#t-core[https://www.FreeBSD.org/administration/#t-core]
-
-(7) extref:{handbook}[Руководство FreeBSD]
-
-(8) GNATS: The GNU Bug Tracking System http://www.gnu.org/software/gnats[http://www.gnu.org/software/gnats]
-
-(9) Статистика FreeBSD PR FreeBSD PR Statistics http://www.FreeBSD.org/prstats/[http://www.FreeBSD.org/prstats/]
-
-(10) NetBSD Developer Documentation: Release Engineering http://www.NetBSD.org/developers/releng/index.html[http://www.NetBSD.org/developers/releng/index.html]
-
-(11) John Baldwin's FreeBSD Release Engineering Proposal http://people.FreeBSD.org/\~jhb/docs/releng.txt[http://people.FreeBSD.org/~jhb/docs/releng.txt]
-
-(12) PXE Jumpstart Guide link:{pxe}[PXE Guide]
-
-(13) Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic: http://docs.FreeBSD.org/44doc/papers/releng.html[The Release Engineering of 4.3BSD]
+Я хотел бы поблагодарить Джордана Хаббарда за предоставленную мне возможность взять на себя часть обязанностей по управлению выпусками для FreeBSD 4.4, а также за всю его работу на протяжении многих лет, которая сделала FreeBSD такой, какая она есть сегодня. Конечно, выпуск не состоялся бы без всей работы, связанной с выпуском, выполненной `{asami}`, `{steve}`, `{bmah}`, `{nik}`, `{obrien}`, `{kris}`, `{jhb}` и остальным сообществом разработчиков FreeBSD. Я также хотел бы поблагодарить `{rgrimes}`, `{phk}` и других, кто работал над инструментами управления выпусками в самые ранние дни FreeBSD. На эту статью повлияли документы по управлению выпусками от CSRG footnote:[Маршалл Кирк МакКузик, Майкл Дж. Карелс и Кит Бостик: link:http://docs.FreeBSD.org/44doc/papers/releng.html[Управление выпусками 4.3BSD]], проекта NetBSD footnote:[Документация разработчика NetBSD: Управление выпусками http://www.NetBSD.org/developers/releng/index.html] и заметки Джона Болдуина с предложениями по процессу управления выпусками. footnote:[Предложение Джона Болдуина по управлению выпусками FreeBSD https://people.FreeBSD.org/~jhb/docs/releng.txt]
diff --git a/documentation/content/ru/articles/releng/_index.po b/documentation/content/ru/articles/releng/_index.po
new file mode 100644
index 0000000000..f970a926cf
--- /dev/null
+++ b/documentation/content/ru/articles/releng/_index.po
@@ -0,0 +1,1596 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-24 18:56+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesreleng_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "В этом документе описывается подход, ранее использовавшийся командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/articles/releng/_index.adoc:1
+#, no-wrap
+msgid "Legacy FreeBSD Release Engineering"
+msgstr "Устаревшая разработка релизов FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/releng/_index.adoc:12
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr "Подготовка релизов FreeBSD"
+
+#. 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 ""
+"Этот документ устарел и не точно описывает текущие процедуры выпуска релизов "
+"команды FreeBSD Release Engineering. Он сохранен в исторических целях. "
+"Текущие процедуры, используемые командой FreeBSD Release Engineering, "
+"доступны в статье extref:{freebsd-releng}[FreeBSD Release Engineering]."
+
+#. 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 ""
+"В этом документе описывается подход, используемый командой разработки "
+"релизов FreeBSD для создания релизов операционной системы FreeBSD "
+"производственного качества. Подробно излагается методология, применяемая для "
+"официальных выпусков FreeBSD, а также описываются инструменты, доступные "
+"тем, кто заинтересован в создании собственных релизов FreeBSD для "
+"корпоративного внедрения или использования в коммерческой деятельности."
+
+#. 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 ""
+"Разработка FreeBSD — это очень открытый процесс. FreeBSD создается благодаря "
+"вкладу тысяч людей по всему миру. Проект FreeBSD предоставляет доступ к "
+"Subversion footnote:[Subversion, http://subversion.apache.org] для широкой "
+"публики, чтобы другие могли просматривать сообщения журнала, различия "
+"(патчи) между ветками разработки и другие улучшения производительности, "
+"которые предоставляет система управления исходным кодом. Это значительно "
+"помогло привлечь больше талантливых разработчиков в FreeBSD. Однако, я "
+"думаю, все согласятся, что хаос быстро воцарился бы, если бы право записи в "
+"основной репозиторий было открыто для всех в Интернете. Поэтому только "
+"«избранная» группа из почти 300 человек имеет право записи в репозиторий "
+"Subversion. Эти extref:{contributors}[коммиттеры FreeBSD, staff-"
+"committers]footnote:[extref:{contributors}[коммиттеры FreeBSD, staff-"
+"committers]] обычно являются людьми, которые выполняют основную часть "
+"разработки FreeBSD. Избранная группа разработчиков — link:https://"
+"www.FreeBSD.org/administration/#t-core[Core Team]footnote:[link:https://"
+"www.FreeBSD.org/administration/#t-core[Core Team FreeBSD]] — обеспечивает "
+"некоторый уровень руководства проектом."
+
+#. 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 ""
+"Быстрый темп разработки `FreeBSD` делает основную ветку разработки "
+"непригодной для повседневного использования широкой публикой. В частности, "
+"требуются усилия по стабилизации для доведения системы разработки до релиза "
+"производственного качества. Для решения этого конфликта разработка "
+"продолжается по нескольким параллельным направлениям. Основная ветка "
+"разработки — это _HEAD_ или _trunk_ нашего дерева Subversion, известная как "
+"\"FreeBSD-CURRENT\" или сокращённо \"-CURRENT\"."
+
+#. 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 ""
+"Набор более стабильных ветвей поддерживается под названием \"FreeBSD-"
+"STABLE\" или сокращённо \"-STABLE\". Все ветви находятся в главном хранилище "
+"Subversion, которое поддерживается проектом FreeBSD. FreeBSD-CURRENT — это "
+"\"передний край\" разработки FreeBSD, куда сначала попадают все новые "
+"изменения. FreeBSD-STABLE — это ветвь разработки, на основе которой "
+"выпускаются основные релизы. Изменения попадают в эту ветвь с другой "
+"скоростью и с общим предположением, что они сначала попали в FreeBSD-CURRENT "
+"и были тщательно протестированы сообществом пользователей."
+
+#. 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 ""
+"Термин _stable_ в названии ветки относится к предполагаемой стабильности "
+"бинарного интерфейса приложений (ABI), которую гарантирует проект. Это "
+"означает, что пользовательское приложение, скомпилированное на более старой "
+"версии системы из той же ветки, будет работать на более новой системе из той "
+"же ветки. Стабильность ABI значительно улучшилась по сравнению с предыдущими "
+"выпусками. В большинстве случаев бинарные файлы со старых систем _STABLE_ "
+"работают без изменений на более новых системах, включая __HEAD__, при "
+"условии, что не используются интерфейсы управления системой."
+
+#. 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 ""
+"В промежуточный период между выпусками еженедельные снимки состояния системы "
+"автоматически создаются сборщиками FreeBSD Project и доступны для загрузки "
+"по адресу `https:/download.FreeBSD.org/snapshots/`. Широкое распространение "
+"бинарных снимков выпусков, а также склонность нашего сообщества "
+"пользователей следить за разработкой -STABLE с помощью Subversion и команды "
+"\"`make buildworld`\" footnote:[extref:{handbook}[Пересборка world, "
+"makeworld]] помогает поддерживать FreeBSD-STABLE в очень надежном состоянии "
+"даже до того, как активизируются мероприятия по обеспечению качества перед "
+"основным выпуском."
+
+#. 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 ""
+"Помимо снимков установочных ISO, также предоставляются еженедельные образы "
+"виртуальных машин для использования с VirtualBox, qemu или другим популярным "
+"эмуляционным программным обеспечением. Образы виртуальных машин можно "
+"загрузить с `https://download.FreeBSD.org/snapshots/VM-IMAGES/`."
+
+#. 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 ""
+"Образы виртуальных машин сжаты с помощью man:xz[1] и занимают примерно 150 "
+"МБ, а при подключении к виртуальной машине содержат разреженную файловую "
+"систему размером 10 ГБ."
+
+#. 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 ""
+"Отчеты об ошибках и запросы функций постоянно отправляются пользователями в "
+"течение цикла выпуска. Сообщения о проблемах вносятся в нашу базу данных "
+"Bugzilla через веб-интерфейс, доступный по адресу https://www.freebsd.org/"
+"support/bugreports/[https://www.freebsd.org/support/bugreports/]."
+
+#. 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 ""
+"Для обслуживания наиболее консервативных пользователей, начиная с FreeBSD "
+"4.3, были введены индивидуальные ветки релизов. Эти ветки создаются "
+"незадолго до выпуска финального релиза. После выхода релиза на ветку "
+"вносятся только самые критические исправления безопасности и дополнения. "
+"Помимо обновлений исходного кода через Subversion, доступны бинарные патч-"
+"наборы для поддержания актуальности систем на ветках _releng/X.Y_."
+
+#. 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 "crossref:releng[release-proc, Release Process]"
+msgstr "crossref:releng[release-proc, Процесс выпуска релиза]"
+
+#. 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 "crossref:releng[release-build, Release Building]"
+msgstr "crossref:releng[release-build, Сборка релиза]"
+
+#. 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 "crossref:releng[extensibility, Extensibility]"
+msgstr "crossref:releng[extensibility, Расширяемость]"
+
+#. 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 "crossref:releng[lessons-learned, Lessons Learned from FreeBSD 4.4]"
+msgstr "crossref:releng[lessons-learned, Уроки, извлеченные из FreeBSD 4.4]"
+
+#. 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 "Некоторые уроки, извлеченные в процессе выпуска FreeBSD 4.4."
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:120
+#, no-wrap
+msgid "crossref:releng[future, Future Directions]"
+msgstr "crossref:releng[future, Перспективы развития]"
+
+#. 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 ""
+"Новые выпуски FreeBSD выходят из ветки -STABLE примерно с интервалом в "
+"четыре месяца. Процесс выпуска FreeBSD начинает набирать обороты за 70-80 "
+"дней до предполагаемой даты выпуска, когда инженер выпуска отправляет "
+"электронное письмо в списки рассылки разработчиков, напоминая им, что у них "
+"осталось всего 15 дней для интеграции новых изменений до заморозки кода. В "
+"это время многие разработчики выполняют так называемые \"MFC-проверки\"."
+
+#. 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 ""
+"MFC означает \"Merge From CURRENT\" и описывает процесс переноса "
+"проверенного изменения из нашей ветки разработки -CURRENT в ветку -STABLE. "
+"Политика проекта требует, чтобы любое изменение сначала было применено к "
+"основной ветке, а затем перенесено в ветки -STABLE после достаточного "
+"внешнего тестирования пользователями -CURRENT (ожидается, что разработчики "
+"тщательно проверят изменение перед внесением в -CURRENT, но невозможно для "
+"одного человека проверить все варианты использования универсальной "
+"операционной системы). Минимальный срок для MFC составляет 3 дня, который "
+"обычно используется только для тривиальных или критических исправлений "
+"ошибок."
+
+#. 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 ""
+"За шестьдесят дней до предполагаемого релиза репозиторий исходного кода "
+"переходит в режим «заморозки кода». В этот период все коммиты в ветку "
+"-STABLE должны быть одобрены `{re}`. Процесс утверждения технически "
+"обеспечивается предкоммитным хуком. В этот период допускаются следующие виды "
+"изменений:"
+
+#. 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 ""
+"Вскоре после начала заморозки кода создаётся образ _BETA1_ и выпускается для "
+"широкого тестирования. В период заморозки кода не реже чем раз в две недели "
+"выпускается как минимум один бета-образ или кандидат в релизы, пока не будет "
+"готов финальный выпуск. В дни, предшествующие финальному релизу, команда "
+"разработки выпусков постоянно взаимодействует с командой security-officer, "
+"сопровождающими документации и сопровождающими портов, чтобы убедиться, что "
+"все необходимые компоненты для успешного релиза доступны."
+
+#. 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 ""
+"После того, как качество BETA-образов становится достаточно "
+"удовлетворительным и не планируется крупных и потенциально рискованных "
+"изменений, создается ветка релиза, и образы _Release Candidate_ (RC) "
+"собираются из ветки релиза, вместо BETA-образов из ветки STABLE. Также "
+"снимается заморозка изменений в ветке STABLE, а ветка релиза переходит в "
+"режим \"жесткой заморозки кода\", когда становится значительно сложнее "
+"обосновать новые изменения в системе, за исключением исправления серьезных "
+"ошибок или проблем безопасности."
+
+#. 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 ""
+"Когда несколько образов BETA станут доступны для широкого тестирования и все "
+"основные проблемы будут устранены, можно приступать к финальной \"доводке\" "
+"выпуска."
+
+#. 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 ""
+"Во всех примерах ниже `$FSVN` указывает на расположение репозитория "
+"Subversion FreeBSD, `svn+ssh://svn.FreeBSD.org/base/`."
+
+#. 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 ""
+"Расположение веток FreeBSD в Subversion описано в extref:{committers-guide}"
+"[Руководстве коммиттера, subversion-primer-base-layout]. Первым шагом в "
+"создании ветки является определение ревизии исходников `stable/_X_`, от "
+"которой вы хотите сделать _ответвление_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:173
+#, no-wrap
+msgid "# svn log -v $FSVN/stable/9\n"
+msgstr "# svn log -v $FSVN/stable/9\n"
+
+#. 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 "# svn cp $FSVN/stable/9@REVISION $FSVN/releng/9.2\n"
+
+#. 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 "# svn co $FSVN/releng/9.2 src\n"
+
+#. 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 ""
+"Создание ветки `releng` и тегов `release` выполняется командой link:https://"
+"www.FreeBSD.org/administration/#t-re[Release Engineering Team]."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:194
+#, no-wrap
+msgid "FreeBSD Development Branch"
+msgstr "Ветка разработки FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:194
+#, no-wrap
+msgid "branches-head.png"
+msgstr "branches-head.png"
+
+#. 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 "Ветка STABLE FreeBSD 3.x"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:196
+#, no-wrap
+msgid "branches-releng3.png"
+msgstr "branches-releng3.png"
+
+#. 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 "Ветка FreeBSD 4.x STABLE"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:198
+#, no-wrap
+msgid "branches-releng4.png"
+msgstr "branches-releng4.png"
+
+#. 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 "Ветка STABLE FreeBSD 5.x"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:200
+#, no-wrap
+msgid "branches-releng5.png"
+msgstr "branches-releng5.png"
+
+#. 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 "Ветка FreeBSD 6.x STABLE"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:202
+#, no-wrap
+msgid "branches-releng6.png"
+msgstr "branches-releng6.png"
+
+#. 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 "Ветка FreeBSD 7.x STABLE"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:204
+#, no-wrap
+msgid "branches-releng7.png"
+msgstr "branches-releng7.png"
+
+#. 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 "Ветка FreeBSD 8.x STABLE"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:206
+#, no-wrap
+msgid "branches-releng8.png"
+msgstr "branches-releng8.png"
+
+#. 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 "Ветка FreeBSD 9.x STABLE"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:208
+#, no-wrap
+msgid "branches-releng9.png"
+msgstr "branches-releng9.png"
+
+#. 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 ""
+"Перед тем как финальный выпуск может быть помечен, собран и выпущен, "
+"следующие файлы должны быть изменены, чтобы отражать корректную версию "
+"FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:216
+msgid "[.filename]#doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml#"
+msgstr "[.filename]#doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:217
+msgid "[.filename]#doc/en_US.ISO8859-1/books/porters-handbook/book.xml#"
+msgstr "[.filename]#doc/en_US.ISO8859-1/books/porters-handbook/book.xml#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:218
+msgid "[.filename]#doc/en_US.ISO8859-1/htdocs/cgi/ports.cgi#"
+msgstr "[.filename]#doc/en_US.ISO8859-1/htdocs/cgi/ports.cgi#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:219
+msgid "[.filename]#ports/Tools/scripts/release/config#"
+msgstr "[.filename]#ports/Tools/scripts/release/config#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:220
+msgid "[.filename]#doc/shared/xml/freebsd.ent#"
+msgstr "[.filename]#doc/shared/xml/freebsd.ent#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:221
+msgid "[.filename]#src/Makefile.inc1#"
+msgstr "[.filename]#src/Makefile.inc1#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:222
+msgid "[.filename]#src/UPDATING#"
+msgstr "[.filename]#src/UPDATING#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:223
+msgid "[.filename]#src/gnu/usr.bin/groff/tmac/mdoc.local#"
+msgstr "[.filename]#src/gnu/usr.bin/groff/tmac/mdoc.local#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:224
+msgid "[.filename]#src/release/Makefile#"
+msgstr "[.filename]#src/release/Makefile#"
+
+#. 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 "[.filename]#src/release/doc/en_US.ISO8859-1/shared/xml/release.dsl#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:226
+msgid "[.filename]#src/release/doc/shared/examples/Makefile.relnotesng#"
+msgstr "[.filename]#src/release/doc/shared/examples/Makefile.relnotesng#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:227
+msgid "[.filename]#src/release/doc/shared/xml/release.ent#"
+msgstr "[.filename]#src/release/doc/shared/xml/release.ent#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:228
+msgid "[.filename]#src/sys/conf/newvers.sh#"
+msgstr "[.filename]#src/sys/conf/newvers.sh#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:229
+msgid "[.filename]#src/sys/sys/param.h#"
+msgstr "[.filename]#src/sys/sys/param.h#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:230
+msgid "[.filename]#src/usr.sbin/pkg_install/add/main.c#"
+msgstr "[.filename]#src/usr.sbin/pkg_install/add/main.c#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:231
+msgid "[.filename]#doc/en_US.ISO8859-1/htdocs/search/opensearch/man.xml#"
+msgstr "[.filename]#doc/en_US.ISO8859-1/htdocs/search/opensearch/man.xml#"
+
+#. 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 ""
+"Заметки о выпуске и файлы с опечатками также необходимо адаптировать для "
+"нового выпуска (в ветке выпуска) и соответствующим образом обрезать (в ветке "
+"stable/current):"
+
+#. 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 "[.filename]#src/release/doc/en_US.ISO8859-1/relnotes/common/new.xml#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:236
+msgid "[.filename]#src/release/doc/en_US.ISO8859-1/errata/article.xml#"
+msgstr "[.filename]#src/release/doc/en_US.ISO8859-1/errata/article.xml#"
+
+#. 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://ports.FreeBSD.org] This information is currently "
+"kept in [.filename]#src/usr.sbin/bsdinstall/dist.c#."
+msgstr ""
+"В Sysinstall следует добавить информацию о количестве доступных портов и "
+"объеме дискового пространства, необходимого для коллекции портов. footnote:"
+"[Коллекция портов FreeBSD https://ports.FreeBSD.org] В настоящее время эта "
+"информация хранится в [.filename]#src/usr.sbin/bsdinstall/dist.c#."
+
+#. 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 ""
+"После сборки выпуска следует обновить ряд файлов, чтобы объявить о выпуске. "
+"Эти файлы находятся относительно `head/` в поддереве `doc/` Subversion."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:245
+msgid "[.filename]#share/images/articles/releng/branches-relengX.pic#"
+msgstr "[.filename]#share/images/articles/releng/branches-relengX.pic#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:246
+msgid "[.filename]#head/shared/xml/release.ent#"
+msgstr "[.filename]#head/shared/xml/release.ent#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:247
+msgid "[.filename]#en_US.ISO8859-1/htdocs/releases/*#"
+msgstr "[.filename]#en_US.ISO8859-1/htdocs/releases/*#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:248
+msgid "[.filename]#en_US.ISO8859-1/htdocs/releng/index.xml#"
+msgstr "[.filename]#en_US.ISO8859-1/htdocs/releng/index.xml#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:249
+msgid "[.filename]#share/xml/news.xml#"
+msgstr "[.filename]#share/xml/news.xml#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:251
+msgid "Additionally, update the \"BSD Family Tree\" file:"
+msgstr "Кроме того, обновите файл \"Генеалогическое древо BSD\":"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:253
+msgid "[.filename]#src/shared/misc/bsd-family-tree#"
+msgstr "[.filename]#src/shared/misc/bsd-family-tree#"
+
+#. 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 ""
+"Когда финальный выпуск будет готов, следующая команда создаст тег `release/"
+"9.2.0`."
+
+#. 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 "# svn cp $FSVN/releng/9.2 $FSVN/release/9.2.0\n"
+
+#. 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 ""
+"Менеджеры документации и портов ответственны за добавление тега `tags/"
+"RELEASE_9_2_0` в соответствующие деревья."
+
+#. 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 ""
+"Когда команда Subversion `svn cp` используется для создания __тега релиза "
+"(release tag)__, это идентифицирует исходный код на определённый момент "
+"времени. Создавая теги, мы гарантируем, что будущие сборщики релизов всегда "
+"смогут использовать тот же исходный код, который использовался для создания "
+"официальных релизов проекта FreeBSD."
+
+#. 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 ""
+"Сборка \"релизов\" FreeBSD может быть выполнена любым пользователем, имеющим "
+"быстрый компьютер и доступ к репозиторию исходного кода. (Это должно быть "
+"доступно каждому, так как мы предоставляем доступ через Subversion! "
+"Подробности см. в extref:{handbook}[разделе Subversion в Руководстве, svn].) "
+"_Единственное_ специальное требование — доступность устройства man:md[4]. "
+"Если устройство не загружено в ваше ядро, то модуль ядра должен "
+"автоматически загрузиться при выполнении man:mdconfig[8] во время этапа "
+"создания загрузочного носителя. Все необходимые инструменты для сборки "
+"релиза доступны в репозитории Subversion в [.filename]#src/release#. Эти "
+"инструменты предназначены для обеспечения единообразного способа сборки "
+"релизов FreeBSD. Полный релиз может быть собран всего одной командой, "
+"включая создание ISO-образов, пригодных для записи на CDROM или DVD, а также "
+"каталога для установки по FTP. man:release[7] полностью документирует скрипт "
+"`src/release/generate-release.sh`, который используется для сборки релиза. "
+"`generate-release.sh` является обёрткой для цели Makefile: `make release`."
+
+#. 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 ""
+"man:release[7] документирует точные команды, необходимые для сборки релиза "
+"FreeBSD. Следующая последовательность команд может собрать релиз 9.2.0:"
+
+#. 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 ""
+"# cd /usr/src/release\n"
+"# sh generate-release.sh release/9.2.0 /local3/release\n"
+
+#. 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 ""
+"После выполнения этих команд все подготовленные файлы релиза будут доступны "
+"в каталоге [.filename]#/local3/release/R#."
+
+#. 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 ""
+"Файл [.filename]#Makefile# для выпуска можно разбить на несколько отдельных "
+"этапов."
+
+#. 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 ""
+"Создание изолированного окружения системы в отдельной иерархии каталогов с "
+"помощью \"`make installworld`\"."
+
+#. 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 ""
+"Извлечение из Subversion чистой версии исходного кода системы, документации "
+"и портов в иерархию сборки релиза."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:299
+msgid ""
+"Population of [.filename]#/etc# and [.filename]#/dev# in the chrooted "
+"environment."
+msgstr ""
+"Заполнение каталогов [.filename]#/etc# и [.filename]#/dev# в chroot-"
+"окружении."
+
+#. 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 ""
+"Изменение корневой директории на верхний каталог иерархии сборки релиза с "
+"помощью `chroot`, чтобы усложнить влияние внешней среды на эту сборку."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:301
+msgid "`make world` in the chrooted environment."
+msgstr "Запуск `make world` в окружении `chroot`."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:302
+msgid "Build of Kerberos-related binaries."
+msgstr "Сборка связанных с Kerberos бинарных файлов."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:303
+msgid "Build [.filename]#GENERIC# kernel."
+msgstr "Сборка ядра [.filename]#GENERIC#."
+
+#. 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 ""
+"Сборка и установка инструментария для документации, необходимого для "
+"преобразования исходников документации (SGML) в HTML и текстовые документы, "
+"которые будут поставляться с релизом."
+
+#. 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 ""
+"Создание распространяемых tar-архивов с бинарными файлами и исходными кодами."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:308
+msgid "Create FTP installation hierarchy."
+msgstr "Создание иерархии установки FTP."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:309
+msgid "_(optionally)_ Create ISO images for CDROM/DVD media."
+msgstr "_(необязательно)_ Создание ISO-образов для носителей CDROM/DVD."
+
+#. 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 ""
+"Для получения дополнительной информации о инфраструктуре сборки релизов, "
+"обратитесь к man:release[7]."
+
+#. 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 ""
+"Важно удалить все специфичные для сайта настройки из [.filename]#/etc/"
+"make.conf#. Например, было бы неразумно распространять бинарные файлы, "
+"собранные на системе с установленным `CPUTYPE` для конкретного процессора."
+
+#. 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://ports.FreeBSD.org[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 ""
+"https://ports.FreeBSD.org[Коллекция портов FreeBSD] представляет собой набор "
+"из более чем {numports} сторонних программных пакетов, доступных для "
+"FreeBSD. `{portmgr}` отвечает за поддержание согласованного дерева портов, "
+"которое может быть использовано для создания бинарных пакетов, поставляемых "
+"с официальными выпусками FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:323
+#, no-wrap
+msgid "Release ISOs"
+msgstr "Релизные ISO-образы"
+
+#. 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 ""
+"Начиная с FreeBSD 4.4, проект FreeBSD решил выпустить все четыре образа ISO, "
+"которые ранее продавались на «официальных» дистрибутивах CDROM от _BSDi/Wind "
+"River Systems/FreeBSD Mall_. Каждый из четырёх дисков должен содержать файл "
+"[.filename]#README.TXT#, объясняющий содержимое диска, файл "
+"[.filename]#CDROM.INF#, предоставляющий метаданные для диска, чтобы "
+"man:bsdinstall[8] мог проверить и использовать содержимое, и файл "
+"[.filename]#filename.txt#, содержащий манифест диска. Этот _манифест_ можно "
+"создать простой командой:"
+
+#. 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 "/stage/cdrom# find . -type f | sed -e 's/^\\.\\///' | sort > filename.txt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:335
+msgid "The specific requirements of each CD are outlined below."
+msgstr "Конкретные требования для каждого CD приведены ниже."
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:336
+#, no-wrap
+msgid "Disc 1"
+msgstr "Диск 1"
+
+#. 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 ""
+"Первый диск почти полностью создаётся командой `make release`. Единственные "
+"изменения, которые следует внести в каталог [.filename]#disc1#, — это "
+"добавление директории [.filename]#tools# и как можно большего количества "
+"популярных сторонних программных пакетов, которые поместятся на диск. В "
+"каталоге [.filename]#tools# содержится программное обеспечение, позволяющее "
+"пользователям создавать установочные дискеты из других операционных систем. "
+"Этот диск должен быть загрузочным, чтобы пользователям современных ПК не "
+"требовалось создавать установочные дискеты."
+
+#. 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 ""
+"Если требуется включить пользовательское ядро FreeBSD, необходимо обновить "
+"man:bsdinstall[8] и man:release[7], чтобы включить инструкции по установке. "
+"Соответствующий код содержится в [.filename]#src/release# и [.filename]#src/"
+"usr.sbin/bsdinstall#. В частности, потребуется обновить файл [.filename]#src/"
+"release/Makefile#, а также [.filename]#dist.c#, [.filename]#dist.h#, "
+"[.filename]#menus.c#, [.filename]#install.c# и [.filename]#Makefile# в "
+"каталоге [.filename]#src/usr.sbin/bsdinstall#. При желании можно также "
+"обновить [.filename]#bsdinstall.8#."
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:348
+#, no-wrap
+msgid "Disc 2"
+msgstr "Диск 2"
+
+#. 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 ""
+"Второй диск также в основном создаётся командой `make release`. Этот диск "
+"содержит «живую файловую систему», которая может использоваться через "
+"man:bsdinstall[8] для диагностики установки FreeBSD. Этот диск должен быть "
+"загрузочным и также содержать сжатую копию репозитория CVS в директории "
+"[.filename]#CVSROOT# и демонстрационные версии коммерческого ПО в директории "
+"[.filename]#commerce#."
+
+#. 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 ""
+"Sysinstall поддерживает установку пакетов с нескольких томов. Для этого "
+"каждый диск должен содержать файл [.filename]#INDEX#, в котором перечислены "
+"все пакеты на всех томах набора, а также дополнительное поле, указывающее, "
+"на каком именно томе находится конкретный пакет. Каждый том в наборе также "
+"должен иметь установленную переменную `CD_VOLUME` в файле "
+"[.filename]#cdrom.inf#, чтобы bsdinstall мог определить, какой том является "
+"каким. Когда пользователь пытается установить пакет, которого нет на текущем "
+"диске, bsdinstall предложит ему вставить соответствующий диск."
+
+#. 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 "Сайты FTP"
+
+#. 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 ""
+"Когда выпуск тщательно протестирован и упакован для распространения, "
+"необходимо обновить главный FTP-сайт. Официальные публичные FTP-сайты "
+"FreeBSD являются зеркалами главного сервера, который доступен только другим "
+"FTP-сайтам. Этот сервер известен как `ftp-master`. Когда выпуск готов, "
+"следующие файлы должны быть изменены на `ftp-master`:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:372
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/#"
+msgstr "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:374
+msgid "The installable FTP directory as output from `make release`."
+msgstr ""
+"Устанавливаемый каталог FTP, полученный в результате выполнения `make "
+"release`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:375
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/ports/arch/packages-X.Y-release/#"
+msgstr "[.filename]#/pub/FreeBSD/ports/arch/packages-X.Y-release/#"
+
+#. 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 "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/tools#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:380
+msgid "A symlink to [.filename]#../../../tools#."
+msgstr "Символическая ссылка на [.filename]#../../../tools#."
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:381
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/packages#"
+msgstr "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/packages#"
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:383
+msgid "A symlink to [.filename]#../../../ports/arch/packages-X.Y-release#."
+msgstr ""
+"Символическая ссылка на [.filename]#../../../ports/arch/packages-X.Y-"
+"release#."
+
+#. 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 "[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso#"
+
+#. 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 ""
+"Образы ISO. Символ \"*\" обозначает [.filename]#disc1#, [.filename]#disc2# и "
+"так далее. Только если существует [.filename]#disc1# и есть альтернативный "
+"первый установочный CD (например, упрощённая установка без графической "
+"оболочки), может также присутствовать [.filename]#mini#."
+
+#. 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 ""
+"Для получения дополнительной информации об архитектуре зеркал "
+"распространения FTP-сайтов FreeBSD, пожалуйста, ознакомьтесь со статьей "
+"extref:{hubs}[Поддержка зеркал FreeBSD]."
+
+#. 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 ""
+"Может потребоваться от нескольких часов до двух дней после обновления `ftp-"
+"master`, прежде чем большинство FTP-сайтов Tier-1 получат новое программное "
+"обеспечение, в зависимости от того, был ли загружен набор пакетов "
+"одновременно. Крайне важно, чтобы инженеры по выпуску скоординировались с "
+"{mirror-announce} перед объявлением общей доступности нового программного "
+"обеспечения на FTP-сайтах. В идеале набор пакетов для выпуска должен быть "
+"загружен как минимум за четыре дня до дня выпуска. Выпускные файлы должны "
+"быть загружены за 24–48 часов до запланированного времени выпуска с "
+"отключёнными разрешениями для \"других\" пользователей. Это позволит "
+"зеркальным сайтам загрузить их, но широкая публика не сможет скачать их с "
+"зеркальных сайтов. Письмо должно быть отправлено в {mirror-announce} в "
+"момент публикации выпускных файлов, уведомляя о том, что выпуск подготовлен, "
+"и указывая время, когда зеркальные сайты должны начать разрешать доступ. "
+"Обязательно укажите часовой пояс для указанного времени, например, "
+"относительно GMT."
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:399
+#, no-wrap
+msgid "CD-ROM Replication"
+msgstr "Репликация CD-ROM"
+
+#. 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 ""
+"Скоро: Советы по отправке ISO-образов FreeBSD репликатору и меры по "
+"обеспечению качества."
+
+#. 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 ""
+"Хотя FreeBSD представляет собой законченную операционную систему, ничто не "
+"обязывает вас использовать её именно в том виде, в каком мы упаковали её для "
+"распространения. Мы постарались разработать систему максимально расширяемой, "
+"чтобы она могла служить платформой для создания других коммерческих "
+"продуктов. Единственное «правило», которое у нас есть на этот счёт, — если "
+"вы собираетесь распространять FreeBSD с существенными изменениями, мы "
+"рекомендуем документировать ваши улучшения! Сообщество FreeBSD может "
+"оказывать поддержку только пользователям того программного обеспечения, "
+"которое мы предоставляем. Мы, безусловно, приветствуем инновации, такие как "
+"продвинутые инструменты установки и администрирования, но не можем отвечать "
+"на вопросы о них."
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:412
+#, no-wrap
+msgid "Scripting `bsdinstall`"
+msgstr "Скриптинг `bsdinstall`"
+
+#. 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 ""
+"Инструмент установки и настройки системы FreeBSD, man:bsdinstall[8], может "
+"быть настроен для автоматизированной установки на крупных площадках. Эта "
+"функциональность может использоваться совместно с Intel(R) PXE footnote:"
+"[extref:{handbook}[Запуск системы по сети (PXE) без использования локальных "
+"накопителей, network-diskless]] для загрузки систем по сети."
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:418
+#, no-wrap
+msgid "Lessons Learned from FreeBSD 4.4"
+msgstr "Уроки, извлеченные из FreeBSD 4.4"
+
+#. 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 ""
+"Процесс разработки релиза 4.4 официально начался 1 августа 2001 года. После "
+"этой даты все коммиты в ветку `RELENG_4` FreeBSD должны были быть явно "
+"одобрены `{re}`. Первый релиз-кандидат для архитектуры x86 был выпущен 16 "
+"августа, за ним последовали ещё 4 релиз-кандидата, что привело к финальному "
+"релизу 18 сентября. Сотрудник по безопасности был очень вовлечён в последнюю "
+"неделю процесса, так как несколько проблем безопасности было обнаружено в "
+"ранних релиз-кандидатах. Всего за чуть более месяца было отправлено более "
+"_500_ писем `{re}`."
+
+#. 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 ""
+"Наше сообщество пользователей ясно дало понять, что безопасность и "
+"стабильность выпуска FreeBSD не должны приноситься в жертву из-за "
+"самостоятельно установленных сроков или целевых дат выпуска. Проект FreeBSD "
+"значительно вырос за время своего существования, и необходимость "
+"стандартизированных процедур управления выпусками никогда не была столь "
+"очевидной. Это станет ещё более важным по мере переноса FreeBSD на новые "
+"платформы."
+
+#. 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 ""
+"Для обеспечения масштабирования наших процессов релиз-инжиниринга с растущей "
+"пользовательской базой мы прилагаем значительные усилия по документированию "
+"процедур, связанных с созданием выпусков FreeBSD."
+
+#. 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 ""
+"_Параллелизм_ — Некоторые этапы сборки релиза действительно \"тривиально "
+"параллельны\". Большинство задач очень интенсивно используют ввод-вывод, "
+"поэтому наличие нескольких высокоскоростных дисков важнее, чем использование "
+"нескольких процессоров для ускорения процесса `make release`. Если в среде "
+"man:chroot[2] разные иерархии размещены на разных дисках, то выгрузка CVS "
+"для деревьев [.filename]#ports# и [.filename]#doc# может происходить "
+"одновременно с выполнением `make world` на другом диске. Использование RAID "
+"(аппаратного или программного) может значительно сократить общее время "
+"сборки."
+
+#. 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 ""
+"_Кросс-сборка релизов_ - Сборка релиза для IA-64 или Alpha на x86 "
+"оборудовании? `make TARGET=ia64 release`."
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:439
+msgid ""
+"_Regression Testing_ - We need better automated correctness testing for "
+"FreeBSD."
+msgstr ""
+"_Регрессионное тестирование_ - Нам необходимы более совершенные "
+"автоматизированные тесты на корректность для FreeBSD."
+
+#. 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 ""
+"_Инструменты установки_ - Наша программа установки уже давно вышла за рамки "
+"своего первоначального срока службы. В разработке находится несколько "
+"проектов, призванных обеспечить более продвинутый механизм установки. Проект "
+"libh был одним из таких проектов, целью которого было создание "
+"интеллектуальной новой системы управления пакетами и программы установки с "
+"графическим интерфейсом."
+
+#. 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 ""
+"Я хотел бы поблагодарить Джордана Хаббарда за предоставленную мне "
+"возможность взять на себя часть обязанностей по управлению выпусками для "
+"FreeBSD 4.4, а также за всю его работу на протяжении многих лет, которая "
+"сделала FreeBSD такой, какая она есть сегодня. Конечно, выпуск не состоялся "
+"бы без всей работы, связанной с выпуском, выполненной `{asami}`, `{steve}`, "
+"`{bmah}`, `{nik}`, `{obrien}`, `{kris}`, `{jhb}` и остальным сообществом "
+"разработчиков FreeBSD. Я также хотел бы поблагодарить `{rgrimes}`, `{phk}` и "
+"других, кто работал над инструментами управления выпусками в самые ранние "
+"дни FreeBSD. На эту статью повлияли документы по управлению выпусками от "
+"CSRG footnote:[Маршалл Кирк МакКузик, Майкл Дж. Карелс и Кит Бостик: "
+"link:http://docs.FreeBSD.org/44doc/papers/releng.html[Управление выпусками "
+"4.3BSD]], проекта NetBSD footnote:[Документация разработчика NetBSD: "
+"Управление выпусками http://www.NetBSD.org/developers/releng/index.html] и "
+"заметки Джона Болдуина с предложениями по процессу управления выпусками. "
+"footnote:[Предложение Джона Болдуина по управлению выпусками FreeBSD https://"
+"people.FreeBSD.org/~jhb/docs/releng.txt]"
diff --git a/documentation/content/ru/articles/remote-install/_index.adoc b/documentation/content/ru/articles/remote-install/_index.adoc
new file mode 100644
index 0000000000..729e2e3057
--- /dev/null
+++ b/documentation/content/ru/articles/remote-install/_index.adoc
@@ -0,0 +1,347 @@
+---
+authors:
+ -
+ author: 'Daniel Gerzo'
+ email: danger@FreeBSD.org
+copyright: '2008-2021 The FreeBSD Documentation Project'
+description: 'Описывает удалённую установку операционной системы FreeBSD, когда консоль удалённой системы недоступна'
+tags: ["Remote", "Installation", "FreeBSD"]
+title: 'Удалённая установка операционной системы FreeBSD без удалённой консоли'
+trademarks: ["freebsd", "general"]
+---
+
+= Удалённая установка операционной системы FreeBSD без удалённой консоли
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/remote-install/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+В этой статье описывается удалённая установка операционной системы FreeBSD, когда консоль удалённой системы недоступна. Основная идея этой статьи является результатом сотрудничества с `{mm}` при ценных вкладах от `{pjd}`.
+
+'''
+
+toc::[]
+
+[[background]]
+== Пояснения
+
+В мире существует множество хостинг-провайдеров, но лишь немногие из них официально поддерживают FreeBSD. Обычно они предоставляют поддержку для дистрибутивов Linux(R), которые можно установить на предлагаемые серверы.
+
+В некоторых случаях эти компании могут установить предпочитаемый вами дистрибутив Linux(R) по вашему запросу. Используя эту опцию, мы попытаемся установить FreeBSD. В других случаях они могут предложить систему восстановления, которая используется в чрезвычайных ситуациях. Её также можно использовать для наших целей.
+
+В этой статье описаны основные шаги установки и настройки, необходимые для удалённой установки FreeBSD с поддержкой RAID-1 и ZFS.
+
+[[intro]]
+== Введение
+
+В этом разделе будет коротко расскажем о цели данной статьи и будет дано более подробное объяснение того, что в ней рассматривается. Инструкции, приведённые в статье, будут полезны тем, кто использует услуги колокационных центров, не поддерживающих FreeBSD.
+
+[.procedure]
+====
+. Как мы упоминали в разделе crossref:remote-install[background, Предыстория], многие авторитетные компании, предоставляющие хостинг серверов, предлагают своего рода систему восстановления, которая загружается из их локальной сети и доступна через SSH. Обычно они предоставляют эту возможность, чтобы помочь клиентам восстановить повреждённые операционные системы. Как будет объяснено в этой статье, с помощью таких систем восстановления можно установить FreeBSD.
++
+. Следующий раздел этой статьи описывает, как настроить и собрать минималистичную FreeBSD на локальной машине. Эта версия в конечном итоге будет запущена на удаленной машине с ramdisk, что позволит нам установить полную операционную систему FreeBSD с FTP-зеркала с помощью утилиты sysinstall.
+. Оставшаяся часть статьи описывает процедуру установки, а также настройку файловой системы ZFS.
+====
+
+[[requirements]]
+=== Требования
+
+Для успешного продолжения необходимо:
+
+* Иметь операционную систему с доступом по сети и доступом по SSH
+* Понимать процесса установки FreeBSD
+* Быть знакомым с утилитой man:sysinstall[8]
+* Иметь под рукой установочный образ SO или CD с FreeBSD
+
+[[preparation]]
+== Подготовка - mfsBSD
+
+Прежде чем FreeBSD может быть установлена на целевую систему, необходимо собрать минимальный образ операционной системы FreeBSD, который будет загружаться с жёсткого диска. Таким образом, новая система будет доступна из сети, а остальная часть установки может быть выполнена без удалённого доступа к консоли системы.
+
+Набор инструментов mfsBSD можно использовать для создания компактного образа FreeBSD. Как следует из названия mfsBSD («mfs» означает «файловая система в памяти»), итоговый образ полностью запускается с RAM-диска. Благодаря этой особенности не будет ограничений на работу с жёсткими дисками, что позволит установить полноценную операционную систему FreeBSD. На http://mfsbsd.vx.sk/[домашней странице] mfsBSD есть ссылки на последнюю версию набора инструментов.
+
+Обратите внимание, что внутреннее устройство mfsBSD и принципы его работы выходят за рамки данной статьи. Заинтересованным читателям следует обратиться к оригинальной документации mfsBSD для получения более подробной информации.
+
+Скачайте и распакуйте последний выпуск mfsBSD и перейдите в рабочий каталог, где будут находиться скрипты mfsBSD:
+
+[source, shell]
+....
+# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
+# tar xvzf mfsbsd-2.1.tar.gz
+# cd mfsbsd-2.1/
+....
+
+[[mfsbsd-config]]
+=== Конфигурация mfsBSD
+
+Прежде чем загрузить mfsBSD, необходимо установить несколько важных параметров конфигурации. Самое важное, что нужно правильно настроить, — это, естественно, сеть. Наиболее подходящий метод настройки параметров сети зависит от того, знаем ли мы заранее тип используемого сетевого интерфейса и драйвер сетевого интерфейса, который нужно загрузить для нашего оборудования. Мы рассмотрим, как можно настроить mfsBSD в обоих случаях.
+
+Еще одна важная настройка — установка пароля `root`. Это можно сделать, отредактировав файл [.filename]#conf/loader.conf#. Пожалуйста, ознакомьтесь с приложенными комментариями.
+
+==== Метод [.filename]#conf/interfaces.conf#
+
+Если установленная сетевая карта неизвестна, можно использовать функцию автоматического определения в mfsBSD. Скрипты запуска mfsBSD могут определить правильный драйвер для использования на основе MAC-адреса интерфейса, если установить следующие параметры в [.filename]#conf/interfaces.conf#:
+
+[.programlisting]
+....
+mac_interfaces="ext1"
+ifconfig_ext1_mac="00:00:00:00:00:00"
+ifconfig_ext1="inet 192.168.0.2/24"
+....
+
+Не забудьте добавить информацию о `defaultrouter` в [.filename]#conf/rc.conf#:
+
+[.programlisting]
+....
+defaultrouter="192.168.0.1"
+....
+
+==== Метод [.filename]#conf/rc.conf#
+
+Когда драйвер сетевого интерфейса известен, удобнее использовать [.filename]#conf/rc.conf# для настройки сети. Синтаксис этого файла такой же, как в стандартном файле man:rc.conf[5] FreeBSD.
+
+Например, если известно, что сетевой интерфейс man:re[4] будет доступен, можно задать следующие параметры в [.filename]#conf/rc.conf#:
+
+[.programlisting]
+....
+defaultrouter="192.168.0.1"
+ifconfig_re0="inet 192.168.0.2/24"
+....
+
+[[mfsbsd-build]]
+=== Создание образа mfsBSD
+
+Процесс создания образа mfsBSD довольно прост.
+
+Первым шагом необходимо подключить установочный CD FreeBSD или образ ISO установки к [.filename]#/cdrom#. В качестве примера в этой статье мы будем предполагать, что вы загрузили образ ISO FreeBSD 10.1-RELEASE. Подключение этого образа ISO к директории [.filename]#/cdrom# легко выполняется с помощью утилиты man:mdconfig[8]:
+
+[source, shell]
+....
+# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
+# mount_cd9660 /dev/md10 /cdrom
+....
+
+Поскольку последние выпуски FreeBSD не содержат обычных наборов дистрибутивов, необходимо извлечь файлы дистрибутива FreeBSD из архивов дистрибутива, расположенных на образе ISO:
+
+[source, shell]
+....
+# mkdir DIST
+# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
+# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST
+....
+
+Далее соберите загружаемый образ mfsBSD:
+
+[source, shell]
+....
+# make BASE=DIST
+....
+
+[NOTE]
+====
+Указанную команду `make` необходимо выполнять из корневой директории дерева каталогов mfsBSD, например, [.filename]#~/mfsbsd-2.1/#.
+====
+
+=== Загрузка mfsBSD
+
+Теперь, когда образ mfsBSD готов, его необходимо загрузить на удалённую систему, работающую под управлением live-системы восстановления или предустановленного дистрибутива Linux(R). Наиболее подходящий инструмент для этой задачи — scp:
+
+[source, shell]
+....
+# scp disk.img root@192.168.0.2:.
+....
+
+Для правильной загрузки образа mfsBSD он должен быть размещен на первом (загрузочном) устройстве данной машины. Это может быть выполнено с помощью следующего примера, при условии что [.filename]#sda# является первым загрузочным дисковым устройством:
+
+[source, shell]
+....
+# dd if=/root/disk.img of=/dev/sda bs=1m
+....
+
+Если всё прошло успешно, образ теперь должен находиться в MBR первого устройства, и машину можно перезагрузить. Следите за корректной загрузкой системы с помощью инструмента man:ping[8]. Как только машина снова окажется в сети, к ней можно будет подключиться через man:ssh[1] под пользователем `root` с настроенным паролем.
+
+[[installation]]
+== Установка операционной системы FreeBSD
+
+Система mfsBSD успешно загружена, и теперь можно войти через man:ssh[1]. В этом разделе будет описано, как создавать и размечать разделы, настраивать `gmirror` для RAID-1, а также как использовать `sysinstall` для установки минимальной дистрибуции операционной системы FreeBSD.
+
+=== Подготовка жестких дисков
+
+Первая задача — выделить дисковое пространство для FreeBSD, т.е.: создать слайсы и разделы. Очевидно, что текущая работающая система полностью загружена в оперативную память, поэтому не будет проблем с манипуляциями жёсткими дисками. Для выполнения этой задачи можно использовать либо `sysinstall`, либо man:fdisk[8] в сочетании с man:bsdlabel[8].
+
+В начале пометьте все системные диски как пустые. Повторите следующую команду для каждого жёсткого диска:
+
+[source, shell]
+....
+# dd if=/dev/zero of=/dev/ad0 count=2
+....
+
+Далее создайте разделы и пометьте их с помощью предпочитаемого инструмента. Хотя использование `sysinstall` считается более простым, но мощным и, вероятно, менее подверженным ошибкам методом будет использование стандартных текстовых инструментов UNIX(R), таких как man:fdisk[8] и man:bsdlabel[8], которые также будут рассмотрены в этом разделе. Первый вариант хорошо документирован в главе extref:{handbook}[Установка FreeBSD, install-steps] Руководства FreeBSD. Как упоминалось во введении, в этой статье будет показано, как настроить систему с возможностями RAID-1 и ZFS. Наша конфигурация будет состоять из небольшого зеркального раздела man:gmirror[8] для [.filename]#/# (корневого), [.filename]#/usr# и [.filename]#/var#, а остальное место на диске будет выделено для зеркальной файловой системы ZFS man:zpool[8]. Обратите внимание, что файловая система ZFS будет настроена после успешной установки и загрузки операционной системы FreeBSD.
+
+Следующий пример описывает, как создать слайсы и метки, инициализировать man:gmirror[8] на каждом разделе и как создать файловую систему UFS2 в каждом зеркальном разделе:
+
+[source, shell]
+....
+# fdisk -BI /dev/ad0 <.>
+# fdisk -BI /dev/ad1
+# bsdlabel -wB /dev/ad0s1 <.>
+# bsdlabel -wB /dev/ad1s1
+# bsdlabel -e /dev/ad0s1 <.>
+# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt <.>
+# gmirror label root /dev/ad[01]s1a <.>
+# gmirror label var /dev/ad[01]s1d
+# gmirror label usr /dev/ad[01]s1e
+# gmirror label -F swap /dev/ad[01]s1b <.>
+# newfs /dev/mirror/root <.>
+# newfs /dev/mirror/var
+# newfs /dev/mirror/usr
+....
+
+<.> Создайте раздел, охватывающий весь диск, и инициализируйте загрузочный код, содержащийся в секторе 0 данного диска. Повторите эту команду для всех жестких дисков в системе.
+
+<.> Запишите стандартную метку для каждого диска, включая загрузочный код.
+
+<.> Теперь вручную отредактируйте метку указанного диска. Обратитесь к странице руководства man:bsdlabel[8], чтобы узнать, как создавать разделы. Создайте раздел `a` для [.filename]#/# — корневой файловой системы, `b` для раздела подкачки, `d` для [.filename]#/var#, `e` для [.filename]#/usr# и, наконец, `f`, который позже будет использоваться для ZFS.
+
+<.> Импортируйте только что созданную метку для второго жесткого диска, чтобы оба жестких диска были размечены одинаковым образом.
+
+<.> Инициализируйте man:gmirror[8] на каждом разделе.
+
+<.> Обратите внимание, что `-F` используется для раздела подкачки. Это указывает man:gmirror[8] предполагать, что устройство находится в согласованном состоянии после сбоя питания/системы.
+
+<.> Создайте файловую систему UFS2 на каждом зеркальном разделе.
+
+=== Установка системы
+
+Это самая важная часть. В этом разделе будет описано, как фактически установить минимальный дистрибутив FreeBSD на жёсткие диски, которые мы подготовили в предыдущем разделе. Для достижения этой цели необходимо смонтировать все файловые системы, чтобы `sysinstall` мог записать содержимое FreeBSD на жёсткие диски:
+
+[source, shell]
+....
+# mount /dev/mirror/root /mnt
+# mkdir /mnt/var /mnt/usr
+# mount /dev/mirror/var /mnt/var
+# mount /dev/mirror/usr /mnt/usr
+....
+
+Когда вы закончите, запустите man:sysinstall[8]. Выберите установку [.guimenuitem]#Custom# в главном меню. Выберите [.guimenuitem]#Options# и нажмите kbd:[Enter]. С помощью клавиш со стрелками переместите курсор на пункт `Install Root`, нажмите kbd:[Space] и измените его на [.filename]#/mnt#. Нажмите kbd:[Enter], чтобы подтвердить изменения, и выйдите из меню [.guimenuitem]#Options#, нажав kbd:[q].
+
+[WARNING]
+====
+Обратите внимание, что этот шаг очень важен, и если его пропустить, `sysinstall` не сможет установить FreeBSD.
+====
+
+Перейдите в меню [.guimenuitem]#Distributions#, с помощью клавиш со стрелками переместите курсор к пункту `Minimal` и отметьте его, нажав kbd:[Space]. В этой статье используется дистрибутив Minimal для экономии сетевого трафика, так как сама система будет устанавливаться через ftp. Выйдите из этого меню, выбрав `Exit`.
+
+[NOTE]
+====
+[.guimenuitem]#Partition# и [.guimenuitem]#Label# будут пропущены, так как сейчас они бесполезны.
+====
+
+В меню [.guimenuitem]#Media# выберите `FTP`. Выберите ближайший зеркальный сервер и позвольте `sysinstall` предположить, что сеть уже настроена. Вы вернётесь обратно в меню [.guimenuitem]#Custom#.
+
+Наконец, выполните установку системы, выбрав последний пункт [.guimenuitem]#Commit#. Выйдите из `sysinstall` после завершения установки.
+
+=== Шаги после установки
+
+Операционная система FreeBSD теперь должна быть установлена; однако процесс еще не завершен. Необходимо выполнить несколько шагов после установки, чтобы FreeBSD могла загружаться в будущем и чтобы можно было войти в систему.
+
+Вы должны теперь выполнить man:chroot[8] в только что установленную систему, чтобы завершить установку. Используйте следующую команду:
+
+[source, shell]
+....
+# chroot /mnt
+....
+
+Для достижения нашей цели выполните следующие шаги:
+
+* Скопируйте ядро `GENERIC` в директорию [.filename]#/boot/kernel#:
++
+[source, shell]
+....
+# cp -Rp /boot/GENERIC/* /boot/kernel
+....
+
+* Создайте файлы [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# и [.filename]#/etc/fstab#. Не забудьте правильно настроить сетевые параметры и включить sshd в [.filename]#/etc/rc.conf#. Содержимое [.filename]#/etc/fstab# будет выглядеть примерно следующим образом:
++
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+/dev/mirror/swap none swap sw 0 0
+/dev/mirror/root / ufs rw 1 1
+/dev/mirror/usr /usr ufs rw 2 2
+/dev/mirror/var /var ufs rw 2 2
+/dev/cd0 /cdrom cd9660 ro,noauto 0 0
+....
+* Создайте файл [.filename]#/boot/loader.conf# со следующим содержимым:
++
+[.programlisting]
+....
+geom_mirror_load="YES"
+zfs_load="YES"
+....
+* Выполните следующую команду, чтобы сделать ZFS доступным при следующей загрузке:
++
+[source, shell]
+....
+# sysrc zfs_enable="YES"
+....
+
+* Добавьте дополнительных пользователей в систему с помощью инструмента man:adduser[8]. Не забудьте добавить пользователя в группу `wheel`, чтобы получить доступ к root после перезагрузки.
+* Перепроверьте все ваши настройки.
+
+Система теперь должна быть готова к следующей загрузке. Используйте команду man:reboot[8] для перезагрузки системы.
+
+[[zfs]]
+== ZFS
+
+Если ваша система пережила перезагрузку, теперь должно быть возможно войти в систему. Добро пожаловать в новую установку FreeBSD, выполненную удалённо без использования удалённой консоли!
+
+Остался только последний шаг — настроить man:zpool[8] и создать несколько файловых систем man:zfs[8]. Создание и администрирование ZFS очень просто. Сначала создайте зеркальный пул:
+
+[source, shell]
+....
+# zpool create tank mirror /dev/ad[01]s1f
+....
+
+Далее создайте несколько файловых систем:
+
+[source, shell]
+....
+# zfs create tank/ports
+# zfs create tank/src
+# zfs set compression=gzip tank/ports
+# zfs set compression=on tank/src
+# zfs set mountpoint=/usr/ports tank/ports
+# zfs set mountpoint=/usr/src tank/src
+....
+
+Вот и все. Если вас интересуют более подробные сведения о ZFS в FreeBSD, обратитесь к разделу https://wiki.freebsd.org/ZFS[ZFS] на вики FreeBSD.
diff --git a/documentation/content/ru/articles/remote-install/_index.po b/documentation/content/ru/articles/remote-install/_index.po
new file mode 100644
index 0000000000..451bbfa093
--- /dev/null
+++ b/documentation/content/ru/articles/remote-install/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-01 18:11+0300\n"
+"PO-Revision-Date: 2025-10-01 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesremote-install_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Описывает удалённую установку операционной системы FreeBSD, когда консоль удалённой системы недоступна"
+
+#. 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 "Удалённая установка операционной системы FreeBSD без удалённой консоли"
+
+#. 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 ""
+"В этой статье описывается удалённая установка операционной системы FreeBSD, "
+"когда консоль удалённой системы недоступна. Основная идея этой статьи "
+"является результатом сотрудничества с `{mm}` при ценных вкладах от `{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 "Пояснения"
+
+#. 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 ""
+"В мире существует множество хостинг-провайдеров, но лишь немногие из них "
+"официально поддерживают FreeBSD. Обычно они предоставляют поддержку для "
+"дистрибутивов Linux(R), которые можно установить на предлагаемые серверы."
+
+#. 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 ""
+"В некоторых случаях эти компании могут установить предпочитаемый вами "
+"дистрибутив Linux(R) по вашему запросу. Используя эту опцию, мы попытаемся "
+"установить FreeBSD. В других случаях они могут предложить систему "
+"восстановления, которая используется в чрезвычайных ситуациях. Её также "
+"можно использовать для наших целей."
+
+#. 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 ""
+"В этой статье описаны основные шаги установки и настройки, необходимые для "
+"удалённой установки FreeBSD с поддержкой RAID-1 и ZFS."
+
+#. 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 ""
+"В этом разделе будет коротко расскажем о цели данной статьи и будет дано "
+"более подробное объяснение того, что в ней рассматривается. Инструкции, "
+"приведённые в статье, будут полезны тем, кто использует услуги колокационных "
+"центров, не поддерживающих FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:74
+msgid ""
+"As we have mentioned in the crossref:remote-install[background, 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 ""
+"Как мы упоминали в разделе crossref:remote-install[background, Предыстория], "
+"многие авторитетные компании, предоставляющие хостинг серверов, предлагают "
+"своего рода систему восстановления, которая загружается из их локальной сети "
+"и доступна через SSH. Обычно они предоставляют эту возможность, чтобы помочь "
+"клиентам восстановить повреждённые операционные системы. Как будет объяснено "
+"в этой статье, с помощью таких систем восстановления можно установить "
+"FreeBSD."
+
+#. 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 ""
+"Следующий раздел этой статьи описывает, как настроить и собрать "
+"минималистичную FreeBSD на локальной машине. Эта версия в конечном итоге "
+"будет запущена на удаленной машине с ramdisk, что позволит нам установить "
+"полную операционную систему FreeBSD с FTP-зеркала с помощью утилиты "
+"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 ""
+"Оставшаяся часть статьи описывает процедуру установки, а также настройку "
+"файловой системы ZFS."
+
+#. 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 "Иметь операционную систему с доступом по сети и доступом по SSH"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:86
+msgid "Understand the FreeBSD installation process"
+msgstr "Понимать процесса установки FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:87
+msgid "Be familiar with the man:sysinstall[8] utility"
+msgstr "Быть знакомым с утилитой 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 "Иметь под рукой установочный образ SO или CD с FreeBSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:90
+#, no-wrap
+msgid "Preparation - mfsBSD"
+msgstr "Подготовка - 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 ""
+"Прежде чем FreeBSD может быть установлена на целевую систему, необходимо "
+"собрать минимальный образ операционной системы FreeBSD, который будет "
+"загружаться с жёсткого диска. Таким образом, новая система будет доступна из "
+"сети, а остальная часть установки может быть выполнена без удалённого "
+"доступа к консоли системы."
+
+#. 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 ""
+"Набор инструментов mfsBSD можно использовать для создания компактного образа "
+"FreeBSD. Как следует из названия mfsBSD («mfs» означает «файловая система в "
+"памяти»), итоговый образ полностью запускается с RAM-диска. Благодаря этой "
+"особенности не будет ограничений на работу с жёсткими дисками, что позволит "
+"установить полноценную операционную систему FreeBSD. На http://mfsbsd.vx.sk/"
+"[домашней странице] mfsBSD есть ссылки на последнюю версию набора "
+"инструментов."
+
+#. 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 ""
+"Обратите внимание, что внутреннее устройство mfsBSD и принципы его работы "
+"выходят за рамки данной статьи. Заинтересованным читателям следует "
+"обратиться к оригинальной документации mfsBSD для получения более подробной "
+"информации."
+
+#. 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 ""
+"Скачайте и распакуйте последний выпуск mfsBSD и перейдите в рабочий каталог, "
+"где будут находиться скрипты 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 "Конфигурация 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 ""
+"Прежде чем загрузить mfsBSD, необходимо установить несколько важных "
+"параметров конфигурации. Самое важное, что нужно правильно настроить, — это, "
+"естественно, сеть. Наиболее подходящий метод настройки параметров сети "
+"зависит от того, знаем ли мы заранее тип используемого сетевого интерфейса и "
+"драйвер сетевого интерфейса, который нужно загрузить для нашего "
+"оборудования. Мы рассмотрим, как можно настроить mfsBSD в обоих случаях."
+
+#. 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 ""
+"Еще одна важная настройка — установка пароля `root`. Это можно сделать, "
+"отредактировав файл [.filename]#conf/loader.conf#. Пожалуйста, ознакомьтесь "
+"с приложенными комментариями."
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:124
+#, no-wrap
+msgid "The [.filename]#conf/interfaces.conf# method"
+msgstr "Метод [.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 ""
+"Если установленная сетевая карта неизвестна, можно использовать функцию "
+"автоматического определения в mfsBSD. Скрипты запуска mfsBSD могут "
+"определить правильный драйвер для использования на основе MAC-адреса "
+"интерфейса, если установить следующие параметры в [.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 ""
+"Не забудьте добавить информацию о `defaultrouter` в [.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 "Метод [.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 ""
+"Когда драйвер сетевого интерфейса известен, удобнее использовать "
+"[.filename]#conf/rc.conf# для настройки сети. Синтаксис этого файла такой "
+"же, как в стандартном файле man:rc.conf[5] 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 ""
+"Например, если известно, что сетевой интерфейс man:re[4] будет доступен, "
+"можно задать следующие параметры в [.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 "Создание образа 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 "Процесс создания образа mfsBSD довольно прост."
+
+#. 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 ""
+"Первым шагом необходимо подключить установочный CD FreeBSD или образ ISO "
+"установки к [.filename]#/cdrom#. В качестве примера в этой статье мы будем "
+"предполагать, что вы загрузили образ ISO FreeBSD 10.1-RELEASE. Подключение "
+"этого образа ISO к директории [.filename]#/cdrom# легко выполняется с "
+"помощью утилиты 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 ""
+"Поскольку последние выпуски FreeBSD не содержат обычных наборов "
+"дистрибутивов, необходимо извлечь файлы дистрибутива FreeBSD из архивов "
+"дистрибутива, расположенных на образе 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 "Далее соберите загружаемый образ 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 ""
+"Указанную команду `make` необходимо выполнять из корневой директории дерева "
+"каталогов mfsBSD, например, [.filename]#~/mfsbsd-2.1/#."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:192
+#, no-wrap
+msgid "Booting mfsBSD"
+msgstr "Загрузка 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 ""
+"Теперь, когда образ mfsBSD готов, его необходимо загрузить на удалённую "
+"систему, работающую под управлением live-системы восстановления или "
+"предустановленного дистрибутива Linux(R). Наиболее подходящий инструмент для "
+"этой задачи — 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 ""
+"Для правильной загрузки образа mfsBSD он должен быть размещен на первом "
+"(загрузочном) устройстве данной машины. Это может быть выполнено с помощью "
+"следующего примера, при условии что [.filename]#sda# является первым "
+"загрузочным дисковым устройством:"
+
+#. 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 ""
+"Если всё прошло успешно, образ теперь должен находиться в MBR первого "
+"устройства, и машину можно перезагрузить. Следите за корректной загрузкой "
+"системы с помощью инструмента man:ping[8]. Как только машина снова окажется "
+"в сети, к ней можно будет подключиться через man:ssh[1] под пользователем "
+"`root` с настроенным паролем."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:215
+#, no-wrap
+msgid "Installation of the FreeBSD Operating System"
+msgstr "Установка операционной системы 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 ""
+"Система mfsBSD успешно загружена, и теперь можно войти через man:ssh[1]. В "
+"этом разделе будет описано, как создавать и размечать разделы, настраивать "
+"`gmirror` для RAID-1, а также как использовать `sysinstall` для установки "
+"минимальной дистрибуции операционной системы FreeBSD."
+
+#. 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 ""
+"Первая задача — выделить дисковое пространство для FreeBSD, т.е.: создать "
+"слайсы и разделы. Очевидно, что текущая работающая система полностью "
+"загружена в оперативную память, поэтому не будет проблем с манипуляциями "
+"жёсткими дисками. Для выполнения этой задачи можно использовать либо "
+"`sysinstall`, либо man:fdisk[8] в сочетании с 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 ""
+"В начале пометьте все системные диски как пустые. Повторите следующую "
+"команду для каждого жёсткого диска:"
+
+#. 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 ""
+"Далее создайте разделы и пометьте их с помощью предпочитаемого инструмента. "
+"Хотя использование `sysinstall` считается более простым, но мощным и, "
+"вероятно, менее подверженным ошибкам методом будет использование стандартных "
+"текстовых инструментов UNIX(R), таких как man:fdisk[8] и man:bsdlabel[8], "
+"которые также будут рассмотрены в этом разделе. Первый вариант хорошо "
+"документирован в главе extref:{handbook}[Установка FreeBSD, install-steps] "
+"Руководства FreeBSD. Как упоминалось во введении, в этой статье будет "
+"показано, как настроить систему с возможностями RAID-1 и ZFS. Наша "
+"конфигурация будет состоять из небольшого зеркального раздела man:gmirror[8] "
+"для [.filename]#/# (корневого), [.filename]#/usr# и [.filename]#/var#, а "
+"остальное место на диске будет выделено для зеркальной файловой системы ZFS "
+"man:zpool[8]. Обратите внимание, что файловая система ZFS будет настроена "
+"после успешной установки и загрузки операционной системы 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 ""
+"Следующий пример описывает, как создать слайсы и метки, инициализировать "
+"man:gmirror[8] на каждом разделе и как создать файловую систему UFS2 в "
+"каждом зеркальном разделе:"
+
+#. 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 ""
+"Создайте раздел, охватывающий весь диск, и инициализируйте загрузочный код, "
+"содержащийся в секторе 0 данного диска. Повторите эту команду для всех "
+"жестких дисков в системе."
+
+#. 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 ""
+"Теперь вручную отредактируйте метку указанного диска. Обратитесь к странице "
+"руководства man:bsdlabel[8], чтобы узнать, как создавать разделы. Создайте "
+"раздел `a` для [.filename]#/# — корневой файловой системы, `b` для раздела "
+"подкачки, `d` для [.filename]#/var#, `e` для [.filename]#/usr# и, наконец, "
+"`f`, который позже будет использоваться для 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 ""
+"Импортируйте только что созданную метку для второго жесткого диска, чтобы "
+"оба жестких диска были размечены одинаковым образом."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:269
+msgid "Initialize man:gmirror[8] on each partition."
+msgstr "Инициализируйте man:gmirror[8] на каждом разделе."
+
+#. 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 ""
+"Обратите внимание, что `-F` используется для раздела подкачки. Это указывает "
+"man:gmirror[8] предполагать, что устройство находится в согласованном "
+"состоянии после сбоя питания/системы."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:273
+msgid "Create a UFS2 file system on each mirrored partition."
+msgstr "Создайте файловую систему UFS2 на каждом зеркальном разделе."
+
+#. 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 ""
+"Это самая важная часть. В этом разделе будет описано, как фактически "
+"установить минимальный дистрибутив FreeBSD на жёсткие диски, которые мы "
+"подготовили в предыдущем разделе. Для достижения этой цели необходимо "
+"смонтировать все файловые системы, чтобы `sysinstall` мог записать "
+"содержимое FreeBSD на жёсткие диски:"
+
+#. 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 ""
+"Когда вы закончите, запустите man:sysinstall[8]. Выберите установку "
+"[.guimenuitem]#Custom# в главном меню. Выберите [.guimenuitem]#Options# и "
+"нажмите kbd:[Enter]. С помощью клавиш со стрелками переместите курсор на "
+"пункт `Install Root`, нажмите kbd:[Space] и измените его на [.filename]#/"
+"mnt#. Нажмите kbd:[Enter], чтобы подтвердить изменения, и выйдите из меню "
+"[.guimenuitem]#Options#, нажав 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 ""
+"Обратите внимание, что этот шаг очень важен, и если его пропустить, "
+"`sysinstall` не сможет установить 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 to save network traffic, because the system itself "
+"will be installed over ftp. Exit this menu by choosing `Exit`."
+msgstr ""
+"Перейдите в меню [.guimenuitem]#Distributions#, с помощью клавиш со "
+"стрелками переместите курсор к пункту `Minimal` и отметьте его, нажав kbd:"
+"[Space]. В этой статье используется дистрибутив Minimal для экономии "
+"сетевого трафика, так как сама система будет устанавливаться через ftp. "
+"Выйдите из этого меню, выбрав `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 ""
+"[.guimenuitem]#Partition# и [.guimenuitem]#Label# будут пропущены, так как "
+"сейчас они бесполезны."
+
+#. 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 ""
+"В меню [.guimenuitem]#Media# выберите `FTP`. Выберите ближайший зеркальный "
+"сервер и позвольте `sysinstall` предположить, что сеть уже настроена. Вы "
+"вернётесь обратно в меню [.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 ""
+"Наконец, выполните установку системы, выбрав последний пункт "
+"[.guimenuitem]#Commit#. Выйдите из `sysinstall` после завершения установки."
+
+#. 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 ""
+"Операционная система FreeBSD теперь должна быть установлена; однако процесс "
+"еще не завершен. Необходимо выполнить несколько шагов после установки, чтобы "
+"FreeBSD могла загружаться в будущем и чтобы можно было войти в систему."
+
+#. 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 ""
+"Вы должны теперь выполнить man:chroot[8] в только что установленную систему, "
+"чтобы завершить установку. Используйте следующую команду:"
+
+#. 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 "Для достижения нашей цели выполните следующие шаги:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:331
+msgid "Copy the `GENERIC` kernel to the [.filename]#/boot/kernel# directory:"
+msgstr "Скопируйте ядро `GENERIC` в директорию [.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 ""
+"Создайте файлы [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# и "
+"[.filename]#/etc/fstab#. Не забудьте правильно настроить сетевые параметры и "
+"включить sshd в [.filename]#/etc/rc.conf#. Содержимое [.filename]#/etc/"
+"fstab# будет выглядеть примерно следующим образом:"
+
+#. 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 "Создайте файл [.filename]#/boot/loader.conf# со следующим содержимым:"
+
+#. 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 ""
+"Выполните следующую команду, чтобы сделать ZFS доступным при следующей "
+"загрузке:"
+
+#. 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 ""
+"Добавьте дополнительных пользователей в систему с помощью инструмента "
+"man:adduser[8]. Не забудьте добавить пользователя в группу `wheel`, чтобы "
+"получить доступ к root после перезагрузки."
+
+#. 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 ""
+"Система теперь должна быть готова к следующей загрузке. Используйте команду "
+"man:reboot[8] для перезагрузки системы."
+
+#. 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 ""
+"Если ваша система пережила перезагрузку, теперь должно быть возможно войти в "
+"систему. Добро пожаловать в новую установку FreeBSD, выполненную удалённо "
+"без использования удалённой консоли!"
+
+#. 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 ""
+"Остался только последний шаг — настроить man:zpool[8] и создать несколько "
+"файловых систем man:zfs[8]. Создание и администрирование ZFS очень просто. "
+"Сначала создайте зеркальный пул:"
+
+#. 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 "Далее создайте несколько файловых систем:"
+
+#. 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 ""
+"Вот и все. Если вас интересуют более подробные сведения о ZFS в FreeBSD, "
+"обратитесь к разделу https://wiki.freebsd.org/ZFS[ZFS] на вики FreeBSD."
diff --git a/documentation/content/ru/articles/serial-uart/_index.adoc b/documentation/content/ru/articles/serial-uart/_index.adoc
new file mode 100644
index 0000000000..5b1233a256
--- /dev/null
+++ b/documentation/content/ru/articles/serial-uart/_index.adoc
@@ -0,0 +1,1034 @@
+---
+authors:
+ -
+ author: 'Frank Durda'
+ email: uhclem@FreeBSD.org
+description: 'Подробная информация об использовании последовательных портов и UART в FreeBSD'
+tags: ["Serial", "hardware", "UART", "Tutorial", "FreeBSD"]
+title: 'Учебное руководство по последовательному интерфейсу и UART'
+trademarks: ["freebsd", "microsoft", "general"]
+---
+
+= Учебное руководство по последовательному интерфейсу и UART
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/serial-uart/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Эта статья рассказывает об использовании последовательного оборудования с FreeBSD.
+
+'''
+
+toc::[]
+
+[[uart]]
+== UART: Что это и как работает
+
+_Copyright (R) 1996 `{uhclem}`, All Rights Reserved. 13 января 1996 год_
+
+Универсальный асинхронный приёмопередатчик (UART) — это ключевой компонент подсистемы последовательной передачи данных компьютера. UART принимает байты данных и передаёт отдельные биты последовательно. На стороне приёмника второй UART собирает биты обратно в полные байты.
+
+Последовательная передача данных обычно используется с модемами и для не сетевого взаимодействия между компьютерами, терминалами и другими устройствами.
+
+Существует две основные формы последовательной передачи данных: синхронная и асинхронная. В зависимости от режимов, поддерживаемых оборудованием, название подсистемы связи обычно включает букву `A`, если она поддерживает асинхронную передачу, и букву `S`, если поддерживается синхронная передача. Обе формы описаны ниже.
+
+Некоторые распространённые сокращения:
+
+[.blockquote]
+UART Universal Asynchronous Receiver/Transmitter — Универсальный асинхронный приёмопередатчик
+
+[.blockquote]
+USART Universal Synchronous-Asynchronous Receiver/Transmitter — Универсальный синхронно-асинхронный приёмопередатчик
+
+=== Синхронная последовательная передача
+
+Синхронная последовательная передача данных требует, чтобы отправитель и получатель имели общий тактовый сигнал, либо чтобы отправитель предоставлял строб-сигнал или другой сигнал синхронизации, чтобы получатель знал, когда "считывать" следующий бит данных. В большинстве форм синхронной последовательной связи, если в данный момент нет доступных данных для передачи, вместо них должен быть отправлен заполняющий символ, чтобы передача данных не прерывалась. Синхронная связь обычно более эффективна, так как между отправителем и получателем передаются только биты данных, однако она может быть более затратной, если требуются дополнительные провода и схемы для обмена тактовым сигналом между отправителем и получателем.
+
+Форма синхронной передачи используется с принтерами и устройствами с жёсткими дисками, где данные передаются по одному набору проводов, а тактовый сигнал или строб — по другому проводу. Принтеры и устройства с жёсткими дисками обычно не являются последовательными устройствами, так как большинство стандартов интерфейсов жёстких дисков передают целое слово данных для каждого тактового сигнала или строба, используя отдельный провод для каждого бита слова. В индустрии ПК такие устройства известны как параллельные.
+
+Стандартное оборудование для последовательной связи в ПК не поддерживает синхронные операции. Этот режим описан здесь только для сравнения.
+
+=== Асинхронная последовательная передача
+
+Асинхронная передача позволяет передавать данные без необходимости отправки тактового сигнала от отправителя к получателю. Вместо этого отправитель и получатель заранее согласовывают параметры синхронизации, а к каждому слову добавляются специальные биты, которые используются для синхронизации передающего и принимающего устройств.
+
+При передаче слова через UART в асинхронном режиме к началу каждого передаваемого слова добавляется бит, называемый "стартовым битом". Стартовый бит используется для оповещения приёмника о начале передачи слова данных, а также для синхронизации тактового сигнала приёмника с тактовым сигналом передатчика. Эти два тактовых сигнала должны быть достаточно точными, чтобы их расхождение по частоте не превышало 10% во время передачи оставшихся битов слова. (Данное требование было установлено во времена механических телетайпов и легко выполняется современным электронным оборудованием.)
+
+После стартового бита передаются отдельные биты слова данных, начиная с младшего значащего бита (LSB). Каждый бит передается в течение точно такого же времени, как и все остальные биты, и приемник "проверяет" состояние линии примерно на середине интервала, отведенного для каждого бита, чтобы определить, является ли бит `1` или `0`. Например, если передача каждого бита занимает две секунды, приемник проверит сигнал, чтобы определить, является ли он `1` или `0`, через одну секунду, затем подождет две секунды и проверит значение следующего бита, и так далее.
+
+Отправитель не знает, когда получатель «посмотрел» значение бита. Отправитель знает только, когда по тактовому сигналу нужно начать передачу следующего бита слова.
+
+Когда все слово данных отправлено, передатчик может добавить бит четности, который он генерирует. Бит четности может быть использован приемником для выполнения простой проверки на ошибки. Затем передатчик отправляет как минимум один стоповый бит.
+
+Когда приемник получил все биты в слове данных, он может проверить биты четности (как отправитель, так и приемник должны договориться о том, будет ли использоваться бит четности), а затем приемник ищет стоповый бит. Если стоповый бит не появляется, когда должен, UART считает все слово искаженным и сообщит об ошибке кадрирования главному процессору при чтении слова данных. Обычная причина ошибки кадрирования — несовпадение скорости тактовых сигналов отправителя и приемника или прерывание сигнала.
+
+Независимо от того, были ли данные получены правильно или нет, UART автоматически отбрасывает бит чётности, стартовый и стоповый биты. Если отправитель и получатель настроены одинаково, эти биты не передаются хосту.
+
+Если готово следующее слово для передачи, стартовый бит нового слова может быть отправлен сразу после того, как будет отправлен стоповый бит предыдущего слова.
+
+Поскольку асинхронные данные являются "самосинхронизирующимися", если нет данных для передачи, линия передачи может быть неактивна.
+
+=== Другие функции UART
+
+Помимо основной задачи преобразования данных из параллельного формата в последовательный для передачи и из последовательного в параллельный при приеме, UART обычно предоставляет дополнительные схемы для сигналов, которые могут использоваться для указания состояния среды передачи и регулирования потока данных в случае, если удаленное устройство не готово принимать больше данных. Например, когда устройство, подключенное к UART, является модемом, модем может сообщать о наличии несущей на телефонной линии, в то время как компьютер может дать команду модему сбросить себя или не принимать вызовы, поднимая или опуская один или несколько из этих дополнительных сигналов. Функция каждого из этих дополнительных сигналов определена в стандарте EIA RS232-C.
+
+=== Стандарты RS232-C и V.24
+
+В большинстве компьютерных систем UART подключен к схеме, которая генерирует сигналы, соответствующие спецификации EIA RS232-C. Также существует стандарт CCITT под названием V.24, который отражает спецификации, включенные в RS232-C.
+
+==== Назначения битов RS232-C (метки и пробелы)
+
+В стандарте RS232-C значение `1` называется `Маркер` (Mark), а значение `0` — `Пробел` (Space). Когда линия связи находится в состоянии покоя, говорят, что она "маркирует" (Marking), то есть передаёт непрерывные значения `1`.
+
+Стартовый бит всегда имеет значение `0` (пробел). Стоповый бит всегда имеет значение `1` (метка). Это означает, что на линии всегда будет переход от метки (1) к пробелу (0) в начале каждого слова, даже при передаче нескольких слов подряд. Это гарантирует, что отправитель и получатель могут синхронизировать свои тактовые сигналы независимо от содержимого передаваемых битов данных.
+
+Время простоя между стоповым и стартовым битами не обязательно должно быть точным кратным (включая ноль) скорости передачи данных коммуникационного канала, однако большинство UART спроектированы таким образом для простоты.
+
+В стандарте RS232-C сигнал «Marking» (логическая `1`) представлен напряжением от -2 В до -12 В, а сигнал «Spacing» (логический `0`) — напряжением от 0 В до +12 В. Передатчик должен выдавать +12 В или -12 В, а приёмник должен учитывать возможные потери напряжения в длинных кабелях. Некоторые маломощные передатчики (например, в портативных компьютерах) иногда используют только +5 В и -5 В, но эти значения всё ещё допустимы для приёмника RS232-C при условии использования коротких кабелей.
+
+==== Cигнал Break в RS232-C
+
+RS232-C также определяет сигнал под названием `Break`, который вызывается передачей непрерывных значений Spacing (без стартовых или стоповых битов). Когда на линии данных отсутствует напряжение, считается, что линия передает `Break`.
+
+Сигнал `Break` должен иметь длительность больше, чем время, необходимое для передачи полного байта, включая стартовый, стоповый и биты четности. Большинство UART способны различить ошибку кадрирования и сигнал Break, но если UART не поддерживает эту функцию, для определения Break можно использовать обнаружение ошибки кадрирования.
+
+Во времена телетайпов, когда множество принтеров по всей стране были соединены последовательно (например, в службах новостей), любое устройство могло вызвать `Break`, временно размыкая всю цепь, чтобы ток не протекал. Это использовалось для того, чтобы место с срочными новостями могло прервать устройство в другом месте, которое в данный момент передавало информацию.
+
+В современных системах существует два типа сигналов Break. Если Break длится дольше 1,6 секунд, он считается "Модемным Break", и некоторые модемы можно запрограммировать на завершение соединения и переход в режим ожидания или вход в командный режим модема при обнаружении этого сигнала. Если Break короче 1,6 секунд, это означает "Break данных", и удалённый компьютер должен решить, как реагировать на этот сигнал. Иногда такая форма Break используется как сигнал "Внимание" или "Прерывание", а иногда принимается как замена символу ASCII CONTROL-C.
+
+Метки и пробелы также эквивалентны "дыркам" и "отсутствию дырок" в системах с бумажной лентой.
+
+[NOTE]
+====
+Разрывы не могут быть сгенерированы с перфоленты или из любого другого байтового значения, поскольку байты всегда отправляются со стартовым и стоповым битами. UART обычно способен генерировать непрерывный сигнал Spacing в ответ на специальную команду от главного управляющего устройства (процессора передачи).
+====
+
+==== RS232-C устройства DTE и DCE
+
+Спецификация RS232-C определяет два типа оборудования: оконечное оборудование данных (DTE — Data Terminal Equipment) и оборудование передачи данных (DCE — Data Carrier Equipment). Обычно устройство DTE — это терминал (или компьютер), а DCE — модем. На другом конце телефонной линии в разговоре принимающий модем также является устройством DCE, а компьютер, подключённый к этому модему, — устройством DTE. Устройство DCE принимает сигналы на тех контактах, на которых устройство DTE передаёт, и наоборот.
+
+Когда два устройства, оба являющиеся DTE или DCE, должны быть соединены вместе без модема или аналогичного преобразователя среды между ними, необходимо использовать NULL модем. NULL модем электрически перестраивает кабель так, что выход передатчика подключается ко входу приемника на другом устройстве, и наоборот. Аналогичные преобразования выполняются для всех управляющих сигналов, чтобы каждое устройство видело то, что оно считает сигналами DCE (или DTE) от другого устройства.
+
+Количество сигналов, генерируемых устройствами DTE и DCE, не симметрично. Устройство DTE генерирует меньше сигналов для устройства DCE, чем получает от него.
+
+==== Назначение контактов RS232-C
+
+Спецификация EIA RS232-C (и её эквивалент ITU, V.24) предусматривает использование двадцатипятиконтактного разъёма (обычно DB25) и определяет назначение большинства контактов в этом разъёме.
+
+В IBM Personal Computer и подобных системах подмножество сигналов RS232-C предоставляется через девятиконтактные разъемы (DB9). Сигналы, которые не включены в разъем ПК, в основном связаны с синхронной работой, и этот режим передачи не поддерживается UART, выбранным IBM для использования в IBM PC.
+
+В зависимости от производителя компьютера, для связи по RS232-C могут использоваться разъемы DB25, DB9 или оба типа. (В IBM PC также используется разъем DB25 для параллельного интерфейса принтера, что иногда вызывает путаницу.)
+
+Ниже представлена таблица назначений сигналов RS232-C в разъемах DB25 и DB9.
+
+[.informaltable]
+[cols="1,1,1,1,1,1,1", frame="none", options="header"]
+|===
+| Контакт в DB25 RS232-C
+| Контакт в DB9 IBM PC
+| Символ цепи по EIA
+| Символ цепи по CCITT
+| Общее имя
+| Источник сигнала
+| Описание
+
+|1
+|-
+|AA
+|101
+|PG/FG
+|-
+|Защитное заземление (Frame/Protective Ground)
+
+|2
+|3
+|BA
+|103
+|TD
+|DTE
+|Передача Данных (Transmit Data)
+
+|3
+|2
+|BB
+|104
+|RD
+|DCE
+|Прием данных (Receive Data)
+
+|4
+|7
+|CA
+|105
+|RTS
+|DTE
+|Запрос на передачу (Request to Send)
+
+|5
+|8
+|CB
+|106
+|CTS
+|DCE
+|Готовность к приёму (Clear to Send)
+
+|6
+|6
+|CC
+|107
+|DSR
+|DCE
+|Готовность терминального оборудования (Data Set Ready)
+
+|7
+|5
+|AV
+|102
+|SG/GND
+|-
+|Сигнальная земля (Signal Ground)
+
+|8
+|1
+|CF
+|109
+|DCD/CD
+|DCE
+|Обнаружение несущей (Data Carrier Detect)
+
+|9
+|-
+|-
+|-
+|-
+|-
+|Зарезервировано для Теста
+
+|10
+|-
+|-
+|-
+|-
+|-
+|Зарезервировано для Теста
+
+|11
+|-
+|-
+|-
+|-
+|-
+|Зарезервировано для Теста
+
+|12
+|-
+|CI
+|122
+|SRLSD
+|DCE
+|Детектор сигнала вторичной линии приёма
+
+|13
+|-
+|SCB
+|121
+|SCTS
+|DCE
+|Вторичный сигнал готовности к приёму
+
+|14
+|-
+|SBA
+|118
+|STD
+|DTE
+|Вторичная линия передачи данных
+
+|15
+|-
+|DB
+|114
+|TSET
+|DCE
+|Тактирование элементов сигнала передатчика (Trans. Sig. Element Timing)
+
+|16
+|-
+|SBB
+|119
+|SRD
+|DCE
+|Вторичная линия приема данных
+
+|17
+|-
+|DD
+|115
+|RSET
+|DCE
+|Тактирование элементов сигнала приёмника (Receiver Signal Element Timing)
+
+|18
+|-
+|-
+|141
+|LOOP
+|DTE
+|Локальная петля
+
+|19
+|-
+|SCA
+|120
+|SRS
+|DTE
+|Вторичный запрос на передачу
+
+|20
+|4
+|CD
+|108.2
+|DTR
+|DTE
+|Готовность терминального оборудования (Data Terminal Ready)
+
+|21
+|-
+|-
+|-
+|RDL
+|DTE
+|Режим удалённой цифровой петли (Remote Digital Loopback)
+
+|22
+|9
+|CE
+|125
+|RI
+|DCE
+|Индикатор передачи данных (Ring Indicator)
+
+|23
+|-
+|CH
+|111
+|DSRS
+|DTE
+|Селектор скорости передачи данных
+
+|24
+|-
+|DA
+|113
+|TSET
+|DTE
+|Тактирование элементов сигнала передатчика (Trans. Sig. Element Timing)
+
+|25
+|-
+|-
+|142
+|-
+|DCE
+|Режим тестирования
+|===
+
+=== Биты, Боды и Символы
+
+Скорость передачи данных (Baud) — это единица измерения скорости передачи в асинхронной связи. Из-за развития технологий модемной связи этот термин часто ошибочно используют для описания скорости передачи данных в современных устройствах.
+
+Традиционно, скорость передачи (Baud Rate) представляет количество битов, фактически передаваемых по среде, а не объем данных, которые действительно перемещаются от одного устройства DTE к другому. Подсчет Baud включает служебные биты — Start, Stop и Parity, которые генерируются передающим UART и удаляются принимающим UART. Это означает, что 7-битные слова данных на самом деле занимают 10 бит для полной передачи. Следовательно, модем, способный передавать 300 бит в секунду, обычно может передавать только 30 7-битных слов, если используется Parity и присутствуют один бит Start и один бит Stop.
+
+Если используются 8-битные слова данных и биты четности, скорость передачи данных снижается до 27,27 слов в секунду, так как теперь для передачи восьмибитных слов требуется 11 бит, а модем по-прежнему передает только 300 бит в секунду.
+
+Формула преобразования байтов в секунду в бодовую скорость и наоборот была простой до появления модемов с коррекцией ошибок. Эти модемы принимают последовательный поток битов от UART в компьютере (даже внутренние модемы часто работают с последовательными данными) и преобразуют биты обратно в байты. Затем эти байты объединяются в пакеты и передаются по телефонной линии с использованием синхронного метода передачи. Это означает, что стоповые, стартовые и биты четности, добавленные UART в DTE (компьютере), удаляются модемом перед передачей отправляющим модемом. Когда эти байты принимаются удалённым модемом, он добавляет стартовые, стоповые и биты четности к словам, преобразует их в последовательный формат и отправляет на принимающий UART в удалённом компьютере, который затем удаляет стартовые, стоповые и биты четности.
+
+Причина, по которой выполняются все эти дополнительные преобразования, заключается в том, чтобы два модема могли осуществлять коррекцию ошибок. Это означает, что принимающий модем может запросить у передающего модема повторную отправку блока данных, который был получен с некорректной контрольной суммой. Эта проверка обрабатывается модемами, и устройства DTE обычно не осознают, что этот процесс происходит.
+
+Удаляя стартовые, стоповые и биты четности, дополнительные биты данных, которые два модема должны обмениваться между собой для выполнения коррекции ошибок, в основном скрываются от эффективной скорости передачи, наблюдаемой отправляющим и принимающим оборудованием DTE. Например, если модем отправляет десять 7-битных слов другому модему без включения стартовых, стоповых и битов четности, отправляющий модем сможет добавить 30 бит своей собственной информации, которую принимающий модем может использовать для коррекции ошибок, не влияя на скорость передачи реальных данных.
+
+Использование термина "Бод" дополнительно осложняется модемами, выполняющими сжатие. Одно 8-битное слово, переданное по телефонной линии, может представлять собой дюжину слов, переданных на отправляющий модем. Принимающий модем развернёт данные обратно в их исходное содержимое и передаст эти данные принимающему DTE.
+
+Современные модемы также включают буферы, которые позволяют скорости передачи битов по телефонной линии (DCE к DCE) отличаться от скорости передачи битов между DTE и DCE на обоих концах соединения. Обычно скорость между DTE и DCE выше, чем скорость между DCE и DCE, из-за использования сжатия модемами.
+
+Поскольку количество битов, необходимых для описания байта, менялось во время передачи между двумя машинами, а также из-за различающихся скоростей передачи в битах в секунду на линиях DTE-DCE и DCE-DCE, использование термина «Бод» для описания общей скорости связи вызывает проблемы и может искажать реальную скорость передачи. Таким образом, термин «Биты в секунду» (bps) является корректным для описания скорости передачи на интерфейсе DCE-DCE, а термины «Бод» или «Биты в секунду» допустимы, когда соединение устанавливается между двумя системами с проводным подключением или используется модем, не выполняющий коррекцию ошибок или сжатие.
+
+Современные высокоскоростные модемы (2400, 9600, 14,400 и 19,200 бит/с) на самом деле всё ещё работают на скорости 2400 бод или ниже, или, точнее, 2400 символов в секунду. Высокоскоростные модемы способны кодировать больше бит данных в каждый символ с использованием техники, называемой "Заполнение созвездия (Constellation Stuffing)", поэтому эффективная скорость передачи данных в битах в секунду у модема выше, но модем продолжает работать в ограниченной полосе пропускания звуковых частот, предоставляемой телефонной системой. Модемы, работающие на скоростях 28,800 и выше, имеют переменную скорость передачи символов, но техника остаётся той же.
+
+=== UART в IBM PC
+
+Начиная с оригинального IBM Personal Computer, IBM выбрала UART INS8250 от National Semiconductor для использования в адаптере Parallel/Serial IBM PC. Последующие поколения совместимых компьютеров от IBM и других производителей продолжали использовать INS8250 или улучшенные версии UART из семейства National Semiconductor.
+
+==== Генеалогическое дерево National Semiconductor UART
+
+Существует несколько версий и последующих поколений UART INS8250. Основные версии описаны ниже.
+
+[.programlisting]
+....
+INS8250 -> INS8250B
+ \
+ \
+ \-> INS8250A -> INS82C50A
+ \
+ \
+ \-> NS16450 -> NS16C450
+ \
+ \
+ \-> NS16550 -> NS16550A -> PC16550D
+....
+
+INS8250::
+Эта часть использовалась в оригинальном IBM PC и IBM PC/XT. Первоначальное название этой части — INS8250 ACE (Asynchronous Communications Element), и она изготовлена по NMOS-технологии.
++
+8250 использует восемь портов ввода-вывода и имеет однобайтовый буфер передачи и однобайтовый буфер приема. Этот оригинальный UART имеет несколько состояний гонки и другие недостатки. Оригинальный BIOS IBM включает код для обхода этих недостатков, но это сделало BIOS зависимым от их наличия, поэтому последующие модели, такие как 8250A, 16450 или 16550, не могли быть использованы в оригинальном IBM PC или IBM PC/XT.
+INS8250-B::
+Это более медленная скорость INS8250, созданная по NMOS-технологии. Она имеет те же проблемы, что и оригинальный INS8250.
+
+INS8250A::
+Улучшенная версия INS8250 с использованием технологии XMOS, в которой исправлены различные функциональные недостатки. INS8250A изначально использовалась в клонах ПК от производителей, применявших "чистые" проекты BIOS. Из-за исправлений в микросхеме этот чип не мог использоваться с BIOS, совместимой с INS8250 или INS8250B.
+
+INS82C50A::
+Это CMOS-версия (с низким энергопотреблением) INS8250A и имеет схожие функциональные характеристики.
+
+NS16450::
+Так же, как NS8250A, но с улучшениями для работы с более быстрыми шинами CPU. IBM использовала этот компонент в IBM AT и обновила IBM BIOS, чтобы она больше не зависела от ошибок в INS8250.
+
+NS16C450::
+Это версия NS16450 с технологией CMOS (низкое энергопотребление).
+
+NS16550::
+То же, что и NS16450, с 16-байтовым буфером передачи и приема, но конструкция буфера была неудачной и не могла быть надежно использована.
+
+NS16550A::
+То же, что и NS16550, но с исправленными недостатками буфера. 16550A и его преемники стали наиболее популярными UART-устройствами в индустрии ПК, в основном благодаря их способности надежно работать на высоких скоростях передачи данных в операционных системах с медленным временем отклика прерываний.
+
+NS16C552::
+Этот компонент состоит из двух CMOS UART NS16C550A в одном корпусе.
+
+PC16550D::
+Так же, как NS16550A, с исправленными незначительными недостатками. Это ревизия D семейства 16550 и последняя доступная версия от National Semiconductor.
+
+==== NS16550AF и PC16550D — это одно и то же
+
+Компания National реорганизовала свою систему нумерации деталей несколько лет назад, и чип NS16550AFN больше не существует под этим названием. (Если у вас есть NS16550AFN, посмотрите на дату изготовления на корпусе — это четырехзначное число, обычно начинающееся с девятки. Первые две цифры обозначают год, а последние две — неделю года, когда чип был упакован. Если у вас есть NS16550AFN, скорее всего, он уже довольно старый.)
+
+Новые номера выглядят как PC16550DV, с незначительными отличиями в суффиксных буквах в зависимости от материала корпуса и его формы. (Описание системы нумерации можно найти ниже.)
+
+Важно понимать, что в некоторых магазинах можно заплатить $15 (США) за микросхему NS16550AFN, выпущенную в 1990 году, а в соседнем ящике могут лежать новые PC16550DN с небольшими исправлениями, которые National внесла с момента выпуска AFN. PC16550DN, вероятно, произведены в последние полгода и стоят вдвое дешевле (от $5 (США) при оптовой покупке), чем NS16550AFN, поскольку они легко доступны.
+
+Поскольку поставки чипов NS16550AFN продолжают сокращаться, цена, вероятно, будет расти до тех пор, пока больше людей не узнают и не примут тот факт, что PC16550DN действительно выполняет ту же функцию, что и старый номер детали.
+
+==== Система нумерации компонентов National Semiconductor
+
+Старые номера деталей NS``__nnnnnrqp__`` теперь имеют формат PC``__nnnnnrgp__``.
+
+`_r_` — это поле ревизии. Текущая ревизия 16550 от National Semiconductor — `D`.
+
+`_p_` — это поле типа пакета. Типы:
+
+[.informaltable]
+[cols="1,1,1", frame="none"]
+|===
+
+|"F"
+|QFP
+|(quad flat pack - квадратный плоский корпус) с L-образными выводами
+
+|"N"
+|DIP
+|(dual inline package — корпус с двусторонним расположением выводов) для сквозного монтажа с прямыми выводами
+
+|"V"
+|LPCC
+|(lead plastic chip carrier — пластиковый корпус) с J-образными выводами
+|===
+
+Поле _g_ обозначает класс изделия. Если перед буквой типа пакета стоит `I`, это указывает на «промышленный» класс детали, который имеет более высокие характеристики, чем стандартная деталь, но не такие высокие, как компонент военного назначения (Milspec). Это необязательное поле.
+
+То, что мы раньше называли NS16550AFN (DIP-корпус), теперь называется PC16550DN или PC16550DIN.
+
+=== Другие производители и аналогичные UART
+
+На протяжении многих лет чипы 8250, 8250A, 16450 и 16550 лицензировались или копировались другими производителями. В случае с 8250, 8250A и 16450 точная схема ("мегаячейка") была лицензирована многими производителями, включая Western Digital и Intel. Другие производители проводили обратную разработку чипа или создавали эмуляции с аналогичным поведением.
+
+Во внутренних модемах разработчик модема часто эмулирует 8250A/16450 с помощью микропроцессора модема, и эмулированный UART часто имеет скрытый буфер размером в несколько сотен байт. Благодаря размеру буфера, эти эмуляции могут быть такими же надежными, как 16550A, в способности обрабатывать высокоскоростные данные. Однако большинство операционных систем по-прежнему сообщают, что UART является только 8250A или 16450, и могут не эффективно использовать дополнительную буферизацию, присутствующую в эмулированном UART, если не используются специальные драйверы.
+
+Некоторые производители модемов под давлением рыночных сил отказываются от конструкции с буфером в сотни байт и вместо этого используют UART 16550A, чтобы их продукция выглядела выигрышно в рыночных сравнениях, даже если это может снизить фактическую производительность.
+
+Распространённое заблуждение заключается в том, что все микросхемы с маркировкой "16550A" одинаковы по производительности. Однако между ними существуют различия, а в некоторых клонах 16550A даже встречаются серьёзные недостатки.
+
+Когда компания National Semiconductor разработала NS16550, она получила несколько патентов на эту конструкцию и также ограничила лицензирование, что затруднило для других производителей выпуск чипов с аналогичными характеристиками. В результате патентов обратно спроектированные конструкции и эмуляции должны были избегать нарушения пунктов, охватываемых патентами. Впоследствии эти копии почти никогда не работают точно так же, как NS16550A или PC16550D, которые являются компонентами, наиболее востребованными производителями компьютеров и модемов, но иногда они не готовы платить цену, необходимую для получения оригинальных деталей.
+
+Некоторые различия в клонах микросхем 16550A несущественны, в то время как другие могут полностью препятствовать использованию устройства с определенной операционной системой или драйвером. Эти различия могут проявиться при использовании других драйверов или при возникновении определенных комбинаций событий, которые не были хорошо протестированы или учтены в драйвере Windows(R). Это происходит потому, что большинство производителей модемов и клонов 16550 используют драйверы Microsoft из Windows(R) for Workgroups 3.11 и утилиту Microsoft(R) MS-DOS(R) в качестве основных тестов на совместимость с NS16550A. Этот чрезмерно упрощенный критерий означает, что при использовании другой операционной системы могут возникнуть проблемы из-за тонких различий между клонами и оригинальными компонентами.
+
+National Semiconductor предоставила программу под названием COMTEST, которая выполняет тесты совместимости независимо от каких-либо драйверов ОС. Следует помнить, что цель такого типа программ — демонстрация недостатков в продуктах конкурентов, поэтому программа будет сообщать как о значительных, так и о крайне незначительных различиях в поведении тестируемого компонента.
+
+В серии тестов, проведенных автором этого документа в 1994 году, компоненты производства National Semiconductor, TI, StarTech и CMD, а также мегаячейки и эмуляции, встроенные во внутренние модемы, были протестированы с помощью COMTEST. Ниже приведен счетчик различий для некоторых из этих компонентов. Поскольку эти тесты проводились в 1994 году, они могут не отражать текущую производительность данного продукта от поставщика.
+
+Следует отметить, что COMTEST обычно завершает работу при обнаружении чрезмерного количества или определённых типов проблем. В рамках этого тестирования COMTEST был изменён так, чтобы он не завершал работу независимо от количества обнаруженных различий.
+
+[.informaltable]
+[cols="1,1,1", frame="none", options="header"]
+|===
+| Поставщик
+| Номер детали
+| Ошибки (также известные как "различия" в отчетах)
+
+|National
+|(PC16550DV)
+|0
+
+|National
+|(NS16550AFN)
+|0
+
+|National
+|(NS16C552V)
+|0
+
+|TI
+|(TL16550AFN)
+|3
+
+|CMD
+|(16C550PE)
+|19
+
+|StarTech
+|(ST16C550J)
+|23
+
+|Rockwell
+|Стандартный модем с внутренним 16550 или его эмуляцией (RC144DPi/C3000-25)
+|117
+
+|Sierra
+|Модем с внутренним 16550 (SC11951/SC11351)
+|91
+|===
+
+[NOTE]
+====
+На сегодняшний день автор данного документа не обнаружил ни одного не-National компонента, который бы показывал нулевые различия при использовании программы COMTEST. Также следует отметить, что у National было пять версий 16550 за эти годы, и новейшие компоненты ведут себя несколько иначе, чем классический NS16550AFN, который считается эталоном функциональности. COMTEST, по-видимому, закрывает глаза на различия внутри линейки продуктов National и не сообщает об ошибках в компонентах National (за исключением оригинальной 16550), даже когда существуют официальные errata, описывающие ошибки в ревизиях A, B и C этих компонентов, поэтому эту предвзятость COMTEST необходимо учитывать.
+====
+
+Важно понимать, что простое подсчитывание различий с COMTEST не дает полного представления о том, какие различия существенны, а какие нет. Например, около половины различий, обнаруженных в двух вышеупомянутых модемах с внутренними UART, были вызваны тем, что клоновые UART не поддерживают режимы пяти- и шестибитных символов. Настоящие UART 16550, 16450 и 8250 поддерживают эти режимы, и COMTEST проверяет их функциональность, поэтому фиксируется более пятидесяти различий. Однако почти ни один современный модем не поддерживает пяти- или шестибитные символы, особенно те, что обладают функциями коррекции ошибок и сжатия. Это означает, что различия, связанные с режимами пяти- и шестибитных символов, можно не учитывать.
+
+Многие различия, о которых сообщает COMTEST, связаны с временными характеристиками. Во многих клонированных конструкциях, когда хост читает из одного порта, статусные биты в другом порте могут обновляться с иной скоростью (быстрее или медленнее), чем у _настоящего_ NS16550AFN, и COMTEST выявляет эти различия. Это означает, что количество различий может вводить в заблуждение: одно устройство может иметь всего одно или два различия, но они крайне критичны, тогда как другое устройство, обновляющее статусные регистры быстрее или медленнее эталонной части (что, вероятно, никогда не повлияет на работу правильно написанного драйвера), может иметь десятки зарегистрированных различий.
+
+COMTEST можно использовать в качестве инструмента проверки, чтобы предупредить администратора о наличии потенциально несовместимых компонентов, которые могут вызвать проблемы или потребуют особого подхода.
+
+Если вы запускаете COMTEST на 16550, который находится в модеме или к модему подключён последовательный порт, необходимо сначала отправить модему команду ATE0&W, чтобы модем не эхо-повторял ни один из тестовых символов. Если вы забудете это сделать, COMTEST сообщит как минимум об одном различии:
+
+[source, shell]
+....
+Error (6)...Timeout interrupt failed: IIR = c1 LSR = 61
+....
+
+=== 8250/16450/16550 Регистры
+
+UART 8250/16450/16550 занимает восемь последовательных адресов портов ввода-вывода. В IBM PC определены два расположения для этих восьми портов, которые вместе известны как [.filename]#COM1# и [.filename]#COM2#. Производители PC-клонов и дополнительных карт создали два дополнительных области, известных как [.filename]#COM3# и [.filename]#COM4#, но эти дополнительные COM-порты конфликтуют с другим оборудованием на некоторых системах. Наиболее распространённый конфликт возникает с видеоадаптерами, обеспечивающими эмуляцию IBM 8514.
+
+[.filename]#COM1# находится в диапазоне от 0x3f8 до 0x3ff и обычно использует IRQ 4. [.filename]#COM2# находится в диапазоне от 0x2f8 до 0x2ff и обычно использует IRQ 3. [.filename]#COM3# находится в диапазоне от 0x3e8 до 0x3ef и не имеет стандартного IRQ. [.filename]#COM4# находится в диапазоне от 0x2e8 до 0x2ef и не имеет стандартного IRQ.
+
+Описание портов ввода-вывода UART 8250/16450/16550 представлено ниже.
+
+[.informaltable]
+[cols="10%,10%,80%", frame="none", options="header"]
+|===
+| Порт ввода/вывода
+| Доступ Разрешен
+| Описание
+
+|+0x00
+|запись (DLAB==0)
+|
+
+Регистр передачи данных (THR).
+
+Информация, записанная в этот порт, обрабатывается как слова данных и передается через UART.
+
+|+0x00
+|чтение (DLAB==0)
+|
+
+Регистр буфера приема (RBR).
+
+Любые слова данных, полученные UART из последовательного соединения, доступны для чтения хостом через этот порт.
+
+|+0x00
+|запись/чтение (DLAB==1)
+|
+
+Младший байт защелки делителя (DLL — Divisor Latch LSB)
+
+Это значение будет поделено от основного входного тактового сигнала (в IBM PC основной тактовый сигнал равен 1,8432 МГц), и полученный тактовый сигнал будет определять скорость передачи UART. Этот регистр содержит биты с 0 по 7 делителя.
+
+|+0x01
+|запись/чтение (DLAB==1)
+|
+
+Старший байт защелки делителя (DLH — Divisor Latch MSB)
+
+Это значение будет разделено от основного входного тактового сигнала (в IBM PC основной тактовый сигнал равен 1,8432 МГц), и полученный тактовый сигнал будет определять скорость передачи данных UART. Этот регистр содержит биты с 8 по 15 делителя.
+
+|+0x01
+|запись/чтение (DLAB==0)
+|Регистр разрешения прерываний (IER) +
+
+UART 8250/16450/1655 классифицирует события на четыре категории. Каждая категория может быть настроена на генерацию прерывания при возникновении любого из событий. UART 8250/16450/16550 генерирует единый внешний сигнал прерывания независимо от того, сколько событий в разрешённых категориях произошло. Задача главного процессора — обработать прерывание и затем опросить разрешённые категории прерываний (обычно прерывания разрешены для всех категорий), чтобы определить истинную причину(ы) прерывания. +
+Бит 7 -> Зарезервирован, всегда 0. +
+Бит 6 -> Зарезервирован, всегда 0. +
+Бит 5 -> Зарезервирован, всегда 0. +
+Бит 4 -> Зарезервирован, всегда 0. +
+Бит 3 -> Разрешение прерывания по состоянию модема (EDSSI). Установка этого бита в "1" позволяет UART генерировать прерывание при изменении состояния одной или нескольких линий статуса. +
+Бит 2 -> Разрешение прерывания по состоянию линии приёмника (ELSI). Установка этого бита в "1" приводит к генерации прерывания UART при обнаружении ошибки (или сигнала BREAK) во входящих данных. +
+Бит 1 -> Разрешение прерывания по опустошению регистра передатчика (ETBEI). Установка этого бита в "1" приводит к генерации прерывания UART, когда в UART появляется место для одного или более дополнительных символов, предназначенных для передачи. +
+Бит 0 -> Разрешение прерывания по наличию принятых данных (ERBFI). Установка этого бита в "1" приводит к генерации прерывания UART, когда UART принял достаточное количество символов для превышения порога FIFO, или истекло время ожидания FIFO (устаревшие данные), или принят одиночный символ при отключённом FIFO.
+
+|+0x02
+|запись
+|Регистр управления FIFO (FCR — FIFO Control Register) (Этот порт отсутствует в UART 8250 и 16450.) +
+Бит 7 -> Бит триггера приемника #1 +
+Бит 6 -> Бит триггера приемника #0 +
+
+Эти два бита определяют, при каком количестве данных приемник должен генерировать прерывание, когда FIFO активен. +
+7 6 Количество слов перед генерацией прерывания +
+0 0 1 +
+0 1 4 +
+1 0 8 +
+1 1 14 +
+Бит 5 -> Зарезервирован, всегда 0. +
+Бит 4 -> Зарезервирован, всегда 0. +
+Бит 3 -> Выбор режима DMA. Если бит 0 установлен в "1" (FIFO включены), установка этого бита изменяет работу сигналов -RXRDY и -TXRDY с режима 0 на режим 1. +
+Бит 2 -> Сброс передающего FIFO. При записи "1" в этот бит содержимое FIFO очищается. Любое слово, которое передается в данный момент, будет отправлено полностью. Эта функция полезна для прерывания передачи. +
+Бит 1 -> Сброс приемного FIFO. При записи "1" в этот бит содержимое FIFO очищается. Любое слово, которое в данный момент собирается в сдвиговом регистре, будет принято полностью. +
+Бит 0 -> Включение FIFO 16550. При установке этого бита активируются как передающий, так и приемный FIFO. Любое содержимое в регистре хранения, сдвиговых регистрах или FIFO теряется при включении или отключении FIFO. +
+
+|+0x02
+|чтение
+|Регистр идентификации прерываний +
+Бит 7 -> FIFO включены. На UART 8250/16450 этот бит равен нулю. +
+Бит 6 -> FIFO включены. На UART 8250/16450 этот бит равен нулю. +
+Бит 5 -> Зарезервирован, всегда 0. +
+Бит 4 -> Зарезервирован, всегда 0. +
+Бит 3 -> Бит идентификатора прерывания №2. На UART 8250/16450 этот бит равен нулю. +
+Бит 2 -> Бит идентификатора прерывания №1 +
+Бит 1 -> Бит идентификатора прерывания №0.Эти три бита объединяются для указания категории события, вызвавшего текущее прерывание. Эти категории имеют приоритеты, поэтому, если несколько категорий событий происходят одновременно, UART сообщит о более важных событиях первыми, и хост должен обрабатывать события в порядке их поступления. Все события, вызвавшие текущее прерывание, должны быть обработаны до генерации новых прерываний. (Это ограничение архитектуры ПК.) +
+2 1 0 Приоритет Описание +
+0 1 1 Первый Принятая ошибка (OE, PE, BI или FE) +
+0 1 0 Второй Доступны принятые данные +
+1 1 0 Второй Идентификация уровня триггера (Устаревшие данные в буфере приема) +
+0 0 1 Третий Передатчик готов принять больше данных (THRE) +
+0 0 0 Четвертый Изменение состояния модема (-CTS, -DSR, -RI или -DCD) +
+Бит 0 -> Бит ожидания прерывания. Если этот бит установлен в "0", то как минимум одно прерывание ожидает обработки.
+
+|+0x03
+|запись/чтение
+|Регистр управления линией (LCR — Line Control Register) +
+Бит 7 -> Бит доступа к защелке делителя (DLAB). При установке доступ к регистру передачи/приема данных (THR/RBR) и регистру разрешения прерываний (IER) отключается. Любой доступ к этим портам перенаправляется к регистрам защелки делителя. Установка этого бита, загрузка регистров делителя и сброс DLAB должны выполняться при отключенных прерываниях. +
+Бит 6 -> Установка прерывания. При установке в "1" передатчик начинает передавать непрерывный интервал (Spacing), пока этот бит не будет сброшен в "0". Это переопределяет любые передаваемые биты символов. +
+Бит 5 -> Фиксированный бит четности. При включенной проверке четности установка этого бита приводит к тому, что бит четности всегда будет "1" или "0" в зависимости от значения бита 4.
+Бит 4 -> Выбор четности (EPS). При включенной проверке четности и если бит 5 равен "0", установка этого бита приводит к использованию и ожиданию четной четности. В противном случае используется нечетная четность. +
+Бит 3 -> Разрешение проверки четности (PEN). При установке в "1" бит четности вставляется между последним битом данных и стоповым битом. UART также ожидает наличие бита четности в принимаемых данных. +
+Бит 2 -> Количество стоповых битов (STB). Если установлен в "1" и используются 5-битные слова данных, передается и ожидается 1.5 стоповых бита в каждом слове данных. Для 6, 7 и 8-битных слов данных передается и ожидается 2 стоповых бита. Если этот бит сброшен в "0", используется один стоповый бит в каждом слове данных. +
+Бит 1 -> Бит выбора длины слова #1 (WLSB1) +
+Бит 0 -> Бит выбора длины слова #0 (WLSB0) +
+Вместе эти биты определяют количество битов в каждом слове данных. +
+1 0 Длина слова +
+0 0 5 бит данных +
+0 1 6 бит данных +
+1 0 7 бит данных +
+1 1 8 бит данных +
+
+|+0x04
+|запись/чтение
+|Регистр управления модемом (MCR — Modem Control Register) +
+Бит 7 -> Зарезервирован, всегда 0. +
+Бит 6 -> Зарезервирован, всегда 0. +
+Бит 5 -> Зарезервирован, всегда 0. +
+Бит 4 -> Режим петли (Loop-Back). При установке в "1" передатчик и приёмник UART соединяются внутри для диагностики. Также выходы управления модемом UART подключаются к его входам: CTS к RTS, DTR к DSR, OUT1 к RI, а OUT2 к DCD. +
+Бит 3 -> OUT2. Вспомогательный выход, который процессор может установить в высокий или низкий уровень. В адаптере IBM PC (и большинстве клонов) OUT2 используется для отключения сигнала прерывания от UART 8250/16450/16550. +
+Бит 2 -> OUT1. Вспомогательный выход, который процессор может установить в высокий или низкий уровень. На адаптере IBM PC не используется. +
+Бит 1 -> Запрос на передачу (RTS). При установке в "1" выход линии -RTS UART переходит в низкий уровень (активное состояние). +
+Бит 0 -> Готовность терминала данных (DTR). При установке в "1" выход линии -DTR UART переходит в низкий уровень (активное состояние). +
+
+|+0x05
+|запись/чтение
+|Регистр состояния линии (LSR — Line Status Register) +
+Бит 7 -> Ошибка в FIFO приемника. На UART 8250/16450 этот бит равен нулю. Этот бит устанавливается в «1», когда любой из байтов в FIFO имеет одно или несколько из следующих условий ошибки: PE, FE или BI. +
+Бит 6 -> Передатчик пуст (TEMT). Когда установлен в «1», в FIFO передатчика или сдвиговом регистре передатчика не осталось слов. Передатчик полностью бездействует. +
+Бит 5 -> Регистр хранения передатчика пуст (THRE). Когда установлен в «1», в FIFO (или регистре хранения) теперь есть место для передачи как минимум одного дополнительного слова. Передатчик может все еще передавать данные, когда этот бит установлен в «1». +
+Бит 4 -> Прерывание по Break (BI). Приемник обнаружил сигнал Break. +
+Бит 3 -> Ошибка кадрирования (FE). Обнаружен стартовый бит, но стоповый бит не появился в ожидаемое время. Принятое слово, вероятно, искажено. +
+Бит 2 -> Ошибка четности (PE). Бит четности для принятого слова был некорректен. +
+Бит 1 -> Ошибка переполнения (OE). Было получено новое слово, но в буфере приема не было места. Вновь поступившее слово в сдвиговом регистре отбрасывается. На UART 8250/16450 слово в регистре хранения отбрасывается, а вновь поступившее слово помещается в регистр хранения. +
+Бит 0 -> Данные готовы (DR). Одно или несколько слов находятся в FIFO приемника, которые хост может прочитать. Слово должно быть полностью принято и перемещено из сдвигового регистра в FIFO (или регистр хранения для 8250/16450) до того, как этот бит будет установлен.
+
+|+0x06
+|запись/чтение
+|Регистр состояния модема (MSR — Modem Status Register) +
+Бит 7 -> Обнаружение несущей данных (DCD). Отражает состояние линии DCD на UART. +
+Бит 6 -> Индикатор вызова (RI). Отражает состояние линии RI на UART. +
+Бит 5 -> Готовность передатчика данных (DSR). Отражает состояние линии DSR на UART. +
+Бит 4 -> Готовность к приёму (CTS). Отражает состояние линии CTS на UART. +
+Бит 3 -> Изменение состояния обнаружения несущей данных (DDCD). Устанавливается в "1", если линия -DCD изменила состояние ещё раз с момента последнего чтения MSR хостом. +
+Бит 2 -> Фронт сигнала вызова (TERI). Устанавливается в "1", если линия -RI перешла из низкого уровня в высокий с момента последнего чтения MSR хостом. +
+Бит 1 -> Изменение состояния готовности передатчика данных (DDSR). Устанавливается в "1", если линия -DSR изменила состояние ещё раз с момента последнего чтения MSR хостом. +
+Бит 0 -> Изменение состояния готовности к приёму (DCTS). Устанавливается в "1", если линия -CTS изменила состояние ещё раз с момента последнего чтения MSR хостом. +
+|+0x07
+|запись/чтение
+|Регистр Scratch (SCR — Scratch Register). Этот регистр не выполняет никакой функции в UART. Хост может записать любое значение в это место и позднее считать его.
+|===
+
+=== За пределами UART 16550A
+
+Хотя National Semiconductor не предлагала никаких компонентов, совместимых с 16550 и предоставляющих дополнительные функции, другие производители сделали это. Некоторые из этих компонентов описаны ниже. Следует понимать, что для эффективного использования этих улучшений могут потребоваться драйверы от производителя чипа, поскольку большинство популярных операционных систем не поддерживают функции, выходящие за рамки возможностей 16550.
+
+ST16650::
+По умолчанию эта часть аналогична NS16550A, но дополнительно можно включить расширенный 32-байтовый буфер отправки и приёма. Производитель — StarTech.
+
+TIL16660::
+По умолчанию эта часть ведёт себя аналогично NS16550A, но дополнительно может быть включён расширенный 64-байтный буфер передачи и приёма. Производится Texas Instruments.
+
+Hayes ESP::
+Эта проприетарная внешняя карта содержит буфер передачи и приема размером 2048 байт и поддерживает скорость передачи данных до 230,4 Кбит/с. Произведено компанией Hayes.
+
+В дополнение к этим "простым" UART многие производители выпускают интеллектуальные платы для последовательной связи. Такой тип конструкции обычно включает микропроцессор, который взаимодействует с несколькими UART, обрабатывает и буферизует данные, а затем при необходимости уведомляет основной процессор ПК. Поскольку в такой системе связи UART не доступны напрямую процессору ПК, производителю не обязательно использовать UART, совместимые с 8250, 16450 или 16550. Это дает разработчику свободу выбора компонентов с лучшими характеристиками производительности.
+
+[[sio]]
+== Настройка драйвера [.filename]#sio#
+
+Драйвер [.filename]#sio# обеспечивает поддержку интерфейсов связи EIA RS-232C (CCITT V.24) на основе NS8250, NS16450, NS16550 и NS16550A. Также поддерживаются несколько многопортовых карт. Подробную техническую документацию смотрите на man:sio[4].
+
+=== Digi International (DigiBoard) PC/8
+
+_Предоставлено `{awebster}`. 26 августа 1995._
+
+Вот фрагмент конфигурации с машины, на которой установлена плата Digi International PC/8 с чипом 16550. К ней подключено 8 модемов, работающих на этих 8 линиях, и они отлично функционируют. Не забудьте добавить `options COM_MULTIPORT`, иначе работа будет нестабильной!
+
+[.programlisting]
+....
+device sio4 at isa? port 0x100 flags 0xb05
+device sio5 at isa? port 0x108 flags 0xb05
+device sio6 at isa? port 0x110 flags 0xb05
+device sio7 at isa? port 0x118 flags 0xb05
+device sio8 at isa? port 0x120 flags 0xb05
+device sio9 at isa? port 0x128 flags 0xb05
+device sio10 at isa? port 0x130 flags 0xb05
+device sio11 at isa? port 0x138 flags 0xb05 irq 9
+....
+
+Хитрость настройки заключается в том, что старший бит флагов представляет последний порт SIO, в данном случае 11, поэтому флаги равны 0xb05.
+
+=== Boca 16
+
+_Предоставлено `{whiteside}`. 26 августа 1995._
+
+Процедуры по настройке платы Boca с 16 портами в FreeBSD довольно просты, но вам понадобится несколько вещей для успешной работы:
+
+. Вам необходимо либо установить исходные коды ядра, чтобы перекомпилировать нужные опции, либо найти кого-то, кто сделает это за вас. Стандартное ядро версии 2.0.5 _не_ включает поддержку нескольких портов, и в любом случае вам потребуется добавить запись устройства для каждого порта.
+. Два, вам нужно знать прерывание и настройку ввода-вывода для вашей платы Boca, чтобы правильно установить эти параметры в ядре.
+
+Важное замечание — реальные микросхемы UART для Boca 16 находятся в соединительной коробке, а не на внутренней плате. Поэтому, если она отключена, попытки проверить эти порты завершатся неудачей. Я никогда не проверял загрузку с отключённой коробкой и последующим её подключением, и не рекомендую вам этого делать.
+
+Если у вас ещё нет настроенного файла конфигурации пользовательского ядра, обратитесь к extref:{handbook}[Конфигурация ядра, kernelconfig] в руководстве FreeBSD для получения общих инструкций. Ниже приведены конкретные настройки для платы Boca 16, предполагается, что вы используете ядро с именем MYKERNEL и редактируете его с помощью vi.
+
+[.procedure]
+====
+. Добавьте строку
++
+[.programlisting]
+....
+options COM_MULTIPORT
+....
+в конфигурационный файл.
+. Где находятся текущие строки `device sio__n__`, вам нужно добавить ещё 16 устройств. В следующем примере показана плата Boca Board с прерыванием 3 и базовым адресом ввода-вывода 100h. Адрес ввода-вывода для каждого порта увеличивается на 8 в шестнадцатеричной системе относительно предыдущего порта, поэтому адреса будут 100h, 108h, 110h...
++
+[.programlisting]
+....
+device sio1 at isa? port 0x100 flags 0x1005
+device sio2 at isa? port 0x108 flags 0x1005
+device sio3 at isa? port 0x110 flags 0x1005
+device sio4 at isa? port 0x118 flags 0x1005
+...
+device sio15 at isa? port 0x170 flags 0x1005
+device sio16 at isa? port 0x178 flags 0x1005 irq 3
+....
++
+Запись flags _обязательно_ должна быть изменена по сравнению с этим примером, если вы не используете точно такие же назначения sio. Флаги устанавливаются в соответствии с 0x``__MYY__``, где _M_ обозначает младший номер главного порта (последний порт на Boca 16), а _YY_ указывает, включен или выключен FIFO (включен), используется ли разделение IRQ (да) и есть ли регистр управления IRQ, совместимый с AST/4 (нет). В этом примере,
++
+[.programlisting]
+....
+ flags
+ 0x1005
+....
+указывает, что основной порт - sio16. Если добавить другую плату и назначить порты с sio17 по sio28, флаги для всех 16 портов на _этой_ плате будут 0x1C05, где 1C обозначает минорный номер основного порта. Не изменяйте значение 05.
+. Сохраните и завершите конфигурацию ядра, перекомпилируйте, установите и перезагрузитесь. Предполагая, что вы успешно установили перекомпилированное ядро и настроили правильный адрес и IRQ, сообщение при загрузке должно указывать на успешное обнаружение портов Boca следующим образом: (очевидно, номера sio, IO и IRQ могут отличаться)
++
+[source, shell]
+....
+sio1 at 0x100-0x107 flags 0x1005 on isa
+sio1: type 16550A (multiport)
+sio2 at 0x108-0x10f flags 0x1005 on isa
+sio2: type 16550A (multiport)
+sio3 at 0x110-0x117 flags 0x1005 on isa
+sio3: type 16550A (multiport)
+sio4 at 0x118-0x11f flags 0x1005 on isa
+sio4: type 16550A (multiport)
+sio5 at 0x120-0x127 flags 0x1005 on isa
+sio5: type 16550A (multiport)
+sio6 at 0x128-0x12f flags 0x1005 on isa
+sio6: type 16550A (multiport)
+sio7 at 0x130-0x137 flags 0x1005 on isa
+sio7: type 16550A (multiport)
+sio8 at 0x138-0x13f flags 0x1005 on isa
+sio8: type 16550A (multiport)
+sio9 at 0x140-0x147 flags 0x1005 on isa
+sio9: type 16550A (multiport)
+sio10 at 0x148-0x14f flags 0x1005 on isa
+sio10: type 16550A (multiport)
+sio11 at 0x150-0x157 flags 0x1005 on isa
+sio11: type 16550A (multiport)
+sio12 at 0x158-0x15f flags 0x1005 on isa
+sio12: type 16550A (multiport)
+sio13 at 0x160-0x167 flags 0x1005 on isa
+sio13: type 16550A (multiport)
+sio14 at 0x168-0x16f flags 0x1005 on isa
+sio14: type 16550A (multiport)
+sio15 at 0x170-0x177 flags 0x1005 on isa
+sio15: type 16550A (multiport)
+sio16 at 0x178-0x17f irq 3 flags 0x1005 on isa
+sio16: type 16550A (multiport master)
+....
++
+Если сообщения проходят слишком быстро, чтобы их увидеть,
++
+[source, shell]
+....
+# dmesg | more
+....
+покажет вам сообщения загрузки.
+. Далее необходимо создать соответствующие записи в [.filename]#/dev# для устройств с помощью скрипта [.filename]#/dev/MAKEDEV#. Этот шаг можно пропустить, если вы используете FreeBSD 5.X с ядром, в котором включена поддержка man:devfs[5].
++
+Если вам необходимо создать записи в [.filename]#/dev#, выполните следующую команду от имени `root`:
++
+[source, shell]
+....
+# cd /dev
+# ./MAKEDEV tty1
+# ./MAKEDEV cua1
+
+(everything in between)
+# ./MAKEDEV ttyg
+# ./MAKEDEV cuag
+....
++
+Если по какой-то причине вам не нужны или не требуются устройства исходящих соединений, вы можете обойтись без создания устройств [.filename]#cua*#.
+. Если вам нужен быстрый и небрежный способ убедиться, что устройства работают, вы можете просто подключить модем к каждому порту и (как root)
++
+[source, shell]
+....
+# echo at > ttyd*
+....
+для каждого устройства, которое вы создали. Вы _должны_ увидеть, как мигают индикаторы RX для каждого рабочего порта.
+====
+
+=== Поддержка дешёвых многоканальных UART-карт
+
+_Предоставлено Хельге Ольдахом_ mailto:hmo@sep.hamburg.com[hmo@sep.hamburg.com], сентябрь 1999 года
+
+Вы когда-нибудь задумывались о поддержке FreeBSD вашей 20-долларовой многофункциональной карты с двумя (или более) COM-портами, разделяющими IRQ? Вот как это сделать:
+
+Обычно единственный способ поддержки таких плат — использование отдельного IRQ для каждого порта. Например, если ваша материнская плата имеет встроенный порт [.filename]#COM1# (он же [.filename]#sio0# — адрес ввода-вывода 0x3F8 и IRQ 4), а у вас есть расширительная плата с двумя UART, то обычно их нужно настроить как [.filename]#COM2# (он же [.filename]#sio1# — адрес ввода-вывода 0x2F8 и IRQ 3), а третий порт (он же [.filename]#sio2#) — с адресом 0x3E8 и IRQ 5. Очевидно, это расточительное использование ресурсов IRQ, так как в принципе возможно запустить оба порта расширительной платы с одним IRQ, используя конфигурацию `COM_MULTIPORT`, описанную в предыдущих разделах.
+
+Такие недорогие платы ввода-вывода обычно имеют перемычечную матрицу 4x3 для COM-портов, подобную следующей:
+
+[.programlisting]
+....
+ o o o *
+Port A |
+ o * o *
+Port B |
+ o * o o
+IRQ 2 3 4 5
+....
+
+Показано, что порт A подключен для IRQ 5, а порт B — для IRQ 3. Столбцы IRQ на вашей конкретной плате могут отличаться — другие платы могут предоставлять перемычки для IRQ 3, 4, 5 и 7.
+
+Можно было бы сделать вывод, что подключение обоих портов к IRQ 3 с помощью самодельной перемычки, замыкающей все три точки соединения в колонке IRQ 3, решит проблему, но это не так. Невозможно дублировать IRQ 3, потому что выходные драйверы каждого UART соединены по схеме "монтажное И", и если один из UART управляет IRQ 3, выходной сигнал будет не таким, как ожидается. В зависимости от реализации платы расширения или материнской платы, линия IRQ 3 будет постоянно находиться в высоком уровне или всегда оставаться низкой.
+
+Вам необходимо разделить драйверы прерываний для двух UART, чтобы линия прерывания платы поднималась только тогда (и только тогда), когда один из UART вызывает прерывание, и оставалась низкой в противном случае. Решение было предложено Йоргом Вуншем mailto:j@ida.interface-business.de[j@ida.interface-business.de]: припаять монтажную схему "монтажное ИЛИ", состоящую из двух диодов (предпочтительно германиевых или типа Шоттки) и резистора на 1 кОм. Вот схема, начиная с контактного поля 4x3 выше:
+
+[.programlisting]
+....
+ Diode
+ +---------->|-------+
+ / |
+ o * o o | 1 kOhm
+Port A +----|######|-------+
+ o * o o | |
+Port B `-------------------+ ==+==
+ o * o o | Ground
+ \ |
+ +--------->|-------+
+IRQ 2 3 4 5 Diode
+....
+
+Катоды диодов соединены в общей точке вместе с подтягивающим резистором 1 кОм. Важно подключить резистор к земле, чтобы избежать плавания линии IRQ на шине.
+
+Теперь мы готовы настроить ядро. Продолжая этот пример, мы настроим:
+
+[.programlisting]
+....
+# standard on-board COM1 port
+device sio0 at isa? port "IO_COM1" flags 0x10
+# patched-up multi-I/O extension board
+options COM_MULTIPORT
+device sio1 at isa? port "IO_COM2" flags 0x205
+device sio2 at isa? port "IO_COM3" flags 0x205 irq 3
+....
+
+Обратите внимание, что настройка `flags` для [.filename]#sio1# и [.filename]#sio2# действительно важна; подробности смотрите в man:sio[4]. (Обычно `2` в атрибуте "flags" относится к [.filename]#sio#`2`, который содержит IRQ, и вам наверняка потребуется нижний ниббл `5`.) При включённом режиме подробного вывода ядра это должно дать что-то похожее на следующее:
+
+[source, shell]
+....
+sio0: irq maps: 0x1 0x11 0x1 0x1
+sio0 at 0x3f8-0x3ff irq 4 flags 0x10 on isa
+sio0: type 16550A
+sio1: irq maps: 0x1 0x9 0x1 0x1
+sio1 at 0x2f8-0x2ff flags 0x205 on isa
+sio1: type 16550A (multiport)
+sio2: irq maps: 0x1 0x9 0x1 0x1
+sio2 at 0x3e8-0x3ef irq 3 flags 0x205 on isa
+sio2: type 16550A (multiport master)
+....
+
+Хотя [.filename]#/sys/i386/isa/sio.c# выглядит несколько загадочно из-за использования массива "irq maps" выше, основная идея заключается в том, что вы наблюдаете `0x1` на первой, третьей и четвертой позициях. Это означает, что соответствующий IRQ был установлен при выводе и сброшен после, что полностью соответствует ожиданиям. Если ваше ядро не демонстрирует такое поведение, скорее всего, проблема в вашей разводке.
+
+[[cy]]
+== Настройка драйвера [.filename]#cy#
+
+_Предоставлено Алексом Нэшем. 6 июня 1996._
+
+Многопортовые карты Cyclades основаны на драйвере [.filename]#cy#, а не на обычном драйвере [.filename]#sio#, используемом другими многопортовыми картами. Настройка сводится к простым действиям:
+
+[.procedure]
+====
+. Добавьте устройство [.filename]#cy# в конфигурацию ядра (обратите внимание, что параметры irq и iomem могут отличаться).
++
+[.programlisting]
+....
+device cy0 at isa? irq 10 iomem 0xd4000 iosiz 0x2000
+....
+. Перестройте и установите новый образ ядра.
+. Создайте файлы устройств, введя (следующий пример предполагает 8-портовую плату):
++
+[source, shell]
+....
+# cd /dev
+# for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done
+....
+
+. Если необходимо, добавьте записи для коммутируемого доступа в [.filename]#/etc/ttys#, дублируя записи для последовательных устройств (`ttyd`) и используя `ttyc` вместо `ttyd`. Например:
++
+[.programlisting]
+....
+ttyc0 "/usr/libexec/getty std.38400" unknown on insecure
+ttyc1 "/usr/libexec/getty std.38400" unknown on insecure
+ttyc2 "/usr/libexec/getty std.38400" unknown on insecure
+...
+ttyc7 "/usr/libexec/getty std.38400" unknown on insecure
+....
+. Перезагрузитесь с новым ядром.
+====
+
+== Настройка драйвера [.filename]#si#
+
+_Предоставлено `{nsayer}`. 25 марта 1998._
+
+Специальные мультипортные карты Specialix SI/XIO и SX используют драйвер [.filename]#si#. На одной машине может быть установлено до 4 хост-карт. Поддерживаются следующие хост-карты:
+
+* ISA SI/XIO host card (2 versions)
+* EISA SI/XIO host card
+* PCI SI/XIO host card
+* ISA SX host card
+* PCI SX host card
+
+Хотя хост-карты SX и SI/XIO выглядят заметно по-разному, их функциональность практически одинакова. Хост-карты не используют порты ввода-вывода, а вместо этого требуют 32К сегмента памяти. Заводская конфигурация для карт ISA размещает этот сегмент по адресу `0xd0000-0xd7fff`. Также им требуется IRQ. Карты PCI, разумеется, настраиваются автоматически.
+
+Вы можете подключить до 4 внешних модулей к каждой карте хоста. Внешние модули содержат либо 4, либо 8 последовательных портов. Они бывают следующих видов:
+
+* Модули SI на 4 или 8 портов. Поддерживается скорость до 57600 бит/с на каждом порту.
+* XIO 8-портовые модули. Поддерживается скорость до 115200 бит/с на каждом порту. Один из типов модулей XIO имеет 7 последовательных и 1 параллельный порт.
+* Модули SXDC с 8 портами. Поддерживается скорость до 921600 бит/с на каждом порту. Как и в случае с XIO, доступен модуль с одним параллельным портом.
+
+Для настройки карты хоста ISA добавьте следующую строку в файл конфигурации ядра, изменив числа по мере необходимости:
+
+[.programlisting]
+....
+device si0 at isa? iomem 0xd0000 irq 11
+....
+
+Допустимые номера IRQ: 9, 10, 11, 12 и 15 для SX ISA host cards и 11, 12 и 15 для SI/XIO ISA host cards.
+
+Для настройки карты EISA или PCI используйте следующую строку:
+
+[.programlisting]
+....
+device si0
+....
+
+После добавления записи конфигурации пересоберите и установите свое новое ядро.
+
+[NOTE]
+====
+Следующий шаг не обязателен, если вы используете man:devfs[5] в FreeBSD 5._X_.
+====
+
+После перезагрузки с новым ядром необходимо создать файлы устройств в [.filename]#/dev#. Скрипт [.filename]#MAKEDEV# выполнит эту задачу за вас. Подсчитайте общее количество портов и введите:
+
+[source, shell]
+....
+# cd /dev
+# ./MAKEDEV ttyAnn cuaAnn
+....
+
+(где _nn_ — количество портов)
+
+Если вы хотите, чтобы приглашения к входу отображались на этих портах, вам нужно добавить такие строки в [.filename]#/etc/ttys#:
+
+[.programlisting]
+....
+ttyA01 "/usr/libexec/getty std.9600" vt100 on insecure
+....
+
+Измените тип терминала по необходимости. Для модемов подойдут `dialup` или `unknown`.
diff --git a/documentation/content/ru/articles/serial-uart/_index.po b/documentation/content/ru/articles/serial-uart/_index.po
new file mode 100644
index 0000000000..bd93bb319b
--- /dev/null
+++ b/documentation/content/ru/articles/serial-uart/_index.po
@@ -0,0 +1,3864 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-24 18:35+0300\n"
+"PO-Revision-Date: 2025-08-16 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesserial-uart_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Подробная информация об использовании последовательных портов и UART в FreeBSD"
+
+#. 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 "Учебное руководство по последовательному интерфейсу и UART"
+
+#. 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 ""
+"Эта статья рассказывает об использовании последовательного оборудования с "
+"FreeBSD."
+
+#. 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 "UART: Что это и как работает"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:55
+msgid "_Copyright (R) 1996 `{uhclem}`, All Rights Reserved. 13 January 1996._"
+msgstr ""
+"_Copyright (R) 1996 `{uhclem}`, All Rights Reserved. 13 января 1996 год_"
+
+#. 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 ""
+"Универсальный асинхронный приёмопередатчик (UART) — это ключевой компонент "
+"подсистемы последовательной передачи данных компьютера. UART принимает байты "
+"данных и передаёт отдельные биты последовательно. На стороне приёмника "
+"второй UART собирает биты обратно в полные байты."
+
+#. 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 ""
+"Существует две основные формы последовательной передачи данных: синхронная и "
+"асинхронная. В зависимости от режимов, поддерживаемых оборудованием, "
+"название подсистемы связи обычно включает букву `A`, если она поддерживает "
+"асинхронную передачу, и букву `S`, если поддерживается синхронная передача. "
+"Обе формы описаны ниже."
+
+#. 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 ""
+"UART Universal Asynchronous Receiver/Transmitter — Универсальный асинхронный "
+"приёмопередатчик"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:73
+msgid "USART Universal Synchronous-Asynchronous Receiver/Transmitter"
+msgstr ""
+"USART Universal Synchronous-Asynchronous Receiver/Transmitter — "
+"Универсальный синхронно-асинхронный приёмопередатчик"
+
+#. 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 ""
+"При передаче слова через UART в асинхронном режиме к началу каждого "
+"передаваемого слова добавляется бит, называемый \"стартовым битом\". "
+"Стартовый бит используется для оповещения приёмника о начале передачи слова "
+"данных, а также для синхронизации тактового сигнала приёмника с тактовым "
+"сигналом передатчика. Эти два тактовых сигнала должны быть достаточно "
+"точными, чтобы их расхождение по частоте не превышало 10% во время передачи "
+"оставшихся битов слова. (Данное требование было установлено во времена "
+"механических телетайпов и легко выполняется современным электронным "
+"оборудованием.)"
+
+#. 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 ""
+"После стартового бита передаются отдельные биты слова данных, начиная с "
+"младшего значащего бита (LSB). Каждый бит передается в течение точно такого "
+"же времени, как и все остальные биты, и приемник \"проверяет\" состояние "
+"линии примерно на середине интервала, отведенного для каждого бита, чтобы "
+"определить, является ли бит `1` или `0`. Например, если передача каждого "
+"бита занимает две секунды, приемник проверит сигнал, чтобы определить, "
+"является ли он `1` или `0`, через одну секунду, затем подождет две секунды и "
+"проверит значение следующего бита, и так далее."
+
+#. 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 ""
+"Когда приемник получил все биты в слове данных, он может проверить биты "
+"четности (как отправитель, так и приемник должны договориться о том, будет "
+"ли использоваться бит четности), а затем приемник ищет стоповый бит. Если "
+"стоповый бит не появляется, когда должен, UART считает все слово искаженным "
+"и сообщит об ошибке кадрирования главному процессору при чтении слова "
+"данных. Обычная причина ошибки кадрирования — несовпадение скорости тактовых "
+"сигналов отправителя и приемника или прерывание сигнала."
+
+#. 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 ""
+"Независимо от того, были ли данные получены правильно или нет, UART "
+"автоматически отбрасывает бит чётности, стартовый и стоповый биты. Если "
+"отправитель и получатель настроены одинаково, эти биты не передаются хосту."
+
+#. 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 "Другие функции UART"
+
+#. 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 ""
+"Помимо основной задачи преобразования данных из параллельного формата в "
+"последовательный для передачи и из последовательного в параллельный при "
+"приеме, UART обычно предоставляет дополнительные схемы для сигналов, которые "
+"могут использоваться для указания состояния среды передачи и регулирования "
+"потока данных в случае, если удаленное устройство не готово принимать больше "
+"данных. Например, когда устройство, подключенное к UART, является модемом, "
+"модем может сообщать о наличии несущей на телефонной линии, в то время как "
+"компьютер может дать команду модему сбросить себя или не принимать вызовы, "
+"поднимая или опуская один или несколько из этих дополнительных сигналов. "
+"Функция каждого из этих дополнительных сигналов определена в стандарте EIA "
+"RS232-C."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:125
+#, no-wrap
+msgid "The RS232-C and V.24 Standards"
+msgstr "Стандарты RS232-C и V.24"
+
+#. 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 ""
+"В большинстве компьютерных систем UART подключен к схеме, которая генерирует "
+"сигналы, соответствующие спецификации EIA RS232-C. Также существует стандарт "
+"CCITT под названием V.24, который отражает спецификации, включенные в RS232-"
+"C."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:130
+#, no-wrap
+msgid "RS232-C Bit Assignments (Marks and Spaces)"
+msgstr "Назначения битов RS232-C (метки и пробелы)"
+
+#. 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 ""
+"В стандарте RS232-C значение `1` называется `Маркер` (Mark), а значение `0` "
+"— `Пробел` (Space). Когда линия связи находится в состоянии покоя, говорят, "
+"что она \"маркирует\" (Marking), то есть передаёт непрерывные значения `1`."
+
+#. 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 ""
+"Стартовый бит всегда имеет значение `0` (пробел). Стоповый бит всегда имеет "
+"значение `1` (метка). Это означает, что на линии всегда будет переход от "
+"метки (1) к пробелу (0) в начале каждого слова, даже при передаче нескольких "
+"слов подряд. Это гарантирует, что отправитель и получатель могут "
+"синхронизировать свои тактовые сигналы независимо от содержимого "
+"передаваемых битов данных."
+
+#. 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 ""
+"Время простоя между стоповым и стартовым битами не обязательно должно быть "
+"точным кратным (включая ноль) скорости передачи данных коммуникационного "
+"канала, однако большинство UART спроектированы таким образом для простоты."
+
+#. 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 ""
+"В стандарте RS232-C сигнал «Marking» (логическая `1`) представлен "
+"напряжением от -2 В до -12 В, а сигнал «Spacing» (логический `0`) — "
+"напряжением от 0 В до +12 В. Передатчик должен выдавать +12 В или -12 В, а "
+"приёмник должен учитывать возможные потери напряжения в длинных кабелях. "
+"Некоторые маломощные передатчики (например, в портативных компьютерах) "
+"иногда используют только +5 В и -5 В, но эти значения всё ещё допустимы для "
+"приёмника RS232-C при условии использования коротких кабелей."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:146
+#, no-wrap
+msgid "RS232-C Break Signal"
+msgstr "Cигнал Break в RS232-C"
+
+#. 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 ""
+"RS232-C также определяет сигнал под названием `Break`, который вызывается "
+"передачей непрерывных значений Spacing (без стартовых или стоповых битов). "
+"Когда на линии данных отсутствует напряжение, считается, что линия передает "
+"`Break`."
+
+#. 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 ""
+"Сигнал `Break` должен иметь длительность больше, чем время, необходимое для "
+"передачи полного байта, включая стартовый, стоповый и биты четности. "
+"Большинство UART способны различить ошибку кадрирования и сигнал Break, но "
+"если UART не поддерживает эту функцию, для определения Break можно "
+"использовать обнаружение ошибки кадрирования."
+
+#. 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 ""
+"Во времена телетайпов, когда множество принтеров по всей стране были "
+"соединены последовательно (например, в службах новостей), любое устройство "
+"могло вызвать `Break`, временно размыкая всю цепь, чтобы ток не протекал. "
+"Это использовалось для того, чтобы место с срочными новостями могло прервать "
+"устройство в другом месте, которое в данный момент передавало информацию."
+
+#. 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 ""
+"В современных системах существует два типа сигналов Break. Если Break длится "
+"дольше 1,6 секунд, он считается \"Модемным Break\", и некоторые модемы можно "
+"запрограммировать на завершение соединения и переход в режим ожидания или "
+"вход в командный режим модема при обнаружении этого сигнала. Если Break "
+"короче 1,6 секунд, это означает \"Break данных\", и удалённый компьютер "
+"должен решить, как реагировать на этот сигнал. Иногда такая форма Break "
+"используется как сигнал \"Внимание\" или \"Прерывание\", а иногда "
+"принимается как замена символу ASCII CONTROL-C."
+
+#. 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 ""
+"Разрывы не могут быть сгенерированы с перфоленты или из любого другого "
+"байтового значения, поскольку байты всегда отправляются со стартовым и "
+"стоповым битами. UART обычно способен генерировать непрерывный сигнал "
+"Spacing в ответ на специальную команду от главного управляющего устройства "
+"(процессора передачи)."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:170
+#, no-wrap
+msgid "RS232-C DTE and DCE Devices"
+msgstr "RS232-C устройства DTE и DCE"
+
+#. 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 ""
+"Спецификация RS232-C определяет два типа оборудования: оконечное "
+"оборудование данных (DTE — Data Terminal Equipment) и оборудование передачи "
+"данных (DCE — Data Carrier Equipment). Обычно устройство DTE — это терминал "
+"(или компьютер), а DCE — модем. На другом конце телефонной линии в разговоре "
+"принимающий модем также является устройством DCE, а компьютер, подключённый "
+"к этому модему, — устройством DTE. Устройство DCE принимает сигналы на тех "
+"контактах, на которых устройство DTE передаёт, и наоборот."
+
+#. 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 ""
+"Когда два устройства, оба являющиеся DTE или DCE, должны быть соединены "
+"вместе без модема или аналогичного преобразователя среды между ними, "
+"необходимо использовать NULL модем. NULL модем электрически перестраивает "
+"кабель так, что выход передатчика подключается ко входу приемника на другом "
+"устройстве, и наоборот. Аналогичные преобразования выполняются для всех "
+"управляющих сигналов, чтобы каждое устройство видело то, что оно считает "
+"сигналами DCE (или DTE) от другого устройства."
+
+#. 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 ""
+"Количество сигналов, генерируемых устройствами DTE и DCE, не симметрично. "
+"Устройство DTE генерирует меньше сигналов для устройства DCE, чем получает "
+"от него."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:184
+#, no-wrap
+msgid "RS232-C Pin Assignments"
+msgstr "Назначение контактов RS232-C"
+
+#. 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 ""
+"Спецификация EIA RS232-C (и её эквивалент ITU, V.24) предусматривает "
+"использование двадцатипятиконтактного разъёма (обычно DB25) и определяет "
+"назначение большинства контактов в этом разъёме."
+
+#. 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 ""
+"В IBM Personal Computer и подобных системах подмножество сигналов RS232-C "
+"предоставляется через девятиконтактные разъемы (DB9). Сигналы, которые не "
+"включены в разъем ПК, в основном связаны с синхронной работой, и этот режим "
+"передачи не поддерживается UART, выбранным IBM для использования в IBM PC."
+
+#. 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 ""
+"В зависимости от производителя компьютера, для связи по RS232-C могут "
+"использоваться разъемы DB25, DB9 или оба типа. (В IBM PC также используется "
+"разъем DB25 для параллельного интерфейса принтера, что иногда вызывает "
+"путаницу.)"
+
+#. 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 ""
+"Ниже представлена таблица назначений сигналов RS232-C в разъемах DB25 и DB9."
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:200
+#, no-wrap
+msgid "DB25 RS232-C Pin"
+msgstr "Контакт в DB25 RS232-C"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:201
+#, no-wrap
+msgid "DB9 IBM PC Pin"
+msgstr "Контакт в DB9 IBM PC"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:202
+#, no-wrap
+msgid "EIA Circuit Symbol"
+msgstr "Символ цепи по EIA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:203
+#, no-wrap
+msgid "CCITT Circuit Symbol"
+msgstr "Символ цепи по CCITT"
+
+#. 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 "1"
+
+#. 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 "AA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:211
+#, no-wrap
+msgid "101"
+msgstr "101"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:212
+#, no-wrap
+msgid "PG/FG"
+msgstr "PG/FG"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:215
+#, no-wrap
+msgid "Frame/Protective Ground"
+msgstr "Защитное заземление (Frame/Protective Ground)"
+
+#. 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 "2"
+
+#. 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 "3"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:218
+#, no-wrap
+msgid "BA"
+msgstr "BA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:219
+#, no-wrap
+msgid "103"
+msgstr "103"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:220
+#, no-wrap
+msgid "TD"
+msgstr "TD"
+
+#. 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 "DTE"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:223
+#, no-wrap
+msgid "Transmit Data"
+msgstr "Передача Данных (Transmit Data)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:226
+#, no-wrap
+msgid "BB"
+msgstr "BB"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:227
+#, no-wrap
+msgid "104"
+msgstr "104"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:228
+#, no-wrap
+msgid "RD"
+msgstr "RD"
+
+#. 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 "DCE"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:231
+#, no-wrap
+msgid "Receive Data"
+msgstr "Прием данных (Receive Data)"
+
+#. 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 "4"
+
+#. 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 "7"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:234
+#, no-wrap
+msgid "CA"
+msgstr "CA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:235
+#, no-wrap
+msgid "105"
+msgstr "105"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:236
+#, no-wrap
+msgid "RTS"
+msgstr "RTS"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:239
+#, no-wrap
+msgid "Request to Send"
+msgstr "Запрос на передачу (Request to Send)"
+
+#. 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 "5"
+
+#. 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 "8"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:242
+#, no-wrap
+msgid "CB"
+msgstr "CB"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:243
+#, no-wrap
+msgid "106"
+msgstr "106"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:244
+#, no-wrap
+msgid "CTS"
+msgstr "CTS"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:247
+#, no-wrap
+msgid "Clear to Send"
+msgstr "Готовность к приёму (Clear to Send)"
+
+#. 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 "6"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:250
+#, no-wrap
+msgid "CC"
+msgstr "CC"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:251
+#, no-wrap
+msgid "107"
+msgstr "107"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:252
+#, no-wrap
+msgid "DSR"
+msgstr "DSR"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:255
+#, no-wrap
+msgid "Data Set Ready"
+msgstr "Готовность терминального оборудования (Data Set Ready)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:258
+#, no-wrap
+msgid "AV"
+msgstr "AV"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:259
+#, no-wrap
+msgid "102"
+msgstr "102"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:260
+#, no-wrap
+msgid "SG/GND"
+msgstr "SG/GND"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:263
+#, no-wrap
+msgid "Signal Ground"
+msgstr "Сигнальная земля (Signal Ground)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:266
+#, no-wrap
+msgid "CF"
+msgstr "CF"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:267
+#, no-wrap
+msgid "109"
+msgstr "109"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:268
+#, no-wrap
+msgid "DCD/CD"
+msgstr "DCD/CD"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:271
+#, no-wrap
+msgid "Data Carrier Detect"
+msgstr "Обнаружение несущей (Data Carrier Detect)"
+
+#. 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 "9"
+
+#. 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 "10"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:288
+#, no-wrap
+msgid "11"
+msgstr "11"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:296
+#, no-wrap
+msgid "12"
+msgstr "12"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:298
+#, no-wrap
+msgid "CI"
+msgstr "CI"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:299
+#, no-wrap
+msgid "122"
+msgstr "122"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:300
+#, no-wrap
+msgid "SRLSD"
+msgstr "SRLSD"
+
+#. 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 "13"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:306
+#, no-wrap
+msgid "SCB"
+msgstr "SCB"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:307
+#, no-wrap
+msgid "121"
+msgstr "121"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:308
+#, no-wrap
+msgid "SCTS"
+msgstr "SCTS"
+
+#. 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 "14"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:314
+#, no-wrap
+msgid "SBA"
+msgstr "SBA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:315
+#, no-wrap
+msgid "118"
+msgstr "118"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:316
+#, no-wrap
+msgid "STD"
+msgstr "STD"
+
+#. 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 "15"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:322
+#, no-wrap
+msgid "DB"
+msgstr "DB"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:323
+#, no-wrap
+msgid "114"
+msgstr "114"
+
+#. 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 "TSET"
+
+#. 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 "Тактирование элементов сигнала передатчика (Trans. Sig. Element Timing)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:328
+#, no-wrap
+msgid "16"
+msgstr "16"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:330
+#, no-wrap
+msgid "SBB"
+msgstr "SBB"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:331
+#, no-wrap
+msgid "119"
+msgstr "119"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:332
+#, no-wrap
+msgid "SRD"
+msgstr "SRD"
+
+#. 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 "17"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:338
+#, no-wrap
+msgid "DD"
+msgstr "DD"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:339
+#, no-wrap
+msgid "115"
+msgstr "115"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:340
+#, no-wrap
+msgid "RSET"
+msgstr "RSET"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:343
+#, no-wrap
+msgid "Receiver Signal Element Timing"
+msgstr "Тактирование элементов сигнала приёмника (Receiver Signal Element Timing)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:344
+#, no-wrap
+msgid "18"
+msgstr "18"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:347
+#, no-wrap
+msgid "141"
+msgstr "141"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:348
+#, no-wrap
+msgid "LOOP"
+msgstr "LOOP"
+
+#. 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 "19"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:354
+#, no-wrap
+msgid "SCA"
+msgstr "SCA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:355
+#, no-wrap
+msgid "120"
+msgstr "120"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:356
+#, no-wrap
+msgid "SRS"
+msgstr "SRS"
+
+#. 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 "20"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:362
+#, no-wrap
+msgid "CD"
+msgstr "CD"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:363
+#, no-wrap
+msgid "108.2"
+msgstr "108.2"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:364
+#, no-wrap
+msgid "DTR"
+msgstr "DTR"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:367
+#, no-wrap
+msgid "Data Terminal Ready"
+msgstr "Готовность терминального оборудования (Data Terminal Ready)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:368
+#, no-wrap
+msgid "21"
+msgstr "21"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:372
+#, no-wrap
+msgid "RDL"
+msgstr "RDL"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:375
+#, no-wrap
+msgid "Remote Digital Loopback"
+msgstr "Режим удалённой цифровой петли (Remote Digital Loopback)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:376
+#, no-wrap
+msgid "22"
+msgstr "22"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:378
+#, no-wrap
+msgid "CE"
+msgstr "CE"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:379
+#, no-wrap
+msgid "125"
+msgstr "125"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:380
+#, no-wrap
+msgid "RI"
+msgstr "RI"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:383
+#, no-wrap
+msgid "Ring Indicator"
+msgstr "Индикатор передачи данных (Ring Indicator)"
+
+#. 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 "23"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:386
+#, no-wrap
+msgid "CH"
+msgstr "CH"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:387
+#, no-wrap
+msgid "111"
+msgstr "111"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:388
+#, no-wrap
+msgid "DSRS"
+msgstr "DSRS"
+
+#. 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 "24"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:394
+#, no-wrap
+msgid "DA"
+msgstr "DA"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:395
+#, no-wrap
+msgid "113"
+msgstr "113"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:400
+#, no-wrap
+msgid "25"
+msgstr "25"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:403
+#, no-wrap
+msgid "142"
+msgstr "142"
+
+#. 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 ""
+"Скорость передачи данных (Baud) — это единица измерения скорости передачи в "
+"асинхронной связи. Из-за развития технологий модемной связи этот термин "
+"часто ошибочно используют для описания скорости передачи данных в "
+"современных устройствах."
+
+#. 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 ""
+"Традиционно, скорость передачи (Baud Rate) представляет количество битов, "
+"фактически передаваемых по среде, а не объем данных, которые действительно "
+"перемещаются от одного устройства DTE к другому. Подсчет Baud включает "
+"служебные биты — Start, Stop и Parity, которые генерируются передающим UART "
+"и удаляются принимающим UART. Это означает, что 7-битные слова данных на "
+"самом деле занимают 10 бит для полной передачи. Следовательно, модем, "
+"способный передавать 300 бит в секунду, обычно может передавать только 30 7-"
+"битных слов, если используется Parity и присутствуют один бит Start и один "
+"бит Stop."
+
+#. 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 ""
+"Если используются 8-битные слова данных и биты четности, скорость передачи "
+"данных снижается до 27,27 слов в секунду, так как теперь для передачи "
+"восьмибитных слов требуется 11 бит, а модем по-прежнему передает только 300 "
+"бит в секунду."
+
+#. 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 ""
+"Формула преобразования байтов в секунду в бодовую скорость и наоборот была "
+"простой до появления модемов с коррекцией ошибок. Эти модемы принимают "
+"последовательный поток битов от UART в компьютере (даже внутренние модемы "
+"часто работают с последовательными данными) и преобразуют биты обратно в "
+"байты. Затем эти байты объединяются в пакеты и передаются по телефонной "
+"линии с использованием синхронного метода передачи. Это означает, что "
+"стоповые, стартовые и биты четности, добавленные UART в DTE (компьютере), "
+"удаляются модемом перед передачей отправляющим модемом. Когда эти байты "
+"принимаются удалённым модемом, он добавляет стартовые, стоповые и биты "
+"четности к словам, преобразует их в последовательный формат и отправляет на "
+"принимающий UART в удалённом компьютере, который затем удаляет стартовые, "
+"стоповые и биты четности."
+
+#. 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 ""
+"Причина, по которой выполняются все эти дополнительные преобразования, "
+"заключается в том, чтобы два модема могли осуществлять коррекцию ошибок. Это "
+"означает, что принимающий модем может запросить у передающего модема "
+"повторную отправку блока данных, который был получен с некорректной "
+"контрольной суммой. Эта проверка обрабатывается модемами, и устройства DTE "
+"обычно не осознают, что этот процесс происходит."
+
+#. 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 ""
+"Удаляя стартовые, стоповые и биты четности, дополнительные биты данных, "
+"которые два модема должны обмениваться между собой для выполнения коррекции "
+"ошибок, в основном скрываются от эффективной скорости передачи, наблюдаемой "
+"отправляющим и принимающим оборудованием DTE. Например, если модем "
+"отправляет десять 7-битных слов другому модему без включения стартовых, "
+"стоповых и битов четности, отправляющий модем сможет добавить 30 бит своей "
+"собственной информации, которую принимающий модем может использовать для "
+"коррекции ошибок, не влияя на скорость передачи реальных данных."
+
+#. 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 ""
+"Использование термина \"Бод\" дополнительно осложняется модемами, "
+"выполняющими сжатие. Одно 8-битное слово, переданное по телефонной линии, "
+"может представлять собой дюжину слов, переданных на отправляющий модем. "
+"Принимающий модем развернёт данные обратно в их исходное содержимое и "
+"передаст эти данные принимающему DTE."
+
+#. 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 ""
+"Современные модемы также включают буферы, которые позволяют скорости "
+"передачи битов по телефонной линии (DCE к DCE) отличаться от скорости "
+"передачи битов между DTE и DCE на обоих концах соединения. Обычно скорость "
+"между DTE и DCE выше, чем скорость между DCE и DCE, из-за использования "
+"сжатия модемами."
+
+#. 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 ""
+"Поскольку количество битов, необходимых для описания байта, менялось во "
+"время передачи между двумя машинами, а также из-за различающихся скоростей "
+"передачи в битах в секунду на линиях DTE-DCE и DCE-DCE, использование "
+"термина «Бод» для описания общей скорости связи вызывает проблемы и может "
+"искажать реальную скорость передачи. Таким образом, термин «Биты в секунду» "
+"(bps) является корректным для описания скорости передачи на интерфейсе DCE-"
+"DCE, а термины «Бод» или «Биты в секунду» допустимы, когда соединение "
+"устанавливается между двумя системами с проводным подключением или "
+"используется модем, не выполняющий коррекцию ошибок или сжатие."
+
+#. 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 ""
+"Современные высокоскоростные модемы (2400, 9600, 14,400 и 19,200 бит/с) на "
+"самом деле всё ещё работают на скорости 2400 бод или ниже, или, точнее, 2400 "
+"символов в секунду. Высокоскоростные модемы способны кодировать больше бит "
+"данных в каждый символ с использованием техники, называемой \"Заполнение "
+"созвездия (Constellation Stuffing)\", поэтому эффективная скорость передачи "
+"данных в битах в секунду у модема выше, но модем продолжает работать в "
+"ограниченной полосе пропускания звуковых частот, предоставляемой телефонной "
+"системой. Модемы, работающие на скоростях 28,800 и выше, имеют переменную "
+"скорость передачи символов, но техника остаётся той же."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:446
+#, no-wrap
+msgid "The IBM Personal Computer UART"
+msgstr "UART в IBM PC"
+
+#. 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 ""
+"Начиная с оригинального IBM Personal Computer, IBM выбрала UART INS8250 от "
+"National Semiconductor для использования в адаптере Parallel/Serial IBM PC. "
+"Последующие поколения совместимых компьютеров от IBM и других производителей "
+"продолжали использовать INS8250 или улучшенные версии UART из семейства "
+"National Semiconductor."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:451
+#, no-wrap
+msgid "National Semiconductor UART Family Tree"
+msgstr "Генеалогическое дерево National Semiconductor UART"
+
+#. 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 ""
+"Существует несколько версий и последующих поколений UART INS8250. Основные "
+"версии описаны ниже."
+
+#. 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 ""
+"INS8250 -> INS8250B\n"
+" \\\n"
+" \\\n"
+" \\-> INS8250A -> INS82C50A\n"
+" \\\n"
+" \\\n"
+" \\-> NS16450 -> NS16C450\n"
+" \\\n"
+" \\\n"
+" \\-> NS16550 -> NS16550A -> PC16550D\n"
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:469
+#, no-wrap
+msgid "INS8250"
+msgstr "INS8250"
+
+#. 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 ""
+"Эта часть использовалась в оригинальном IBM PC и IBM PC/XT. Первоначальное "
+"название этой части — INS8250 ACE (Asynchronous Communications Element), и "
+"она изготовлена по NMOS-технологии."
+
+#. 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 ""
+"8250 использует восемь портов ввода-вывода и имеет однобайтовый буфер "
+"передачи и однобайтовый буфер приема. Этот оригинальный UART имеет несколько "
+"состояний гонки и другие недостатки. Оригинальный BIOS IBM включает код для "
+"обхода этих недостатков, но это сделало BIOS зависимым от их наличия, "
+"поэтому последующие модели, такие как 8250A, 16450 или 16550, не могли быть "
+"использованы в оригинальном IBM PC или IBM PC/XT."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:476
+#, no-wrap
+msgid "INS8250-B"
+msgstr "INS8250-B"
+
+#. 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 ""
+"Это более медленная скорость INS8250, созданная по NMOS-технологии. Она "
+"имеет те же проблемы, что и оригинальный INS8250."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:480
+#, no-wrap
+msgid "INS8250A"
+msgstr "INS8250A"
+
+#. 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 ""
+"Улучшенная версия INS8250 с использованием технологии XMOS, в которой "
+"исправлены различные функциональные недостатки. INS8250A изначально "
+"использовалась в клонах ПК от производителей, применявших \"чистые\" проекты "
+"BIOS. Из-за исправлений в микросхеме этот чип не мог использоваться с BIOS, "
+"совместимой с INS8250 или INS8250B."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:485
+#, no-wrap
+msgid "INS82C50A"
+msgstr "INS82C50A"
+
+#. 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 ""
+"Это CMOS-версия (с низким энергопотреблением) INS8250A и имеет схожие "
+"функциональные характеристики."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:488
+#, no-wrap
+msgid "NS16450"
+msgstr "NS16450"
+
+#. 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 ""
+"Так же, как NS8250A, но с улучшениями для работы с более быстрыми шинами "
+"CPU. IBM использовала этот компонент в IBM AT и обновила IBM BIOS, чтобы она "
+"больше не зависела от ошибок в INS8250."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:492
+#, no-wrap
+msgid "NS16C450"
+msgstr "NS16C450"
+
+#. 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 "Это версия NS16450 с технологией CMOS (низкое энергопотребление)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:495
+#, no-wrap
+msgid "NS16550"
+msgstr "NS16550"
+
+#. 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 ""
+"То же, что и NS16450, с 16-байтовым буфером передачи и приема, но "
+"конструкция буфера была неудачной и не могла быть надежно использована."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:498
+#, no-wrap
+msgid "NS16550A"
+msgstr "NS16550A"
+
+#. 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 ""
+"То же, что и NS16550, но с исправленными недостатками буфера. 16550A и его "
+"преемники стали наиболее популярными UART-устройствами в индустрии ПК, в "
+"основном благодаря их способности надежно работать на высоких скоростях "
+"передачи данных в операционных системах с медленным временем отклика "
+"прерываний."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:502
+#, no-wrap
+msgid "NS16C552"
+msgstr "NS16C552"
+
+#. 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 "Этот компонент состоит из двух CMOS UART NS16C550A в одном корпусе."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:505
+#, no-wrap
+msgid "PC16550D"
+msgstr "PC16550D"
+
+#. 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 ""
+"Так же, как NS16550A, с исправленными незначительными недостатками. Это "
+"ревизия D семейства 16550 и последняя доступная версия от National "
+"Semiconductor."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:509
+#, no-wrap
+msgid "The NS16550AF and the PC16550D are the same thing"
+msgstr "NS16550AF и PC16550D — это одно и то же"
+
+#. 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 ""
+"Компания National реорганизовала свою систему нумерации деталей несколько "
+"лет назад, и чип NS16550AFN больше не существует под этим названием. (Если у "
+"вас есть NS16550AFN, посмотрите на дату изготовления на корпусе — это "
+"четырехзначное число, обычно начинающееся с девятки. Первые две цифры "
+"обозначают год, а последние две — неделю года, когда чип был упакован. Если "
+"у вас есть NS16550AFN, скорее всего, он уже довольно старый.)"
+
+#. 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 ""
+"Новые номера выглядят как PC16550DV, с незначительными отличиями в "
+"суффиксных буквах в зависимости от материала корпуса и его формы. (Описание "
+"системы нумерации можно найти ниже.)"
+
+#. 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 ""
+"Важно понимать, что в некоторых магазинах можно заплатить $15 (США) за "
+"микросхему NS16550AFN, выпущенную в 1990 году, а в соседнем ящике могут "
+"лежать новые PC16550DN с небольшими исправлениями, которые National внесла с "
+"момента выпуска AFN. PC16550DN, вероятно, произведены в последние полгода и "
+"стоят вдвое дешевле (от $5 (США) при оптовой покупке), чем NS16550AFN, "
+"поскольку они легко доступны."
+
+#. 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 ""
+"Поскольку поставки чипов NS16550AFN продолжают сокращаться, цена, вероятно, "
+"будет расти до тех пор, пока больше людей не узнают и не примут тот факт, "
+"что PC16550DN действительно выполняет ту же функцию, что и старый номер "
+"детали."
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:523
+#, no-wrap
+msgid "National Semiconductor Part Numbering System"
+msgstr "Система нумерации компонентов National Semiconductor"
+
+#. 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 ""
+"Старые номера деталей NS``__nnnnnrqp__`` теперь имеют формат "
+"PC``__nnnnnrgp__``."
+
+#. 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 ""
+"`_r_` — это поле ревизии. Текущая ревизия 16550 от National Semiconductor — "
+"`D`."
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:530
+msgid "The `_p_` is the package-type field. The types are:"
+msgstr "`_p_` — это поле типа пакета. Типы:"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:536
+#, no-wrap
+msgid "\"F\""
+msgstr "\"F\""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:537
+#, no-wrap
+msgid "QFP"
+msgstr "QFP"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:539
+#, no-wrap
+msgid "(quad flat pack) L lead type"
+msgstr "(quad flat pack - квадратный плоский корпус) с L-образными выводами"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:540
+#, no-wrap
+msgid "\"N\""
+msgstr "\"N\""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:541
+#, no-wrap
+msgid "DIP"
+msgstr "DIP"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:543
+#, no-wrap
+msgid "(dual inline package) through hole straight lead type"
+msgstr "(dual inline package — корпус с двусторонним расположением выводов) для сквозного монтажа с прямыми выводами"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:544
+#, no-wrap
+msgid "\"V\""
+msgstr "\"V\""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:545
+#, no-wrap
+msgid "LPCC"
+msgstr "LPCC"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:546
+#, no-wrap
+msgid "(lead plastic chip carrier) J lead type"
+msgstr "(lead plastic chip carrier — пластиковый корпус) с J-образными выводами"
+
+#. 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 ""
+"Поле _g_ обозначает класс изделия. Если перед буквой типа пакета стоит `I`, "
+"это указывает на «промышленный» класс детали, который имеет более высокие "
+"характеристики, чем стандартная деталь, но не такие высокие, как компонент "
+"военного назначения (Milspec). Это необязательное поле."
+
+#. 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 ""
+"То, что мы раньше называли NS16550AFN (DIP-корпус), теперь называется "
+"PC16550DN или PC16550DIN."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:554
+#, no-wrap
+msgid "Other Vendors and Similar UARTs"
+msgstr "Другие производители и аналогичные UART"
+
+#. 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 ""
+"На протяжении многих лет чипы 8250, 8250A, 16450 и 16550 лицензировались или "
+"копировались другими производителями. В случае с 8250, 8250A и 16450 точная "
+"схема (\"мегаячейка\") была лицензирована многими производителями, включая "
+"Western Digital и Intel. Другие производители проводили обратную разработку "
+"чипа или создавали эмуляции с аналогичным поведением."
+
+#. 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 ""
+"Во внутренних модемах разработчик модема часто эмулирует 8250A/16450 с "
+"помощью микропроцессора модема, и эмулированный UART часто имеет скрытый "
+"буфер размером в несколько сотен байт. Благодаря размеру буфера, эти "
+"эмуляции могут быть такими же надежными, как 16550A, в способности "
+"обрабатывать высокоскоростные данные. Однако большинство операционных систем "
+"по-прежнему сообщают, что UART является только 8250A или 16450, и могут не "
+"эффективно использовать дополнительную буферизацию, присутствующую в "
+"эмулированном UART, если не используются специальные драйверы."
+
+#. 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 ""
+"Некоторые производители модемов под давлением рыночных сил отказываются от "
+"конструкции с буфером в сотни байт и вместо этого используют UART 16550A, "
+"чтобы их продукция выглядела выигрышно в рыночных сравнениях, даже если это "
+"может снизить фактическую производительность."
+
+#. 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 ""
+"Распространённое заблуждение заключается в том, что все микросхемы с "
+"маркировкой \"16550A\" одинаковы по производительности. Однако между ними "
+"существуют различия, а в некоторых клонах 16550A даже встречаются серьёзные "
+"недостатки."
+
+#. 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 ""
+"Когда компания National Semiconductor разработала NS16550, она получила "
+"несколько патентов на эту конструкцию и также ограничила лицензирование, что "
+"затруднило для других производителей выпуск чипов с аналогичными "
+"характеристиками. В результате патентов обратно спроектированные конструкции "
+"и эмуляции должны были избегать нарушения пунктов, охватываемых патентами. "
+"Впоследствии эти копии почти никогда не работают точно так же, как NS16550A "
+"или PC16550D, которые являются компонентами, наиболее востребованными "
+"производителями компьютеров и модемов, но иногда они не готовы платить цену, "
+"необходимую для получения оригинальных деталей."
+
+#. 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 ""
+"Некоторые различия в клонах микросхем 16550A несущественны, в то время как "
+"другие могут полностью препятствовать использованию устройства с "
+"определенной операционной системой или драйвером. Эти различия могут "
+"проявиться при использовании других драйверов или при возникновении "
+"определенных комбинаций событий, которые не были хорошо протестированы или "
+"учтены в драйвере Windows(R). Это происходит потому, что большинство "
+"производителей модемов и клонов 16550 используют драйверы Microsoft из "
+"Windows(R) for Workgroups 3.11 и утилиту Microsoft(R) MS-DOS(R) в качестве "
+"основных тестов на совместимость с NS16550A. Этот чрезмерно упрощенный "
+"критерий означает, что при использовании другой операционной системы могут "
+"возникнуть проблемы из-за тонких различий между клонами и оригинальными "
+"компонентами."
+
+#. 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 ""
+"National Semiconductor предоставила программу под названием COMTEST, которая "
+"выполняет тесты совместимости независимо от каких-либо драйверов ОС. Следует "
+"помнить, что цель такого типа программ — демонстрация недостатков в "
+"продуктах конкурентов, поэтому программа будет сообщать как о значительных, "
+"так и о крайне незначительных различиях в поведении тестируемого компонента."
+
+#. 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 ""
+"В серии тестов, проведенных автором этого документа в 1994 году, компоненты "
+"производства National Semiconductor, TI, StarTech и CMD, а также мегаячейки "
+"и эмуляции, встроенные во внутренние модемы, были протестированы с помощью "
+"COMTEST. Ниже приведен счетчик различий для некоторых из этих компонентов. "
+"Поскольку эти тесты проводились в 1994 году, они могут не отражать текущую "
+"производительность данного продукта от поставщика."
+
+#. 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 ""
+"Следует отметить, что COMTEST обычно завершает работу при обнаружении "
+"чрезмерного количества или определённых типов проблем. В рамках этого "
+"тестирования COMTEST был изменён так, чтобы он не завершал работу независимо "
+"от количества обнаруженных различий."
+
+#. 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 "National"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:596
+#, no-wrap
+msgid "(PC16550DV)"
+msgstr "(PC16550DV)"
+
+#. 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 "0"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:600
+#, no-wrap
+msgid "(NS16550AFN)"
+msgstr "(NS16550AFN)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:604
+#, no-wrap
+msgid "(NS16C552V)"
+msgstr "(NS16C552V)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:607
+#, no-wrap
+msgid "TI"
+msgstr "TI"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:608
+#, no-wrap
+msgid "(TL16550AFN)"
+msgstr "(TL16550AFN)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:611
+#, no-wrap
+msgid "CMD"
+msgstr "CMD"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:612
+#, no-wrap
+msgid "(16C550PE)"
+msgstr "(16C550PE)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:615
+#, no-wrap
+msgid "StarTech"
+msgstr "StarTech"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:616
+#, no-wrap
+msgid "(ST16C550J)"
+msgstr "(ST16C550J)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:619
+#, no-wrap
+msgid "Rockwell"
+msgstr "Rockwell"
+
+#. 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 "Стандартный модем с внутренним 16550 или его эмуляцией (RC144DPi/C3000-25)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:622
+#, no-wrap
+msgid "117"
+msgstr "117"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:623
+#, no-wrap
+msgid "Sierra"
+msgstr "Sierra"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:624
+#, no-wrap
+msgid "Modem with an internal 16550 (SC11951/SC11351)"
+msgstr "Модем с внутренним 16550 (SC11951/SC11351)"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:625
+#, no-wrap
+msgid "91"
+msgstr "91"
+
+#. 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 ""
+"На сегодняшний день автор данного документа не обнаружил ни одного не-"
+"National компонента, который бы показывал нулевые различия при использовании "
+"программы COMTEST. Также следует отметить, что у National было пять версий "
+"16550 за эти годы, и новейшие компоненты ведут себя несколько иначе, чем "
+"классический NS16550AFN, который считается эталоном функциональности. "
+"COMTEST, по-видимому, закрывает глаза на различия внутри линейки продуктов "
+"National и не сообщает об ошибках в компонентах National (за исключением "
+"оригинальной 16550), даже когда существуют официальные errata, описывающие "
+"ошибки в ревизиях A, B и C этих компонентов, поэтому эту предвзятость "
+"COMTEST необходимо учитывать."
+
+#. 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 ""
+"Важно понимать, что простое подсчитывание различий с COMTEST не дает полного "
+"представления о том, какие различия существенны, а какие нет. Например, "
+"около половины различий, обнаруженных в двух вышеупомянутых модемах с "
+"внутренними UART, были вызваны тем, что клоновые UART не поддерживают режимы "
+"пяти- и шестибитных символов. Настоящие UART 16550, 16450 и 8250 "
+"поддерживают эти режимы, и COMTEST проверяет их функциональность, поэтому "
+"фиксируется более пятидесяти различий. Однако почти ни один современный "
+"модем не поддерживает пяти- или шестибитные символы, особенно те, что "
+"обладают функциями коррекции ошибок и сжатия. Это означает, что различия, "
+"связанные с режимами пяти- и шестибитных символов, можно не учитывать."
+
+#. 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 ""
+"Многие различия, о которых сообщает COMTEST, связаны с временными "
+"характеристиками. Во многих клонированных конструкциях, когда хост читает из "
+"одного порта, статусные биты в другом порте могут обновляться с иной "
+"скоростью (быстрее или медленнее), чем у _настоящего_ NS16550AFN, и COMTEST "
+"выявляет эти различия. Это означает, что количество различий может вводить в "
+"заблуждение: одно устройство может иметь всего одно или два различия, но они "
+"крайне критичны, тогда как другое устройство, обновляющее статусные регистры "
+"быстрее или медленнее эталонной части (что, вероятно, никогда не повлияет на "
+"работу правильно написанного драйвера), может иметь десятки "
+"зарегистрированных различий."
+
+#. 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 ""
+"COMTEST можно использовать в качестве инструмента проверки, чтобы "
+"предупредить администратора о наличии потенциально несовместимых "
+"компонентов, которые могут вызвать проблемы или потребуют особого подхода."
+
+#. 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 ""
+"Если вы запускаете COMTEST на 16550, который находится в модеме или к модему "
+"подключён последовательный порт, необходимо сначала отправить модему команду "
+"ATE0&W, чтобы модем не эхо-повторял ни один из тестовых символов. Если вы "
+"забудете это сделать, COMTEST сообщит как минимум об одном различии:"
+
+#. 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 "Error (6)...Timeout interrupt failed: IIR = c1 LSR = 61\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:654
+#, no-wrap
+msgid "8250/16450/16550 Registers"
+msgstr "8250/16450/16550 Регистры"
+
+#. 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 ""
+"UART 8250/16450/16550 занимает восемь последовательных адресов портов ввода-"
+"вывода. В IBM PC определены два расположения для этих восьми портов, которые "
+"вместе известны как [.filename]#COM1# и [.filename]#COM2#. Производители PC-"
+"клонов и дополнительных карт создали два дополнительных области, известных "
+"как [.filename]#COM3# и [.filename]#COM4#, но эти дополнительные COM-порты "
+"конфликтуют с другим оборудованием на некоторых системах. Наиболее "
+"распространённый конфликт возникает с видеоадаптерами, обеспечивающими "
+"эмуляцию IBM 8514."
+
+#. 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 ""
+"[.filename]#COM1# находится в диапазоне от 0x3f8 до 0x3ff и обычно "
+"использует IRQ 4. [.filename]#COM2# находится в диапазоне от 0x2f8 до 0x2ff "
+"и обычно использует IRQ 3. [.filename]#COM3# находится в диапазоне от 0x3e8 "
+"до 0x3ef и не имеет стандартного IRQ. [.filename]#COM4# находится в "
+"диапазоне от 0x2e8 до 0x2ef и не имеет стандартного IRQ."
+
+#. 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 "Описание портов ввода-вывода UART 8250/16450/16550 представлено ниже."
+
+#. 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 "+0x00"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:677
+#, no-wrap
+msgid "write (DLAB==0)"
+msgstr "запись (DLAB==0)"
+
+#. 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 ""
+"Регистр передачи данных (THR).\n"
+"\n"
+"Информация, записанная в этот порт, обрабатывается как слова данных и передается через UART."
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:685
+#, no-wrap
+msgid "read (DLAB==0)"
+msgstr "чтение (DLAB==0)"
+
+#. 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 ""
+"Регистр буфера приема (RBR).\n"
+"\n"
+"Любые слова данных, полученные UART из последовательного соединения, доступны для чтения хостом через этот порт."
+
+#. 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 "запись/чтение (DLAB==1)"
+
+#. 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 ""
+"Младший байт защелки делителя (DLL — Divisor Latch LSB)\n"
+"\n"
+"Это значение будет поделено от основного входного тактового сигнала (в IBM PC основной тактовый сигнал равен 1,8432 МГц), и полученный тактовый сигнал будет определять скорость передачи UART. Этот регистр содержит биты с 0 по 7 делителя."
+
+#. 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 "+0x01"
+
+#. 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 ""
+"Старший байт защелки делителя (DLH — Divisor Latch MSB)\n"
+"\n"
+"Это значение будет разделено от основного входного тактового сигнала (в IBM PC основной тактовый сигнал равен 1,8432 МГц), и полученный тактовый сигнал будет определять скорость передачи данных UART. Этот регистр содержит биты с 8 по 15 делителя."
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:709
+#, no-wrap
+msgid "write/read (DLAB==0)"
+msgstr "запись/чтение (DLAB==0)"
+
+#. 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 ""
+"Регистр разрешения прерываний (IER) +\n"
+"\n"
+"UART 8250/16450/1655 классифицирует события на четыре категории. Каждая категория может быть настроена на генерацию прерывания при возникновении любого из событий. UART 8250/16450/16550 генерирует единый внешний сигнал прерывания независимо от того, сколько событий в разрешённых категориях произошло. Задача главного процессора — обработать прерывание и затем опросить разрешённые категории прерываний (обычно прерывания разрешены для всех категорий), чтобы определить истинную причину(ы) прерывания. +\n"
+"Бит 7 -> Зарезервирован, всегда 0. +\n"
+"Бит 6 -> Зарезервирован, всегда 0. +\n"
+"Бит 5 -> Зарезервирован, всегда 0. +\n"
+"Бит 4 -> Зарезервирован, всегда 0. +\n"
+"Бит 3 -> Разрешение прерывания по состоянию модема (EDSSI). Установка этого бита в \"1\" позволяет UART генерировать прерывание при изменении состояния одной или нескольких линий статуса. +\n"
+"Бит 2 -> Разрешение прерывания по состоянию линии приёмника (ELSI). Установка этого бита в \"1\" приводит к генерации прерывания UART при обнаружении ошибки (или сигнала BREAK) во входящих данных. +\n"
+"Бит 1 -> Разрешение прерывания по опустошению регистра передатчика (ETBEI). Установка этого бита в \"1\" приводит к генерации прерывания UART, когда в UART появляется место для одного или более дополнительных символов, предназначенных для передачи. +\n"
+"Бит 0 -> Разрешение прерывания по наличию принятых данных (ERBFI). Установка этого бита в \"1\" приводит к генерации прерывания UART, когда UART принял достаточное количество символов для превышения порога FIFO, или истекло время ожидания FIFO (устаревшие данные), или принят одиночный символ при отключённом FIFO."
+
+#. 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 "+0x02"
+
+#. 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 ""
+"Регистр управления FIFO (FCR — FIFO Control Register) (Этот порт отсутствует в UART 8250 и 16450.) +\n"
+"Бит 7 -> Бит триггера приемника #1 +\n"
+"Бит 6 -> Бит триггера приемника #0 +\n"
+"\n"
+"Эти два бита определяют, при каком количестве данных приемник должен генерировать прерывание, когда FIFO активен. +\n"
+"7 6 Количество слов перед генерацией прерывания +\n"
+"0 0 1 +\n"
+"0 1 4 +\n"
+"1 0 8 +\n"
+"1 1 14 +\n"
+"Бит 5 -> Зарезервирован, всегда 0. +\n"
+"Бит 4 -> Зарезервирован, всегда 0. +\n"
+"Бит 3 -> Выбор режима DMA. Если бит 0 установлен в \"1\" (FIFO включены), установка этого бита изменяет работу сигналов -RXRDY и -TXRDY с режима 0 на режим 1. +\n"
+"Бит 2 -> Сброс передающего FIFO. При записи \"1\" в этот бит содержимое FIFO очищается. Любое слово, которое передается в данный момент, будет отправлено полностью. Эта функция полезна для прерывания передачи. +\n"
+"Бит 1 -> Сброс приемного FIFO. При записи \"1\" в этот бит содержимое FIFO очищается. Любое слово, которое в данный момент собирается в сдвиговом регистре, будет принято полностью. +\n"
+"Бит 0 -> Включение FIFO 16550. При установке этого бита активируются как передающий, так и приемный FIFO. Любое содержимое в регистре хранения, сдвиговых регистрах или FIFO теряется при включении или отключении FIFO. +"
+
+#. 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 ""
+"Регистр идентификации прерываний +\n"
+"Бит 7 -> FIFO включены. На UART 8250/16450 этот бит равен нулю. +\n"
+"Бит 6 -> FIFO включены. На UART 8250/16450 этот бит равен нулю. +\n"
+"Бит 5 -> Зарезервирован, всегда 0. +\n"
+"Бит 4 -> Зарезервирован, всегда 0. +\n"
+"Бит 3 -> Бит идентификатора прерывания №2. На UART 8250/16450 этот бит равен нулю. +\n"
+"Бит 2 -> Бит идентификатора прерывания №1 +\n"
+"Бит 1 -> Бит идентификатора прерывания №0.Эти три бита объединяются для указания категории события, вызвавшего текущее прерывание. Эти категории имеют приоритеты, поэтому, если несколько категорий событий происходят одновременно, UART сообщит о более важных событиях первыми, и хост должен обрабатывать события в порядке их поступления. Все события, вызвавшие текущее прерывание, должны быть обработаны до генерации новых прерываний. (Это ограничение архитектуры ПК.) +\n"
+"2 1 0 Приоритет Описание +\n"
+"0 1 1 Первый Принятая ошибка (OE, PE, BI или FE) +\n"
+"0 1 0 Второй Доступны принятые данные +\n"
+"1 1 0 Второй Идентификация уровня триггера (Устаревшие данные в буфере приема) +\n"
+"0 0 1 Третий Передатчик готов принять больше данных (THRE) +\n"
+"0 0 0 Четвертый Изменение состояния модема (-CTS, -DSR, -RI или -DCD) +\n"
+"Бит 0 -> Бит ожидания прерывания. Если этот бит установлен в \"0\", то как минимум одно прерывание ожидает обработки."
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:759
+#, no-wrap
+msgid "+0x03"
+msgstr "+0x03"
+
+#. 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 ""
+"Регистр управления линией (LCR — Line Control Register) +\n"
+"Бит 7 -> Бит доступа к защелке делителя (DLAB). При установке доступ к регистру передачи/приема данных (THR/RBR) и регистру разрешения прерываний (IER) отключается. Любой доступ к этим портам перенаправляется к регистрам защелки делителя. Установка этого бита, загрузка регистров делителя и сброс DLAB должны выполняться при отключенных прерываниях. +\n"
+"Бит 6 -> Установка прерывания. При установке в \"1\" передатчик начинает передавать непрерывный интервал (Spacing), пока этот бит не будет сброшен в \"0\". Это переопределяет любые передаваемые биты символов. +\n"
+"Бит 5 -> Фиксированный бит четности. При включенной проверке четности установка этого бита приводит к тому, что бит четности всегда будет \"1\" или \"0\" в зависимости от значения бита 4.\n"
+"Бит 4 -> Выбор четности (EPS). При включенной проверке четности и если бит 5 равен \"0\", установка этого бита приводит к использованию и ожиданию четной четности. В противном случае используется нечетная четность. +\n"
+"Бит 3 -> Разрешение проверки четности (PEN). При установке в \"1\" бит четности вставляется между последним битом данных и стоповым битом. UART также ожидает наличие бита четности в принимаемых данных. +\n"
+"Бит 2 -> Количество стоповых битов (STB). Если установлен в \"1\" и используются 5-битные слова данных, передается и ожидается 1.5 стоповых бита в каждом слове данных. Для 6, 7 и 8-битных слов данных передается и ожидается 2 стоповых бита. Если этот бит сброшен в \"0\", используется один стоповый бит в каждом слове данных. +\n"
+"Бит 1 -> Бит выбора длины слова #1 (WLSB1) +\n"
+"Бит 0 -> Бит выбора длины слова #0 (WLSB0) +\n"
+"Вместе эти биты определяют количество битов в каждом слове данных. +\n"
+"1 0 Длина слова +\n"
+"0 0 5 бит данных +\n"
+"0 1 6 бит данных +\n"
+"1 0 7 бит данных +\n"
+"1 1 8 бит данных +"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:777
+#, no-wrap
+msgid "+0x04"
+msgstr "+0x04"
+
+#. 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 ""
+"Регистр управления модемом (MCR — Modem Control Register) +\n"
+"Бит 7 -> Зарезервирован, всегда 0. +\n"
+"Бит 6 -> Зарезервирован, всегда 0. +\n"
+"Бит 5 -> Зарезервирован, всегда 0. +\n"
+"Бит 4 -> Режим петли (Loop-Back). При установке в \"1\" передатчик и приёмник UART соединяются внутри для диагностики. Также выходы управления модемом UART подключаются к его входам: CTS к RTS, DTR к DSR, OUT1 к RI, а OUT2 к DCD. +\n"
+"Бит 3 -> OUT2. Вспомогательный выход, который процессор может установить в высокий или низкий уровень. В адаптере IBM PC (и большинстве клонов) OUT2 используется для отключения сигнала прерывания от UART 8250/16450/16550. +\n"
+"Бит 2 -> OUT1. Вспомогательный выход, который процессор может установить в высокий или низкий уровень. На адаптере IBM PC не используется. +\n"
+"Бит 1 -> Запрос на передачу (RTS). При установке в \"1\" выход линии -RTS UART переходит в низкий уровень (активное состояние). +\n"
+"Бит 0 -> Готовность терминала данных (DTR). При установке в \"1\" выход линии -DTR UART переходит в низкий уровень (активное состояние). +"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:789
+#, no-wrap
+msgid "+0x05"
+msgstr "+0x05"
+
+#. 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 ""
+"Регистр состояния линии (LSR — Line Status Register) +\n"
+"Бит 7 -> Ошибка в FIFO приемника. На UART 8250/16450 этот бит равен нулю. Этот бит устанавливается в «1», когда любой из байтов в FIFO имеет одно или несколько из следующих условий ошибки: PE, FE или BI. +\n"
+"Бит 6 -> Передатчик пуст (TEMT). Когда установлен в «1», в FIFO передатчика или сдвиговом регистре передатчика не осталось слов. Передатчик полностью бездействует. +\n"
+"Бит 5 -> Регистр хранения передатчика пуст (THRE). Когда установлен в «1», в FIFO (или регистре хранения) теперь есть место для передачи как минимум одного дополнительного слова. Передатчик может все еще передавать данные, когда этот бит установлен в «1». +\n"
+"Бит 4 -> Прерывание по Break (BI). Приемник обнаружил сигнал Break. +\n"
+"Бит 3 -> Ошибка кадрирования (FE). Обнаружен стартовый бит, но стоповый бит не появился в ожидаемое время. Принятое слово, вероятно, искажено. +\n"
+"Бит 2 -> Ошибка четности (PE). Бит четности для принятого слова был некорректен. +\n"
+"Бит 1 -> Ошибка переполнения (OE). Было получено новое слово, но в буфере приема не было места. Вновь поступившее слово в сдвиговом регистре отбрасывается. На UART 8250/16450 слово в регистре хранения отбрасывается, а вновь поступившее слово помещается в регистр хранения. +\n"
+"Бит 0 -> Данные готовы (DR). Одно или несколько слов находятся в FIFO приемника, которые хост может прочитать. Слово должно быть полностью принято и перемещено из сдвигового регистра в FIFO (или регистр хранения для 8250/16450) до того, как этот бит будет установлен."
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:801
+#, no-wrap
+msgid "+0x06"
+msgstr "+0x06"
+
+#. 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 ""
+"Регистр состояния модема (MSR — Modem Status Register) +\n"
+"Бит 7 -> Обнаружение несущей данных (DCD). Отражает состояние линии DCD на UART. +\n"
+"Бит 6 -> Индикатор вызова (RI). Отражает состояние линии RI на UART. +\n"
+"Бит 5 -> Готовность передатчика данных (DSR). Отражает состояние линии DSR на UART. +\n"
+"Бит 4 -> Готовность к приёму (CTS). Отражает состояние линии CTS на UART. +\n"
+"Бит 3 -> Изменение состояния обнаружения несущей данных (DDCD). Устанавливается в \"1\", если линия -DCD изменила состояние ещё раз с момента последнего чтения MSR хостом. +\n"
+"Бит 2 -> Фронт сигнала вызова (TERI). Устанавливается в \"1\", если линия -RI перешла из низкого уровня в высокий с момента последнего чтения MSR хостом. +\n"
+"Бит 1 -> Изменение состояния готовности передатчика данных (DDSR). Устанавливается в \"1\", если линия -DSR изменила состояние ещё раз с момента последнего чтения MSR хостом. +\n"
+"Бит 0 -> Изменение состояния готовности к приёму (DCTS). Устанавливается в \"1\", если линия -CTS изменила состояние ещё раз с момента последнего чтения MSR хостом. +"
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:812
+#, no-wrap
+msgid "+0x07"
+msgstr "+0x07"
+
+#. 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 "Регистр Scratch (SCR — Scratch Register). Этот регистр не выполняет никакой функции в UART. Хост может записать любое значение в это место и позднее считать его."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:816
+#, no-wrap
+msgid "Beyond the 16550A UART"
+msgstr "За пределами UART 16550A"
+
+#. 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 ""
+"Хотя National Semiconductor не предлагала никаких компонентов, совместимых с "
+"16550 и предоставляющих дополнительные функции, другие производители сделали "
+"это. Некоторые из этих компонентов описаны ниже. Следует понимать, что для "
+"эффективного использования этих улучшений могут потребоваться драйверы от "
+"производителя чипа, поскольку большинство популярных операционных систем не "
+"поддерживают функции, выходящие за рамки возможностей 16550."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:822
+#, no-wrap
+msgid "ST16650"
+msgstr "ST16650"
+
+#. 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 ""
+"По умолчанию эта часть аналогична NS16550A, но дополнительно можно включить "
+"расширенный 32-байтовый буфер отправки и приёма. Производитель — StarTech."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:826
+#, no-wrap
+msgid "TIL16660"
+msgstr "TIL16660"
+
+#. 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 ""
+"По умолчанию эта часть ведёт себя аналогично NS16550A, но дополнительно "
+"может быть включён расширенный 64-байтный буфер передачи и приёма. "
+"Производится Texas Instruments."
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:830
+#, no-wrap
+msgid "Hayes ESP"
+msgstr "Hayes ESP"
+
+#. 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 ""
+"Эта проприетарная внешняя карта содержит буфер передачи и приема размером "
+"2048 байт и поддерживает скорость передачи данных до 230,4 Кбит/с. "
+"Произведено компанией Hayes."
+
+#. 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 ""
+"В дополнение к этим \"простым\" UART многие производители выпускают "
+"интеллектуальные платы для последовательной связи. Такой тип конструкции "
+"обычно включает микропроцессор, который взаимодействует с несколькими UART, "
+"обрабатывает и буферизует данные, а затем при необходимости уведомляет "
+"основной процессор ПК. Поскольку в такой системе связи UART не доступны "
+"напрямую процессору ПК, производителю не обязательно использовать UART, "
+"совместимые с 8250, 16450 или 16550. Это дает разработчику свободу выбора "
+"компонентов с лучшими характеристиками производительности."
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:840
+#, no-wrap
+msgid "Configuring the [.filename]#sio# driver"
+msgstr "Настройка драйвера [.filename]#sio#"
+
+#. 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 ""
+"Драйвер [.filename]#sio# обеспечивает поддержку интерфейсов связи EIA "
+"RS-232C (CCITT V.24) на основе NS8250, NS16450, NS16550 и NS16550A. Также "
+"поддерживаются несколько многопортовых карт. Подробную техническую "
+"документацию смотрите на man:sio[4]."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:846
+#, no-wrap
+msgid "Digi International (DigiBoard) PC/8"
+msgstr "Digi International (DigiBoard) PC/8"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:849
+msgid "_Contributed by `{awebster}`. 26 August 1995._"
+msgstr "_Предоставлено `{awebster}`. 26 августа 1995._"
+
+#. 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 ""
+"Вот фрагмент конфигурации с машины, на которой установлена плата Digi "
+"International PC/8 с чипом 16550. К ней подключено 8 модемов, работающих на "
+"этих 8 линиях, и они отлично функционируют. Не забудьте добавить `options "
+"COM_MULTIPORT`, иначе работа будет нестабильной!"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Хитрость настройки заключается в том, что старший бит флагов представляет "
+"последний порт SIO, в данном случае 11, поэтому флаги равны 0xb05."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:868
+#, no-wrap
+msgid "Boca 16"
+msgstr "Boca 16"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:871
+msgid "_Contributed by `{whiteside}`. 26 August 1995._"
+msgstr "_Предоставлено `{whiteside}`. 26 августа 1995._"
+
+#. 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 ""
+"Процедуры по настройке платы Boca с 16 портами в FreeBSD довольно просты, но "
+"вам понадобится несколько вещей для успешной работы:"
+
+#. 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 ""
+"Вам необходимо либо установить исходные коды ядра, чтобы перекомпилировать "
+"нужные опции, либо найти кого-то, кто сделает это за вас. Стандартное ядро "
+"версии 2.0.5 _не_ включает поддержку нескольких портов, и в любом случае вам "
+"потребуется добавить запись устройства для каждого порта."
+
+#. 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 ""
+"Два, вам нужно знать прерывание и настройку ввода-вывода для вашей платы "
+"Boca, чтобы правильно установить эти параметры в ядре."
+
+#. 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 ""
+"Важное замечание — реальные микросхемы UART для Boca 16 находятся в "
+"соединительной коробке, а не на внутренней плате. Поэтому, если она "
+"отключена, попытки проверить эти порты завершатся неудачей. Я никогда не "
+"проверял загрузку с отключённой коробкой и последующим её подключением, и не "
+"рекомендую вам этого делать."
+
+#. 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 ""
+"Если у вас ещё нет настроенного файла конфигурации пользовательского ядра, "
+"обратитесь к extref:{handbook}[Конфигурация ядра, kernelconfig] в "
+"руководстве FreeBSD для получения общих инструкций. Ниже приведены "
+"конкретные настройки для платы Boca 16, предполагается, что вы используете "
+"ядро с именем MYKERNEL и редактируете его с помощью vi."
+
+#. 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 "options COM_MULTIPORT\n"
+
+#. 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 ""
+"Где находятся текущие строки `device sio__n__`, вам нужно добавить ещё 16 "
+"устройств. В следующем примере показана плата Boca Board с прерыванием 3 и "
+"базовым адресом ввода-вывода 100h. Адрес ввода-вывода для каждого порта "
+"увеличивается на 8 в шестнадцатеричной системе относительно предыдущего "
+"порта, поэтому адреса будут 100h, 108h, 110h..."
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Запись flags _обязательно_ должна быть изменена по сравнению с этим "
+"примером, если вы не используете точно такие же назначения sio. Флаги "
+"устанавливаются в соответствии с 0x``__MYY__``, где _M_ обозначает младший "
+"номер главного порта (последний порт на Boca 16), а _YY_ указывает, включен "
+"или выключен FIFO (включен), используется ли разделение IRQ (да) и есть ли "
+"регистр управления IRQ, совместимый с AST/4 (нет). В этом примере,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:914
+#, no-wrap
+msgid ""
+" flags\n"
+"\t 0x1005\n"
+msgstr ""
+" flags\n"
+"\t 0x1005\n"
+
+#. 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 ""
+"указывает, что основной порт - sio16. Если добавить другую плату и назначить "
+"порты с sio17 по sio28, флаги для всех 16 портов на _этой_ плате будут "
+"0x1C05, где 1C обозначает минорный номер основного порта. Не изменяйте "
+"значение 05."
+
+#. 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 ""
+"Сохраните и завершите конфигурацию ядра, перекомпилируйте, установите и "
+"перезагрузитесь. Предполагая, что вы успешно установили перекомпилированное "
+"ядро и настроили правильный адрес и IRQ, сообщение при загрузке должно "
+"указывать на успешное обнаружение портов Boca следующим образом: (очевидно, "
+"номера sio, IO и IRQ могут отличаться)"
+
+#. 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 ""
+"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"
+
+#. 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 "# dmesg | more\n"
+
+#. 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 ""
+"Далее необходимо создать соответствующие записи в [.filename]#/dev# для "
+"устройств с помощью скрипта [.filename]#/dev/MAKEDEV#. Этот шаг можно "
+"пропустить, если вы используете FreeBSD 5.X с ядром, в котором включена "
+"поддержка man:devfs[5]."
+
+#. 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 ""
+"Если вам необходимо создать записи в [.filename]#/dev#, выполните следующую "
+"команду от имени `root`:"
+
+#. 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 ""
+"# cd /dev\n"
+"# ./MAKEDEV tty1\n"
+"# ./MAKEDEV cua1\n"
+
+#. 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 ""
+"(everything in between)\n"
+"# ./MAKEDEV ttyg\n"
+"# ./MAKEDEV cuag\n"
+
+#. 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 ""
+"Если по какой-то причине вам не нужны или не требуются устройства исходящих "
+"соединений, вы можете обойтись без создания устройств [.filename]#cua*#."
+
+#. 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 ""
+"Если вам нужен быстрый и небрежный способ убедиться, что устройства "
+"работают, вы можете просто подключить модем к каждому порту и (как root)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:984
+#, no-wrap
+msgid "# echo at > ttyd*\n"
+msgstr "# echo at > ttyd*\n"
+
+#. 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 ""
+"для каждого устройства, которое вы создали. Вы _должны_ увидеть, как мигают "
+"индикаторы RX для каждого рабочего порта."
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:988
+#, no-wrap
+msgid "Support for Cheap Multi-UART Cards"
+msgstr "Поддержка дешёвых многоканальных UART-карт"
+
+#. 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 ""
+"_Предоставлено Хельге Ольдахом_ "
+"mailto:hmo@sep.hamburg.com[hmo@sep.hamburg.com], сентябрь 1999 года"
+
+#. 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 ""
+"Вы когда-нибудь задумывались о поддержке FreeBSD вашей 20-долларовой "
+"многофункциональной карты с двумя (или более) COM-портами, разделяющими IRQ? "
+"Вот как это сделать:"
+
+#. 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 ""
+"Обычно единственный способ поддержки таких плат — использование отдельного "
+"IRQ для каждого порта. Например, если ваша материнская плата имеет "
+"встроенный порт [.filename]#COM1# (он же [.filename]#sio0# — адрес ввода-"
+"вывода 0x3F8 и IRQ 4), а у вас есть расширительная плата с двумя UART, то "
+"обычно их нужно настроить как [.filename]#COM2# (он же [.filename]#sio1# — "
+"адрес ввода-вывода 0x2F8 и IRQ 3), а третий порт (он же [.filename]#sio2#) — "
+"с адресом 0x3E8 и IRQ 5. Очевидно, это расточительное использование ресурсов "
+"IRQ, так как в принципе возможно запустить оба порта расширительной платы с "
+"одним IRQ, используя конфигурацию `COM_MULTIPORT`, описанную в предыдущих "
+"разделах."
+
+#. 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 ""
+"Такие недорогие платы ввода-вывода обычно имеют перемычечную матрицу 4x3 для "
+"COM-портов, подобную следующей:"
+
+#. 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 ""
+" o o o *\n"
+"Port A |\n"
+" o * o *\n"
+"Port B |\n"
+" o * o o\n"
+"IRQ 2 3 4 5\n"
+
+#. 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 ""
+"Показано, что порт A подключен для IRQ 5, а порт B — для IRQ 3. Столбцы IRQ "
+"на вашей конкретной плате могут отличаться — другие платы могут "
+"предоставлять перемычки для IRQ 3, 4, 5 и 7."
+
+#. 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 ""
+"Можно было бы сделать вывод, что подключение обоих портов к IRQ 3 с помощью "
+"самодельной перемычки, замыкающей все три точки соединения в колонке IRQ 3, "
+"решит проблему, но это не так. Невозможно дублировать IRQ 3, потому что "
+"выходные драйверы каждого UART соединены по схеме \"монтажное И\", и если "
+"один из UART управляет IRQ 3, выходной сигнал будет не таким, как ожидается. "
+"В зависимости от реализации платы расширения или материнской платы, линия "
+"IRQ 3 будет постоянно находиться в высоком уровне или всегда оставаться "
+"низкой."
+
+#. 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 ""
+"Вам необходимо разделить драйверы прерываний для двух UART, чтобы линия "
+"прерывания платы поднималась только тогда (и только тогда), когда один из "
+"UART вызывает прерывание, и оставалась низкой в противном случае. Решение "
+"было предложено Йоргом Вуншем mailto:j@ida.interface-"
+"business.de[j@ida.interface-business.de]: припаять монтажную схему "
+"\"монтажное ИЛИ\", состоящую из двух диодов (предпочтительно германиевых или "
+"типа Шоттки) и резистора на 1 кОм. Вот схема, начиная с контактного поля 4x3 "
+"выше:"
+
+#. 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 ""
+" 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"
+
+#. 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 ""
+"Катоды диодов соединены в общей точке вместе с подтягивающим резистором 1 "
+"кОм. Важно подключить резистор к земле, чтобы избежать плавания линии IRQ на "
+"шине."
+
+#. 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 ""
+"# 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"
+
+#. 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 ""
+"Обратите внимание, что настройка `flags` для [.filename]#sio1# и "
+"[.filename]#sio2# действительно важна; подробности смотрите в man:sio[4]. "
+"(Обычно `2` в атрибуте \"flags\" относится к [.filename]#sio#`2`, который "
+"содержит IRQ, и вам наверняка потребуется нижний ниббл `5`.) При включённом "
+"режиме подробного вывода ядра это должно дать что-то похожее на следующее:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Хотя [.filename]#/sys/i386/isa/sio.c# выглядит несколько загадочно из-за "
+"использования массива \"irq maps\" выше, основная идея заключается в том, "
+"что вы наблюдаете `0x1` на первой, третьей и четвертой позициях. Это "
+"означает, что соответствующий IRQ был установлен при выводе и сброшен после, "
+"что полностью соответствует ожиданиям. Если ваше ядро не демонстрирует такое "
+"поведение, скорее всего, проблема в вашей разводке."
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:1074
+#, no-wrap
+msgid "Configuring the [.filename]#cy# driver"
+msgstr "Настройка драйвера [.filename]#cy#"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1077
+msgid "_Contributed by Alex Nash. 6 June 1996._"
+msgstr "_Предоставлено Алексом Нэшем. 6 июня 1996._"
+
+#. 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 ""
+"Многопортовые карты Cyclades основаны на драйвере [.filename]#cy#, а не на "
+"обычном драйвере [.filename]#sio#, используемом другими многопортовыми "
+"картами. Настройка сводится к простым действиям:"
+
+#. 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 ""
+"Добавьте устройство [.filename]#cy# в конфигурацию ядра (обратите внимание, "
+"что параметры irq и iomem могут отличаться)."
+
+#. 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 "device cy0 at isa? irq 10 iomem 0xd4000 iosiz 0x2000\n"
+
+#. 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 ""
+"Создайте файлы устройств, введя (следующий пример предполагает 8-портовую "
+"плату):"
+
+#. 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 ""
+"# cd /dev\n"
+"# for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done\n"
+
+#. 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 ""
+"Если необходимо, добавьте записи для коммутируемого доступа в [.filename]#/"
+"etc/ttys#, дублируя записи для последовательных устройств (`ttyd`) и "
+"используя `ttyc` вместо `ttyd`. Например:"
+
+#. 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 ""
+"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"
+
+#. 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 "Настройка драйвера [.filename]#si#"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1114
+msgid "_Contributed by `{nsayer}`. 25 March 1998._"
+msgstr "_Предоставлено `{nsayer}`. 25 марта 1998._"
+
+#. 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 ""
+"Специальные мультипортные карты Specialix SI/XIO и SX используют драйвер "
+"[.filename]#si#. На одной машине может быть установлено до 4 хост-карт. "
+"Поддерживаются следующие хост-карты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1120
+msgid "ISA SI/XIO host card (2 versions)"
+msgstr "ISA SI/XIO host card (2 versions)"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1121
+msgid "EISA SI/XIO host card"
+msgstr "EISA SI/XIO host card"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1122
+msgid "PCI SI/XIO host card"
+msgstr "PCI SI/XIO host card"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1123
+msgid "ISA SX host card"
+msgstr "ISA SX host card"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1124
+msgid "PCI SX host card"
+msgstr "PCI SX host card"
+
+#. 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 ""
+"Хотя хост-карты SX и SI/XIO выглядят заметно по-разному, их функциональность "
+"практически одинакова. Хост-карты не используют порты ввода-вывода, а вместо "
+"этого требуют 32К сегмента памяти. Заводская конфигурация для карт ISA "
+"размещает этот сегмент по адресу `0xd0000-0xd7fff`. Также им требуется IRQ. "
+"Карты PCI, разумеется, настраиваются автоматически."
+
+#. 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 ""
+"Вы можете подключить до 4 внешних модулей к каждой карте хоста. Внешние "
+"модули содержат либо 4, либо 8 последовательных портов. Они бывают следующих "
+"видов:"
+
+#. 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 ""
+"Модули SI на 4 или 8 портов. Поддерживается скорость до 57600 бит/с на "
+"каждом порту."
+
+#. 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 ""
+"XIO 8-портовые модули. Поддерживается скорость до 115200 бит/с на каждом "
+"порту. Один из типов модулей XIO имеет 7 последовательных и 1 параллельный "
+"порт."
+
+#. 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 ""
+"Модули SXDC с 8 портами. Поддерживается скорость до 921600 бит/с на каждом "
+"порту. Как и в случае с XIO, доступен модуль с одним параллельным портом."
+
+#. 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 ""
+"Для настройки карты хоста ISA добавьте следующую строку в файл конфигурации "
+"ядра, изменив числа по мере необходимости:"
+
+#. 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 "device si0 at isa? iomem 0xd0000 irq 11\n"
+
+#. 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 ""
+"Допустимые номера IRQ: 9, 10, 11, 12 и 15 для SX ISA host cards и 11, 12 и "
+"15 для SI/XIO ISA host cards."
+
+#. 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 "Для настройки карты EISA или PCI используйте следующую строку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1153
+#, no-wrap
+msgid "device si0\n"
+msgstr "device si0\n"
+
+#. 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 ""
+"Следующий шаг не обязателен, если вы используете man:devfs[5] в FreeBSD "
+"5._X_."
+
+#. 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 ""
+"После перезагрузки с новым ядром необходимо создать файлы устройств в "
+"[.filename]#/dev#. Скрипт [.filename]#MAKEDEV# выполнит эту задачу за вас. "
+"Подсчитайте общее количество портов и введите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1170
+#, no-wrap
+msgid ""
+"# cd /dev\n"
+"# ./MAKEDEV ttyAnn cuaAnn\n"
+msgstr ""
+"# cd /dev\n"
+"# ./MAKEDEV ttyAnn cuaAnn\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1173
+msgid "(where _nn_ is the number of ports)"
+msgstr "(где _nn_ — количество портов)"
+
+#. 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 ""
+"Если вы хотите, чтобы приглашения к входу отображались на этих портах, вам "
+"нужно добавить такие строки в [.filename]#/etc/ttys#:"
+
+#. 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 "ttyA01 \"/usr/libexec/getty std.9600\" vt100 on insecure\n"
+
+#. 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 ""
+"Измените тип терминала по необходимости. Для модемов подойдут `dialup` или "
+"`unknown`."
diff --git a/documentation/content/ru/articles/solid-state/_index.adoc b/documentation/content/ru/articles/solid-state/_index.adoc
index 6c95b718bc..19d1fada4f 100644
--- a/documentation/content/ru/articles/solid-state/_index.adoc
+++ b/documentation/content/ru/articles/solid-state/_index.adoc
@@ -1,13 +1,16 @@
---
-title: FreeBSD и твердотельные устройства
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: 'Использование твердотельных накопителей (SSD) в FreeBSD'
+tags: ["Solid State", "embedded", "FreeBSD"]
+title: 'FreeBSD и твердотельные устройства (SSD)'
trademarks: ["freebsd", "general"]
---
-= FreeBSD и твердотельные устройства
+= FreeBSD и твердотельные устройства (SSD)
:doctype: article
:toc: macro
:toclevels: 1
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Аннотация
-В этой статье описывается использование твердотельных дисковых устройств для создания встраиваемых систем на основе FreeBSD
+В этой статье описывается использование твердотельных дисковых устройств для создания встраиваемых систем на основе FreeBSD.
Встраиваемые системы имеют преимущество в повышенной надежности по причине отсутствия в них движущихся частей (жестких дисков). Однако, следует принять во внимание, что системе, как правило, доступно очень малое дисковое пространство и ограниченный объем запоминающего устройства.
@@ -71,9 +74,7 @@ toc::[]
[.programlisting]
....
-options MFS # Memory Filesystem
options MD_ROOT # md device usable as a potential root device
-pseudo-device md # memory disk
....
[[ro-fs]]
@@ -102,14 +103,14 @@ varsize=8192
Важно помнить, что файловая система, которая была смонтирована только для чтения при помощи файла [.filename]#/etc/fstab#, в любой момент может быть сделана доступной по чтению и записи выдачей команды:
-[source,shell]
+[source, shell]
....
# /sbin/mount -uw partition
....
и может быть возвращена к режиму доступа только для чтения по такой команде:
-[source,shell]
+[source, shell]
....
# /sbin/mount -ur partition
....
@@ -123,107 +124,93 @@ varsize=8192
Самым простым способом обойти это ограничение на объем является установка FreeBSD обычным образом на обычный жесткий диск. После окончания установки, обрежьте операционную систему до размера, который помещается на ваш флэш-носитель, а затем полностью заархивируйте файловую систему. Следующие шаги поведут вас через процесс подготовки части флэш-памяти для вашей заархивированной файловой системы. Запомните, что из-за того, что обычная установка не выполнялась, такие операции, как разбиение на разделы, разметка, создание файловой системы и так далее должны быть выполнены вручную. Кроме дискет kern и mfsroot вам также нужно воспользоваться дискетой fixit.
[.procedure]
+====
. Разбиение вашего флэш-носителя на разделы
-+
++
После загрузки при помощи дискет kern и mfsroot, выберите пункт `custom` из меню установки. Из следующего пункта меню выберите `partition`. В меню работы с разделами вы должны удалить все существующие разделы при помощи клавиши kbd:[d]. После удаления всех имеющихся разделов создайте раздел при помощи клавиши kbd:[c] и согласитесь с предлагаемым по умолчанию размером раздела. Когда вы будете опрошены на предмет типа раздела, удостоверьтесь, что значение типа равно `165`. Теперь запишите эту таблицу разделов на диск, нажав клавишу kbd:[w] (на этом экране эта опция скрыта). Если вы используете компактную флэш-карту, совместимую с ATA, вы должны выбрать FreeBSD Boot Manager. Теперь нажмите клавишу kbd:[q] для выхода из меню работы с разделами. Должно быть выдано еще раз меню для выбора менеджера загрузки - повторите то, что вы выбирали ранее.
. Создание файловых систем на вашем устройстве флэш-памяти
-+
++
Выйдите из меню установки custom, и из главного меню установки выберите пункт `fixit`. После входа в режим работы fixit, введите следующую команду:
+
-
-[source,shell]
+[source, shell]
....
# disklabel -e /dev/ad0c
....
-
-+
++
В этот момент вы войдете в редактор vi из-под команды disklabel. Затем, вам нужно добавить строку `a:` в конце файла. Эта строка `a:` должна выглядеть примерно так:
+
[.programlisting]
....
a: 123456 0 4.2BSD 0 0
....
-
-+
++
Здесь _123456_ является числом, в точности совпадающим с тем, что характеризует размер имеющейся записи для `c:`. В общем, вы копируете существующую строку для `c:` для строки `a:`, не забывая определить fstype как `4.2BSD`. Сохраните файл и завершите редактирование.
+
-
-[source,shell]
+[source, shell]
....
# disklabel -B -r /dev/ad0c
# newfs /dev/ad0a
....
. Размещение вашей файловой системы на флэш-носителе
-+
++
Смонтируйте только что подготовленный флэш-носитель:
+
-
-[source,shell]
+[source, shell]
....
# mount /dev/ad0a /flash
....
-
-+
++
Подключите эту машину к сети, чтобы можно было перенести наш tar-файл и распаковать его в файловую систему на флэш-носителе. Вот пример того, как это можно сделать:
+
-
-[source,shell]
+[source, shell]
....
# ifconfig xl0 192.168.0.10 netmask 255.255.255.0
# route add default 192.168.0.1
....
-
-+
++
Теперь, когда машина находится в сети, перепишите ваш tar-файл. Здесь вы можете столкнуться с некоторой проблемой - если объем вашей флэш-памяти равен, к примеру, 128 мегабайтам, а ваш tar-файл превышает 64 мегабайта, то вы не можете одновременно разместить tar-файл на флэш-носителе и распаковать его - вам не хватит места. Одним из решений этой проблемы, если вы используете FTP, является распаковка файла во время его передачи по FTP. Если вы передаете файл именно так, то вы никогда не получите на диске одновременно архивный файл и его содержимое:
+
-
-[source,shell]
+[source, shell]
....
-
ftp> get tarfile.tar "| tar xvf -"
....
-
-+
++
Если ваш файл обработан утилитой gzip, вы также можете этого добиться:
+
-
-[source,shell]
+[source, shell]
....
-
ftp> get tarfile.tar "| zcat | tar xvf -"
....
-
-+
++
После того, как вы получили содержимое вашей заархивированной файловой системы на файловой системе флэш-памяти, вы можете размонтировать флэш-память и выполнить перезагрузку:
+
-
-[source,shell]
+[source, shell]
....
# cd /
# umount /flash
# exit
....
-
-+
-Полагая, что вы правильно настроили вашу файловую систему при ее построении на обычном диске (с вашей файловой системой, смонтированной в режиме доступа только для чтения, и необходимыми параметрами, присутствующими в ядре) вы должны успешно загрузить вашу встраиваемую систему на основе FreeBSD.
++
+При условии, что вы правильно настроили файловую систему при её создании на обычном жёстком диске (с монтированием файловых систем в режиме только для чтения и с необходимыми опциями, встроенными в ядро), ваша встраиваемая система FreeBSD теперь должна успешно загружаться.
+====
[[strategies]]
== Стратегии работы с системой для случаев небольших и доступных только для чтения файловых систем
В <<ro-fs>> было указано, что файловая система [.filename]#/var#, создаваемая скриптом [.filename]#/etc/rc.d/var#, и наличие корневой файловой системы, доступной только для чтения, приводят к проблемам при работе многих распространенных программных пакетов, используемых во FreeBSD. В этой статье будут даны рекомендации по настройке нормальной работы cron и syslog, установке портов и веб-сервера Apache.
-=== cron
+=== Cron
Во время загрузки содержимое каталогa [.filename]#/var# формируется скриптом [.filename]#/etc/rc.d/var# используя данные из [.filename]#/etc/mtree/BSD.var.dist#, поэтому в нем создается несколько стандартных каталогов, в числе которых - [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#.
Однако это не решает проблему с сохранением cron-таблиц между перезагрузками. Когда система перезагружается, то файловая система [.filename]#/var#, которая располагается в памяти, будет уничтожена, вместе со всеми cron-таблицами, которые вы могли там иметь. Поэтому одним из решений может стать создание cron-таблиц для пользователей, которым они нужны, монтирование вашей файловой системы [.filename]#/# в режиме чтения и записи, и копирование этих cron-таблиц в безопасное место, например, в [.filename]#/etc/tabs#, и последующее добавление строки в конец скрипта [.filename]#/etc/rc.initdiskless# для копирования этих cron-таблиц в каталог [.filename]#/var/cron/tabs# после его создания во время инициализации системы. Вам может также потребоваться добавить строку, которая изменяет режимы доступа и права на каталоги, которые вы создали, и на файлы, которые вы скопировали в скрипте [.filename]#/etc/rc.initdiskless#.
-=== syslog
+=== Syslog
В файле [.filename]#syslog.conf# задано местоположение некоторых файлов протоколов, которые имеются в каталоге [.filename]#/var/log#. Эти файлы не создаются скриптом [.filename]#/etc/rc.d/var# во время инициализации системы. Поэтому где-нибудь в скрипте [.filename]#/etc/rc.d/var#, после секции, создающей каталоги в [.filename]#/var#, вам нужно добавить нечто вроде следующего:
-[source,shell]
+[source, shell]
....
# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*
@@ -231,20 +218,20 @@ ftp> get tarfile.tar "| zcat | tar xvf -"
=== Установка портов
-Перед тем, как обсудить изменения, которые нужно сделать для успешного использования дерева портов, необходимо напомнить о том, что ваши файловые системы на флэш-носителях доступны только для чтения. Поэтому вам нужно временно монтировать их в режиме чтения и записи, используя параметры командной строки, как это показано в <<ro-fs>>. Вы всегда должны перемонтировать эти файловые системы в режим только для чтения после окончания работ - излишние записи на флеш носитель могут значительно сократить его срок эксплуатации.
+Перед тем, как обсудить изменения, которые нужно сделать для успешного использования дерева портов, необходимо напомнить о том, что ваши файловые системы на флэш-носителях доступны только для чтения. Поэтому вам нужно временно монтировать их в режиме чтения и записи, используя параметры командной строки, как это показано в crossref:solid-state[ro-fs, Подсистема `rc` и файловые системы в режиме только чтения]. Вы всегда должны перемонтировать эти файловые системы в режим только для чтения после окончания работ - излишние записи на флеш носитель могут значительно сократить его срок эксплуатации.
Чтобы можно было войти в каталог с портами и успешно выполнить команду make `install`, необходимо создать каталог для пакаджей в файловой системе, не располагающейся в памяти, где будут храниться пакаджи между перезагрузками. Так как для установки пакаджа в любом случае требуется монтирование ваших файловых систем для чтения и записи, имеет смысл выделить область флэш-носителя также и для записи информации о пакадже.
Прежде всего создайте каталог с базой данных о пакаджах. Обычно это каталог [.filename]#/var/db/pkg#, но мы не можем разместить базу именно здесь, так как она исчезнет после перезагрузки системы.
-[source,shell]
+[source, shell]
....
# mkdir /etc/pkg
....
Теперь в скрипт [.filename]#/etc/rc.d/var# добавьте строку, которая связывает каталог [.filename]#/etc/pkg# с [.filename]#/var/db/pkg#. Например:
-[source,shell]
+[source, shell]
....
# ln -s /etc/pkg /var/db/pkg
....
@@ -264,7 +251,7 @@ ftp> get tarfile.tar "| zcat | tar xvf -"
Затем добавьте в скрипт [.filename]#/etc/rc.d/var# после секции создания каталогов такие команды:
-[source,shell]
+[source, shell]
....
# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache
@@ -272,8 +259,8 @@ ftp> get tarfile.tar "| zcat | tar xvf -"
И наконец, удалите существующий каталог [.filename]#apache_install/logs# и замените его ссылкой:
-[source,shell]
+[source, shell]
....
# rm -rf apache_log_dir
-# ln -s apache_log_dir
+# ln -s /var/log/apache apache_log_dir
....
diff --git a/documentation/content/ru/articles/solid-state/_index.po b/documentation/content/ru/articles/solid-state/_index.po
new file mode 100644
index 0000000000..12db5644aa
--- /dev/null
+++ b/documentation/content/ru/articles/solid-state/_index.po
@@ -0,0 +1,895 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-24 18:41+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlessolid-state_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/articles/solid-state/_index.adoc:1
+#, no-wrap
+msgid "The use of solid state disk devices in FreeBSD"
+msgstr "Использование твердотельных накопителей (SSD) в 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 и твердотельные устройства (SSD)"
+
+#. 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 ""
+"В этой статье описывается использование твердотельных дисковых устройств для "
+"создания встраиваемых систем на основе FreeBSD."
+
+#. 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 ""
+"К отдельно рассматриваемым вопросам относятся типы и характеристики "
+"твердотельных носителей, подходящих для использования в качестве дисков во "
+"FreeBSD, параметры ядра, которые представляют интерес в таких условиях, "
+"механизмы [.filename]#rc.initdiskless#, автоматизирующие инициализацию таких "
+"систем и удовлетворяющие требованиям файловых систем, доступных только для "
+"чтения, а также построение файловых систем с нуля. Статья заканчивается "
+"описанием некоторых общих стратегий для случаев малых систем 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 "Твердотельные дисковые устройства"
+
+#. 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 ""
+"Эта статья будет ограничиваться рассмотрением твердотельных дисковых "
+"устройств, которые делаются на основе флэш-памяти. Флэш-память является "
+"твердотельным (здесь нет движущихся частей) запоминающим устройством, "
+"которое является энергонезависимым (данные остаются в памяти даже после "
+"отключения всех источников питания). Флэш-память может быть нечувствительной "
+"к сильным физическим воздействиям и достаточно быстра (решения на основе "
+"флэш-памяти, описываемые в этой статье, гораздо медленнее, чем диски EIDE "
+"для операций записи, и гораздо быстрее их в случае выполнения операций "
+"чтения). Одним из очень важных свойств флэш-памяти, различные варианты "
+"которого будут рассмотрены далее в этой статье, является то, что каждый "
+"сектор имеет ограниченные возможности по перезаписыванию. Вы можете только "
+"записывать, стирать и снова записывать на сектор флэш-памяти определенное "
+"количество раз до того, как сектор станет полностью неработоспособным. Хотя "
+"многие продукты на основе флэш-памяти автоматически перенаправляют "
+"испорченные блоки, а некоторые даже распределяют операции записи по всему "
+"модулю, фактом является наличие ограничения на количество операций записи, "
+"которые могут выполняться с устройством. Современные модули имеют "
+"характеристики от 1,000,000 до 10,000,000 циклов записи на сектор. Эти "
+"характеристики могут зависеть от температуры рабочей среды."
+
+#. 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 ""
+"В частности, мы обсудим компактные модули флэш-памяти, совместимые со "
+"стандартом ATA, которые стали весьма популярными в качестве носителя данных "
+"для цифровых камер. Особый интерес представляет тот факт, что они "
+"соответствуют шине IDE по контактам и совместимы с набором команд ATA. Таким "
+"образом, при помощи очень простого и дешевого адаптера такие устройства "
+"могут подключаться непосредственно к шине IDE компьютера. Если поступить "
+"таким образом, то такие операционные системы, как FreeBSD, распознают диск "
+"как обычный винчестер (весьма маленький)."
+
+#. 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 ""
+"Для тех, кто создает встраиваемую систему FreeBSD, интерес представляют "
+"несколько параметров ядра."
+
+#. 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 ""
+"Все встраиваемые системы FreeBSD, которые используют флэш-память в качестве "
+"системного диска, заинтересованы в использовании дисков в памяти и файловых "
+"систем в памяти. Из-за ограниченного количества циклов записи, которые можно "
+"выполнить с флэш-памятью, диск и файловые системы на нем будут, скорее "
+"всего, монтироваться в режиме доступа только для чтения. В таком случае "
+"файловые системы типа [.filename]#/tmp# и [.filename]#/var# монтируются как "
+"файловые системы в памяти для того, чтобы позволить системе создать журналы "
+"и обновить счетчики и временные файлы. Файловые системы в памяти являются "
+"критическим компонентом успешной работы 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 ""
+"Вы должны удостовериться, что в конфигурационном файле вашего ядра "
+"присутствуют следующие строки:"
+
+#. 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 "options MD_ROOT # md device usable as a potential root device\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:95
+#, no-wrap
+msgid "The `rc` Subsystem and Read-Only Filesystems"
+msgstr "Подсистема `rc` и файловые системы в режиме только чтения"
+
+#. 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 ""
+"Инициализация встраиваемой системы FreeBSD после загрузки управляется "
+"[.filename]#/etc/rc.initdiskless#."
+
+#. 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 ""
+"[.filename]#/etc/rc.d/var# монтирует [.filename]#/var# как файловую систему "
+"в памяти, создает указываемый список каталогов в [.filename]#/var# при "
+"помощи команды man:mkdir[1], изменяет режимы доступа на некоторые из этих "
+"каталогов. В процессе выполнения [.filename]#/etc/rc.d/var# задействуется "
+"еще одна переменная [.filename]#rc.conf# - `varsize`. Скрипт [.filename]#/"
+"etc/rc.d/var# создает раздел [.filename]#/var# на основе значения этой "
+"переменной из [.filename]#rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:106
+#, no-wrap
+msgid "varsize=8192\n"
+msgstr "varsize=8192\n"
+
+#. 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 "
+"crossref:solid-state[intro, Solid State Disk Devices] 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 ""
+"Факт использования файловой системы [.filename]#/var# в режиме чтения и "
+"записи является важным признаком, так как раздел [.filename]#/# (и любые "
+"другие разделы, которые могут находиться на флэш-носителе) должен "
+"монтироваться в режиме только для чтения. Вспомните, что в <<intro>> мы "
+"касались ограничений флэш-памяти - особенно ограничений, касающихся "
+"возможностей записи. Важно не монтировать файловые системы на флэш-носителях "
+"в режимах чтения и записи, и важность отказа от файла подкачки не может быть "
+"переоценена. Файл подкачки на загруженной системе может пережечь кусок флэш-"
+"носителя менее чем за год. Частое журналирование и создание временных файлов "
+"приводят к тому же результату. Поэтому, кроме удаления записи `swap` из "
+"вашего файла [.filename]#/etc/fstab#, вы должны также изменить поле "
+"параметров каждой файловой системы на `ro` таким образом:"
+
+#. 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 ""
+"# 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 crossref:solid-state[strategies, System "
+"Strategies for Small and Read Only Environments]."
+msgstr ""
+"В результате этих изменений в среднестатистической системе несколько "
+"приложений немедленно перестанут работать. Например, cron не будет нормально "
+"запускаться в результате отсутствия таблиц для него в каталоге [.filename]#/"
+"var#, созданном [.filename]#/etc/rc.d/var#, а syslog и dhcp будут испытывать "
+"проблемы из-за доступа файловой системы только для чтения, а также "
+"отсутствия записей в [.filename]#/var#, который был создан скриптом "
+"[.filename]#/etc/rc.d/var#. Хотя эти проблемы являются временными и "
+"обсуждаются вместе с решением проблем с запуском распространенных "
+"программных пакетов, в <<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 ""
+"Важно помнить, что файловая система, которая была смонтирована только для "
+"чтения при помощи файла [.filename]#/etc/fstab#, в любой момент может быть "
+"сделана доступной по чтению и записи выдачей команды:"
+
+#. 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 ""
+"и может быть возвращена к режиму доступа только для чтения по такой команде:"
+
+#. 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 "Создание файловой системы с нуля"
+
+#. 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 ""
+"Так как совместимые с ATA компактные флэш-карты распознаются во FreeBSD как "
+"обычные жесткие диски IDE, то теоретически вы можете установить FreeBSD по "
+"сети при помощи дискет kern и mfsroot или с компакт-диска."
+
+#. 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 ""
+"Однако даже маленькая установка FreeBSD при помощи обычных процедур "
+"установки может привести к созданию системы размером, превышающим 200 "
+"мегабайт. Так как большинство людей используют устройства флэш-памяти "
+"меньшего размера (128 мегабайт считается весьма большим - 32 или даже 16 "
+"мегабайт используются гораздо чаще), то установка обычным образом не "
+"подходит-просто на диске нет места даже для самой минимальной установки."
+
+#. 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 ""
+"Самым простым способом обойти это ограничение на объем является установка "
+"FreeBSD обычным образом на обычный жесткий диск. После окончания установки, "
+"обрежьте операционную систему до размера, который помещается на ваш флэш-"
+"носитель, а затем полностью заархивируйте файловую систему. Следующие шаги "
+"поведут вас через процесс подготовки части флэш-памяти для вашей "
+"заархивированной файловой системы. Запомните, что из-за того, что обычная "
+"установка не выполнялась, такие операции, как разбиение на разделы, "
+"разметка, создание файловой системы и так далее должны быть выполнены "
+"вручную. Кроме дискет kern и mfsroot вам также нужно воспользоваться "
+"дискетой fixit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:159
+msgid "Partitioning Your Flash Media Device"
+msgstr "Разбиение вашего флэш-носителя на разделы"
+
+#. 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 ""
+"После загрузки при помощи дискет kern и mfsroot, выберите пункт `custom` из "
+"меню установки. Из следующего пункта меню выберите `partition`. В меню "
+"работы с разделами вы должны удалить все существующие разделы при помощи "
+"клавиши kbd:[d]. После удаления всех имеющихся разделов создайте раздел при "
+"помощи клавиши kbd:[c] и согласитесь с предлагаемым по умолчанию размером "
+"раздела. Когда вы будете опрошены на предмет типа раздела, удостоверьтесь, "
+"что значение типа равно `165`. Теперь запишите эту таблицу разделов на диск, "
+"нажав клавишу kbd:[w] (на этом экране эта опция скрыта). Если вы используете "
+"компактную флэш-карту, совместимую с ATA, вы должны выбрать FreeBSD Boot "
+"Manager. Теперь нажмите клавишу kbd:[q] для выхода из меню работы с "
+"разделами. Должно быть выдано еще раз меню для выбора менеджера загрузки - "
+"повторите то, что вы выбирали ранее."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:170
+msgid "Creating Filesystems on Your Flash Memory Device"
+msgstr "Создание файловых систем на вашем устройстве флэш-памяти"
+
+#. 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 ""
+"Выйдите из меню установки custom, и из главного меню установки выберите "
+"пункт `fixit`. После входа в режим работы fixit, введите следующую команду:"
+
+#. 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 ""
+"В этот момент вы войдете в редактор vi из-под команды disklabel. Затем, вам "
+"нужно добавить строку `a:` в конце файла. Эта строка `a:` должна выглядеть "
+"примерно так:"
+
+#. 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 ""
+"Здесь _123456_ является числом, в точности совпадающим с тем, что "
+"характеризует размер имеющейся записи для `c:`. В общем, вы копируете "
+"существующую строку для `c:` для строки `a:`, не забывая определить fstype "
+"как `4.2BSD`. Сохраните файл и завершите редактирование."
+
+#. 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 "Размещение вашей файловой системы на флэш-носителе"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:200
+msgid "Mount the newly prepared flash media:"
+msgstr "Смонтируйте только что подготовленный флэш-носитель:"
+
+#. 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 ""
+"Подключите эту машину к сети, чтобы можно было перенести наш tar-файл и "
+"распаковать его в файловую систему на флэш-носителе. Вот пример того, как "
+"это можно сделать:"
+
+#. 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 ""
+"Теперь, когда машина находится в сети, перепишите ваш tar-файл. Здесь вы "
+"можете столкнуться с некоторой проблемой - если объем вашей флэш-памяти "
+"равен, к примеру, 128 мегабайтам, а ваш tar-файл превышает 64 мегабайта, то "
+"вы не можете одновременно разместить tar-файл на флэш-носителе и распаковать "
+"его - вам не хватит места. Одним из решений этой проблемы, если вы "
+"используете FTP, является распаковка файла во время его передачи по FTP. "
+"Если вы передаете файл именно так, то вы никогда не получите на диске "
+"одновременно архивный файл и его содержимое:"
+
+#. 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 "Если ваш файл обработан утилитой gzip, вы также можете этого добиться:"
+
+#. 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 ""
+"После того, как вы получили содержимое вашей заархивированной файловой "
+"системы на файловой системе флэш-памяти, вы можете размонтировать флэш-"
+"память и выполнить перезагрузку:"
+
+#. 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 ""
+"При условии, что вы правильно настроили файловую систему при её создании на "
+"обычном жёстком диске (с монтированием файловых систем в режиме только для "
+"чтения и с необходимыми опциями, встроенными в ядро), ваша встраиваемая "
+"система FreeBSD теперь должна успешно загружаться."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:245
+#, no-wrap
+msgid "System Strategies for Small and Read Only Environments"
+msgstr "Стратегии работы с системой для случаев небольших и доступных только для чтения файловых систем"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:249
+msgid ""
+"In crossref:solid-state[ro-fs, The `rc` Subsystem and Read-Only "
+"Filesystems], 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 ""
+"В <<ro-fs>> было указано, что файловая система [.filename]#/var#, "
+"создаваемая скриптом [.filename]#/etc/rc.d/var#, и наличие корневой файловой "
+"системы, доступной только для чтения, приводят к проблемам при работе многих "
+"распространенных программных пакетов, используемых во FreeBSD. В этой статье "
+"будут даны рекомендации по настройке нормальной работы cron и syslog, "
+"установке портов и веб-сервера 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 ""
+"Во время загрузки содержимое каталогa [.filename]#/var# формируется скриптом "
+"[.filename]#/etc/rc.d/var# используя данные из [.filename]#/etc/mtree/"
+"BSD.var.dist#, поэтому в нем создается несколько стандартных каталогов, в "
+"числе которых - [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#."
+
+#. 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 ""
+"Однако это не решает проблему с сохранением cron-таблиц между "
+"перезагрузками. Когда система перезагружается, то файловая система "
+"[.filename]#/var#, которая располагается в памяти, будет уничтожена, вместе "
+"со всеми cron-таблицами, которые вы могли там иметь. Поэтому одним из "
+"решений может стать создание cron-таблиц для пользователей, которым они "
+"нужны, монтирование вашей файловой системы [.filename]#/# в режиме чтения и "
+"записи, и копирование этих cron-таблиц в безопасное место, например, в "
+"[.filename]#/etc/tabs#, и последующее добавление строки в конец скрипта "
+"[.filename]#/etc/rc.initdiskless# для копирования этих cron-таблиц в каталог "
+"[.filename]#/var/cron/tabs# после его создания во время инициализации "
+"системы. Вам может также потребоваться добавить строку, которая изменяет "
+"режимы доступа и права на каталоги, которые вы создали, и на файлы, которые "
+"вы скопировали в скрипте [.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# задано местоположение некоторых файлов "
+"протоколов, которые имеются в каталоге [.filename]#/var/log#. Эти файлы не "
+"создаются скриптом [.filename]#/etc/rc.d/var# во время инициализации "
+"системы. Поэтому где-нибудь в скрипте [.filename]#/etc/rc.d/var#, после "
+"секции, создающей каталоги в [.filename]#/var#, вам нужно добавить нечто "
+"вроде следующего:"
+
+#. 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 "Установка портов"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:277
+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 crossref:solid-"
+"state[ro-fs, The `rc` Subsystem and Read-Only Filesystems]. 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 ""
+"Перед тем, как обсудить изменения, которые нужно сделать для успешного "
+"использования дерева портов, необходимо напомнить о том, что ваши файловые "
+"системы на флэш-носителях доступны только для чтения. Поэтому вам нужно "
+"временно монтировать их в режиме чтения и записи, используя параметры "
+"командной строки, как это показано в crossref:solid-state[ro-fs, Подсистема "
+"`rc` и файловые системы в режиме только чтения]. Вы всегда должны "
+"перемонтировать эти файловые системы в режим только для чтения после "
+"окончания работ - излишние записи на флеш носитель могут значительно "
+"сократить его срок эксплуатации."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:280
+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 ""
+"Чтобы можно было войти в каталог с портами и успешно выполнить команду make "
+"`install`, необходимо создать каталог для пакаджей в файловой системе, не "
+"располагающейся в памяти, где будут храниться пакаджи между перезагрузками. "
+"Так как для установки пакаджа в любом случае требуется монтирование ваших "
+"файловых систем для чтения и записи, имеет смысл выделить область флэш-"
+"носителя также и для записи информации о пакадже."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:283
+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 ""
+"Прежде всего создайте каталог с базой данных о пакаджах. Обычно это каталог "
+"[.filename]#/var/db/pkg#, но мы не можем разместить базу именно здесь, так "
+"как она исчезнет после перезагрузки системы."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:287
+#, no-wrap
+msgid "# mkdir /etc/pkg\n"
+msgstr "# mkdir /etc/pkg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:290
+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 ""
+"Теперь в скрипт [.filename]#/etc/rc.d/var# добавьте строку, которая "
+"связывает каталог [.filename]#/etc/pkg# с [.filename]#/var/db/pkg#. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:294
+#, 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:297
+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 ""
+"Теперь каждый раз при монтировании ваших файловых систем для чтения и записи "
+"и установки пакаджа, команда make `install` будет работать, а информация о "
+"пакадже будет успешно записана в каталог [.filename]#/etc/pkg# (так как "
+"файловая система будет в это время смонтирована для чтения и записи), "
+"который всегда будет доступным операционной системе как [.filename]#/var/db/"
+"pkg#."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:298
+#, no-wrap
+msgid "Apache Web Server"
+msgstr "Веб-сервер Apache"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:304
+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 ""
+"Шаги, описанные в этой части статьи, необходимо выполнить лишь в том случае, "
+"если Apache настроен сохранять свой pid или лог файл вне каталога "
+"[.filename]#/var#. С настройками по умолчанию Apache формирует свой pid файл "
+"в [.filename]#/var/run/httpd.pid#, а лог файлы - в [.filename]#/var/log#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:310
+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 ""
+"Далее в статье подразумевается, что Apache сохраняет свои лог файлы в "
+"каталог [.filename]#apache_log_dir# вне каталога [.filename]#/var#. Когда "
+"этот каталог расположен на файловой системе, смонтированной в режиме только "
+"для чтения, Apache не сможет сохранять лог файлы, что в свою очередь может "
+"вызывать проблемы в работе веб-сервера. В таком случае необходимо добавить "
+"новый каталог к списку каталогов из [.filename]#/etc/rc.d/var# для их "
+"создания в каталоге [.filename]#/var# и связать [.filename]#apache_log_dir# "
+"с [.filename]#/var/log/apache#. Нужно также задать права доступа и владельца "
+"нового каталога."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:312
+msgid ""
+"First, add the directory `log/apache` to the list of directories to be "
+"created in [.filename]#/etc/rc.d/var#."
+msgstr ""
+"Сначала добавьте каталог `log/apache` к списку каталогов, создаваемых "
+"скриптом [.filename]#/etc/rc.d/var#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:314
+msgid ""
+"Second, add these commands to [.filename]#/etc/rc.d/var# after the directory "
+"creation section:"
+msgstr ""
+"Затем добавьте в скрипт [.filename]#/etc/rc.d/var# после секции создания "
+"каталогов такие команды:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:319
+#, 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:322
+msgid ""
+"Finally, remove the existing [.filename]#apache_log_dir# directory, and "
+"replace it with a link:"
+msgstr ""
+"И наконец, удалите существующий каталог [.filename]#apache_install/logs# и "
+"замените его ссылкой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:327
+#, 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"
diff --git a/documentation/content/ru/articles/vpn-ipsec/_index.adoc b/documentation/content/ru/articles/vpn-ipsec/_index.adoc
new file mode 100644
index 0000000000..0337c59316
--- /dev/null
+++ b/documentation/content/ru/articles/vpn-ipsec/_index.adoc
@@ -0,0 +1,308 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2023 The FreeBSD Documentation Project'
+description: 'VPN через IPsec'
+title: 'VPN через IPsec'
+trademarks: ["freebsd", "general"]
+---
+
+= VPN через IPsec
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Безопасность интернет-протокола (IPsec) — это набор протоколов, работающих поверх уровня интернет-протокола (IP). Он позволяет двум или более узлам обмениваться данными безопасным образом, аутентифицируя и шифруя каждый IP-пакет сеанса связи. Сетевой стек IPsec в FreeBSD основан на реализации http://www.kame.net/[http://www.kame.net/] и поддерживает сеансы как IPv4, так и IPv6.
+
+IPsec состоит из следующих подпротоколов:
+
+* _Протокол Encapsulated Security Payload (ESP)_: этот протокол защищает данные IP-пакета от вмешательства третьих сторон, шифруя содержимое с использованием алгоритмов симметричной криптографии, таких как Blowfish и 3DES.
+* _Authentication Header (AH)_: этот протокол защищает заголовок IP-пакета от вмешательства третьих сторон и подмены путем вычисления криптографической контрольной суммы и хеширования полей заголовка IP-пакета с использованием безопасной хеш-функции. Затем следует дополнительный заголовок, содержащий хеш, что позволяет аутентифицировать информацию в пакете.
+* _Протокол сжатия передаваемых данных IP (IPComp — IP Payload Compression Protocol)_: этот протокол пытается повысить производительность связи за счёт сжатия передаваемых данных IP, чтобы уменьшить объём отправляемых данных.
+
+Эти протоколы могут использоваться как вместе, так и по отдельности, в зависимости от окружения.
+
+IPsec поддерживает два режима работы. Первый режим, _Transport Mode_ (Транспортный режим), защищает соединение между двумя хостами. Второй режим, _Tunnel Mode_ (Туннельный режим), используется для построения виртуальных туннелей, обычно известных как Virtual Private Networks (VPN, Виртуальные частные сети). Подробную информацию о подсистеме IPsec в FreeBSD можно найти в man:ipsec[4].
+
+В статье демонстрируется процесс настройки IPsecVPN между домашней сетью и корпоративной сетью.
+
+В примере сценария:
+
+* Оба сайта подключены к Интернету через шлюз, на котором работает FreeBSD.
+* Шлюз в каждой сети имеет как минимум один внешний IP-адрес. В этом примере внешний IP-адрес корпоративной LAN — `172.16.5.4`, а внешний IP-адрес домашней LAN — `192.168.1.12`.
+* Внутренние адреса двух сетей могут быть как публичными, так и частными IP-адресами. Однако их адресные пространства не должны пересекаться. В этом примере внутренний IP-адрес корпоративной LAN — `10.246.38.1`, а внутренний IP-адрес домашней LAN — `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
+....
+
+== Настройка VPN на FreeBSD
+
+Для начала необходимо установить пакет package:security/ipsec-tools[] из Коллекции портов. Это программное обеспечение предоставляет ряд приложений, поддерживающих настройку.
+
+Следующее требование — создать два псевдоустройства man:gif[4], которые будут использоваться для туннелирования пакетов и обеспечения правильной связи между обеими сетями. От имени `root` выполните следующую команду на каждом шлюзе:
+
+[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
+....
+
+Проверьте настройку на каждом шлюзе, используя `ifconfig gif0`. Вот вывод с домашнего шлюза:
+
+[.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
+....
+
+Вот вывод с корпоративного шлюза:
+
+[.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
+....
+
+После завершения оба внутренних IP-адреса должны быть доступны с использованием 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
+....
+
+Как и ожидалось, обе стороны имеют возможность отправлять и получать ICMP-пакеты с приватно настроенных адресов. Далее, оба шлюза должны быть настроены для маршрутизации пакетов, чтобы корректно передавать трафик из сетей за каждым шлюзом. Следующие команды позволят достичь этой цели:
+
+[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
+....
+
+Внутренние машины должны быть доступны с каждого шлюза, а также с машин за шлюзами. Снова используйте man:ping[8] для проверки:
+
+[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
+....
+
+На этом этапе трафик передается между сетями, инкапсулированный в туннель gif, но без какого-либо шифрования. Далее используйте IPSec для шифрования трафика с использованием предварительно согласованных ключей (PSK). За исключением IP-адресов, файл [.filename]#/usr/local/etc/racoon/racoon.conf# на обоих шлюзах будет идентичным и выглядеть примерно так:
+
+[.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;
+}
+....
+
+Для описания каждой доступной опции обратитесь к справочной странице [.filename]#racoon.conf#.
+
+База данных политики безопасности (SPD) должна быть настроена таким образом, чтобы FreeBSD и racoon могли шифровать и расшифровывать сетевой трафик между узлами.
+
+Это может быть реализовано с помощью shell-скрипта, подобного приведённому ниже, на корпоративном шлюзе. Этот файл будет использоваться при инициализации системы и должен быть сохранён как [.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;
+....
+
+После настройки racoon может быть запущен на обоих шлюзах с помощью следующей команды:
+
+[source, shell]
+....
+# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
+....
+
+Вывод должен быть похож на следующий:
+
+[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)
+....
+
+Чтобы убедиться, что туннель работает правильно, переключитесь на другую консоль и используйте man:tcpdump[1] для просмотра сетевого трафика с помощью следующей команды. Замените `em0` на требуемую сетевую интерфейсную карту:
+
+[source, shell]
+....
+corp-gw# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
+....
+
+На консоли должны появиться данные, аналогичные следующим. Если этого не произошло, возникла проблема, и потребуется отладка возвращённых данных.
+
+[.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)
+....
+
+На этом этапе обе сети должны быть доступны и казаться частью одной сети. Скорее всего, обе сети защищены межсетевым экраном. Чтобы разрешить передачу трафика между ними, необходимо добавить правила для пропуска пакетов. Для межсетевого экрана man:ipfw[8] добавьте следующие строки в файл конфигурации межсетевого экрана:
+
+[.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]
+====
+Номера правил могут потребовать изменения в зависимости от текущей конфигурации хоста.
+====
+
+Для пользователей man:pf[4] или man:ipf[8] должны сработать следующие правила:
+
+[.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
+....
+
+Наконец, чтобы включить поддержку VPN при загрузке системы, добавьте следующие строки в [.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/ru/articles/vpn-ipsec/_index.po b/documentation/content/ru/articles/vpn-ipsec/_index.po
new file mode 100644
index 0000000000..5ca5a5a8ca
--- /dev/null
+++ b/documentation/content/ru/articles/vpn-ipsec/_index.po
@@ -0,0 +1,838 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: 2025-08-02 15:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesvpn-ipsec_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\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 "VPN через IPsec"
+
+#. 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 ""
+"Безопасность интернет-протокола (IPsec) — это набор протоколов, работающих "
+"поверх уровня интернет-протокола (IP). Он позволяет двум или более узлам "
+"обмениваться данными безопасным образом, аутентифицируя и шифруя каждый IP-"
+"пакет сеанса связи. Сетевой стек IPsec в FreeBSD основан на реализации "
+"http://www.kame.net/[http://www.kame.net/] и поддерживает сеансы как IPv4, "
+"так и IPv6."
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:29
+msgid "IPsec is comprised of the following sub-protocols:"
+msgstr "IPsec состоит из следующих подпротоколов:"
+
+#. 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 ""
+"_Протокол Encapsulated Security Payload (ESP)_: этот протокол защищает "
+"данные IP-пакета от вмешательства третьих сторон, шифруя содержимое с "
+"использованием алгоритмов симметричной криптографии, таких как Blowfish и "
+"3DES."
+
+#. 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 ""
+"_Authentication Header (AH)_: этот протокол защищает заголовок IP-пакета от "
+"вмешательства третьих сторон и подмены путем вычисления криптографической "
+"контрольной суммы и хеширования полей заголовка IP-пакета с использованием "
+"безопасной хеш-функции. Затем следует дополнительный заголовок, содержащий "
+"хеш, что позволяет аутентифицировать информацию в пакете."
+
+#. 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 ""
+"_Протокол сжатия передаваемых данных IP (IPComp — IP Payload Compression "
+"Protocol)_: этот протокол пытается повысить производительность связи за счёт "
+"сжатия передаваемых данных IP, чтобы уменьшить объём отправляемых данных."
+
+#. 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 ""
+"IPsec поддерживает два режима работы. Первый режим, _Transport Mode_ ("
+"Транспортный режим), защищает соединение между двумя хостами. Второй режим, "
+"_Tunnel Mode_ (Туннельный режим), используется для построения виртуальных "
+"туннелей, обычно известных как Virtual Private Networks (VPN, Виртуальные "
+"частные сети). Подробную информацию о подсистеме IPsec в FreeBSD можно найти "
+"в man:ipsec[4]."
+
+#. 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 ""
+"В статье демонстрируется процесс настройки IPsecVPN между домашней сетью и "
+"корпоративной сетью."
+
+#. 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 ""
+"Оба сайта подключены к Интернету через шлюз, на котором работает FreeBSD."
+
+#. 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 ""
+"Шлюз в каждой сети имеет как минимум один внешний IP-адрес. В этом примере "
+"внешний IP-адрес корпоративной LAN — `172.16.5.4`, а внешний IP-адрес "
+"домашней LAN — `192.168.1.12`."
+
+#. 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 ""
+"Внутренние адреса двух сетей могут быть как публичными, так и частными IP-"
+"адресами. Однако их адресные пространства не должны пересекаться. В этом "
+"примере внутренний IP-адрес корпоративной LAN — `10.246.38.1`, а внутренний "
+"IP-адрес домашней LAN — `10.0.0.5`."
+
+#. 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 ""
+" corporate home\n"
+"10.246.38.1/24 -- 172.16.5.4 <--> 192.168.1.12 -- 10.0.0.5/24\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:55
+#, no-wrap
+msgid "Configuring a VPN on FreeBSD"
+msgstr "Настройка VPN на FreeBSD"
+
+#. 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 ""
+"Для начала необходимо установить пакет package:security/ipsec-tools[] из "
+"Коллекции портов. Это программное обеспечение предоставляет ряд приложений, "
+"поддерживающих настройку."
+
+#. 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 ""
+"Следующее требование — создать два псевдоустройства man:gif[4], которые "
+"будут использоваться для туннелирования пакетов и обеспечения правильной "
+"связи между обеими сетями. От имени `root` выполните следующую команду на "
+"каждом шлюзе:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Проверьте настройку на каждом шлюзе, используя `ifconfig gif0`. Вот вывод с "
+"домашнего шлюза:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"После завершения оба внутренних IP-адреса должны быть доступны с "
+"использованием man:ping[8]:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Как и ожидалось, обе стороны имеют возможность отправлять и получать ICMP-"
+"пакеты с приватно настроенных адресов. Далее, оба шлюза должны быть "
+"настроены для маршрутизации пакетов, чтобы корректно передавать трафик из "
+"сетей за каждым шлюзом. Следующие команды позволят достичь этой цели:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Внутренние машины должны быть доступны с каждого шлюза, а также с машин за "
+"шлюзами. Снова используйте man:ping[8] для проверки:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"На этом этапе трафик передается между сетями, инкапсулированный в туннель "
+"gif, но без какого-либо шифрования. Далее используйте IPSec для шифрования "
+"трафика с использованием предварительно согласованных ключей (PSK). За "
+"исключением IP-адресов, файл [.filename]#/usr/local/etc/racoon/racoon.conf# "
+"на обоих шлюзах будет идентичным и выглядеть примерно так:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+" 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"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Для описания каждой доступной опции обратитесь к справочной странице [."
+"filename]#racoon.conf#."
+
+#. 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 ""
+"База данных политики безопасности (SPD) должна быть настроена таким образом, "
+"чтобы FreeBSD и racoon могли шифровать и расшифровывать сетевой трафик между "
+"узлами."
+
+#. 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 ""
+"Это может быть реализовано с помощью shell-скрипта, подобного приведённому "
+"ниже, на корпоративном шлюзе. Этот файл будет использоваться при "
+"инициализации системы и должен быть сохранён как [.filename]#/usr/local/etc/"
+"racoon/setkey.conf#."
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"После настройки racoon может быть запущен на обоих шлюзах с помощью "
+"следующей команды:"
+
+#. 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 ""
+"# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/"
+"racoon.log\n"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Чтобы убедиться, что туннель работает правильно, переключитесь на другую "
+"консоль и используйте man:tcpdump[1] для просмотра сетевого трафика с "
+"помощью следующей команды. Замените `em0` на требуемую сетевую интерфейсную "
+"карту:"
+
+#. 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 "corp-gw# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12\n"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"На этом этапе обе сети должны быть доступны и казаться частью одной сети. "
+"Скорее всего, обе сети защищены межсетевым экраном. Чтобы разрешить передачу "
+"трафика между ними, необходимо добавить правила для пропуска пакетов. Для "
+"межсетевого экрана man:ipfw[8] добавьте следующие строки в файл конфигурации "
+"межсетевого экрана:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Для пользователей man:pf[4] или man:ipf[8] должны сработать следующие "
+"правила:"
+
+#. 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 ""
+"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"
+
+#. 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 ""
+"Наконец, чтобы включить поддержку VPN при загрузке системы, добавьте "
+"следующие строки в [.filename]#/etc/rc.conf#:"
+
+#. 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 ""
+"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"
diff --git a/documentation/content/ru/books/design-44bsd/_index.adoc b/documentation/content/ru/books/design-44bsd/_index.adoc
index 439f26d9c2..7146569e37 100644
--- a/documentation/content/ru/books/design-44bsd/_index.adoc
+++ b/documentation/content/ru/books/design-44bsd/_index.adoc
@@ -1,13 +1,20 @@
---
-title: Архитектура и реализация операционной системы 4.4BSD
authors:
- - author: Marshall Kirk McKusick
- - author: Keith Bostic
- - author: Michael J. Karels
- - author: John S. Quarterman
-copyright: 1996 Addison-Wesley Longman, Inc
+ -
+ author: 'Marshall Kirk McKusick'
+ -
+ author: 'Keith Bostic'
+ -
+ author: 'Michael J. Karels'
+ -
+ author: 'John S. Quarterman'
+bookOrder: 60
+copyright: '1996 Addison-Wesley Longman, Inc'
+description: 'Предоставлено издательством Addison-Wesley и предоставляет обзор архитектуры 4.4BSD, от которой изначально произошел FreeBSD'
+layout: single
+tags: ["4.4BSD", "design", "operating system", "BSD", "UNIX"]
+title: 'Архитектура и реализация операционной системы 4.4BSD'
trademarks: ["design-44bsd"]
-isIndex: true
---
= Архитектура и реализация операционной системы 4.4BSD
@@ -51,9 +58,9 @@ toc::[]
== Обзор архитектуры 4.4BSD
[[overview-facilities]]
-=== Системные сервисы 4.4BSD и ядро
+=== Подсистемы и ядро 4.4BSD
-Ядро 4.4BSD предоставляет четыре основных системных сервиса: процессы, файловую систему, коммуникации и запуск системы. Этот раздел перечисляет, в каком месте этой книги описана каждая из этих служб.
+Ядро 4.4BSD предоставляет четыре базовых подсистемы: процессы, файловую систему, коммуникации и запуск системы. Этот раздел перечисляет, в каком месте этой книги описана каждая из этих подсистем.
. Процессы образуют поток управления в адресном пространстве. Механизмы создания, завершения и другие управляющие процессы описаны в Главе 4. Для каждого процесса система мультиплексирует отдельное виртуальное адресное пространство; такое управление памятью обсуждается в Главе 5.
. Механизм доступа пользователя к файловой системе и устройствам один и тот же; общие аспекты обсуждаются в Главе 6. Файловая система является набором именованных файлов, организованных в древовидную иерархию каталогов, а операции по управлению ими представлены в Главе 7. Файлы располагаются на таких физических носителях, как диски. 4.4BSD поддерживает несколько типов организации данных на диске, как описано далее в Главе 8. Доступ к файлам на удаленных машинах является предметом обсуждения в Главе 9. Для доступа к системе Терминалы используются терминалы; их функционированию посвящена глава 10.
@@ -64,11 +71,11 @@ toc::[]
==== Ядро
-_Ядро_ является частью системы, которая работает в защищенном режиме и управляет доступом всех пользовательских программ к низкоуровнему аппаратному обеспечению (к примеру, ЦПУ, дискам, терминалам, сетевым связям) и программным компонентам (к примеру, файловой системе, сетевым протоколам). Ядро предоставляет основные системные услуги; оно создает процессы и управляет ими, предоставляет функции для доступа к файловой системе и службам связи. Такие функции, называемые _системными вызовами_, доступны процессам пользователей в виде библиотечных подпрограмм. Эти системные вызовы являются единственным способом доступа к таким услугам. Подробно механизм работы системных вызовов дается в Главе 3, вместе с описанием некоторых механизмов ядра, работа которых не является прямым результатом процесса, выполняющего системный вызов.
+_Ядро_ является частью системы, которая работает в защищенном режиме и управляет доступом всех пользовательских программ к низкоуровнему аппаратному обеспечению (к примеру, ЦПУ, дискам, терминалам, сетевым связям) и программным компонентам (к примеру, файловой системе, сетевым протоколам). Ядро предоставляет основные подсистемы; оно создает процессы и управляет ими, предоставляет функции для доступа к файловой системе и службам связи. Такие функции, называемые _системными вызовами_, доступны процессам пользователей в виде библиотечных подпрограмм. Эти системные вызовы являются единственным способом доступа к этим подсистемам. Подробно механизм работы системных вызовов дается в Главе 3, вместе с описанием некоторых механизмов ядра, работа которых не является прямым результатом процесса, выполняющего системный вызов.
-_Ядро_, по традиционной терминологии операционных систем, является маленьким куском программного обеспечения, которое предоставляет только минимальный набор услуг, необходимый для реализации дополнительных служб операционной системы. В современных исследовательских операционных системах - таких, как Chorus <<biblio-rozier, [Rozier et al, 1988]>>, Mach <<biblio-accetta, [Accetta et al, 1986]>>, Tunis <<biblio-ewens, [Ewens et al, 1985]>>, и V Kernel <<biblio-cheriton, [Cheriton, 1988]>> - такое разделение функциональности выполнено не только логически. Такие службы, как файловые системы и сетевые протоколы, выполнены в виде прикладных процессов клиентов ядра или микроядра.
+_Ядро_, по традиционной терминологии операционных систем, является маленьким куском программного обеспечения, которое предоставляет только минимальный набор подсистем, необходимый для реализации дополнительных служб операционной системы. В современных исследовательских операционных системах — таких, как Chorus crossref:design-44bsd[biblio-rozier, [Rozier et al, 1988]], Mach crossref:design-44bsd[biblio-accetta, [Accetta et al, 1986]], Tunis crossref:design-44bsd[biblio-ewens, [Ewens et al, 1985]], и V Kernel crossref:design-44bsd[biblio-cheriton, [Cheriton, 1988]] - такое разделение функциональности выполнено не только логически. Такие службы, как файловые системы и сетевые протоколы, выполнены в виде прикладных процессов клиентов ядра или микроядра.
-Ядро 4.4BSD не разбивается на несколько процессов. Это основополагающее архитектурное решение было сделано в самых ранних версиях UNIX. В первых двух реализациях Кена Томпсона (Ken Thompson) не было отображаемой памяти, и поэтому не было аппаратного различия между адресным пространством пользователя и ядра <<biblio-ritchie, [Ritchie, 1988]>>. Могла бы быть придумана система обмена сообщениями как реально реализуемая модель процессов ядра и пользователя. Для простоты и увеличения производительности было выбрано монолитное ядро. К тому же ранние ядра были маленькими; включение таких служб, как сетевые коммуникации, в ядро увеличило его размер. Современные тенденции в области операционных систем сводятся к уменьшению размера ядра за счет перевода таких служб в пользовательское адресное пространство.
+Ядро 4.4BSD не разбивается на несколько процессов. Это основополагающее архитектурное решение было сделано в самых ранних версиях UNIX. В первых двух реализациях Кена Томпсона (Ken Thompson) не было отображаемой памяти, и поэтому не было аппаратного различия между адресным пространством пользователя и ядра crossref:design-44bsd[biblio-ritchie, [Ritchie, 1988]]. Могла бы быть придумана система обмена сообщениями как реально реализуемая модель процессов ядра и пользователя. Для простоты и увеличения производительности было выбрано монолитное ядро. К тому же ранние ядра были маленькими; включение таких подсистем, как сетевые коммуникации, в ядро увеличило его размер. Современные тенденции в области операционных систем сводятся к уменьшению размера ядра за счет перевода таких служб в пользовательское адресное пространство.
Пользователи обычно общаются с системой через интерпретатор языка команд, называемый оболочкой (_shell_), и, может быть, через дополнительные прикладные пользовательские программы. Такие программы и оболочка реализованы в виде процессов. Подробное описание таких программ выходит за рамки этой книги, которая практически полностью посвящена работе ядра.
@@ -79,109 +86,45 @@ _Ядро_, по традиционной терминологии операц
В этом разделе мы рассматриваем организацию ядра 4.4BSD с двух точек зрения:
+[arabic]
. Как статический блок программного обеспечения, категоризуемый по функциональности модулей, составляющих ядро
. В его динамике, категоризуемой по услугам, предоставляемым пользователям
Самая большая часть ядра реализует системные услуги, к которым приложения обращаются через системные вызовы. В 4.4BSD это программное обеспечение организуется по следующим принципам:
-* Базовые услуги ядра: обработка таймеров и системного таймера, управление дескрипторами и процессами
+* Базовые подсистемы ядра: обработка таймеров и системного таймера, управление дескрипторами и процессами
* Поддержка управления памятью: подкачка и выгрузка
* Общесистемные интерфейсы: ввод/вывод, управление и мультиплексирование операций, выполняемых над дескрипторами
* Файловая система: файлы, каталоги, преобразование маршрутов, блокировка файлов и управление буфером ввода/вывода
* Поддержка работы с терминалами: драйвер терминального интерфейса и режимы работы терминального канала
-* Службы межпроцессного взаимодействия: сокеты
-* Поддержка сетевых коммуникаций: коммуникационные протоколы и общесетевые службы, такие, как маршрутизация
+* Подсистемы межпроцессного взаимодействия: сокеты
+* Поддержка сетевых коммуникаций: коммуникационные протоколы и общесетевые подсистемы, такие, как маршрутизация
-[[table-mach-indep]]
.Машинно-независимое программное обеспечение в ядре 4.4BSD
-[cols="1,1,1", frame="none", options="header,footer"]
+[[table-mach-indep]]
+[cols=",,", options="header"]
|===
-| Категория
-| Количество строк кода
-| Процент от всего ядра
-
-|файлы заголовков
-|9,393
-|4.6
-
-|инициализация
-|1,107
-|0.6
-
-|службы ядра
-|8,793
-|4.4
-
-|общесистемные интерфейсы
-|4,782
-|2.4
-
-|межпроцессное взаимодействие
-|4,540
-|2.2
-
-|работа с терминалами
-|3,911
-|1.9
-
-|виртуальная память
-|11,813
-|5.8
-
-|управление vnode
-|7,954
-|3.9
-
-|именование файловой системы
-|6,550
-|3.2
-
-|хранение файлов
-|4,365
-|2.2
-
-|хранение log-структур
-|4,337
-|2.1
-
-|хранение на основе памяти
-|645
-|0.3
-
-|файловая система cd9660
-|4,177
-|2.1
-
-|различные файловые системы (10)
-|12,695
-|6.3
-
-|сетевая файловая система
-|17,199
-|8.5
-
-|сетевое взаимодействие
-|8,630
-|4.3
-
-|протоколы internet
-|11,984
-|5.9
-
-|протоколы ISO
-|23,924
-|11.8
-
-|протоколы X.25
-|10,626
-|5.3
-
-|протоколы XNS
-|5,192
-|2.6
-| всего машинно-независимая часть
-| 162,617
-| 80.4
+|Категория |Строк кода |Процент от строк ядра
+|заголовки |9,393 |4.6
+|инициализация |1,107 |0.6
+|подсистемы ядра |8,793 |4.4
+|универсальные интерфейсы |4,782 |2.4
+|межпроцессное взаимодействие |4,540 |2.2
+|работа с терминалом |3,911 |1.9
+|Виртуальная память |11,813 |5.8
+|управление vnode |7,954 |3.9
+|имена в файловой системы |6,550 |3.2
+|быстрое хранилище файлов |4,365 |2.2
+|логическая структура файлового хранилища |4,337 |2.1
+|хранилище файлов в памяти |645 |0.3
+|cd9660 файловая система |4,177 |2.1
+|различные файловые системы (10) |12,695 |6.3
+|сетевая файловая система |17,199 |8.5
+|сетевое взаимодействие |8,630 |4.3
+|интернет-протоколы |11,984 |5.9
+|протоколы ISO |23,924 |11.8
+|протоколы X.25 |10,626 |5.3
+|протоколы XNS |5,192 |2.6
|===
Большая часть программного обеспечения в этих категориях является машинно-независимой и переносима между различными аппаратными архитектурами.
@@ -194,47 +137,21 @@ _Ядро_, по традиционной терминологии операц
* Конфигурация и инициализация аппаратных устройств
* Поддержка устройств ввода/вывода во время работы
-[[table-mach-dep]]
.Машинно-зависимое программное обеспечение для HP300 в ядре 4.4BSD
-[cols="1,1,1", frame="none", options="header,footer"]
+[[table-mach-dep]]
+[cols=",,", options="header"]
|===
-| Категория
-| Количество строк кода
-| Процент от всего ядра
-
-|машинно-зависимые заголовки
-|1,562
-|0.8
-
-|заголовки драйверов устройств
-|3,495
-|1.7
-
-|исходные тексты драйверов устройств
-|17,506
-|8.7
-
-|виртуальная память
-|3,087
-|1.5
-
-|остальная машинно-зависимая часть
-|6,287
-|3.1
-
-|процедуры на ассемблере
-|3,014
-|1.5
-
-|совместимость с HP/UX
-|4,683
-|2.3
-| всего машинно-зависимая часть
-| 39,634
-| 19.6
+|Категория |Строк кода |Процент от строк ядра
+|заголовочные файлы, зависимые от машины |1,562 |0.8
+|заголовочные файлы драйверов устройств |3,495 |1.7
+|исходный код драйверов устройств |17,506 |8.7
+|Виртуальная память |3,087 |1.5
+|код, зависящий от других машин |6,287 |3.1
+|подпрограммы на языке ассемблера |3,014 |1.5
+|совместимость с HP/UX |4,683 |2.3
|===
-<<table-mach-indep>> суммаризует машинно-независимый код, который составляет ядро 4.4BSD для HP300. Числа во второй колонке обозначают количество строк исходного кода на языке C, заголовочных файлов и ассемблерного кода. Практически весь код ядра написан на языке программирования C; менее двух процентов написано на языке ассемблера. Как показывает статистика в <<table-mach-dep>>, машинно-зависимый код, не включающий поддержку HP/UX и устройств, составляет менее 6.9 процента ядра.
+crossref:design-44bsd[table-mach-indep, Машинно-независимое программное обеспечение в ядре 4.4BSD] показывает статистику машинно-независимого кода, который составляет ядро 4.4BSD для HP300. Числа во второй колонке обозначают количество строк исходного кода на языке C, заголовочных файлов и ассемблерного кода. Практически весь код ядра написан на языке программирования C; менее двух процентов написано на языке ассемблера. Как показывает статистика в crossref:design-44bsd[table-mach-dep, Машинно-зависимое программное обеспечение для HP300 в ядре 4.4BSD], машинно-зависимый код, не включающий поддержку HP/UX и устройств, составляет менее 6.9 процента ядра.
Лишь малая часть ядра отвечает за инициализацию системы. Этот код используется при _начальной загрузке_ системы для перехода в рабочий режим и отвечает за настройку аппаратного и программного окружения ядра (обратитесь к Главе 14). Некоторые операционные системы (особенно те, что ограничены объемом физической памяти) выполняют действия по выгрузке или _перекрытию_ программного кода, выполняющего эти функции, после окончания его работы. Ядро 4.4BSD не работает повторно с памятью, использованной начальным кодом, потому что этот объем памяти составляет менее 0.5 процентов ресурсов ядра, используемых на типичной машине. Также начальный код не находится только в одном месте ядра - он рассредоточен везде, и обычно появляется там, где логически связан с объектом инициализации.
@@ -256,9 +173,9 @@ _Ядро_, по традиционной терминологии операц
[[fig-process-lifecycle]]
.Жизненный цикл процесса
-image::fig1.png[Системные вызовы управления процессами]
+image:fig1.png[Жизненный цикл процесса]
-Жизненный цикл процесса изображен на <<fig-process-lifecycle>>. Процесс может создать новый процесс, который является копией исходного процесса с помощью системного вызова _fork_. Возврат из вызова _fork_ происходит два раза: один раз в родительском процессе, в котором возвращаемое значение является идентификатором порожденного процесса, и второй раз в порожденном процессе, в котором возвращаемое значение равно 0. Связь родитель-потомок порождает иерархическую структуру процессов в системе. Новый процесс имеет доступ ко всем ресурсам его родителя, таким, как файловые дескрипторы, состояние обработки сигналов и распределение памяти.
+Жизненный цикл процесса изображен на рисунке crossref:design-44bsd[fig-process-lifecycle,Жизненный цикл процесса]. Процесс может создать новый процесс, который является копией исходного процесса с помощью системного вызова _fork_. Возврат из вызова _fork_ происходит два раза: один раз в родительском процессе, в котором возвращаемое значение является идентификатором порожденного процесса, и второй раз в порожденном процессе, в котором возвращаемое значение равно 0. Связь родитель-потомок порождает иерархическую структуру процессов в системе. Новый процесс имеет доступ ко всем ресурсам его родителя, таким, как файловые дескрипторы, состояние обработки сигналов и распределение памяти.
Хотя есть ситуации, когда процесс должен быть копией своего родителя, наиболее типичным и полезным действием является загрузка и выполнение другой программы. Процесс может заместить себя образом памяти другой программы, передавая вновь созданному образу набор параметров, при помощи системного вызова _execve_. Одним из параметров является имя файла, содержимое которого имеет формате, распознаваемый системой - это либо двоичный выполняемый файл, либо файл, который приводит к запуску указанной программы интерпретации для обработки его содержимого.
@@ -268,7 +185,7 @@ image::fig1.png[Системные вызовы управления проце
Подробное описание того, как ядро создает и уничтожает процессы, дается в Главе 5.
-Планирование выполнения процессов осуществляется согласно параметру _приоритетности процесса_. Этот приоритет управляется алгоритмом планирования задач в ядре. Пользователи могут влиять на выполнение процесса, задавая этот параметр (_nice_), который влияет на суммарный приоритет, но но ограничен использованием ресурсов CPU согласно алгоритму планировщика задач ядра.
+Планирование выполнения процессов осуществляется согласно параметру _приоритетности процесса_. Этот приоритет управляется алгоритмом планирования задач в ядре. Пользователи могут влиять на выполнение процесса, задавая этот параметр (_nice_), который влияет на суммарный приоритет, но ограничен использованием ресурсов CPU согласно алгоритму планировщика задач ядра.
==== Сигналы
@@ -307,11 +224,11 @@ image::fig1.png[Системные вызовы управления проце
В 4.2BSD требовалось реализовать поддержку больших несвязанных адресных пространств, отображаемых в память файлов и совместно используемой памяти. Был спроектирован интерфейс, который назвали _mmap_, позволяющий несвязанным процессам запрашивать отображение в их адресное пространство файла в режиме совместного использования. Если несколько процессов отображают в свое адресное пространство один и тот же файл, то изменение адресного пространства процесса, соответствующего файлу, в одном процессе, будет отображено в области отображения этого файла в другом процессе, а также и в самом файле. Однако в конце концов 4.2BSD была выпущена без интерфейса _mmap_ из-за необходимости сделать в первую очередь другие возможности, такие, как работа с сетью.
-Затем разработка интерфейса _mmap_ продолжалась во время работы над 4.3BSD. Более 40 компаний и исследовательских групп принимали участие в обсуждениях, которые привели к появлению обновленной концепции, описанной в Berkeley Software Architecture Manual <<biblio-mckusick-1, [McKusick et al, 1994]>>. Несколько компаний реализовали этот обновленный интерфейс <<biblio-gingell, [Gingell et al, 1987]>>.
+Затем разработка интерфейса _mmap_ продолжалась во время работы над 4.3BSD. Более 40 компаний и исследовательских групп принимали участие в обсуждениях, которые привели к появлению обновленной концепции, описанной в Berkeley Software Architecture Manual crossref:design-44bsd[biblio-mckusick-1, [McKusick et al, 1994]]. Несколько компаний реализовали этот обновленный интерфейс crossref:design-44bsd[biblio-gingell, [Gingell et al, 1987]].
И снова сроки разработки не позволили включить в 4.3BSD реализацию этого интерфейса. Хотя позже она могла быть встроена в имеющуюся подсистему виртуальной памяти 4.3BSD, разработчики решили не включать ее сюда. потому что этой реализации было уже более 10 лет. Более того, оригинальная архитектура виртуальной памяти была основана на предположении, что компьютерная память мала и дорога, а диски подключены непосредственно к компьютеру, быстры и дешевы. Поэтому подсистема виртуальной памяти была разработана с упором на бережное использование памяти ценой более частых обращений к диску. Вдобавок реализация в 4.3BSD была пронизана зависимостями от аппаратной системы управления памятью машин VAX, что препятствовало ее переносу на другие аппаратные платформы. И наконец, подсистема виртуальной памяти не была предназначена для поддержки связных многопроцессорных систем, которые сейчас становятся все более распространенными и необходимыми.
-Попытки постепенно усовершенствовать старую реализацию заведомо были обречены на неудачу. Полностью новая архитектура, с другой стороны, могла бы использовать большие объемы памяти, уменьшить дисковые операции и обеспечивать работу с несколькими процессорами. Наконец, система виртуальной памяти в 4.4BSD была полностью изменена. Система виртуальной памяти 4.4BSD основана на системе виртуальной памяти (VM) Mach 2.0 <<biblio-tevanian, [Tevanian, 1987]>> с заимствованиями из Mach 2.5 и Mach 3.0. В ней была эффективная поддержка совместного использования, полное разделение машинно-зависимой и машинно-независимой частей, а также (сейчас не используемая) поддержка работы с несколькими процессорами. Процессы могут отображать файлы в любую область своего адресного пространства. Они могут совместно использовать части своих адресных пространств посредством отображения в память одного и того же файла. Изменения, сделанные одним процессом, видны в адресном пространстве другого процесса, а также записываются и в сам файл. Процессы могут также запрашивать эксклюзивное отображение файла в память, при котором любые изменения, сделанные процессом, не видны другим процессам, которые отображают файл в память и не записываются обратно в файл.
+Попытки постепенно усовершенствовать старую реализацию заведомо были обречены на неудачу. Полностью новая архитектура, с другой стороны, могла бы использовать большие объемы памяти, уменьшить дисковые операции и обеспечивать работу с несколькими процессорами. Наконец, система виртуальной памяти в 4.4BSD была полностью изменена. Система виртуальной памяти 4.4BSD основана на системе виртуальнй памяти (VM) crossref:design-44bsd[biblio-tevanian, [Tevanian, 1987]] с заимствованиями из Mach 2.5 и Mach 3.0. В ней была эффективная поддержка совместного использования, полное разделение машинно-зависимой и машинно-независимой частей, а также (сейчас не используемая) поддержка работы с несколькими процессорами. Процессы могут отображать файлы в любую область своего адресного пространства. Они могут совместно использовать части своих адресных пространств посредством отображения в память одного и того же файла. Изменения, сделанные одним процессом, видны в адресном пространстве другого процесса, а также записываются и в сам файл. Процессы могут также запрашивать эксклюзивное отображение файла в память, при котором любые изменения, сделанные процессом, не видны другим процессам, которые отображают файл в память и не записываются обратно в файл.
Еще одной проблемой с системой виртуальной памяти является способ, которым информация передается ядру при выполнении системного вызова. 4.4BSD всегда копирует данные из адресного пространства процесса в буфер ядра. Для операций чтения и записи, при которых передаются большие объемы данных, выполнение копирования может оказаться занимающим время процессом. Альтернативным способом является манипуляции с адресным пространством процесса в ядре. Ядро 4.4BSD всегда копирует данные о нескольким причинам:
@@ -326,14 +243,14 @@ image::fig1.png[Системные вызовы управления проце
Ядро часто выполняет выделение памяти, которое нужно только для выполнения единственного системного вызова. В пользовательском процессе такая кратковременно используемая память будет выделяться в стеке во время выполнения. Так как ядро имеет ограниченный объем стека времени выполнения, то неэффективно выделять в нем даже блоки памяти среднего размера. Таким образом, такая память должна выделяться посредством более гибкого механизма. Например, когда системный вызов должен преобразовать имя каталога, он должен выделить буфер размером 1 Кбайт для хранения имени. Другие блоки памяти должны выделяться на более продолжительный срок, чем один системный вызов, и поэтому не могут выделяться в стеке, даже если там есть место. В качестве примера можно взять блоки управления протоколами, которые существуют на всем протяжении сетевого соединения.
-Необходимость в динамическом выделении памяти в ядре становилась все более острой вместе с добавлением количества сервисов. Общий механизм выделения памяти уменьшает сложность написания кода в ядре. Поэтому в 4.4BSD ядро имеет единый механизм выделения памяти, который может использоваться в любой части системы. У него есть интерфейс, похожий на функции библиотеки языка C _malloc_ и _free_, которые обеспечивают выделение памяти в прикладных программах <<biblio-mckusick-2, [McKusick & Karels, 1988]>>. Как интерфейс библиотеки языка C, функция выделения памяти получает параметр, указывающий на размер памяти, который необходим. Диапазон запрашиваемых объемов выделяемой памяти не ограничен; однако выделяемая физическая память не подвергается постраничной подгрузке. Функции освобождения памяти передается указатель на освобождаемый участок памяти, но указывать размер освобождаемого участка памяти не нужно.
+Необходимость в динамическом выделении памяти в ядре становилась все более острой вместе с добавлением количества сервисов. Общий механизм выделения памяти уменьшает сложность написания кода в ядре. Поэтому в 4.4BSD ядро имеет единый механизм выделения памяти, который может использоваться в любой части системы. У него есть интерфейс, похожий на функции библиотеки языка C _malloc_ и _free_, которые обеспечивают выделение памяти в прикладных программах crossref:design-44bsd[biblio-mckusick-2, [McKusick & Karels, 1988]]. Как интерфейс библиотеки языка C, функция выделения памяти получает параметр, указывающий на размер памяти, который необходим. Диапазон запрашиваемых объемов выделяемой памяти не ограничен; однако выделяемая физическая память не подвергается постраничной подгрузке. Функции освобождения памяти передается указатель на освобождаемый участок памяти, но указывать размер освобождаемого участка памяти не нужно.
[[overview-io-system]]
=== Система ввода/вывода
Базовой моделью системы ввода/вывода UNIX является последовательность байт, доступ к которым может осуществляться как последовательно, так и в в произвольном порядке. В типичном пользовательском процессе UNIX нет таких понятий, как _методы доступа_ или _управляющие блоки_.
-Различные программы используют разнообразные структуры данных, но ядро не связывает ввод/вывод с используемыми структурами. Например, текстовым файлом считается файл из строк символов набора ASCII, которые разделены одним символом новой строки (символ ASCII перевода строки), но ядро не знает ничего об этом соглашении. Для удовлетворения потребностей большинства программ модель еще более упрощена и сводится к потоку байт данных, или _потоку ввода/вывода_. Такое единое представление данных позволяет работать характерному для UNIX подходу на основе инструментов <<biblio-kernighan, [Kernighan & Pike, 1984]>>. Поток ввода/вывода одной программы может быть подан в качестве входной информации практически любой другой программе. (Этот тип традиционных для UNIX потоков ввода/выводы не нужно путать с потоковой системой ввода/вывода из Eighth Edition или с потоками из System V, Release 3 (STREAMS), оба из которых доступны как обычные потоки ввода/вывода.)
+Различные программы используют разнообразные структуры данных, но ядро не связывает ввод/вывод с используемыми структурами. Например, текстовым файлом считается файл из строк символов набора ASCII, которые разделены одним символом новой строки (символ ASCII перевода строки), но ядро не знает ничего об этом соглашении. Для удовлетворения потребностей большинства программ модель еще более упрощена и сводится к потоку байт данных, или _потоку ввода/вывода_. Такое единое представление данных позволяет работать характерному для UNIX подходу на основе инструментов crossref:design-44bsd[biblio-kernighan, [Kernighan & Pike, 1984]]. Поток ввода/вывода одной программы может быть подан в качестве входной информации практически любой другой программе. (Этот тип традиционных для UNIX потоков ввода/выводы не нужно путать с потоковой системой ввода/вывода из Eighth Edition или с потоками из System V, Release 3 (STREAMS), оба из которых доступны как обычные потоки ввода/вывода.)
==== Дескрипторы и ввод/вывод
@@ -367,7 +284,7 @@ image::fig1.png[Системные вызовы управления проце
Аппаратные устройства имеют связанные с ними имена файлов, и к ним может обращаться пользователь при помощи тех же самых системных вызовов, что используются для обычных файлов. Ядро может различать _специальный файл устройства_ или просто _специальный файл_, и может определять, к какому устройству он относится, но большинство процессов не выполняют такого распознавания. Терминалы, принтеры и стримеры все доступны как последовательности байт, как дисковые файлы 4.4BSD. Таким образом, особенности работы устройств максимально скрываются ядром, и даже в ядре большинство из них отличаются в драйверах.
-Аппаратные устройства могут быть разделены на _структурированные_ или _неструктурированные_; они известны под названиями _блочные_ и _посимвольные_, соответственно. Как правило, процессы обращаются к устройствам посредством _специальных файлов_ в файловой системе. Операции ввода/вывода, выполняемые с такими файлами, обрабатываются постоянно находящимися в ядре программными модулями, называемыми _драйверами устройств_. Большинство аппаратных устройств для сетевых коммуникаций доступны только при помощи механизмов межпроцессного взаимодействия, и не имеют специальных устройств в пространстве имен файловой системы, так как интерфейс _низкоуровневых сокетов_ дает более естественный интерфейс, чем специальный файл.
+Аппаратные устройства могут быть разделены на _структурированные_ или _неструктурированные_; они известны под названиями _блочные_ и _посимвольные_, соответственно. Как правило, процессы обращаются к устройствам посредством _специальных файлов_ в файловой системе. Операции ввода/вывода, выполняемые с такими файлами, обрабатываются постоянно находящимися в ядре программными модулями, называемыми _драйверами устройств_. Большинство аппаратных устройств для сетевых коммуникаций доступны только при помощи подсистемы межпроцессного взаимодействия, и не имеют специальных устройств в пространстве имен файловой системы, так как интерфейс _низкоуровневых сокетов_ дает более естественный интерфейс, чем специальный файл.
Структурированные или блочные устройства разделяются на диски и магнитные ленты и включают в себя большинство устройств с произвольным доступом. Ядро поддерживает операции буферизации типа чтение-изменение-запись с блочными структурированными устройствами для того, чтобы разрешить последним осуществлять чтение и запись полностью произвольным образом, как с обычными файлами. Файловые системы создаются на блочных устройствах.
@@ -411,17 +328,17 @@ System V предоставляет механизм локального меж
Компонент под названием _имя файла_ является строкой длиной до 255 символов. Эти имена хранятся в файле особого типа, который называется _каталогом_. Информация о файле в каталоге называется _записью каталога_ и включает, кроме имени файла, указатель на сам файл. Записи каталога могут ссылаться как на другие каталоги, так и на обычные файлы. Таким образом формируется иерархия каталогов и файлов, которая и называется файловой системой _filesystem_;
-[[fig-small-fs]]
.Небольшая файловая система
-image::fig2.png[Дерево небольшой файловой системы]
+[[fig-small-fs]]
+image:fig2.png[Дерево небольшой файловой системы]
-Одна небольшая файловая система показана на <<fig-small-fs>>. Каталоги могут содержать подкаталоги, и нет ограничений вложенности одного каталога в другой по глубине. Для соблюдения целостности файловой системы, ядро не позволяет процессу производить запись непосредственно в каталоги. Файловая система может хранить не только обычные файлы и каталоги, но также ссылки на другие объекты, такие, как устройства и сокеты.
+Одна небольшая файловая система показана на crossref:design-44bsd[fig-small-fs, A small filesystem]. Каталоги могут содержать подкаталоги, и нет ограничений вложенности одного каталога в другой по глубине. Для соблюдения целостности файловой системы, ядро не позволяет процессу производить запись непосредственно в каталоги. Файловая система может хранить не только обычные файлы и каталоги, но также ссылки на другие объекты, такие, как устройства и сокеты.
Файловая система образует дерево, начало которого находится в _корневом каталоге_, иногда называемому по имени _слэш_, которое соответствует символу одинарной наклонной черты (/). Корневой каталог содержит файлы; в нашем примере на Рисунке 2.2, он содержит [.filename]#vmunix#, копию выполнимого объектного файла ядра. В нем также расположены каталоги; в этом примере он содержит каталог [.filename]#usr#. Внутри каталога [.filename]#usr# располагается каталог [.filename]#bin#, который в основном содержит выполнимый объектный код программ, таких, как [.filename]#ls# и [.filename]#vi#.
Процесс обращается к файлу, указывая _путь_ до него, который является строкой, состоящей из нескольких или ни одного имен файлов, разделенных символами слэша (/). С каждым процессом ядро связывает два каталога, при помощи которых можно интерпретировать маршруты до файлов. _Корневой каталог_ процесса является самой верхней точкой файловой системы, которую может достичь процесс; обычно он соответствует корневому каталогу всей файловой системы. Маршрут, начинающийся с символа слэша, называется _абсолютным маршрутом_, и интерпретируется ядром, начиная с корневого каталога процесса.
-Имя пути, которое не начинается со слэша, называется _относительным маршрутом_, и интерпретируется относительно _текущего рабочего каталога_ процесса. (Этот каталог кратко также называют _текущим каталогом_ или _рабочим каталогом_.) Текущий каталог сам по себе можно обозначить непосредственно по имени _dot_, что соответствует одной точке ([.filename]#.#). Имя файла _dot-dot_ ([.filename]#..#) обозначает родительский каталог текущего каталога. Корневой каталог является предком самому себе.
+Имя пути, которое не начинается со слэша, называется _относительным маршрутом_, и интерпретируется относительно _текущего рабочего каталога_ процесса. (Этот каталог кратко также называют _текущим каталогом_ или _рабочим каталогом_.) Текущий каталог сам по себе можно обозначить непосредственно по имени _dot_, что соответствует одной точке (`.`). Имя файла _dot-dot_ (`..`) обозначает родительский каталог текущего каталога. Корневой каталог является предком самому себе.
Процесс может задать собственный корневой каталог при помощи системного вызова _chroot_, и установить текущий каталог системным вызовом _chdir_. Каждый процесс может в любой момент выполнить вызов _chdir_, но _chroot_ позволено выполнять только процессу с административными привилегиями. _Chroot_ обычно используется для ограничения доступа к системе.
@@ -435,6 +352,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Файлы организованы иерархически в _каталоги_. Каталог является типом файла, но, в отличие от обычных файлов, каталог имеет структуру, определяемую системой. Процесс может читать каталог, как будто это обычный файл, но только ядру разрешено изменять каталог. Каталоги создаются системным вызовом _mkdir_ и удаляются системным вызовом _rmdir_. До 4.2BSD системные вызовы _mkdir_ и _rmdir_ были реализованы как последовательность системных вызовов _link_ и _unlink_. Имелось три причины для добавления системных вызовов специально для создания и удаления каталогов:
+[arabic]
. Операция может быть сделана атомарной. Если система завершила работу аварийно, то каталог не может оставаться в промежуточном состоянии, что может случиться при последовательном вызове серии операций.
. При работе сетевой файловой системы создание и удаление файлов и каталогов должны выполняться атомарно, чтобы могли выполняться последовательно.
. При реализации поддержки не-UNIX файловых систем, таких, как файловая система MS-DOS, на другом разделе диска, может оказаться, что эта файловая система не поддерживает ссылочных операций. Хотя другие файловые системы могут поддерживать концепцию каталогов, скорее всего, они не будут создавать и удалять каталоги со ссылками, как это делается в файловой системе UNIX. Соответственно они могут создавать и и удалять каталоги только при наличии явных запросов на удаление или создание каталогов.
@@ -447,6 +365,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Вновь создаваемым файлам присваивается идентификатор пользователя процесса, который их создал, и идентификатор группы каталога, в котором они были созданы. Для защиты файлов применяется трехуровневый механизм управления доступом. Эти три уровня определяют доступность файла для
+[arabic]
. Пользователя, который является владельцем файла
. Группы, которая приписана файлу
. Всех остальных
@@ -457,7 +376,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Ранние версии UNIX имели ограничение в 14 символов на имя файла. Это ограничение зачастую вызывало проблемы. Например, кроме естественного желания пользователей давать файлам длинные описательные имена, распространенным способом формировать имена файлов является использование формата [.filename]#basename.extension#, где расширение (указывающее на тип файла, скажем, `.c` для исходного года на языке C или `.o` для промежуточного двоичного объекта) имеет длину от одного до трех символов, оставляя от 10 до 12 символов на имя файла. Системы управления исходным кодом и редакторы обычно используют дополнительно два символа для своих целей, для префикса или суффикса имени файла, при этом остается от восьми до 10 символов. В качестве имени файла легко использовать от 10 до 12 символов одного английского слова (например, `multiplexer`).
-Можно смириться с этими ограничениями, но это непоследовательно и даже опасно, потому что другие системы UNIX могут работать со строками, превышающими этот лимит, при создании файлов, но затем имя будет _обрезано_. Исходный файл с именем [.filename]#multiplexer.c#, содержащий исходный код на языке C, (уже 13 символов) может иметь соответствующий файл из системы управления исходным кодом с префиксом `s.`, при этом получается имя файла [.filename]#s.multiplexer#, которое не не будет отличаться от файла системы управления исходным кодом для файла [.filename]#multiplexer.ms#, содержащего исходный код `troff` для документации программы на языке C. Содержимое двух оригинальных файлов может оказаться перепутанным без каких-либо предупреждений от системы управления исходным кодом. При тщательном кодировании эту проблему можно обнаружить, но поддержка длинных имен файлов, впервые появившаяся в 4.2BSD, практически полностью ликвидировала эту проблему.
+Можно смириться с этими ограничениями, но это непоследовательно и даже опасно, потому что другие системы UNIX могут работать со строками, превышающими этот лимит, при создании файлов, но затем имя будет _обрезано_. Исходный файл с именем [.filename]#multiplexer.c#, содержащий исходный код на языке C, (уже 13 символов) может иметь соответствующий файл из системы управления исходным кодом с префиксом `s.`, при этом получается имя файла [.filename]#s.multiplexer#, которое не будет отличаться от файла системы управления исходным кодом для файла [.filename]#multiplexer.ms#, содержащего исходный код `troff` для документации программы на языке C. Содержимое двух оригинальных файлов может оказаться перепутанным без каких-либо предупреждений от системы управления исходным кодом. При тщательном кодировании эту проблему можно обнаружить, но поддержка длинных имен файлов, впервые появившаяся в 4.2BSD, практически полностью ликвидировала эту проблему.
[[overview-filestore]]
=== Размещение файлов
@@ -467,7 +386,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Другой частью локальной файловой системы является организация и управление данными на носителях информации. Размещение содержимого файлов на носителях является вопросом хранилища файлов. В 4.4BSD поддерживает три различных типа хранилищ файлов:
* Традиционная файловая система Berkeley Fast Filesystem
-* Журналируемая файловая система, основанная на архитектуре операционной системы Sprite <<biblio-rosenblum, [Rosenblum & Ousterhout, 1992]>>
+* Журналируемая файловая система, основанная на архитектуре операционной системы Sprite crossref:design-44bsd[biblio-rosenblum, [Rosenblum & Ousterhout, 1992]]
* Файловая система в памяти
Хотя организация этих хранилищ совершенно различна, эти различия скрыты от процессов, использующих файловые системы.
@@ -487,7 +406,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Когда локальный клиент выполняет операцию на удаленной файловой системе, оформляется и посылается запрос к серверу. Сервер выполняет запрошенную операцию и возвращает либо запрошенную информацию, либо ошибку, почему запрос был отклонен. Для получения удовлетворительной производительности, клиент должен кэшировать данные, к которым доступ осуществляется часто. Сложность удаленных файловых систем отражается на поддержке соответствия между сервером и множеством его клиентов.
-Хотя за эти годы было разработано множество протоколов работы с удаленными файловыми системами, самой распространенной на системах UNIX является сетевая файловая система Network Filesystem (NFS), которая была спроектирована и реализована в Sun Microsystems. Ядро 4.4BSD поддерживает протокол NFS, хотя его реализация была выполнена независимо от спецификаций протокола <<biblio-macklem, [Macklem, 1994]>>. Протокол NFS описан в Главе 9.
+Хотя за эти годы было разработано множество протоколов работы с удаленными файловыми системами, самой распространенной на системах UNIX является сетевая файловая система Network Filesystem (NFS), которая была спроектирована и реализована в Sun Microsystems. Ядро 4.4BSD поддерживает протокол NFS, хотя его реализация была выполнена независимо от спецификаций протокола crossref:design-44bsd[biblio-macklem, [Macklem, 1994]]. Протокол NFS описан в Главе 9.
[[overview-terminal]]
=== Терминалы
@@ -510,7 +429,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Каждый из этих сервисов преобразования может быть независимо выключен процессом при помощи управляющих запросов.
[[overview-ipc]]
-=== Коммуникации между процессами
+=== Межпроцессное взаимодействие
Межпроцессные коммуникации в 4.4BSD организованы в _коммуникационные домены_. К поддерживаемым на данный момент доменам относятся _локальный домен_ для взаимодействия между процессами, выполняющимися на одной и той же машине; _межсетевой домен_ для связи между процессами посредством набора протоколов TCP/IP (возможно, в сети Интернет); семейство протоколов ISO/OSI для взаимодействия между сайтами, которым нужна именно такая связь, и _домен XNS_ для коммуникаций между процессами при помощи протоколов XEROX Network Systems (XNS).
@@ -520,7 +439,7 @@ image::fig2.png[Дерево небольшой файловой системы]
Сокеты могут иметь адреса, связанные с ними. Формат и смысл адресов сокетов зависят от коммуникационного домена, в котором был создан сокет. Привязка имени к сокету в локальном домене приводит к созданию файла в файловой системе.
-Обычные данные, передаваемые и получаемые при помощи сокетов, не имеют типа. Вопросы представления данных зависят от библиотек, которые находятся на верху коммуникационных сервисов. Вдобавок к передаче обычных данных, коммуникационные домены могут поддерживать передачу и прием специальных типов данных, которые называются _правами доступа_. Например, локальный домен использует эту возможность для передачи дескрипторов между процессами.
+Обычные данные, передаваемые и получаемые при помощи сокетов, не имеют типа. Вопросы представления данных зависят от библиотек, которые находятся на верху коммуникационной подсистемы. Вдобавок к передаче обычных данных, коммуникационные домены могут поддерживать передачу и прием специальных типов данных, которые называются _правами доступа_. Например, локальный домен использует эту возможность для передачи дескрипторов между процессами.
До 4.2BSD сетевые реализации в UNIX обычно работали через интерфейсы символьных устройств. Одной из целей создания интерфейса сокетов было обеспечение работы простеньким программам без изменения на потоковых соединениях. Такие программы могут работать, если только не меняются системные вызовы _read_ и _write_. Соответственно, оригинальные интерфейсы не трогались, но были исправлены для работы с потоковыми сокетами. Для более сложных сокетов, таких, как те, что используются для посылки датаграмм и в которых при каждом вызове _send_ должен указываться адрес назначения, был добавлен новый интерфейс.
@@ -553,7 +472,7 @@ image::fig2.png[Дерево небольшой файловой системы]
[bibliography]
[[references]]
-== Ссылки
+== Список литературы
[[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
diff --git a/documentation/content/ru/books/design-44bsd/_index.po b/documentation/content/ru/books/design-44bsd/_index.po
new file mode 100644
index 0000000000..e94660b26e
--- /dev/null
+++ b/documentation/content/ru/books/design-44bsd/_index.po
@@ -0,0 +1,3677 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-03 18:09+0300\n"
+"PO-Revision-Date: 2025-10-03 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksdesign-44bsd_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Предоставлено издательством Addison-Wesley и предоставляет обзор архитектуры 4.4BSD, от которой изначально произошел FreeBSD"
+
+#. 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 "Архитектура и реализация операционной системы 4.4BSD"
+
+#. 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 "Обзор архитектуры 4.4BSD"
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:57
+#, no-wrap
+msgid "4.4BSD Facilities and the Kernel"
+msgstr "Подсистемы и ядро 4.4BSD"
+
+#. 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 ""
+"Ядро 4.4BSD предоставляет четыре базовых подсистемы: процессы, файловую "
+"систему, коммуникации и запуск системы. Этот раздел перечисляет, в каком "
+"месте этой книги описана каждая из этих подсистем."
+
+#. 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 ""
+"Процессы образуют поток управления в адресном пространстве. Механизмы "
+"создания, завершения и другие управляющие процессы описаны в Главе 4. Для "
+"каждого процесса система мультиплексирует отдельное виртуальное адресное "
+"пространство; такое управление памятью обсуждается в Главе 5."
+
+#. 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 ""
+"Механизм доступа пользователя к файловой системе и устройствам один и тот "
+"же; общие аспекты обсуждаются в Главе 6. Файловая система является набором "
+"именованных файлов, организованных в древовидную иерархию каталогов, а "
+"операции по управлению ими представлены в Главе 7. Файлы располагаются на "
+"таких физических носителях, как диски. 4.4BSD поддерживает несколько типов "
+"организации данных на диске, как описано далее в Главе 8. Доступ к файлам на "
+"удаленных машинах является предметом обсуждения в Главе 9. Для доступа к "
+"системе Терминалы используются терминалы; их функционированию посвящена "
+"глава 10."
+
+#. 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 ""
+"Механизмы коммуникаций, предоставляемые традиционными UNIX-системами, "
+"включают однонаправленные потоки байтов между связанными процессами "
+"(смотрите материал о конвейерах в Разделе 11.1) и извещение об "
+"исключительных событиях (смотрите материал о сигналах в Разделе 4.7). В "
+"4.4BSD имеется также механизм межпроцессного взаимодействия между "
+"процессами. Этот механизм, описываемый в Главе 11, использует способы "
+"доступа, отличающиеся от тех, что используются в файловой системе, но, как "
+"только соединение установлено, процесс может работать с ним, как будто это "
+"конвейер. Имеется и механизм работы с сетью, описываемый в Главе 12, который "
+"обычно используется как слой ниже механизма IPC. В Главе 13 дается детальное "
+"описание конкретной реализации механизма работы с сетью."
+
+#. 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 ""
+"В любой операционной системе присутствуют вопросы управления, такие, как ее "
+"запуск. Запуск и вопросы управления обсуждаются в Главе 14."
+
+#. 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 ""
+"Разделы с 2.3 по 2.14 представляют собой вводный материал, относящийся к "
+"главам с 3 по 14. Мы определим понятия, коснемся основных системных вызовов "
+"и рассмотрим исторические разработки. Наконец, мы расскажем о причинах "
+"многих ключевых архитектурных решений."
+
+#. 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 ""
+"_Ядро_ является частью системы, которая работает в защищенном режиме и "
+"управляет доступом всех пользовательских программ к низкоуровнему "
+"аппаратному обеспечению (к примеру, ЦПУ, дискам, терминалам, сетевым связям) "
+"и программным компонентам (к примеру, файловой системе, сетевым протоколам). "
+"Ядро предоставляет основные подсистемы; оно создает процессы и управляет "
+"ими, предоставляет функции для доступа к файловой системе и службам связи. "
+"Такие функции, называемые _системными вызовами_, доступны процессам "
+"пользователей в виде библиотечных подпрограмм. Эти системные вызовы являются "
+"единственным способом доступа к этим подсистемам. Подробно механизм работы "
+"системных вызовов дается в Главе 3, вместе с описанием некоторых механизмов "
+"ядра, работа которых не является прямым результатом процесса, выполняющего "
+"системный вызов."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:84
+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 crossref:design-44bsd[biblio-rozier, "
+"[Rozier et al, 1988]], Mach crossref:design-44bsd[biblio-accetta, [Accetta "
+"et al, 1986]], Tunis crossref:design-44bsd[biblio-ewens, [Ewens et al, "
+"1985]], and the V Kernel crossref:design-44bsd[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 ""
+"_Ядро_, по традиционной терминологии операционных систем, является маленьким "
+"куском программного обеспечения, которое предоставляет только минимальный "
+"набор подсистем, необходимый для реализации дополнительных служб "
+"операционной системы. В современных исследовательских операционных системах "
+"— таких, как Chorus crossref:design-44bsd[biblio-rozier, [Rozier et al, "
+"1988]], Mach crossref:design-44bsd[biblio-accetta, [Accetta et al, 1986]], "
+"Tunis crossref:design-44bsd[biblio-ewens, [Ewens et al, 1985]], и V Kernel "
+"crossref:design-44bsd[biblio-cheriton, [Cheriton, 1988]] - такое разделение "
+"функциональности выполнено не только логически. Такие службы, как файловые "
+"системы и сетевые протоколы, выполнены в виде прикладных процессов клиентов "
+"ядра или микроядра."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:93
+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 "
+"crossref:design-44bsd[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 ""
+"Ядро 4.4BSD не разбивается на несколько процессов. Это основополагающее "
+"архитектурное решение было сделано в самых ранних версиях UNIX. В первых "
+"двух реализациях Кена Томпсона (Ken Thompson) не было отображаемой памяти, и "
+"поэтому не было аппаратного различия между адресным пространством "
+"пользователя и ядра crossref:design-44bsd[biblio-ritchie, [Ritchie, 1988]]. "
+"Могла бы быть придумана система обмена сообщениями как реально реализуемая "
+"модель процессов ядра и пользователя. Для простоты и увеличения "
+"производительности было выбрано монолитное ядро. К тому же ранние ядра были "
+"маленькими; включение таких подсистем, как сетевые коммуникации, в ядро "
+"увеличило его размер. Современные тенденции в области операционных систем "
+"сводятся к уменьшению размера ядра за счет перевода таких служб в "
+"пользовательское адресное пространство."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:97
+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 ""
+"Пользователи обычно общаются с системой через интерпретатор языка команд, "
+"называемый оболочкой (_shell_), и, может быть, через дополнительные "
+"прикладные пользовательские программы. Такие программы и оболочка "
+"реализованы в виде процессов. Подробное описание таких программ выходит за "
+"рамки этой книги, которая практически полностью посвящена работе ядра."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:100
+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 ""
+"В разделах 2.3 и 2.4 описываются сервисы, предоставляемые ядром 4.4BSD, и "
+"дается обзор их архитектуры. Последующие главы описывают подробности "
+"архитектуры и реализации этих сервисов в 4.4BSD."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:102
+#, no-wrap
+msgid "Kernel Organization"
+msgstr "Организация ядра"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:105
+msgid ""
+"In this section, we view the organization of the 4.4BSD kernel in two ways:"
+msgstr ""
+"В этом разделе мы рассматриваем организацию ядра 4.4BSD с двух точек зрения:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:108
+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:109
+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:112
+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 ""
+"Самая большая часть ядра реализует системные услуги, к которым приложения "
+"обращаются через системные вызовы. В 4.4BSD это программное обеспечение "
+"организуется по следующим принципам:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:114
+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:115
+msgid "Memory-management support: paging and swapping"
+msgstr "Поддержка управления памятью: подкачка и выгрузка"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:116
+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:117
+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:118
+msgid ""
+"Terminal-handling support: the terminal-interface driver and terminal line "
+"disciplines"
+msgstr ""
+"Поддержка работы с терминалами: драйвер терминального интерфейса и режимы "
+"работы терминального канала"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:119
+msgid "Interprocess-communication facilities: sockets"
+msgstr "Подсистемы межпроцессного взаимодействия: сокеты"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:120
+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:121
+#, no-wrap
+msgid "Machine-independent software in the 4.4BSD kernel"
+msgstr "Машинно-независимое программное обеспечение в ядре 4.4BSD"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:125
+#: documentation/content/en/books/design-44bsd/_index.adoc:165
+#, no-wrap
+msgid "Category"
+msgstr "Категория"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:125
+#: documentation/content/en/books/design-44bsd/_index.adoc:165
+#, no-wrap
+msgid "Lines of code"
+msgstr "Строк кода"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "Percentage of kernel"
+msgstr "Процент от строк ядра"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#, no-wrap
+msgid "headers"
+msgstr "заголовки"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#, no-wrap
+msgid "9,393"
+msgstr "9,393"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "4.6"
+msgstr "4.6"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "initialization"
+msgstr "инициализация"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "1,107"
+msgstr "1,107"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#, no-wrap
+msgid "0.6"
+msgstr "0.6"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#, no-wrap
+msgid "kernel facilities"
+msgstr "подсистемы ядра"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#, no-wrap
+msgid "8,793"
+msgstr "8,793"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#, no-wrap
+msgid "4.4"
+msgstr "4.4"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#, no-wrap
+msgid "generic interfaces"
+msgstr "универсальные интерфейсы"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#, no-wrap
+msgid "4,782"
+msgstr "4,782"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "2.4"
+msgstr "2.4"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "interprocess communication"
+msgstr "межпроцессное взаимодействие"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "4,540"
+msgstr "4,540"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "2.2"
+msgstr "2.2"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#, no-wrap
+msgid "terminal handling"
+msgstr "работа с терминалом"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#, no-wrap
+msgid "3,911"
+msgstr "3,911"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#, no-wrap
+msgid "1.9"
+msgstr "1.9"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "virtual memory"
+msgstr "Виртуальная память"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#, no-wrap
+msgid "11,813"
+msgstr "11,813"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "5.8"
+msgstr "5.8"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "vnode management"
+msgstr "управление vnode"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "7,954"
+msgstr "7,954"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#, no-wrap
+msgid "3.9"
+msgstr "3.9"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#, no-wrap
+msgid "filesystem naming"
+msgstr "имена в файловой системы"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#, no-wrap
+msgid "6,550"
+msgstr "6,550"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "3.2"
+msgstr "3.2"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "fast filestore"
+msgstr "быстрое хранилище файлов"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "4,365"
+msgstr "4,365"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "log-structure filestore"
+msgstr "логическая структура файлового хранилища"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "4,337"
+msgstr "4,337"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "2.1"
+msgstr "2.1"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#, no-wrap
+msgid "memory-based filestore"
+msgstr "хранилище файлов в памяти"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#, no-wrap
+msgid "645"
+msgstr "645"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "0.3"
+msgstr "0.3"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "cd9660 filesystem"
+msgstr "cd9660 файловая система"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "4,177"
+msgstr "4,177"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "miscellaneous filesystems (10)"
+msgstr "различные файловые системы (10)"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "12,695"
+msgstr "12,695"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "6.3"
+msgstr "6.3"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "network filesystem"
+msgstr "сетевая файловая система"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "17,199"
+msgstr "17,199"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "8.5"
+msgstr "8.5"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "network communication"
+msgstr "сетевое взаимодействие"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "8,630"
+msgstr "8,630"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "4.3"
+msgstr "4.3"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "internet protocols"
+msgstr "интернет-протоколы"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "11,984"
+msgstr "11,984"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:143
+#, no-wrap
+msgid "5.9"
+msgstr "5.9"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:143
+#, no-wrap
+msgid "ISO protocols"
+msgstr "протоколы ISO"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:143
+#, no-wrap
+msgid "23,924"
+msgstr "23,924"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:144
+#, no-wrap
+msgid "11.8"
+msgstr "11.8"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:144
+#, no-wrap
+msgid "X.25 protocols"
+msgstr "протоколы X.25"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:144
+#, no-wrap
+msgid "10,626"
+msgstr "10,626"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:145
+#, no-wrap
+msgid "5.3"
+msgstr "5.3"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:145
+#, no-wrap
+msgid "XNS protocols"
+msgstr "протоколы XNS"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:145
+#, no-wrap
+msgid "5,192"
+msgstr "5,192"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:146
+#, no-wrap
+msgid "2.6"
+msgstr "2.6"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:149
+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:154
+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:156
+msgid "Low-level system-startup actions"
+msgstr "Низкоуровневые действия по запуску системы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:157
+msgid "Trap and fault handling"
+msgstr "Обработка исключительных ситуаций и прерываний"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:158
+msgid "Low-level manipulation of the run-time context of a process"
+msgstr "Низкоуровневые манипуляции процессом во время работы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:159
+msgid "Configuration and initialization of hardware devices"
+msgstr "Конфигурация и инициализация аппаратных устройств"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:160
+msgid "Run-time support for I/O devices"
+msgstr "Поддержка устройств ввода/вывода во время работы"
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:161
+#, no-wrap
+msgid "Machine-dependent software for the HP300 in the 4.4BSD kernel"
+msgstr "Машинно-зависимое программное обеспечение для HP300 в ядре 4.4BSD"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "machine dependent headers"
+msgstr "заголовочные файлы, зависимые от машины"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "1,562"
+msgstr "1,562"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#, no-wrap
+msgid "0.8"
+msgstr "0.8"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#, no-wrap
+msgid "device driver headers"
+msgstr "заголовочные файлы драйверов устройств"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#, no-wrap
+msgid "3,495"
+msgstr "3,495"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "1.7"
+msgstr "1.7"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "device driver source"
+msgstr "исходный код драйверов устройств"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "17,506"
+msgstr "17,506"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "8.7"
+msgstr "8.7"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "3,087"
+msgstr "3,087"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:170
+#: documentation/content/en/books/design-44bsd/_index.adoc:172
+#, no-wrap
+msgid "1.5"
+msgstr "1.5"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:170
+#, no-wrap
+msgid "other machine dependent"
+msgstr "код, зависящий от других машин"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:170
+#, no-wrap
+msgid "6,287"
+msgstr "6,287"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:171
+#, no-wrap
+msgid "3.1"
+msgstr "3.1"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:171
+#, no-wrap
+msgid "routines in assembly language"
+msgstr "подпрограммы на языке ассемблера"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:171
+#, no-wrap
+msgid "3,014"
+msgstr "3,014"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:172
+#, no-wrap
+msgid "HP/UX compatibility"
+msgstr "совместимость с HP/UX"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:172
+#, no-wrap
+msgid "4,683"
+msgstr "4,683"
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:173
+#, no-wrap
+msgid "2.3"
+msgstr "2.3"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:179
+msgid ""
+"crossref:design-44bsd[table-mach-indep, Machine-independent software in the "
+"4.4BSD kernel] 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 "
+"crossref:design-44bsd[table-mach-dep, Machine-dependent software in the "
+"4.4BSD kernel] show, the machine-dependent software, excluding HP/UX and "
+"device support, accounts for a minuscule 6.9 percent of the kernel."
+msgstr ""
+"crossref:design-44bsd[table-mach-indep, Машинно-независимое программное "
+"обеспечение в ядре 4.4BSD] показывает статистику машинно-независимого кода, "
+"который составляет ядро 4.4BSD для HP300. Числа во второй колонке обозначают "
+"количество строк исходного кода на языке C, заголовочных файлов и "
+"ассемблерного кода. Практически весь код ядра написан на языке "
+"программирования C; менее двух процентов написано на языке ассемблера. Как "
+"показывает статистика в crossref:design-44bsd[table-mach-dep, Машинно-"
+"зависимое программное обеспечение для HP300 в ядре 4.4BSD], машинно-"
+"зависимый код, не включающий поддержку HP/UX и устройств, составляет менее "
+"6.9 процента ядра."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:185
+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 ""
+"Лишь малая часть ядра отвечает за инициализацию системы. Этот код "
+"используется при _начальной загрузке_ системы для перехода в рабочий режим и "
+"отвечает за настройку аппаратного и программного окружения ядра (обратитесь "
+"к Главе 14). Некоторые операционные системы (особенно те, что ограничены "
+"объемом физической памяти) выполняют действия по выгрузке или _перекрытию_ "
+"программного кода, выполняющего эти функции, после окончания его работы. "
+"Ядро 4.4BSD не работает повторно с памятью, использованной начальным кодом, "
+"потому что этот объем памяти составляет менее 0.5 процентов ресурсов ядра, "
+"используемых на типичной машине. Также начальный код не находится только в "
+"одном месте ядра - он рассредоточен везде, и обычно появляется там, где "
+"логически связан с объектом инициализации."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:187
+#, no-wrap
+msgid "Kernel Services"
+msgstr "Службы ядра"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:197
+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 ""
+"Разграничение между кодом уровней ядра и пользователя обеспечивается "
+"аппаратными методами, предоставляемыми оборудованием. Ядро работает в "
+"отдельном адресном пространстве, которое недоступно процессам пользователя. "
+"Привилегированные операции - такие, как осуществление ввода/вывода и "
+"остановка модуля центрального процессора (CPU) - доступны только ядру. "
+"Приложения делают запросы ядру на доступ к его сервисам при помощи "
+"_системных вызовов_. Системные вызовы используются для указания ядру на "
+"выполнение как сложных операций, таких, как запись данных во вторичный "
+"носитель, так и простых, таких, как получение текущего времени. Все "
+"системные вызовы выполняются _синхронно_ с приложением: Приложение не будет "
+"продолжать работу, пока ядро не выполнит действия, соответствующие "
+"системному вызову. Ядро может завершить некоторые операции, связанные с "
+"системным вызовом, после его окончания. Например, системный вызов _write_ "
+"будет копировать записываемые данные от пользовательского процесса в буфер "
+"ядра, пока процесс находится в ожидании, но, как правило, будет немедленно "
+"завершаться до того, как буфер ядра реально будет записан на диск."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:206
+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 ""
+"Системный вызов обычно реализуется как аппаратное прерывание, которое "
+"изменяет режим работы CPU и текущее отображение адресного пространства. "
+"Параметры, передаваемые пользователями системным вызовам, перед "
+"использованием проверяются ядром. Такая проверка обеспечивает целостность "
+"системы. Все параметры, передаваемые в ядро, копируются в адресное "
+"пространство ядра, для того, чтобы проверенные параметры не могли быть "
+"изменены в результате побочного действия системного вызова. Результаты "
+"выполнения системного вызова возвращаются ядром либо в аппаратных регистрах, "
+"либо копированием их значений в области памяти, указанные пользователем. Как "
+"и параметры, переданные в ядро, адреса, используемые для возвращения "
+"результатов, должны быть проверены на то, что они являются частью адресного "
+"пространства приложения. Если при обработке системного вызова ядром "
+"возникает ошибка, код ошибки возвращается пользователю. В случае языка "
+"программирования C код этой ошибки сохраняется в глобальной переменной "
+"_errno_, а функция, соответствующая системному вызову, возвращает в качестве "
+"результата значение -1."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:211
+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 ""
+"Пользовательские приложения и ядро работают независимо друг от друга. 4.4BSD "
+"не хранит управляющие блоки ввода/вывода и другие связанные с операционной "
+"системой структуры данных в адресном пространстве приложения. Каждому "
+"пользовательскому приложению предоставляется независимое адресное "
+"пространство, в котором оно и выполняется. Ядро выполняет большинство "
+"управляющих действий, таких, как приостановка процесса на время выполнения "
+"другого, незаметно для участвующих процессов."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:213
+#, no-wrap
+msgid "Process Management"
+msgstr "Управление процессами"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:222
+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 ""
+"4.4BSD поддерживает многозадачность. Каждая задача или выполняющийся поток "
+"называется _процессом_. _Контекст_ процесса 4.4BSD состоит из состояния "
+"пользовательского уровня, включая содержимое его адресного пространства и "
+"окружения времени выполнения, и состояния уровня ядра, в который включаются "
+"параметры планировщика задач, управляющие ресурсы и идентифицирующая "
+"информация. В контекст включается все, что используется ядром при "
+"предоставлении своих сервисов процессу. Пользователи могут создавать "
+"процессы, управлять их выполнением и получать уведомления при изменении "
+"состояния выполнения процессов. Каждому процессу назначается уникальное "
+"число, называемое _идентификатором процесса_ (PID). Это число используется "
+"ядром для идентификации процесса при сообщении пользователю об изменении его "
+"состояния, и пользователем для указания процесса в системном вызове."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:227
+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 ""
+"Ядро создает процесс, дублируя контекст другого процесса. Новый процесс "
+"считается _порожденным процессом_ исходного _родительского процесса_. "
+"Контекст, копируемый в ходе создания процесса, включает как состояние "
+"выполнения процесса уровня пользователя, так и системное состояние процесса, "
+"управляемое ядром. Важные компоненты состояния ядра описаны в Главе 4."
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:229
+#, no-wrap
+msgid "Process lifecycle"
+msgstr "Жизненный цикл процесса"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:231
+msgid "image:fig1.png[Process lifecycle]"
+msgstr "image:fig1.png[Жизненный цикл процесса]"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:238
+msgid ""
+"The process lifecycle is depicted in crossref:design-44bsd[fig-process-"
+"lifecycle,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 ""
+"Жизненный цикл процесса изображен на рисунке crossref:design-44bsd[fig-"
+"process-lifecycle,Жизненный цикл процесса]. Процесс может создать новый "
+"процесс, который является копией исходного процесса с помощью системного "
+"вызова _fork_. Возврат из вызова _fork_ происходит два раза: один раз в "
+"родительском процессе, в котором возвращаемое значение является "
+"идентификатором порожденного процесса, и второй раз в порожденном процессе, "
+"в котором возвращаемое значение равно 0. Связь родитель-потомок порождает "
+"иерархическую структуру процессов в системе. Новый процесс имеет доступ ко "
+"всем ресурсам его родителя, таким, как файловые дескрипторы, состояние "
+"обработки сигналов и распределение памяти."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:242
+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 ""
+"Хотя есть ситуации, когда процесс должен быть копией своего родителя, "
+"наиболее типичным и полезным действием является загрузка и выполнение другой "
+"программы. Процесс может заместить себя образом памяти другой программы, "
+"передавая вновь созданному образу набор параметров, при помощи системного "
+"вызова _execve_. Одним из параметров является имя файла, содержимое которого "
+"имеет формате, распознаваемый системой - это либо двоичный выполняемый файл, "
+"либо файл, который приводит к запуску указанной программы интерпретации для "
+"обработки его содержимого."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:246
+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 ""
+"Процесс может завершить работу, выполнив системный вызов _exit_, посылающий "
+"8-битовое значение состояния завершения своему родителю. Если процесс хочет "
+"передать родительскому процессу информацию, превышающую один байт, он должен "
+"либо создать канал межпроцессных коммуникаций при помощи конвейеров или "
+"сокетов, или при помощи промежуточного файла. Коммуникации между процессами "
+"подробно обсуждаются в Главе 11."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:251
+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 ""
+"Процесс может приостановить выполнение до тех пор, пока не завершит работу "
+"любой из порожденных им процессов, при помощи системного вызова _wait_, "
+"который возвращает PID и статус завершения выполненного дочернего процесса. "
+"Родительский процесс может быть настроен на получение сигнала в случае, "
+"когда порожденный процесс завершает работу или аварийно прекращает "
+"выполнение. При помощи системного вызова _wait4_ родитель может получить "
+"информацию о событии, приведшем к завершению порожденного процесса и о "
+"ресурсах, использованных процессом за время его работы. Если процесс "
+"становится сиротой из-за того, что процесс, его породивший, завершил работу "
+"до окончания работы потомка, то ядро перенаправляет состояние завершения "
+"порожденного процесса особому системному процессу _init_: обратитесь к "
+"разделам 3.1 и 14.6)."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:253
+msgid ""
+"The details of how the kernel creates and destroys processes are given in "
+"Chapter 5."
+msgstr ""
+"Подробное описание того, как ядро создает и уничтожает процессы, дается в "
+"Главе 5."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:257
+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 ""
+"Планирование выполнения процессов осуществляется согласно параметру "
+"_приоритетности процесса_. Этот приоритет управляется алгоритмом "
+"планирования задач в ядре. Пользователи могут влиять на выполнение процесса, "
+"задавая этот параметр (_nice_), который влияет на суммарный приоритет, но "
+"ограничен использованием ресурсов CPU согласно алгоритму планировщика задач "
+"ядра."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:258
+#, no-wrap
+msgid "Signals"
+msgstr "Сигналы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:267
+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 ""
+"В системе определен набор _сигналов_, которые могут быть отправлены "
+"процессу. Сигналы в 4.4BSD сделаны по образу аппаратных прерываний. Процесс "
+"может определить пользовательскую подпрограмму, которая будет являться "
+"_обработчиком_, и которой должен будет перенаправляться сигнал. Когда сигнал "
+"генерируется, он блокируется от повторного появления до тех пор, пока не "
+"будет _перехвачен_ обработчиком. Перехват сигнала включает в себя сохранение "
+"контекста текущего процесса и построение нового, в котором запускается "
+"обработчик. Затем сигнал направляется обработчику, который может либо "
+"прервать процесс, либо передать управление обратно выполняемому процессу "
+"(может быть, после установки значения глобальной переменной). Если "
+"обработчик возвратил управление, сигнал разблокировывается и может быть "
+"сгенерирован (и получен) снова."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:271
+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:274
+msgid ""
+"Some signals cannot be caught or ignored. These signals include _SIGKILL_, "
+"which kills runaway processes, and the job-control signal _SIGSTOP_."
+msgstr ""
+"Некоторые сигналы не могут быть перехвачены или проигнорированы. К таким "
+"сигналам относятся _SIGKILL_, прерывающий неуправляемый процесс, и сигнал "
+"управления заданиями _SIGSTOP_."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:279
+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 ""
+"Процесс может выбрать получение сигналов в специальный стек для выполнения "
+"хитроумных программных манипуляций стеком. Например, подпрограммам поддержки "
+"языка нужно иметь стек для каждой подпрограммы. Система времени выполнения "
+"языка может выделять эти стеки, разделяя единственный стек, предоставляемый "
+"в 4.4BSD. Если ядро не поддерживает отдельный стек сигналов, то "
+"пространство, выделяемое каждой подпрограмме, должно быть расширено на "
+"объем, требуемый для перехвата сигнала."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:284
+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:286
+msgid ""
+"The detailed design and implementation of signals is described in Section "
+"4.7."
+msgstr ""
+"Подробное описание архитектуры и реализации механизма сигналов дается в "
+"Разделе 4.7."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:287
+#, no-wrap
+msgid "Process Groups and Sessions"
+msgstr "Группы управления и сеансы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:294
+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:298
+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:301
+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:309
+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 ""
+"Терминалу ставится в соответствие идентификатор группы управления. Этот "
+"идентификатор обычно равен идентификатору группы управления, соответствующей "
+"терминалу. Управляющий заданиями командный процессор может создать несколько "
+"групп управления, связанных с одним и тем же терминалом; терминал является "
+"_управляющим терминалом_ для каждого процесса в этих группах. Процесс может "
+"выполнять чтение из дескриптора своего управляющего терминала, если только "
+"идентификатор группы управления соответствует идентификатору группы этого "
+"процесса. Если идентификаторы не совпадают, процесс будет блокирован при "
+"попытке чтения с терминала. Изменяя идентификатор группы управления "
+"терминала, командный процессор может распределять терминал между несколькими "
+"различными заданиями. Такое распределение называется _управлением заданиями_ "
+"и описывается вместе с группами управления в Разделе 4.8."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:312
+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:314
+#, no-wrap
+msgid "Memory Management"
+msgstr "Управление памятью"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:324
+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:332
+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:333
+#, no-wrap
+msgid "BSD Memory-Management Design Decisions"
+msgstr "Решения BSD по архитектуре управления памятью"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:339
+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 ""
+"В 4.2BSD требовалось реализовать поддержку больших несвязанных адресных "
+"пространств, отображаемых в память файлов и совместно используемой памяти. "
+"Был спроектирован интерфейс, который назвали _mmap_, позволяющий несвязанным "
+"процессам запрашивать отображение в их адресное пространство файла в режиме "
+"совместного использования. Если несколько процессов отображают в свое "
+"адресное пространство один и тот же файл, то изменение адресного "
+"пространства процесса, соответствующего файлу, в одном процессе, будет "
+"отображено в области отображения этого файла в другом процессе, а также и в "
+"самом файле. Однако в конце концов 4.2BSD была выпущена без интерфейса "
+"_mmap_ из-за необходимости сделать в первую очередь другие возможности, "
+"такие, как работа с сетью."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:346
+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 crossref:design-44bsd[biblio-"
+"mckusick-1, [McKusick et al, 1994]]. Several of the companies have "
+"implemented the revised interface crossref:design-44bsd[biblio-gingell, "
+"[Gingell et al, 1987]]."
+msgstr ""
+"Затем разработка интерфейса _mmap_ продолжалась во время работы над 4.3BSD. "
+"Более 40 компаний и исследовательских групп принимали участие в обсуждениях, "
+"которые привели к появлению обновленной концепции, описанной в Berkeley "
+"Software Architecture Manual crossref:design-44bsd[biblio-mckusick-1, "
+"[McKusick et al, 1994]]. Несколько компаний реализовали этот обновленный "
+"интерфейс crossref:design-44bsd[biblio-gingell, [Gingell et al, 1987]]."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:353
+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 ""
+"И снова сроки разработки не позволили включить в 4.3BSD реализацию этого "
+"интерфейса. Хотя позже она могла быть встроена в имеющуюся подсистему "
+"виртуальной памяти 4.3BSD, разработчики решили не включать ее сюда. потому "
+"что этой реализации было уже более 10 лет. Более того, оригинальная "
+"архитектура виртуальной памяти была основана на предположении, что "
+"компьютерная память мала и дорога, а диски подключены непосредственно к "
+"компьютеру, быстры и дешевы. Поэтому подсистема виртуальной памяти была "
+"разработана с упором на бережное использование памяти ценой более частых "
+"обращений к диску. Вдобавок реализация в 4.3BSD была пронизана зависимостями "
+"от аппаратной системы управления памятью машин VAX, что препятствовало ее "
+"переносу на другие аппаратные платформы. И наконец, подсистема виртуальной "
+"памяти не была предназначена для поддержки связных многопроцессорных систем, "
+"которые сейчас становятся все более распространенными и необходимыми."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:364
+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 crossref:design-44bsd[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 ""
+"Попытки постепенно усовершенствовать старую реализацию заведомо были "
+"обречены на неудачу. Полностью новая архитектура, с другой стороны, могла бы "
+"использовать большие объемы памяти, уменьшить дисковые операции и "
+"обеспечивать работу с несколькими процессорами. Наконец, система виртуальной "
+"памяти в 4.4BSD была полностью изменена. Система виртуальной памяти 4.4BSD "
+"основана на системе виртуальнй памяти (VM) crossref:design-44bsd[biblio-"
+"tevanian, [Tevanian, 1987]] с заимствованиями из Mach 2.5 и Mach 3.0. В ней "
+"была эффективная поддержка совместного использования, полное разделение "
+"машинно-зависимой и машинно-независимой частей, а также (сейчас не "
+"используемая) поддержка работы с несколькими процессорами. Процессы могут "
+"отображать файлы в любую область своего адресного пространства. Они могут "
+"совместно использовать части своих адресных пространств посредством "
+"отображения в память одного и того же файла. Изменения, сделанные одним "
+"процессом, видны в адресном пространстве другого процесса, а также "
+"записываются и в сам файл. Процессы могут также запрашивать эксклюзивное "
+"отображение файла в память, при котором любые изменения, сделанные "
+"процессом, не видны другим процессам, которые отображают файл в память и не "
+"записываются обратно в файл."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:370
+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 ""
+"Еще одной проблемой с системой виртуальной памяти является способ, которым "
+"информация передается ядру при выполнении системного вызова. 4.4BSD всегда "
+"копирует данные из адресного пространства процесса в буфер ядра. Для "
+"операций чтения и записи, при которых передаются большие объемы данных, "
+"выполнение копирования может оказаться занимающим время процессом. "
+"Альтернативным способом является манипуляции с адресным пространством "
+"процесса в ядре. Ядро 4.4BSD всегда копирует данные о нескольким причинам:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:372
+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:373
+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:374
+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 ""
+"Если процесс позволяет хранить копию страницы памяти (как это делается в "
+"существующей 4.4BSD), то страница должна иметь атрибут _копирования-при-"
+"записи_. Такая страница является одной из таковых, что защищается от записи "
+"при помощи атрибута только-для-чтения. Если процесс пытается модифицировать "
+"страницу памяти, в ядре возникает ситуация ошибки записи. После этого ядро "
+"делает копию страницы, которую процесс может изменять. К несчастью, "
+"большинство процессов будет немедленно пытаться записать новые данные в свой "
+"буфер вывода, что приводит в любом случае к копированию данных."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:375
+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 ""
+"Когда страницы переносятся в новые адреса виртуальной памяти, большинство "
+"аппаратных менеджеров памяти требуют, чтобы кэш аппаратного переназначения "
+"адресов был выборочно очищен. Очистка кэша зачастую выполняется медленно. В "
+"итоге получается, что переназначение адресов оказывается медленнее, чем "
+"копирование блоков данных, не превышающих 4 или 8 килобайт."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:378
+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 ""
+"Больше всего отображение памяти нужно для работы к большими файлами и "
+"передачи больших объемов данных между процессами. Интерфейс _mmap_ дает "
+"методы для выполнения обеих этих операций без копирования."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:379
+#, no-wrap
+msgid "Memory Management Inside the Kernel"
+msgstr "Управление памятью внутри ядра"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:388
+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 ""
+"Ядро часто выполняет выделение памяти, которое нужно только для выполнения "
+"единственного системного вызова. В пользовательском процессе такая "
+"кратковременно используемая память будет выделяться в стеке во время "
+"выполнения. Так как ядро имеет ограниченный объем стека времени выполнения, "
+"то неэффективно выделять в нем даже блоки памяти среднего размера. Таким "
+"образом, такая память должна выделяться посредством более гибкого механизма. "
+"Например, когда системный вызов должен преобразовать имя каталога, он должен "
+"выделить буфер размером 1 Кбайт для хранения имени. Другие блоки памяти "
+"должны выделяться на более продолжительный срок, чем один системный вызов, и "
+"поэтому не могут выделяться в стеке, даже если там есть место. В качестве "
+"примера можно взять блоки управления протоколами, которые существуют на всем "
+"протяжении сетевого соединения."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:398
+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 "
+"crossref:design-44bsd[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 ""
+"Необходимость в динамическом выделении памяти в ядре становилась все более "
+"острой вместе с добавлением количества сервисов. Общий механизм выделения "
+"памяти уменьшает сложность написания кода в ядре. Поэтому в 4.4BSD ядро "
+"имеет единый механизм выделения памяти, который может использоваться в любой "
+"части системы. У него есть интерфейс, похожий на функции библиотеки языка C "
+"_malloc_ и _free_, которые обеспечивают выделение памяти в прикладных "
+"программах crossref:design-44bsd[biblio-mckusick-2, [McKusick & Karels, "
+"1988]]. Как интерфейс библиотеки языка C, функция выделения памяти получает "
+"параметр, указывающий на размер памяти, который необходим. Диапазон "
+"запрашиваемых объемов выделяемой памяти не ограничен; однако выделяемая "
+"физическая память не подвергается постраничной подгрузке. Функции "
+"освобождения памяти передается указатель на освобождаемый участок памяти, но "
+"указывать размер освобождаемого участка памяти не нужно."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:400
+#, no-wrap
+msgid "I/O System"
+msgstr "Система ввода/вывода"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:404
+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 ""
+"Базовой моделью системы ввода/вывода UNIX является последовательность байт, "
+"доступ к которым может осуществляться как последовательно, так и в в "
+"произвольном порядке. В типичном пользовательском процессе UNIX нет таких "
+"понятий, как _методы доступа_ или _управляющие блоки_."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:412
+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 "
+"crossref:design-44bsd[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 ""
+"Различные программы используют разнообразные структуры данных, но ядро не "
+"связывает ввод/вывод с используемыми структурами. Например, текстовым файлом "
+"считается файл из строк символов набора ASCII, которые разделены одним "
+"символом новой строки (символ ASCII перевода строки), но ядро не знает "
+"ничего об этом соглашении. Для удовлетворения потребностей большинства "
+"программ модель еще более упрощена и сводится к потоку байт данных, или "
+"_потоку ввода/вывода_. Такое единое представление данных позволяет работать "
+"характерному для UNIX подходу на основе инструментов "
+"crossref:design-44bsd[biblio-kernighan, [Kernighan & Pike, 1984]]. Поток "
+"ввода/вывода одной программы может быть подан в качестве входной информации "
+"практически любой другой программе. (Этот тип традиционных для UNIX потоков "
+"ввода/выводы не нужно путать с потоковой системой ввода/вывода из Eighth "
+"Edition или с потоками из System V, Release 3 (STREAMS), оба из которых "
+"доступны как обычные потоки ввода/вывода.)"
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:413
+#, no-wrap
+msgid "Descriptors and I/O"
+msgstr "Дескрипторы и ввод/вывод"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:421
+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 ""
+"Процессы UNIX для работы с потоками ввода/вывода используют _дескрипторы_. "
+"Дескрипторы представляют собой беззнаковые целые числа, получаемые после "
+"выполнения системных вызовов _open_ и _socket_. Системный вызов _open_ "
+"получает в качестве аргументов имя файла и режим доступа, который "
+"определяет, должен ли файл открываться для чтения, для записи или для обеих "
+"операций. Этот системный вызов может также использоваться для создания "
+"нового пустого файла. Системные вызовы _read_ и _write_ могут применяться к "
+"дескриптору для переноса данных. Системный вызов _close_ может "
+"использоваться для уничтожения любого дескриптора."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:424
+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 ""
+"Дескрипторы представляют низкоуровневые объекты, поддерживаемые ядром, и "
+"создаваемые системными вызовами, специфичными для каждого типа объектов. В "
+"4.4BSD дескрипторы могут представлять три типа таких объектов: файлы, каналы "
+"и сокеты."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:426
+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 ""
+"_Файл_ представляет собой линейную последовательность байт, имеющую по "
+"крайней мере одно имя. Файл существует, пока все его имена не удалены и ни "
+"один из процессов не хранит его дескриптор. Процесс получает дескриптор "
+"файла, открывая имя файла посредством системного вызова _open_. Работа с "
+"устройствами ввода/вывода осуществляется как с файлами."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:427
+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 ""
+"_Каналом_ является линейная последовательность байт, такая же, как файл, но "
+"используемая исключительно как поток ввода/вывода, причем однонаправленный. "
+"У канала нет имени, и поэтому он не может быть открыт при помощи _open_. "
+"Вместо этого он создается посредством системного вызова _pipe_, который "
+"возвращает два дескриптора, один из которых принимает входные данные, без "
+"искажений, без повторений и в той же самой последовательности посылаемый на "
+"другой дескриптор. Система также поддерживает именованный канал, или FIFO. "
+"FIFO имеет те же самые свойства, что и канал, за исключением того, что он "
+"располагается в файловой системе; поэтому он может быть открыт системным "
+"вызовом _open_. Процессы, которые хотят обмениваться данными, открывают "
+"FIFO: Один процесс открывает его для чтения, а другой для записи."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:428
+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 ""
+"_Сокет_ является промежуточным объектом, который используется для "
+"межпроцессных коммуникаций; он существует, пока какой-либо процесс хранит "
+"дескриптор, ссылающийся на него. Сокет создается системным вызовом _socket_, "
+"который возвращает его дескриптор. Имеется несколько типов сокетов, которые "
+"поддерживают различные коммуникационные возможности, такие, как надежную "
+"доставку данных, сохранение последовательности передаваемых сообщений, и "
+"сохранение границ сообщений."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:430
+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 ""
+"В системах, предшествующих 4.2BSD, каналы были реализованы в файловой "
+"системе, когда в 4.2BSD появились сокеты, то каналы были повторно "
+"реализованы как сокеты."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:436
+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:442
+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 ""
+"Любой рабочий дескриптор имеет связанное с ним _смещение в файле_ в байтах "
+"от начала объекта. Операции чтения и записи начинаются от этого смещения, "
+"который обновляется после каждой передачи данных. Для объектов, к которым "
+"разрешен произвольный доступ, смещение в файле может быть установлено "
+"посредством системного вызова _lseek_. Обычные файлы, а также некоторые "
+"устройства, разрешают произвольный доступ к ним. Каналы и сокеты этого "
+"делать не позволяют."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:445
+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:446
+#, no-wrap
+msgid "Descriptor Management"
+msgstr "Управление дескрипторами"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:453
+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 ""
+"Большинство процессов ожидают, что перед началом их работы уже будут открыты "
+"три дескриптора. Это дескрипторы 0, 1 и 2, больше известные как _стандартный "
+"ввод_, _стандартный вывод_ и _стандартный поток диагностических сообщений_, "
+"соответственно. Как правило, все они связываются с пользовательским "
+"терминалом по время входа в систему (смотри Раздел 14.6) и наследуются через "
+"вызовы _fork_ и _exec_ процессами, запускаемыми пользователем. Таким "
+"образом, программа может считывать то, что набирает пользователь, из "
+"стандартного ввода, и программа может выдавать результат на экран "
+"пользователя, осуществляя запись в стандартный вывод. Дескриптор потока "
+"диагностических сообщений также открыт для записи и используется для вывода "
+"ошибок, когда как стандартный вывод используется для обычного вывода."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:457
+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 ""
+"Эти (и другие) дескрипторы могут отображаться на объекты, отличающиеся от "
+"терминала; такое отображение называется _перенаправлением ввода/вывода_, и "
+"все стандартные командные процессоры позволяют пользователю это делать. "
+"Оболочка может направить вывод программы в файл, закрывая дескриптор 1 "
+"(стандартный вывод) и открывая выбранный выходной файл для создания нового "
+"дескриптора 1. Подобным же образом стандартный ввод может браться из файла, "
+"при этом закрывается дескриптор 0 и открывается файл."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:463
+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 ""
+"Каналы позволяют выводу одной программы становиться вводом другой программы "
+"без переписывания и даже перекомпоновки программ. Вместо того, чтобы "
+"дескриптор 1 (стандартный вывод) исходной программы был настроен на запись "
+"на терминал, он настраивается на входной дескриптор канала. Аналогично "
+"дескриптор 0 (стандартный ввод) принимающей программы настраивается на "
+"обращение к выводу канала, а не к клавиатуре терминала. Результирующий набор "
+"двух процессов и соединяющий канал называется _конвейером_. Конвейеры могут "
+"быть весьма большими последовательностями процессов, соединенных каналами."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:470
+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 ""
+"Системные вызовы _open_, _pipe_ и _socket_ порождают новые дескрипторы с "
+"наименьшим неиспользуемым номером, подходящим для дескриптора. Для того, "
+"чтобы конвейеры могли работать, должен существовать механизм для отображения "
+"таких дескрипторов в 0 и 1. Системный вызов _dup_ создает копию дескриптора, "
+"которая указывает на ту же самую запись в таблице файлов. Новый дескриптор "
+"также является наименьшим неиспользуемым, но если нужный дескриптор сначала "
+"закрыть, то _dup_ можно использовать для выполнения нужного отображения. "
+"Однако здесь требуется некоторая осторожность: если нужен дескриптор 1, а "
+"дескриптор 0 уже закрыт, то в результате получится дескриптор 0. Во "
+"избежание этой проблемы в системе имеется системный вызов _dup2_; он похож "
+"на _dup_, но воспринимает дополнительный аргумент, указывающий номер нужного "
+"дескриптора (если нужный дескриптор уже открыт, то _dup2_ его закроет перед "
+"повторным использованием)."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:471
+#, no-wrap
+msgid "Devices"
+msgstr "Устройства"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:477
+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 ""
+"Аппаратные устройства имеют связанные с ними имена файлов, и к ним может "
+"обращаться пользователь при помощи тех же самых системных вызовов, что "
+"используются для обычных файлов. Ядро может различать _специальный файл "
+"устройства_ или просто _специальный файл_, и может определять, к какому "
+"устройству он относится, но большинство процессов не выполняют такого "
+"распознавания. Терминалы, принтеры и стримеры все доступны как "
+"последовательности байт, как дисковые файлы 4.4BSD. Таким образом, "
+"особенности работы устройств максимально скрываются ядром, и даже в ядре "
+"большинство из них отличаются в драйверах."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:482
+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:486
+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:490
+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:493
+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:499
+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 ""
+"Специальные файлы устройств создаются системным вызовом _mknod_. Имеется "
+"дополнительный системный вызов, _ioctl_, для управления низкоуровневыми "
+"параметрами специальных файлов. Выполняемые операции для каждого устройства "
+"различны. Этот системный вызов позволяет осуществлять доступ к специальным "
+"характеристикам устройств, не перегружая смысл других системных вызовов. "
+"Например, для стримера существует _ioctl_ для записи метки конца ленты, но "
+"нет особой или измененной версии функции _write_."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:500
+#, no-wrap
+msgid "Socket IPC"
+msgstr "Механизм межпроцессных коммуникаций посредством сокетов"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:509
+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 ""
+"В ядре 4.2BSD появился механизм межпроцессного взаимодействия, более гибкий, "
+"чем каналы, основанный на _сокетах_. Сокет является конечной точкой "
+"коммуникаций, доступный через дескриптор, как файл или канал. Каждый из двух "
+"процессов может создать сокет, а затем соединить эти конечные точки для "
+"получения надежного канала передачи потока байт. После соединения процесс "
+"может выполнять с дескрипторами операции чтения и записи, как это делалось с "
+"каналами. Прозрачность сокетов позволяет ядру перенаправить вывод одного "
+"процесса на вход другого, работающего на другой машине. Большим различием "
+"между каналами и сокетами является то, что каналы требуют наличия общего "
+"родительского процесса для установки коммуникации. Соединение между сокетами "
+"может быть установлено двумя несвязанными процессами, возможно, работающими "
+"на разных машинах."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:516
+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 ""
+"System V предоставляет механизм локального межпроцессного взаимодействия "
+"через FIFO (также называемые _именованными каналами_). FIFO отображаются как "
+"объекты файловой системы, которые могут быть открыты несвязанными "
+"процессами, и в которые можно открывать и посылать данные так же, как в "
+"случае каналов. Таким образом, FIFO не требуют общего родительского процесса "
+"для установки соединения; они могут быть соединены после того, как будут "
+"запущены два процесса. В отличие от сокетов, FIFO могут быть использованы "
+"только на локальной машине; они не могут быть использованы для связи между "
+"процессами, работающими на разных машинах. FIFO реализованы в 4.4BSD, потому "
+"что это требует стандарт POSIX.1. Их функциональность является подмножеством "
+"функций интерфейса сокетов."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:523
+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 ""
+"Механизм сокетов требует расширения традиционных для UNIX системных вызовов "
+"ввода/вывода для обеспечения соответствующих имен и смыслов соединениям. "
+"Вместо того, чтобы перегружать существующий интерфейс, разработчики "
+"использовали существующие интерфейсы, расширив их так, что они продолжили "
+"работать без изменений, и разработали новые интерфейсы для работы с новыми "
+"возможностями. Системные вызовы _read_ и _write_ использовались для "
+"соединений типа потока байт, и было добавлено шесть новых системных вызовов, "
+"что позволило посылать и принимать адресованные сообщения, такие, как "
+"сетевые датаграммы. Системные вызовы для записи сообщений включают в себя "
+"_send_, _sendto_ и _sendmsg_. Системные вызовы для чтения сообщений включают "
+"_recv_, _recvfrom_ и _recvmsg_. В ретроспективе, первые два в каждом классе "
+"являются особыми случаями других; _recvfrom_ и _sendto_, наверное, должны "
+"были быть добавлены как библиотечные интерфейсы к _recvmsg_ и _sendmsg_, "
+"соответственно."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:524
+#, no-wrap
+msgid "Scatter/Gather I/O"
+msgstr "Множественный ввод/вывод"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:530
+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 ""
+"Кроме традиционных системных вызовов _read_ и _write_, в 4.2BSD появилась "
+"возможность выполнять множественный ввод/вывод. Множественный ввод "
+"использует системный вызов _readv_ для размещения результата единственной "
+"операции чтения в нескольких различных буферах. Обратно, системный вызов "
+"_writev_ позволяет осуществлять запись нескольких различных буферов за одну "
+"атомарную операцию записи. Вместо передачи одного буфера и его длины в "
+"качестве параметров, как это делается при использовании системных вызовов "
+"_read_ и _write_, процесс передает указатель на массив буферов и их длин, а "
+"также счетчик, определяющий размер массива."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:535
+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:538
+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 ""
+"Так же, как _send_ и _recv_ могут быть реализованы в виде библиотечных "
+"интерфейсов к _sendto_ и _recvfrom_, возможно симулирование _read_ через "
+"_readv_ и _write_ через _writev_. Однако _read_ и _write_ используются столь "
+"часто, что накладные расходы на такую симуляцию не стоят того."
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:539
+#, no-wrap
+msgid "Multiple Filesystem Support"
+msgstr "Поддержка нескольких файловых систем"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:545
+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 ""
+"Вместе с распространением сетевых вычислений возникла потребность в "
+"поддержке как локальных, так и удаленных файловых систем. Для облегчения "
+"поддержки нескольких файловых систем разработчики добавили в ядро интерфейс "
+"виртуальных узлов файловой системы, или интерфейс _vnode_. Набор операций, "
+"экспортируемых через интерфейс vnode, похож на операции файловой системы, "
+"ранее поддерживаемые локальной файловой системой. Однако они могут "
+"поддерживаться широким спектром типов файловых систем:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:547
+msgid "Local disk-based filesystems"
+msgstr "Локальные файловые системы, использующие диск"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:548
+msgid "Files imported using a variety of remote filesystem protocols"
+msgstr ""
+"Файлы, импортируемые при помощи разнообразных протоколов удаленных файловых "
+"систем"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:549
+msgid "Read-only CD-ROM filesystems"
+msgstr "Файловые системы CD-ROM, доступные только для чтения"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:550
+msgid ""
+"Filesystems providing special-purpose interfaces -- for example, the `/proc` "
+"filesystem"
+msgstr ""
+"Файловые системы, предоставляющие специализированные услуги - к примеру, "
+"файловая система [.filename]#/proc#"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:553
+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 ""
+"Некоторые варианты 4.4BSD, такие, как FreeBSD, позволяют выполнять "
+"динамическую загрузку файловых систем при первом обращении к ним при помощи "
+"системного вызова _mount_. Интерфейс vnode описан в Разделе 6.5; вдобавок он "
+"поддерживает функции, описанные в Разделе 6.6; некоторые из файловых систем "
+"специального назначения описаны в Разделе 6.7."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:555
+#, no-wrap
+msgid "Filesystems"
+msgstr "Файловые системы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:560
+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:565
+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 ""
+"Компонент под названием _имя файла_ является строкой длиной до 255 символов. "
+"Эти имена хранятся в файле особого типа, который называется _каталогом_. "
+"Информация о файле в каталоге называется _записью каталога_ и включает, "
+"кроме имени файла, указатель на сам файл. Записи каталога могут ссылаться "
+"как на другие каталоги, так и на обычные файлы. Таким образом формируется "
+"иерархия каталогов и файлов, которая и называется файловой системой "
+"_filesystem_;"
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:566
+#, no-wrap
+msgid "A small filesystem"
+msgstr "Небольшая файловая система"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:569
+msgid "image:fig2.png[A small filesystem]"
+msgstr "image:fig2.png[Дерево небольшой файловой системы]"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:574
+msgid ""
+"a small one is shown in crossref:design-44bsd[fig-small-fs, A small "
+"filesystem]. 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 ""
+"Одна небольшая файловая система показана на crossref:design-44bsd[fig-small-"
+"fs, A small filesystem]. Каталоги могут содержать подкаталоги, и нет "
+"ограничений вложенности одного каталога в другой по глубине. Для соблюдения "
+"целостности файловой системы, ядро не позволяет процессу производить запись "
+"непосредственно в каталоги. Файловая система может хранить не только обычные "
+"файлы и каталоги, но также ссылки на другие объекты, такие, как устройства и "
+"сокеты."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:579
+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 ""
+"Файловая система образует дерево, начало которого находится в _корневом "
+"каталоге_, иногда называемому по имени _слэш_, которое соответствует символу "
+"одинарной наклонной черты (/). Корневой каталог содержит файлы; в нашем "
+"примере на Рисунке 2.2, он содержит [.filename]#vmunix#, копию выполнимого "
+"объектного файла ядра. В нем также расположены каталоги; в этом примере он "
+"содержит каталог [.filename]#usr#. Внутри каталога [.filename]#usr# "
+"располагается каталог [.filename]#bin#, который в основном содержит "
+"выполнимый объектный код программ, таких, как [.filename]#ls# и "
+"[.filename]#vi#."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:584
+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:590
+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 ""
+"Имя пути, которое не начинается со слэша, называется _относительным "
+"маршрутом_, и интерпретируется относительно _текущего рабочего каталога_ "
+"процесса. (Этот каталог кратко также называют _текущим каталогом_ или "
+"_рабочим каталогом_.) Текущий каталог сам по себе можно обозначить "
+"непосредственно по имени _dot_, что соответствует одной точке (`.`). Имя "
+"файла _dot-dot_ (`..`) обозначает родительский каталог текущего каталога. "
+"Корневой каталог является предком самому себе."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:594
+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 ""
+"Процесс может задать собственный корневой каталог при помощи системного "
+"вызова _chroot_, и установить текущий каталог системным вызовом _chdir_. "
+"Каждый процесс может в любой момент выполнить вызов _chdir_, но _chroot_ "
+"позволено выполнять только процессу с административными привилегиями. "
+"_Chroot_ обычно используется для ограничения доступа к системе."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:596
+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 ""
+"Взяв файловую систему, изображенную на Рисунке 2.2, и полагая, что процесс "
+"имеет в качестве корневого каталога корневой каталог файловой системы, и в "
+"качестве текущего каталога [.filename]#/usr#, он может обратиться к файлу "
+"[.filename]#vi# либо от корня по абсолютному имени [.filename]#/usr/bin/vi#, "
+"либо из текущего каталога с относительным именем [.filename]#bin/vi#."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:602
+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 ""
+"Системные утилиты и базы данных располагаются в нескольких всем известных "
+"каталогах. Частью предопределенной иерархии является каталог, содержащий "
+"_домашний каталог_ для каждого пользователя - например, [.filename]#/usr/"
+"staff/mckusick# и [.filename]#/usr/staff/karels# на Рисунке 2.2. Когда "
+"пользователи регистрируются в системе, то рабочий каталог их командного "
+"процессора устанавливается в домашний каталог. В своих домашних каталогах "
+"пользователи могут создавать каталоги так же легко, как и обычные файлы. "
+"Таким образом, пользователь может строить иерархии каталогов произвольной "
+"сложности."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:609
+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:614
+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 ""
+"Системный вызов _link_ в качестве параметров принимает имя существующего "
+"файла и новое имя, которое будет присвоено файлу. После успешного выполнения "
+"вызова _link_, файл может быть доступен по любому из имен. Имя файла может "
+"быть удалено при помощи системного вызова _unlink_. Когда удаляется "
+"последнее имя для файла (и последний процесс, который держал файл открытым, "
+"закрыл его), удаляется и сам файл."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:621
+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 ""
+"Файлы организованы иерархически в _каталоги_. Каталог является типом файла, "
+"но, в отличие от обычных файлов, каталог имеет структуру, определяемую "
+"системой. Процесс может читать каталог, как будто это обычный файл, но "
+"только ядру разрешено изменять каталог. Каталоги создаются системным вызовом "
+"_mkdir_ и удаляются системным вызовом _rmdir_. До 4.2BSD системные вызовы "
+"_mkdir_ и _rmdir_ были реализованы как последовательность системных вызовов "
+"_link_ и _unlink_. Имелось три причины для добавления системных вызовов "
+"специально для создания и удаления каталогов:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:624
+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:625
+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:626
+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 ""
+"При реализации поддержки не-UNIX файловых систем, таких, как файловая "
+"система MS-DOS, на другом разделе диска, может оказаться, что эта файловая "
+"система не поддерживает ссылочных операций. Хотя другие файловые системы "
+"могут поддерживать концепцию каталогов, скорее всего, они не будут создавать "
+"и удалять каталоги со ссылками, как это делается в файловой системе UNIX. "
+"Соответственно они могут создавать и и удалять каталоги только при наличии "
+"явных запросов на удаление или создание каталогов."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:633
+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 ""
+"Системный вызов _chown_ устанавливает владельца и группу файла, а _chmod_ "
+"изменяет атрибуты защиты. Вызов _stat_, примененный к имени файла, может "
+"использоваться для чтения этих свойств файла. Системные вызовы _fchown_, "
+"_fchmod_ и _fstat_ применяются с дескрипторами, а не с именами файлов, для "
+"выполнения того же самого набора операций. Системный вызов _rename_ может "
+"использоваться для присвоения файлу нового имени в файловой системе с "
+"заменой старого имени файла. Как и операции по созданию и удалению "
+"каталогов, системный вызов _rename_ был добавлен в 4.2BSD для придания "
+"атомарности изменению имен в локальной файловой системе. Позже он оправдал "
+"свою исключительную полезность для экспортирования операций по "
+"переименованию в сторонних файловых системах и по сети."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:638
+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 ""
+"Системный вызов _truncate_ был добавлен в 4.2BSD для того, чтобы файлы могли "
+"обрезаться по указанному смещению. Вызов был добавлен первоначально для "
+"поддержки библиотеки времени выполнения языка Fortran, в котором применялось "
+"понятие конца файла с произвольным доступом, который мог устанавливаться в "
+"любую позицию, в которой был последний раз доступ к файлу. Без системного "
+"вызова _truncate_ единственным способом обрезать файл было копирование "
+"нужной части в новый файл, удаление старого и переименование копии в "
+"первоначальное имя. Библиотека могла теоретически отказываться работать на "
+"заполненной файловой системе, к тому же такой алгоритм оказывался медленным."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:641
+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:645
+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:648
+msgid "The user who owns the file"
+msgstr "Пользователя, который является владельцем файла"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:649
+msgid "The group that owns the file"
+msgstr "Группы, которая приписана файлу"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:650
+msgid "Everyone else"
+msgstr "Всех остальных"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:652
+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:662
+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 ""
+"Файлы создаются с нулевым размером, который может увеличиться при выполнении "
+"операций записи. Пока файл открыт, система отслеживает указатель на файл, "
+"соответствующий текущему положению в файле, связанном с дескриптором. Этот "
+"указатель может перемешаться по файлу в произвольном порядке. Процессы, "
+"использующие один и тот же дескриптор файла посредством системных вызовов "
+"_fork_ или _dup_, используют одновременно один и тот же указатель текущей "
+"позиции. Дескрипторы, созданные различными системными вызовами _open_, имеют "
+"различные указатели текущей позиции. В файлах могут присутствовать _дыры_. "
+"Дыры представляют собой пустые пространства в теле файла, в которые никаких "
+"данных не записывалось. Процесс может создать такие дыры, перемещая "
+"указатель за текущий конец файла и производя запись. При чтении дыры "
+"интерпретируются системой как заполненные нулевыми байтами."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:668
+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 ""
+"Ранние версии UNIX имели ограничение в 14 символов на имя файла. Это "
+"ограничение зачастую вызывало проблемы. Например, кроме естественного "
+"желания пользователей давать файлам длинные описательные имена, "
+"распространенным способом формировать имена файлов является использование "
+"формата [.filename]#basename.extension#, где расширение (указывающее на тип "
+"файла, скажем, `.c` для исходного года на языке C или `.o` для "
+"промежуточного двоичного объекта) имеет длину от одного до трех символов, "
+"оставляя от 10 до 12 символов на имя файла. Системы управления исходным "
+"кодом и редакторы обычно используют дополнительно два символа для своих "
+"целей, для префикса или суффикса имени файла, при этом остается от восьми до "
+"10 символов. В качестве имени файла легко использовать от 10 до 12 символов "
+"одного английского слова (например, `multiplexer`)."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:673
+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 ""
+"Можно смириться с этими ограничениями, но это непоследовательно и даже "
+"опасно, потому что другие системы UNIX могут работать со строками, "
+"превышающими этот лимит, при создании файлов, но затем имя будет _обрезано_. "
+"Исходный файл с именем [.filename]#multiplexer.c#, содержащий исходный код "
+"на языке C, (уже 13 символов) может иметь соответствующий файл из системы "
+"управления исходным кодом с префиксом `s.`, при этом получается имя файла "
+"[.filename]#s.multiplexer#, которое не будет отличаться от файла системы "
+"управления исходным кодом для файла [.filename]#multiplexer.ms#, содержащего "
+"исходный код `troff` для документации программы на языке C. Содержимое двух "
+"оригинальных файлов может оказаться перепутанным без каких-либо "
+"предупреждений от системы управления исходным кодом. При тщательном "
+"кодировании эту проблему можно обнаружить, но поддержка длинных имен файлов, "
+"впервые появившаяся в 4.2BSD, практически полностью ликвидировала эту "
+"проблему."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:675
+#, no-wrap
+msgid "Filestores"
+msgstr "Размещение файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:680
+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 ""
+"Операции, определенные для локальных файловых систем, делятся на две "
+"категории. Общими для всех локальных систем являются иерархический принцип "
+"именования, блокировка, квоты, управление атрибутами и защита. Эти механизмы "
+"не зависят от того, как хранятся данные. В 4.4BSD имеется единая реализация "
+"для предоставления этих сервисов."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:683
+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 ""
+"Другой частью локальной файловой системы является организация и управление "
+"данными на носителях информации. Размещение содержимого файлов на носителях "
+"является вопросом хранилища файлов. В 4.4BSD поддерживает три различных типа "
+"хранилищ файлов:"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:685
+msgid "The traditional Berkeley Fast Filesystem"
+msgstr "Традиционная файловая система Berkeley Fast Filesystem"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:687
+msgid ""
+"The log-structured filesystem, based on the Sprite operating-system design "
+"crossref:design-44bsd[biblio-rosenblum, [Rosenblum & Ousterhout, 1992]]"
+msgstr ""
+"Журналируемая файловая система, основанная на архитектуре операционной "
+"системы Sprite crossref:design-44bsd[biblio-rosenblum, [Rosenblum & "
+"Ousterhout, 1992]]"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:688
+msgid "A memory-based filesystem"
+msgstr "Файловая система в памяти"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:690
+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:695
+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 ""
+"В файловой системе Fast Filesystem организует данные в группы дорожек. "
+"Файлы, к которым, скорее всего, будет осуществляться доступ одновременно (на "
+"основе их расположения в иерархии файловой системы), хранятся на одной и той "
+"же группе дорожек. Файлы, к которым не предполагается одновременный доступ, "
+"перемещаются на разные группы дорожек. Таким образом, файлы, записываемые в "
+"одно и то же время, могут располагаться в абсолютно разных областях диска."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:700
+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:704
+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 ""
+"Файловая система в памяти предназначена для хранения данных в виртуальной "
+"памяти. Она используется для файловых систем, в которых должны храниться "
+"временные данные с обеспечением быстрого доступа к ним, к примеру, "
+"[.filename]#/tmp#. При организации файловой системы в памяти преследуется "
+"цель организовать максимально компактное хранение данных для минимизации "
+"использования ресурсов виртуальной памяти."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:706
+#, no-wrap
+msgid "Network Filesystem"
+msgstr "Сетевая файловая система"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:712
+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:718
+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:723
+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:729
+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 crossref:design-44bsd[biblio-macklem, [Macklem, 1994]]. The "
+"NFS protocol is described in Chapter 9."
+msgstr ""
+"Хотя за эти годы было разработано множество протоколов работы с удаленными "
+"файловыми системами, самой распространенной на системах UNIX является "
+"сетевая файловая система Network Filesystem (NFS), которая была "
+"спроектирована и реализована в Sun Microsystems. Ядро 4.4BSD поддерживает "
+"протокол NFS, хотя его реализация была выполнена независимо от спецификаций "
+"протокола crossref:design-44bsd[biblio-macklem, [Macklem, 1994]]. Протокол "
+"NFS описан в Главе 9."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:731
+#, no-wrap
+msgid "Terminals"
+msgstr "Терминалы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:736
+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:740
+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:744
+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 ""
+"Экранные редакторы и программы, которые взаимодействуют с другими машинами, "
+"обычно работают в _неканоническом режиме_ (часто называемом _raw-режимом_ "
+"или _посимвольным режимом_). В этом режиме входной поток передается в "
+"читающий процесс сразу же и без всякой обработки. Выключается вся обработка "
+"специальных символов, не выполняется удаление символов и другое "
+"редактирование строк, все символы передаются программе, которая выполняет "
+"чтение с терминала."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:747
+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:749
+msgid ""
+"On output, the terminal handler provides simple formatting services, "
+"including"
+msgstr ""
+"Что касается выходного потока, то терминальный обработчик предоставляет "
+"простые службы по его форматированию, включая"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:751
+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:752
+msgid "Inserting delays after certain standard control characters"
+msgstr "Выдерживание пауз после некоторых стандартных управляющих символов"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:753
+msgid "Expanding tabs"
+msgstr "Замещение символов табуляции"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:754
+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 ""
+"Вывод неграфических символов ASCII в виде двухсимвольных последовательностей "
+"вида `^C` (другими словами, вывод знака вставки, за которым следует символ, "
+"который находится по смещению от символа `@`, соответствующему значению "
+"этого символа)."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:756
+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:758
+#, no-wrap
+msgid "Interprocess Communication"
+msgstr "Межпроцессное взаимодействие"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:762
+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 ""
+"Межпроцессные коммуникации в 4.4BSD организованы в _коммуникационные "
+"домены_. К поддерживаемым на данный момент доменам относятся _локальный "
+"домен_ для взаимодействия между процессами, выполняющимися на одной и той же "
+"машине; _межсетевой домен_ для связи между процессами посредством набора "
+"протоколов TCP/IP (возможно, в сети Интернет); семейство протоколов ISO/OSI "
+"для взаимодействия между сайтами, которым нужна именно такая связь, и _домен "
+"XNS_ для коммуникаций между процессами при помощи протоколов XEROX Network "
+"Systems (XNS)."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:766
+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 ""
+"В пределах домена соединения имеют место между конечными точками связи, "
+"также называемыми _сокетами_. Как отмечено в Разделе 2.6, системный вызов "
+"_socket_ создает сокет и возвращает дескриптор; другие системные вызовы IPC "
+"описаны в Главе 11. Каждый сокет имеет тип, определяющий его "
+"коммуникационные свойства; к ним относятся такие характеристики, как "
+"надежность, сохранение последовательности передаваемой информации и "
+"предупреждение дублирования сообщений."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:770
+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:774
+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:779
+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:785
+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 ""
+"До 4.2BSD сетевые реализации в UNIX обычно работали через интерфейсы "
+"символьных устройств. Одной из целей создания интерфейса сокетов было "
+"обеспечение работы простеньким программам без изменения на потоковых "
+"соединениях. Такие программы могут работать, если только не меняются "
+"системные вызовы _read_ и _write_. Соответственно, оригинальные интерфейсы "
+"не трогались, но были исправлены для работы с потоковыми сокетами. Для более "
+"сложных сокетов, таких, как те, что используются для посылки датаграмм и в "
+"которых при каждом вызове _send_ должен указываться адрес назначения, был "
+"добавлен новый интерфейс."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:790
+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 ""
+"Другим достоинством является то, что новый интерфейс легко переносим. Вскоре "
+"после тестового релиза, полученного из Беркли, интерфейс сокетов был "
+"перенесен в System III поставщиком UNIX (хотя AT&T не поддерживала интерфейс "
+"сокетов до выхода System V Release 4, решив использовать вместо него "
+"механизм потоков из Eighth Edition). Интерфейс сокетов был также перенесен "
+"для работы на многих адаптерах Ethernet поставщиками, такими, как Excelan и "
+"Interlan, который продавался на рынке PC, где компьютеры были слишком "
+"слабыми, чтобы обрабатывать сетевой код на основном процессоре. Сравнительно "
+"недавно интерфейс сокетов был использован в качестве основы для сетевого "
+"интерфейса Winsock от Microsoft для Windows."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:792
+#, no-wrap
+msgid "Network Communication"
+msgstr "Сетевые коммуникации"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:797
+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 ""
+"Некоторые из коммуникационных доменов, поддерживаемых IPC-механизмом "
+"_сокетов_ дают доступ к сетевым протоколам. Эти протоколы реализованы как "
+"отдельный программный слой, логически находящийся ниже программного "
+"обеспечения сокетов в ядре. Ядро предоставляет много вспомогательных "
+"сервисов, таких, как управление буферами, маршрутизация сообщений, "
+"стандартные интерфейсы к протоколам и интерфейсы к драйверам сетевых "
+"интерфейсов для использования в различных сетевых протоколах."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:806
+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 ""
+"В те времена, когда разрабатывалась 4.2BSD, использовалось или "
+"разрабатывалось много сетевых протоколов, каждый со своими сильными и "
+"слабыми сторонами. Не существует единственного подходящего на все случаи "
+"жизни протокола или набора протоколов. Поддерживая много протоколов, 4.2BSD "
+"может обеспечить взаимодействие и обмен ресурсами между различными машинами, "
+"которые были доступны в Беркли. Поддержка многих протоколов необходим также "
+"для изменений в будущем. Современные протоколы, разработанные для Ethernet "
+"со скоростями работы 10 и 100 Mbit в секунду, вряд ли будут соответствовать "
+"для завтрашних оптических сетей пропускной способностью 1 и 10 Gbit в "
+"секунду. Поэтому уровень сетевых коммуникаций разработан с учетом поддержки "
+"многих протоколов. Новые протоколы добавляются к ядру, не затрагивая "
+"поддержку старых протоколов. Старые приложения могут продолжать работать с "
+"использованием старых протоколов в той же самой физической сети, что "
+"использовалась для новых приложений, работающих с новым сетевым протоколом."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:808
+#, no-wrap
+msgid "Network Implementation"
+msgstr "Сетевая реализация"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:815
+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 ""
+"Первым набором протоколов, реализованным в 4.2BSD, был Transmission Control "
+"Protocol/Internet Protocol (TCP/IP) от DARPA. CSRG выбрала TCP/IP в качестве "
+"первого для включения в набор протоколов IPC, потому что реализация на "
+"основе 4.1 была всем доступна из проекта, спонсируемого DARPA, в Bolt, "
+"Beranek и Newman (BBN). Это был выбор, повлиявший на многое: Реализация в "
+"4.2BSD стала основной причиной очень широкой распространенности и "
+"использования этого набора протоколов. Более поздние усовершенствования "
+"производительности и возможностей TCP/IP были также широко приняты. "
+"Реализация TCP/IP подробно описана в Главе 13."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:818
+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 ""
+"В релизе 4.3BSD появился набор протоколов Xerox Network Systems (XNS), "
+"частично основанный на работе, выполненной в Университете Мэрилэнда и "
+"Университете Корнелла. Этот набор был нужен для объединения отдельных машин, "
+"которые не могли работать с протоколом TCP/IP."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:824
+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 ""
+"В релиз 4.4BSD был добавлен набор протоколов ISO из-за его все большей "
+"распространенности как внутри, так и во вне США. По причине использования в "
+"протоколах ISO несколько другого подхода к сети, в интерфейсе сокетов "
+"потребовалось сделать некоторые небольшие изменения для реализации этого "
+"подхода. Изменения были сделаны так, что они были незаметны для клиентов "
+"других существующих протоколов. Протоколы ISO требуют также большой работы с "
+"двухуровневыми таблицами маршрутизации, имеющимися в 4.3BSD. К значительно "
+"расширенным возможностям по маршрутизации в 4.4BSD относятся раздельные "
+"уровни маршрутизации с адресами переменной длины и сетевыми масками."
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:826
+#, no-wrap
+msgid "System Operation"
+msgstr "Работа системы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:834
+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 ""
+"Механизмы начальной загрузки используются для запуска системы. Сначала ядро "
+"4.4BSD должно быть загружено в основную память процессора. После загрузки "
+"оно должно пройти через фазу инициализации для установки аппаратуры в "
+"известное состояние. Затем ядро должно выполнить автоконфигурацию, в "
+"процессе которой распознаются и настраиваются периферийные устройства, "
+"подключенные к процессору. Система начинает работу в однопользовательском "
+"режиме, пока начальный скрипт выполняет проверку дисков и включает подсчет "
+"статистики и использования квот. Наконец, начальный скрипт запускает "
+"общесистемные службы и переводит систему в полностью многопользовательский "
+"режим."
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:838
+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:843
+#, no-wrap
+msgid "References"
+msgstr "Список литературы"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:846
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:848
+msgid ""
+"[[biblio-cheriton]] Cheriton, 1988 The V Distributed System D. R.Cheriton "
+"314-333 Comm ACM, 31, 3 March 1988"
+msgstr ""
+"[[biblio-cheriton]] Cheriton, 1988 The V Distributed System D. R.Cheriton "
+"314-333 Comm ACM, 31, 3 March 1988"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:850
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:852
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:854
+msgid ""
+"[[biblio-kernighan]] Kernighan & Pike, 1984 The UNIX Programming Environment "
+"B. W.Kernighan R.Pike Prentice-Hall Englewood Cliffs NJ 1984"
+msgstr ""
+"[[biblio-kernighan]] Kernighan & Pike, 1984 The UNIX Programming Environment "
+"B. W.Kernighan R.Pike Prentice-Hall Englewood Cliffs NJ 1984"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:856
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:858
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:860
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:862
+msgid ""
+"[[biblio-ritchie]] Ritchie, 1988 Early Kernel Design private communication "
+"D. M.Ritchie March 1988"
+msgstr ""
+"[[biblio-ritchie]] Ritchie, 1988 Early Kernel Design private communication "
+"D. M.Ritchie March 1988"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:864
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:866
+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 ""
+"[[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"
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:867
+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 ""
+"[[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"
diff --git a/documentation/content/ru/books/dev-model/_index.adoc b/documentation/content/ru/books/dev-model/_index.adoc
new file mode 100644
index 0000000000..a23147d91c
--- /dev/null
+++ b/documentation/content/ru/books/dev-model/_index.adoc
@@ -0,0 +1,903 @@
+---
+authors:
+ -
+ author: 'Niklas Saers'
+bookOrder: 45
+copyright: '2002-2005 Niklas Saers'
+description: 'Формальное исследование организации проекта FreeBSD'
+layout: single
+tags: ["model", "project model", "FreeBSD"]
+title: 'Проектная модель для проекта FreeBSD'
+trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
+---
+
+////
+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.
+////
+
+= Проектная модель для проекта FreeBSD
+:doctype: book
+:toc: macro
+:toclevels: 2
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/dev-model/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../images/{images-path}
+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[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+'''
+
+toc::[]
+
+[[foreword]]
+[.abstract-title]
+Предисловие
+
+До настоящего момента проект FreeBSD выпустил ряд описанных методик для выполнения различных частей работы. Однако, из-за растущего числа участников проекта, необходима модель проекта, обобщающая его структуру. footnote:[Это согласуется с законом Брукса, согласно которому добавление нового человека в задерживающийся проект сделает его ещё более задержанным, поскольку увеличит потребность в коммуникации. Модель проекта — это инструмент для снижения потребности в коммуникации.] Данная статья предоставляет такую модель проекта и передаётся в проект документации FreeBSD, где она может развиваться вместе с проектом, чтобы в любой момент времени отражать способ его работы. Она основана на [crossref:dev-model[диссертации, Saers,2003]].
+
+Я хотел бы поблагодарить следующих людей за то, что они нашли время объяснить мне непонятные моменты и проверить документ.
+
+* Andrey A. Chernov mailto:ache@freebsd.org[ache@freebsd.org]
+* Bruce A. Mah mailto:bmah@freebsd.org[bmah@freebsd.org]
+* Dag-Erling Smørgrav mailto:des@freebsd.org[des@freebsd.org]
+* Giorgos Keramidas mailto:keramida@freebsd.org[keramida@freebsd.org]
+* Ingvil Hovig mailto:ingvil.hovig@skatteetaten.no[ingvil.hovig@skatteetaten.no]
+* Jesper Holck mailto:jeh.inf@cbs.dk[jeh.inf@cbs.dk]
+* John Baldwin mailto:jhb@freebsd.org[jhb@freebsd.org]
+* John Polstra mailto:jdp@freebsd.org[jdp@freebsd.org]
+* Kirk McKusick mailto:mckusick@freebsd.org[mckusick@freebsd.org]
+* Mark Linimon mailto:linimon@freebsd.org[linimon@freebsd.org]
+* Marleen Devos
+* Niels Jørgenssen mailto:nielsj@ruc.dk[nielsj@ruc.dk]
+* Nik Clayton mailto:nik@freebsd.org[nik@freebsd.org]
+* Poul-Henning Kamp mailto:phk@freebsd.org[phk@freebsd.org]
+* Simon L. Nielsen mailto:simon@freebsd.org[simon@freebsd.org]
+
+[[overview]]
+== Обзор
+Модель проекта — это способ снижения накладных расходов на коммуникации в проекте. Как показано в [crossref:dev-model[brooks, Brooks, 1995]], увеличение числа участников проекта приводит к экспоненциальному росту коммуникаций в проекте. За последние годы FreeBSD значительно увеличил как количество активных пользователей, так и коммиттеров, что соответственно привело к росту коммуникаций. Данная модель проекта поможет снизить эти накладные расходы за счёт предоставления актуального описания проекта.
+
+Во время выборов в Core в 2002 году Марк Мюррей заявил: «Я против длинного свода правил, так как это удовлетворяет склонности к юриспруденции и противоречит техноцентричности, в которой проект так нуждается.» [crossref:dev-model[bsd-election2002, FreeBSD, 2002B]]. Эта модель проекта не предназначена для того, чтобы оправдывать создание ограничений для разработчиков, а служит инструментом для облегчения координации. Она призвана описывать проект, давая обзор того, как выполняются различные процессы. Это введение в то, как работает проект FreeBSD.
+
+Модель проекта FreeBSD будет описана по состоянию на 1 июля 2004 года. Она основана на работе Нильса Йоргенсена [crossref:dev-model[jorgensen2001, Jørгенсен, 2001]], официальных документах FreeBSD, обсуждениях в списках рассылки FreeBSD и интервью с разработчиками.
+
+После определения используемых терминов в этом документе будет описана организационная структура (включая описания ролей и линии коммуникации), рассмотрена модель методологии, а после представления инструментов, используемых для контроля процессов, будут описаны определенные процессы. В заключение будут представлены основные подпроекты проекта FreeBSD.
+
+[crossref:dev-model[freebsd-developer-handbook, FreeBSD, 2002A]] Разделы 1.2 и 1.3 описывают видение и архитектурные принципы проекта. Видение сформулировано как: "Создать наилучший пакет операционной системы, подобной UNIX®, с должным уважением к оригинальной идеологии программных инструментов, а также к удобству использования, производительности и стабильности." Архитектурные принципы помогают определить, находится ли проблема, которую кто-то хочет решить, в рамках проекта
+
+[[definitions]]
+== Определения
+
+[[ref-activity]]
+=== Активность
+
+"Активность" — это элемент работы, выполняемый в ходе проекта [crossref:dev-model[ref-pmbok, PMI, 2000]]. У неё есть результат, который ведёт к достижению цели. Такой результат может быть либо входом для другой активности, либо частью поставки процесса.
+
+[[def-process]]
+=== Процесс
+
+Процесс — это ряд действий, ведущих к определенному результату. Процесс может состоять из одного или нескольких подпроцессов. Примером процесса является проектирование программного обеспечения.
+
+[[ref-hat]]
+=== Роль (hat)
+
+"Hat" (шляпа) является синонимом роли. Роль имеет определенные обязанности в процессе и ответственность за результат процесса. Роль выполняет действия. Четко определено, по каким вопросам участники проекта и люди вне проекта должны обращаться к ответственному, выполняющему эту роль.
+
+[[ref-outcome]]
+=== Результат
+
+«Результат» — это конечный продукт процесса. Это синоним понятия «поставляемый результат», который определяется как «любой измеримый, осязаемый, проверяемый результат, итог или элемент, который должен быть произведён для завершения проекта или его части. Часто используется в более узком смысле в отношении внешнего поставляемого результата, который подлежит утверждению спонсором проекта или заказчиком» согласно [crossref:dev-model[ref-pmbok, PMI, 2000]]. Примерами результатов являются программное обеспечение, принятое решение или написанный отчёт.
+
+[[ref-freebsd]]
+=== FreeBSD
+
+Говоря "FreeBSD", мы подразумеваем UNIX-подобную операционную систему FreeBSD, основанную на BSD, тогда как говоря "Проект FreeBSD", мы подразумеваем организацию проекта.
+
+[[model-orgstruct]]
+== Организационная структура
+
+Хотя никто не является владельцем FreeBSD, организация FreeBSD разделена на ядро, коммиттеров и участников и является частью сообщества FreeBSD, которое существует вокруг неё.
+
+Структура проекта FreeBSD (в порядке убывания полномочий)
+
+[.informaltable]
+[cols="1,1", options="header"]
+|===
+| Группа
+| Количество людей
+
+|Основные участники
+|9
+
+|Коммиттеры
+|318
+
+|Участники
+|~3000
+|===
+
+Количество коммиттеров было определено путем анализа журналов CVS с 1 января 2004 года по 31 декабря 2004 года, а список участников — путем просмотра перечня внесенных изменений и отчетов о проблемах.
+
+Основной ресурс сообщества FreeBSD — это его разработчики: коммиттеры и контрибьюторы. Именно их вклад позволяет проекту развиваться. Обычные разработчики называются участниками (контрибьюторами). По состоянию на 1 января 2003 года в проекте насчитывается около 5500 контрибьюторов.
+
+Коммиттеры — это разработчики, обладающие привилегией вносить изменения. Обычно это наиболее активные разработчики, которые готовы тратить своё время не только на интеграцию собственного кода, но и на интеграцию кода, предоставленного разработчиками без такой привилегии. Они также выбирают основную команду и имеют доступ к закрытым обсуждениям.
+
+Проект можно разделить на четыре отдельные части, и большинство разработчиков сосредоточат своё участие на одной из частей FreeBSD. Эти четыре части — разработка ядра, разработка пользовательского пространства, порты и документация. Под базовой системой подразумеваются как ядро, так и пользовательское пространство.
+
+Это разделение изменяет нашу таблицу следующим образом:
+
+Структура проекта FreeBSD с участниками, имеющими права на запись, по категориям
+
+[.informaltable]
+[cols="1,1,1", options="header"]
+|===
+| Группа
+| Категория
+| Количество людей
+
+|Основные участники
+|
+|9
+
+|Коммиттеры
+|Базовый
+|164
+
+|
+|Docs
+|45
+
+|
+|Порты
+|166
+
+|
+|Total
+|374
+
+|Участники
+|
+|~3000
+|===
+
+Количество коммиттеров по областям было определено путем анализа журналов CVS с 1 января 2004 года по 31 декабря 2004 года. Обратите внимание, что многие коммиттеры работают в нескольких областях, поэтому общее число больше реального количества коммиттеров. Общее количество активных уникальных коммиттеров на июнь 2022 года составляло 317.
+
+Коммиттеры делятся на три группы: коммиттеры, занимающиеся только одной областью проекта (например, файловыми системами), коммиттеры, участвующие только в одном подпроекте, и коммиттеры, вносящие изменения в разные части кода, включая подпроекты. Поскольку некоторые коммиттеры работают над разными частями, общее количество в разделе коммиттеров таблицы выше, чем в предыдущей таблице.
+
+Ядро является основным строительным блоком FreeBSD. Хотя пользовательские приложения защищены от сбоев в других пользовательских приложениях, вся система уязвима от ошибок в ядре. Это, в сочетании с огромным количеством зависимостей в ядре и тем, что нелегко увидеть все последствия изменения ядра, требует от разработчиков относительно полного понимания ядра. Множественные усилия по разработке в ядре также требуют более тесной координации, чем пользовательские приложения.
+
+Основные утилиты, известные как пользовательское окружение (userland), предоставляют интерфейс, который определяет FreeBSD, включая пользовательский интерфейс, общие библиотеки и внешние интерфейсы для подключения клиентов. В настоящее время 162 человека участвуют в разработке и поддержке пользовательского окружения, многие из которых являются сопровождающими (maintainers) для своей части кода. Вопросы сопровождения будут рассмотрены в разделе crossref:dev-model[role-maintainer,Сопровождение].
+
+Документация обрабатывается crossref:dev-model[sub-project-documentation, Проектом документации FreeBSD] и включает все документы, связанные с проектом FreeBSD, включая веб-страницы. В течение 2004 года 101 человек внесли изменения в Проект документации FreeBSD.
+
+Порты — это коллекция метаданных, необходимых для корректной сборки программных пакетов в FreeBSD. Например, порт для веб-браузера Mozilla содержит информацию о том, откуда загружать исходный код, какие патчи применять и как, а также как пакет должен быть установлен в системе. Это позволяет автоматизированным инструментам загружать, собирать и устанавливать пакеты. На момент написания доступно более 12600 портов footnote:[Статистика получена подсчётом количества записей в файле, загруженном portsdb на 1 апреля 2005 года. portsdb является частью порта sysutils/portupgrade.], начиная от веб-серверов и игр до языков программирования и большинства типов приложений, используемых на современных компьютерах. Порты подробно рассматриваются в разделе crossref:dev-model[sub-project-ports, Подпроект Ports].
+
+[[methodology-model]]
+== Методологическая модель
+
+[[development-model]]
+=== Модель разработки
+
+Не существует определенной модели того, как люди пишут код в FreeBSD. Однако Нильс Йоргенссен предложил модель того, как написанный код интегрируется в проект.
+
+Модель Йоргенссена для интеграции изменений
+
+[.informaltable]
+[cols="1,1,1", options="header"]
+|===
+| Этап
+| Следующий, если успешно
+| Следующий, если неудачно
+
+|программирование
+|рецензирование
+|
+
+|рецензирование
+|предварительная проверка перед коммитом
+|программирование
+
+|предварительная проверка перед коммитом
+|релиз для разработки
+|программирование
+
+|релиз для разработки
+|параллельная отладка
+|программирование
+
+|параллельная отладка
+|релиз для производства
+|программирование
+
+|релиз для производства
+|
+|программирование
+|===
+
+"Релиз для разработки" — это ветка FreeBSD-CURRENT ("-CURRENT"), а "релиз для производства" — ветка FreeBSD-STABLE ("-STABLE") [crossref:dev-model[jorgensen2001, Jørgensen, 2001]].
+
+Это модель для одного изменения, которая показывает, что после написания кода разработчики ищут рецензирование сообщества и пытаются интегрировать это изменение в свои собственные системы. После интеграции изменения в версию разработки, называемую FreeBSD-CURRENT, оно тестируется многими пользователями и разработчиками сообщества FreeBSD. После достаточного тестирования оно объединяется с производственной версией, называемой FreeBSD-STABLE. Если каждая стадия не завершена успешно, разработчику необходимо вернуться, внести изменения в код и перезапустить процесс. Интеграция изменения в -CURRENT или -STABLE называется выполнением коммита.
+
+Йоргенсен обнаружил, что большинство разработчиков FreeBSD работают индивидуально, то есть эта модель используется параллельно многими разработчиками в различных текущих процессах разработки. Разработчик также может работать над несколькими изменениями одновременно, поэтому, ожидая рецензирования или тестирования одного или нескольких своих изменений, он может писать другое изменение.
+
+Поскольку каждый коммит представляет собой инкрементальное изменение, это модель с очень высокой степенью инкрементальности. Коммиты происходят настолько часто, что за один год footnote:[Для получения этого числа был исследован период с 1 января 2004 года по 31 декабря 2004 года.], было сделано 85427 коммитов, что составляет в среднем 233 коммита в день.
+
+В рамках "программирования" в модели Йоргенсена, каждый программист имеет свой собственный стиль работы и следует своим собственным моделям разработки. Этот этап вполне мог бы называться "разработкой", так как он включает сбор и анализ требований, системное и детальное проектирование, реализацию и проверку. Однако, единственным результатом этих подэтапов являются исходный код или документация системы.
+
+С точки зрения пошаговой модели (такой как каскадная модель), остальные этапы можно рассматривать как дальнейшую проверку и интеграцию системы. Эта интеграция системы также важна для определения того, будет ли изменение принято сообществом. До момента фиксации кода разработчик волен выбирать, насколько активно он будет обсуждать его с остальными участниками проекта. Чтобы -CURRENT мог выполнять роль буфера (позволяя откатывать идеи, которые оказались с невыявленными недостатками), минимальный срок, в течение которого изменения должны оставаться в -CURRENT перед слиянием в -STABLE, составляет 3 дня. Такое слияние называется MFC (Merge From Current).
+
+Важно обратить внимание на слово "изменение". Большинство коммитов не содержат радикально новых функций, а представляют собой обновления для поддержки.
+
+Единственными исключениями из этой модели являются исправления безопасности и изменения в функциях, объявленных устаревшими в ветке -CURRENT. В этих случаях изменения могут быть внесены напрямую в ветку -STABLE.
+
+В дополнение к множеству людей, работающих над проектом, существует множество связанных проектов в рамках FreeBSD. Это могут быть проекты, разрабатывающие совершенно новые функции, подпроекты или проекты, результаты которых интегрируются в FreeBSD footnote:[Например, разработка стека Bluetooth начиналась как подпроект, пока не была признана достаточно стабильной для включения в ветку -CURRENT. Теперь это часть основной системы FreeBSD.]. Эти проекты вписываются в FreeBSD так же, как и обычные разработки: они создают код, который интегрируется с проектом FreeBSD. Однако некоторые из них (например, Ports и Documentation) имеют привилегию применяться к обеим веткам или коммитить напрямую как в -CURRENT, так и в -STABLE.
+
+Не существует стандартов по выполнению проектирования, также как и централизованного репозитория для хранения проектов. Основной дизайн взят из 4.4BSD. footnote:[По словам Кирка Маккузика, после 20 лет разработки операционных систем UNIX, интерфейсы в основном уже определены. Поэтому нет необходимости в большом количестве проектирования. Однако новые применения системы и новое оборудование приводят к тому, что некоторые реализации становятся более выгодными по сравнению с ранее предпочитаемыми. Одним из примеров является появление веб-браузинга, который превратил обычное TCP/IP-соединение в короткие всплески данных, а не в устойчивый поток за более длительный период времени.] Поскольку проектирование является частью этапа "Программирование" в модели Йоргенсена, каждый разработчик или подпроект сам решает, как это должно выполняться. Даже если проектирование должно храниться в централизованном репозитории, результаты этапов проектирования будут иметь ограниченную полезность, так как различия в методологиях сделают их плохо совместимыми, если вообще совместимыми. Для общего проектирования проекта, проект полагается на подпроекты, которые договариваются о совместимых интерфейсах между собой, а не на диктат интерфейсов.
+
+[[release-branches]]
+=== Ветви релизов
+
+Версии FreeBSD лучше всего иллюстрируются деревом с множеством ветвей, где каждая основная ветвь представляет основную версию. Минорные версии представлены ветвями основных ветвей.
+
+В следующем дереве релизов стрелки, следующие друг за другом в определенном направлении, представляют ветку. Прямоугольники со сплошными линиями и ромбы обозначают официальные релизы. Прямоугольники с пунктирными линиями представляют ветку разработки на тот момент. Ветки безопасности обозначены овалами. Ромбы отличаются от прямоугольников тем, что они представляют развилку, то есть место, где ветка разделяется на две ветки, одна из которых становится подветкой. Например, на 4.0-RELEASE ветка 4.0-CURRENT разделилась на 4-STABLE и 5.0-CURRENT. На 4.5-RELEASE ветка разветвилась на ветку безопасности под названием RELENG_4_5.
+
+.Дерево релизов FreeBSD
+image::branches.png["Обратитесь к таблице ниже для удобной версии для экранных дикторов."]
+
+[.informaltable]
+[cols="1,1,1", options="header"]
+|===
+| Основные выпуски
+| Форкнут из
+| Следующие минорные выпуски
+
+|...
+|
+|
+
+|3.0 Current (ветка разработки)
+|
+|Ветки Releng 3: выпуски с 3.0 Release по 3.5 Release, ведущие к выпуску 3.5.1 Release и последующей ветке 3 Stable
+
+|4.0 Current (ветка разработки)
+|Релиз 3.1
+|Ветви Releng 4: релизы с 4.1 по 4.6 (и релиз 4.6.2), затем релизы с 4.7 по 4.11 (все, начиная с релиза 4.3, также ведущие к ветви Releng_4_n), и последующая ветвь релиза 4
+
+|5.0 Current (ветка разработки)
+|Релиз 4.0
+|Ветви Releng 5: Релизы с 5.0 до 5.4 (за исключением 5.0 и 5.3, которые также ведут к ветке Releng_5_n), и последующая ветка релиза 5
+
+|6.0 Current (ветка разработки)
+|Релиз 5.3
+|
+
+|...
+|
+|
+
+|===
+
+Последняя версия -CURRENT всегда обозначается как -CURRENT, а последний релиз -STABLE всегда обозначается как -STABLE. На этом рисунке -STABLE относится к 4-STABLE, а -CURRENT относится к 5.0-CURRENT после 5.0-RELEASE. [crossref:dev-model[freebsd-releng, FreeBSD, 2002E]]
+
+«Основной выпуск» всегда создаётся из ветки -CURRENT. Однако ветка -CURRENT не обязательно должна разветвляться в этот момент, а может сосредоточиться на стабилизации. Примером этого является то, что после 3.0-RELEASE, 3.1-RELEASE также был продолжением ветки -CURRENT, и -CURRENT не стал настоящей веткой разработки до тех пор, пока не был выпущен этот релиз и не была создана ветка 3-STABLE. Когда -CURRENT снова становится веткой разработки, за ним может следовать только основной выпуск. Ожидается, что ветка 5-STABLE будет отделена от 5.0-CURRENT примерно на момент выпуска 5.3-RELEASE. Только после отделения 5-STABLE ветка разработки получит название 6.0-CURRENT.
+
+"Минорный релиз" создается из ветки -CURRENT после основного релиза или из ветки -STABLE.
+
+Начиная с версии 4.3-RELEASE footnote:[Первым релизом, для которого это действительно произошло, был 4.5-RELEASE, но ветки безопасности были созданы одновременно для 4.3-RELEASE и 4.4-RELEASE.], когда выпускается минорный релиз, он становится «веткой безопасности». Это предназначено для организаций, которые не хотят следовать ветке -STABLE и потенциальным новым/изменённым функциям, которые она предлагает, но вместо этого требуют абсолютно стабильной среды, обновляемой только для внедрения исправлений безопасности. footnote:[Здесь вы видите терминологическое пересечение со словом «стабильный», что приводит к некоторой путанице. Ветка -STABLE по-прежнему является веткой разработки, цель которой — быть полезной для большинства пользователей. Если для системы неприемлемо получать изменения, которые не были объявлены на момент её развёртывания, такая система должна работать на ветке безопасности.]
+
+Каждое обновление в ветке безопасности называется "уровнем исправления" (patchlevel). Для каждого выполненного улучшения безопасности номер уровня исправления увеличивается, что позволяет легко отслеживать, какие улучшения безопасности были реализованы. В случаях особенно серьезных уязвимостей безопасности может быть выпущен полностью новый релиз из ветки безопасности. Примером этого является 4.6.2-RELEASE.
+
+[[model-summary]]
+=== Сводка модели
+
+Для подведения итогов, модель разработки FreeBSD можно представить в виде следующего дерева:
+
+.Общая модель разработки
+image::freebsd-code-model.png["Обратитесь к параграфам ниже для версии, удобной для экранных дикторов."]
+
+Дерево разработки FreeBSD с текущими усилиями по разработке и непрерывной интеграцией.
+
+Дерево символизирует версии выпусков, где основные версии порождают новые главные ветви, а второстепенные версии являются версиями главной ветви. Верхняя ветвь — это ветвь -CURRENT, в которую интегрируется вся новая разработка, а ветвь -STABLE находится непосредственно под ней. Под ветвью -STABLE находятся старые, неподдерживаемые версии.
+
+Проект находится в тумане постоянной разработки, и разработчики выбирают модели разработки, которые считают подходящими. Результаты их работы затем интегрируются в -CURRENT, где проходят параллельную отладку, и наконец объединяются из -CURRENT в -STABLE. Исправления безопасности объединяются из -STABLE в ветки безопасности.
+
+Многие коммиттеры имеют специальную область ответственности. Эти роли называются "hats" (шляпами). Эти роли могут быть либо проектными ролями, например, офицер по связям с общественностью, либо сопровождающим определённой части кода. Поскольку это проект, где люди добровольно уделяют своё свободное время, люди с назначенными ролями не всегда доступны. Поэтому они должны назначить заместителя, который может выполнять эту роль в их отсутствие. Другой вариант — передать роль группе.
+
+Многие из этих ролей не формализованы. Формализованные роли имеют устав, в котором указаны точные цели, привилегии и обязанности. Написание таких уставов — новая часть проекта, поэтому оно ещё не завершено для всех ролей. Эти описания ролей не являются формализацией, а скорее представляют собой краткое описание роли со ссылками на устав, где он доступен, и контактными адресами.
+
+[[sect-hats]]
+== Ответственные
+
+[[general-hats]]
+=== Стандартные роли
+
+[[role-contributor]]
+==== Участник (контрибьютор)
+
+Участник вносит вклад в проект FreeBSD в качестве разработчика, автора, отправляя отчеты о проблемах или другими способами способствуя прогрессу проекта. Участник не имеет особых привилегий в проекте FreeBSD. [crossref:dev-model[freebsd-contributors, FreeBSD, 2002F]]
+
+[[role-committer]]
+==== Коммиттер
+
+Человек, обладающий необходимыми привилегиями для добавления своего кода или документации в репозиторий. Коммиттер совершил коммит в течение последних 12 месяцев. [crossref:dev-model[freebsd-developer-handbook, FreeBSD, 2000A]] Активный коммиттер — это коммиттер, который в среднем совершал один коммит в месяц в течение этого времени.
+
+Стоит отметить, что нет технических препятствий, которые могли бы помешать кому-либо, получившему права на коммиты в основном или подпроекте, делать коммиты в частях исходного кода проекта, для которых у коммиттера нет явного разрешения на изменение. Однако, при желании внести изменения в части, с которыми коммиттер ранее не работал, следует изучить логи, чтобы понять, что происходило в этой области ранее, а также прочитать файл MAINTAINERS, чтобы узнать, есть ли у сопровождающего этой части какие-либо особые требования к внесению изменений в код.
+
+[[role-core]]
+==== Основная команда (Core Team)
+
+Основная команда избирается коммиттерами из числа коммиттеров и выполняет функции совета директоров проекта FreeBSD. Она повышает активных участников до коммиттеров, назначает людей на четко определенные роли (hats) и является окончательным арбитром при принятии решений о направлении развития проекта. На 1 июля 2004 года в состав основной команды входило 9 членов. Выборы проводятся каждые два года.
+
+[[role-maintainer]]
+==== Сопровождение
+
+Сопровождение означает, что человек ответственен за то, что допускается в определённую часть кода, и имеет решающее слово в случае разногласий по поводу кода. Это включает в себя как активную работу, направленную на стимулирование участников (контрибьюторов), так и реактивную работу по рецензированию коммитов.
+
+В исходном коде FreeBSD есть файл MAINTAINERS, содержащий краткое описание того, как каждый сопровождающий предпочитает получать вклады. Наличие этого уведомления и контактной информации позволяет разработчикам сосредоточиться на разработке, а не застревать в медленной переписке, если сопровождающий будет недоступен в течение некоторого времени.
+
+Если сопровождающий недоступен в течение неоправданно долгого времени, и другие люди выполняют значительный объем работы, сопровождение может быть передано без согласия сопровождающего. Это основано на позиции, что сопровождение должно быть продемонстрировано, а не заявлено.
+
+Сопровождение определенного участка кода — это роль, которая не осуществляется коллективно.
+
+[[official-hats]]
+=== Официальные Роли
+
+Официальные роли в проекте FreeBSD — это более или менее формализованные и в основном административные должности. Они обладают полномочиями и ответственностью в своей области. В следующем списке показаны направления ответственности и дано описание каждой роли, включая информацию о том, кто её занимает.
+
+[[role-doc-manager]]
+==== Менеджер проекта документации
+
+Архитектор crossref:dev-model[sub-project-documentation, Проекта документации FreeBSD] отвечает за определение и контроль целей документации для коммиттеров в проекте Документации, за которым они присматривают.
+
+Роль поддерживается: Командой DocEng mailto:doceng@FreeBSD.org[doceng@FreeBSD.org]. https://www.freebsd.org/internal/doceng/[Устав DocEng].
+
+[[role-postmaster]]
+==== Postmaster
+
+Postmaster отвечает за корректную доставку почты на адреса электронной почты коммиттеров. Также он отвечает за работоспособность почтовых рассылок и должен принимать меры против возможных сбоев в работе почты, таких как троллинг-, спам- и вирус-фильтры.
+
+Текущий руководитель: Команда почтовых серверов mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org].
+
+[[role-release-coordination]]
+==== Координация выпусков
+
+Обязанности команды выпуска релизов включают
+
+* Установка, публикация и соблюдение графика выпуска официальных релизов
+* Документирование и формализация процедур выпуска релизов
+* Создание и поддержка веток кода
+* Согласование с командами Ports и Documentation для выпуска обновленного набора пакетов и документации вместе с новыми релизами
+* Координация с командой безопасности для того, чтобы готовящиеся выпуски не были затронуты недавно обнаруженными уязвимостями.
+
+Дополнительная информация о процессе разработки доступна в разделе crossref:dev-model[process-release-engineering, Выпуск релизов].
+
+[[role-releng]]
+Роль поддерживается: командой выпуск релизов (Release Engineering) mailto:re@FreeBSD.org[re@FreeBSD.org]. https://www.freebsd.org/releng/charter/[ Устав Release Engineering].
+
+[[role-pr-cr]]
+==== Отношения с общественностью и корпоративные связи
+
+Обязанности отдела по связям с общественностью и корпоративным отношениям включают:
+
+* Публиковать пресс-релизы при возникновении событий, важных для проекта FreeBSD.
+* Быть официальным контактным лицом для корпораций, тесно сотрудничающих с проектом FreeBSD.
+* Принимать меры для продвижения FreeBSD как в сообществе Open Source, так и в корпоративном мире.
+* Обрабатывать список рассылки "freebsd-advocacy".
+
+Эта роль в настоящее время не занята.
+
+[[role-security-officer]]
+==== Ответственный за безопасность (Security Officer)
+
+Основная обязанность Ответственного за безопасность — координировать обмен информацией с сообществом безопасности и проектом FreeBSD. Ответственный за безопасность также принимает меры при поступлении сообщений о проблемах безопасности и способствует активному развитию в области безопасности.
+
+Из-за опасений, что информация об уязвимостях может попасть к злоумышленникам до выпуска исправления, только Ответственный за безопасность, включающий руководителя, заместителя и двух членов crossref:dev-model[role-core, Core Team], получает конфиденциальную информацию о проблемах безопасности. Однако для создания или внедрения исправления Ответственный за безопасность может обратиться к команде mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] для помощи в выполнении работы.
+
+[[role-repo-manager]]
+==== Менеджер репозитория исходного кода
+
+Менеджер репозитория исходного кода — единственный, кому разрешено напрямую изменять репозиторий без использования инструмента crossref:dev-model[tool-git, Git]. В его обязанности входит оперативное решение технических проблем, возникающих в репозитории. Менеджер репозитория исходного кода имеет право отменять коммиты, если это необходимо для устранения технических проблем с Git.
+
+Роль принадлежит: Менеджеру репозитория исходного кода mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org].
+
+[[role-election-manager]]
+==== Менеджер выборов
+
+Менеджер выборов отвечает за процесс crossref:dev-model[process-core-election,выборов Core Team]. Он отвечает за проведение и поддержание системы выборов, а также является окончательной инстанцией в случае незначительных непредвиденных событий в процессе выборов. Крупные непредвиденные события должны обсуждаться с crossref:dev-model[role-core,Core Team]
+
+Роль выполняется только во время выборов.
+
+[[role-webmaster]]
+==== Управление веб-сайтом
+
+Роль управления веб-сайтом отвечает за координацию развертывания обновленных веб-страниц на зеркалах по всему миру, за общую структуру основного веб-сайта и систему, на которой он работает. Управление должно согласовывать содержимое с crossref:dev-model[документацией подпроекта, Документационный проект FreeBSD] и выступает в роли сопровождающего для дерева "www".
+
+Роль поддерживается: веб-мастеры FreeBSD mailto:www@FreeBSD.org[www@FreeBSD.org].
+
+[[role-ports-manager]]
+==== Менеджер портов
+
+Менеджер портов выступает в роли связующего звена между crossref:dev-model[sub-project-ports, Подпроектом портов] и основным проектом, и все запросы от проекта должны направляться менеджеру портов.
+
+Роль принадлежит: Команде управления портами mailto:portmgr@FreeBSD.org[portmgr@FreeBSD.org]. https://www.freebsd.org/portmgr/charter/[Устав Portmgr].
+
+[[role-standards]]
+==== Стандарты
+
+Роль стандартов отвечает за обеспечение соответствия FreeBSD стандартам, которым система следует, отслеживает развитие этих стандартов и уведомляет разработчиков FreeBSD о важных изменениях. Это позволяет разработчикам действовать проактивно и сокращать время между обновлением стандартов и достижением соответствия в FreeBSD.
+
+Текущий ответственный: Garrett Wollman mailto:wollman@FreeBSD.org[wollman@FreeBSD.org].
+
+[[role-core-secretary]]
+==== Секретарь Core Team
+
+Основная обязанность Секретаря Core Team — составление черновиков и публикация окончательных отчётов Core Team. Секретарь также ведёт повестку Core Team, гарантируя, что ни один вопрос не останется без решения.
+
+Ответственный в настоящее время: {rene}.
+
+[[role-bugmeister]]
+==== Ответственный за ошибки (Bugmeister)
+
+Ответственный за ошибки (Bugmeister) отвечает за поддержание базы данных по обслуживанию в рабочем состоянии, за корректную категоризацию записей и отсутствие недействительных записей. Они курируют исправителей ошибок (bugbusters).
+
+Текущий ответственный: команда Bugmeister Team mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
+
+[[role-donations]]
+==== Представитель по привлечению пожертвований
+
+Задача представителя по привлечению пожертвований — связывать разработчиков, которым что-то нужно, с людьми или организациями, готовыми сделать пожертвование.
+
+Роль поддерживается: Отделом по привлечению пожертвований mailto:donations@FreeBSD.org[donations@FreeBSD.org]. https://www.freebsd.org/donations/[ Устав Отдела по привлечению пожертвований].
+
+[[role-admin]]
+==== Администратор (Admin)
+
+(Также называется "Администратор кластера FreeBSD")
+
+Команда администраторов состоит из людей, ответственных за администрирование компьютеров, которые проект использует для распределённой работы и синхронизации коммуникации. В основном в неё входят те, кто имеет физический доступ к серверам.
+
+Роль поддерживается: командой администраторов mailto:admin@FreeBSD.org[admin@FreeBSD.org].
+
+[[proc-depend-hats]]
+=== Процессозависимые роли
+
+[[role-problem-originator]]
+==== Инициатор отчета
+
+Лицо, изначально ответственное за подачу отчета о проблеме.
+
+[[role-bugbuster]]
+==== Исправитель ошибок (Bugbuster)
+
+Человек, который либо найдет подходящего специалиста для решения проблемы, либо закроет PR, если он является дубликатом или по другим причинам не представляет интереса.
+
+[[role-mentor]]
+==== Наставник (Mentor)
+
+Наставник — это коммиттер, который берет на себя задачу ознакомить нового коммиттера с проектом. Это включает в себя проверку корректности настройки окружения нового коммиттера, обучение доступным инструментам, необходимым для работы, а также разъяснение ожидаемого поведения.
+
+[[role-vendor]]
+==== Поставщик
+
+Лицо (лица) или организация, от которых поступает внешний код и которым отправляются исправления.
+
+[[role-reviewer]]
+==== Рецензенты
+
+Люди из списка рассылки, куда отправлен запрос на рецензирование.
+
+Следующий раздел описывает установленные процессы проекта. Вопросы, не охваченные этими процессами, решаются по мере возникновения, исходя из сложившейся практики в аналогичных случаях.
+
+[[model-processes]]
+== Процессы
+
+[[proc-addrem-committer]]
+=== Добавление новых и удаление старых коммиттеров
+
+Основная команда (Core Team) отвечает за предоставление и отзыв прав на коммит для участников. Это может быть сделано только через голосование в списке рассылки Core Team. Подпроекты ports и documentation могут предоставлять права на коммит людям, работающим над этими проектами, но на данный момент не отзывали такие права.
+
+Обычно кандидата в коммиттеры основной команде (Core Team) рекомендуют коммиттеры. Для участников или посторонних обращаться в Core Team с просьбой стать коммиттером считается неблагоразумным и такая просьба, как правило, отклоняется.
+
+Если область, представляющая особый интерес для разработчика, потенциально пересекается с зоной ответственности других сопровождающих, запрашивается мнение этих сопровождающих. Однако часто именно этот сопровождающий рекомендует разработчика.
+
+Когда участнику предоставляется статус коммиттера, ему назначается наставник. В общем случае коммиттер, который рекомендовал нового коммиттера, берет на себя обязанности наставника для нового коммиттера.
+
+Когда участнику предоставляется право коммита (commit bit), отправляется подписанное с помощью crossref:dev-model[tool-pgp, Pretty Good Privacy] письмо от crossref:dev-model[role-core-secretary, Секретаря Core Team], crossref:dev-model[role-ports-manager, Менеджера портов] или nik@freebsd.org на адреса admins@freebsd.org, назначенного наставника, нового коммиттера и Core Team, подтверждая одобрение новой учётной записи. Затем наставник собирает строку пароля, crossref:dev-model[tool-ssh2, Secure Shell] открытый ключ и PGP-ключ от нового коммиттера и отправляет их crossref:dev-model[role-admin, Администратору]. Когда новая учётная запись создана, наставник активирует право коммита и проводит нового коммиттера через остальные этапы начального процесса.
+
+.Процесс вкратце: добавление нового коммиттера
+image::proc-add-committer.png["Обратитесь к абзацу ниже для версии, совместимой с программами чтения с экрана."]
+
+Когда участник отправляет фрагмент кода, принимающий коммиттер может предложить предоставить этому участнику права на коммит. Если он рекомендует это основной команде (Core Team), команда проводит голосование по этой рекомендации. Если голосование завершается в пользу предложения, новому коммиттеру назначается наставник, и новый коммиттер должен отправить свои данные администраторам для создания учётной записи. После этого новый коммиттер готов сделать свой первый коммит. По традиции, это делается путём добавления своего имени в список коммиттеров.
+
+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. [crossref:dev-model[freebsd-expiration-policy, FreeBSD, 2002H]] There are, however, no automatic procedures for doing this. For reactions concerning commit privileges not triggered by time, see crossref:dev-model[process-reactions,section 1.5.8].
+
+.Процесс: удаление коммиттера
+image::proc-rm-committer.png["Обратитесь к абзацу ниже для версии, совместимой с программами чтения с экрана."]
+
+Когда Основная команда (Core Team) принимает решение очистить список коммиттеров, они проверяют, кто не делал коммитов за последние 18 месяцев. Коммиттеры, которые этого не сделали, лишаются прав на коммит, и их учетные записи удаляются администраторами.
+
+Также возможно для коммиттеров запросить отзыв их права на коммит, если по какой-то причине они больше не будут активно участвовать в проекте. В этом случае, право может быть восстановлено позже по запросу коммиттера.
+
+Роли в этом процессе:
+
+. crossref:dev-model[role-core, Основная команда (Core Team)]
+. crossref:dev-model[role-contributor, Участник (контрибьютор)]
+. crossref:dev-model[role-committer, Коммиттер]
+. crossref:dev-model[role-maintainer, Сопровождение]
+. crossref:dev-model[role-mentor, Наставник (Mentor)]
+
+[crossref:dev-model[freebsd-bylaws, FreeBSD, 2000A]] [crossref:dev-model[freebsd-expiration-policy, FreeBSD, 2002H]] [crossref:dev-model[freebsd-new-account, FreeBSD, 2002I]]
+
+[[committing]]
+=== Коммит кода
+
+Добавление нового или изменённого кода — один из наиболее частых процессов в проекте FreeBSD и обычно происходит несколько раз в день. Фиксация кода может быть выполнена только "коммиттером". Коммиттеры фиксируют либо код, написанный ими самими, либо код, переданный им, либо код, отправленный через crossref:dev-model[model-pr,отчёт о проблеме].
+
+Когда разработчик пишет нетривиальный код, он должен запросить рецензирование кода у сообщества. Это делается путём отправки письма в соответствующий список рассылки с просьбой о рецензировании. Перед отправкой кода на проверку разработчик должен убедиться, что он корректно компилируется со всем деревом исходного кода и что все соответствующие тесты выполняются. Это называется "предварительной проверкой перед коммитом". Когда получен вклад в виде кода, коммиттер должен просмотреть его и протестировать таким же образом.
+
+Когда изменение фиксируется в части исходного кода, которая была получена от внешнего crossref:dev-model[role-vendor,поставщика], сопровождающий должен убедиться, что патч передан обратно поставщику. Это соответствует философии открытого исходного кода и упрощает синхронизацию с внешними проектами, так как патчи не придётся применять заново при каждом новом выпуске.
+
+После того как код был доступен для рецензирования и дальнейшие изменения не требуются, код вносится в ветку разработки -CURRENT. Если изменение применимо и для ветки -STABLE, или других веток, коммиттер устанавливает отсчёт времени для "слияния из текущей" ("MFC"). После того как пройдёт количество дней, выбранное коммиттером при установке MFC, автоматически будет отправлено письмо коммиттеру с напоминанием внести изменения в ветку -STABLE (а также, возможно, в ветки безопасности). В ветки безопасности следует сливать только критические изменения, связанные с безопасностью.
+
+Откладывание коммита в -STABLE и другие ветки позволяет проводить "параллельную отладку", когда закоммиченный код тестируется на широком спектре конфигураций. Это приводит к тому, что изменения в -STABLE содержат меньше ошибок, что и даёт ветке её название.
+
+.Процесс вкратце: коммиттер делает коммит кода
+image::proc-commit.png["Обратитесь к абзацу ниже для версии, совместимой с программами чтения с экрана."]
+
+Когда коммиттер написал часть кода и хочет его закоммитить, он сначала должен определить, достаточно ли он тривиален, чтобы попасть в репозиторий без предварительной рецензии, или ему сначала следует сделать рецензию в сообществе разработчиков. Если код тривиален или был отрецензирован, и коммиттер не является сопровождающим, он должен проконсультироваться с сопровождающим перед тем, как продолжить. Если код предоставлен внешним поставщиком, сопровождающий должен создать патч, который отправляется обратно поставщику. Затем код коммитится и развертывается пользователями. Если они обнаружат проблемы с кодом, это будет сообщено, и коммиттер может вернуться к написанию патча. Если затронут поставщик, он может выбрать реализацию или игнорирование патча.
+
+.Процесс вкратце: Участник делает коммит кода
+image::proc-contrib.png["Обратитесь к абзацам выше и ниже для версии, совместимой с программами чтения с экрана."]
+
+Разница, когда участник вносит код, заключается в том, что он отправляет код через интерфейс Bugzilla. Этот отчёт забирает сопровождающий, который просматривает код и делает ему коммит.
+
+Роли, задействованные в этом процессе:
+
+. crossref:dev-model[role-committer, Коммиттер]
+. crossref:dev-model[role-contributor, Участник (контрибьютор)]
+. crossref:dev-model[role-vendor, Поставщик]
+. crossref:dev-model[role-reviewer, Рецензенты]
+
+[crossref:dev-model[freebsd-committer, FreeBSD, 2001]] [crossref:dev-model[jorgensen2001, Jørgensen, 2001]]
+
+[[process-core-election]]
+=== Выборы основной команды (Core Team)
+
+Выборы Core Team проводятся не реже чем раз в два года. footnote:[Первые выборы Core Team состоялись в сентябре 2000 года] Избираются девять участников Core Team. Новые выборы проводятся, если количество участников Core Team становится меньше семи. Новые выборы также могут быть проведены, если этого потребуют как минимум 1/3 активных коммиттеров.
+
+Когда должны состояться выборы, Core Team объявляет об этом как минимум за 6 недель и назначает менеджера выборов для их проведения.
+
+Только коммиттеры могут быть избраны в состав основной команды (Core Team). Кандидаты должны подать свои заявки как минимум за одну неделю до начала выборов, но могут уточнять свои заявления до начала голосования. Они представлены в http://election.uk.freebsd.org/candidates.html[списке кандидатов]. При составлении своих предвыборных заявлений кандидаты должны ответить на несколько стандартных вопросов, предоставленных организатором выборов.
+
+Во время выборов строго соблюдается правило, что коммиттер должен был сделать коммит в течение последних 12 месяцев. Только эти коммиттеры имеют право голосовать.
+
+При голосовании коммиттер может проголосовать один раз в поддержку до девяти номинантов. Голосование проводится в течение четырёх недель, с напоминаниями, публикуемыми в рассылке "developers", доступной всем коммиттерам.
+
+Результаты выборов публикуются через неделю после их окончания, а новая основная команда вступает в должность через неделю после публикации результатов.
+
+В случае ничьей при голосовании, это будет разрешено новыми, однозначно избранными членами ядра.
+
+Голоса и заявления кандидатов архивируются, но архивы не являются общедоступными.
+
+.Процесс вкратце: Выборы основной команды (Core Team)
+image::proc-elections.png["Обратитесь к абзацу ниже для версии, совместимой с программами чтения с экрана."]
+
+Core Team объявляет выборы и назначает руководителя выборов, который подготавливает процесс. Когда всё готово, кандидаты могут объявить о своей кандидатуре, представив заявления. Затем коммиттеры голосуют. После завершения голосования результаты выборов объявляются, и новая основная команда вступает в должность.
+
+Ответственный за выборы Core Team:
+
+* crossref:dev-model[role-core, Основная команда (Core Team)]
+* crossref:dev-model[role-committer, Коммиттер]
+* crossref:dev-model[role-election-manager, Менеджер выборов]
+
+[crossref:dev-model[freebsd-bylaws, FreeBSD, 2000A]] [crossref:dev-model[bsd-election2002, FreeBSD, 2002B]] [crossref:dev-model[freebsd-election, FreeBSD, 2002G]]
+
+[[new-features]]
+=== Разработка новых функций
+
+В рамках проекта существуют подпроекты, работающие над новыми функциями. Эти проекты обычно выполняются одним человеком [crossref:dev-model[jorgensen2001, Йоргенсен, 2001]]. Каждый проект волен организовывать разработку так, как считает нужным. Однако, когда проект объединяется с ветвью -CURRENT, он должен следовать руководствам проекта. Когда код хорошо протестирован в ветви -CURRENT и признан достаточно стабильным и актуальным для ветви -STABLE, он объединяется с ветвью -STABLE.
+
+Требования проекта определяются пожеланиями разработчиков, запросами сообщества в виде прямых обращений по почте, отчетов о проблемах (Problem Reports), коммерческим финансированием разработки функциональности или вкладами научного сообщества. Пожелания, которые входят в зону ответственности разработчика, передаются этому разработчику, который расставляет приоритеты между запросом и своими собственными пожеланиями. Распространенный способ организации этого процесса — ведение списка задач (TODO-list), поддерживаемого проектом. Задачи, не входящие в чью-либо зону ответственности, собираются в списках TODO, пока кто-нибудь не возьмет на себя ответственность за их выполнение. Все запросы, их распределение и отслеживание обрабатываются с помощью инструмента crossref:dev-model[tool-bugzilla, Bugzilla].
+
+Анализ требований происходит двумя способами. Поступившие запросы обсуждаются в почтовых рассылках, как в основном проекте, так и в подпроекте, к которому относится запрос или который создается этим запросом. Кроме того, отдельные разработчики подпроекта оценивают осуществимость запросов и определяют приоритеты между ними. Помимо архивов обсуждений, на этом этапе не создается никаких результатов, которые включаются в основной проект.
+
+Поскольку запросы приоритизируются отдельными разработчиками на основе того, что они считают интересным, необходимым или за что им платят, отсутствует общая стратегия или приоритезация того, какие запросы считать требованиями, и как контролировать их корректную реализацию. Однако большинство разработчиков разделяют общее видение того, какие вопросы являются более важными, и они могут запросить рекомендации у команды инженеров по выпуску релизов.
+
+Фаза проверки проекта состоит из двух этапов. Перед внесением кода в текущую ветку разработчики запрашивают рецензирование своего кода коллегами. Это рецензирование в основном проводится с помощью функционального тестирования, но также важна проверка кода. Когда код внесён в ветку, проводится более широкое функциональное тестирование, которое может привести к дополнительной проверке кода и отладке, если код ведёт себя не так, как ожидалось. Эта вторая форма проверки может рассматриваться как структурная верификация. Хотя сами подпроекты могут писать формальные тесты, такие как модульные тесты, они обычно не собираются основным проектом и чаще всего удаляются перед внесением кода в текущую ветку. footnote:[Однако всё больше тестов выполняется при сборке системы (make world). Эти тесты являются очень новым дополнением, и систематическая структура для них ещё не создана.]
+
+[[model-maintenance]]
+=== Сопровождение
+
+Для проекта полезно, чтобы за каждую область исходного кода отвечал хотя бы один человек, который хорошо её знает. Некоторые части кода имеют назначенных сопровождающих. Другие имеют фактических сопровождающих, а некоторые части системы не имеют сопровождающих. Сопровождающий обычно является участником подпроекта, который написал и интегрировал код, или тем, кто портировал его с платформы, для которой он был написан. footnote:[sendmail и named — примеры кода, который был объединён с других платформ.] Задача сопровождающего — убедиться, что код синхронизирован с проектом, из которого он получен, если это сторонний код, а также применять патчи, предоставленные сообществом, или исправлять обнаруженные проблемы.
+
+Основной объем работы, вкладываемый в проект FreeBSD, связан с сопровождением. [crossref:dev-model[jorgensen2001, Jørgensen, 2001]] предоставляет схему, показывающую жизненный цикл изменений.
+
+Модель Йоргенссена для интеграции изменений
+
+[.informaltable]
+[cols="1,1,1", options="header"]
+|===
+| Этап
+| Следующий, если успешно
+| Следующий, если неудачно
+
+|программирование
+|рецензирование
+|
+
+|рецензирование
+|предварительная проверка перед коммитом
+|программирование
+
+|предварительная проверка перед коммитом
+|релиз для разработки
+|программирование
+
+|релиз для разработки
+|параллельная отладка
+|программирование
+
+|параллельная отладка
+|релиз для производства
+|программирование
+
+|релиз для производства
+|
+|программирование
+|===
+
+Здесь "релиз для разработки" относится к ветке -CURRENT, а "релиз для производства" — к ветке -STABLE. "Предварительная проверка перед коммитом" — это функциональное тестирование, проводимое коллегами-разработчиками по запросу или для проверки кода с целью определения состояния подпроекта. "Параллельная отладка" — это функциональное тестирование, которое может вызвать дополнительный обзор и отладку, когда код включён в ветку -CURRENT.
+
+На момент написания этого документа в проекте было 269 коммиттеров. Когда они вносят изменения в ветку, это создает новый выпуск. Очень часто пользователи в сообществе отслеживают определенную ветку. Мгновенное появление нового выпуска делает изменения широко доступными сразу же и позволяет быстро получать отзывы от сообщества. Это также дает сообществу ожидаемое время реакции на проблемы, которые важны для них. Это делает сообщество более вовлеченным, что, в свою очередь, позволяет получать больше и лучше отзывов, что снова стимулирует больше сопровождения и в конечном итоге должно создать лучший продукт.
+
+Прежде чем вносить изменения в код в частях дерева, история которых неизвестна коммиттеру, коммиттер обязан прочитать журналы коммитов, чтобы понять, почему определённые функции реализованы именно так, и избежать ошибок, которые уже были обдуманы или исправлены ранее.
+
+[[model-pr]]
+=== Сообщение о проблеме
+
+До FreeBSD 10 в FreeBSD входил инструмент для отправки отчётов о проблемах под названием `send-pr`. Проблемы включают отчёты об ошибках, запросы функций, улучшения функций и уведомления о новых версиях внешнего программного обеспечения, включённого в проект. Хотя `send-pr` доступен, пользователям и разработчикам рекомендуется отправлять проблемы, используя нашу https://bugs.freebsd.org/submit/[форму отчёта о проблемах].
+
+Отчёты о проблемах отправляются на электронный адрес, откуда они попадают в базу данных сопровождения отчётов о проблемах. crossref:dev-model[role-bugbuster, Исправитель ошибок (Bugbuster)] классифицирует проблему и направляет её соответствующей группе или сопровождающему в рамках проекта. После того, как кто-то берёт ответственность за отчёт, он анализируется. Этот анализ включает проверку проблемы и разработку решения. Часто требуется обратная связь от автора отчёта или даже от сообщества FreeBSD. Как только создаётся патч для устранения проблемы, автора отчета могут попросить его протестировать. В итоге рабочий патч интегрируется в проект и, если необходимо, документируется. Затем он проходит стандартный цикл сопровождения, как описано в разделе crossref:dev-model[model-maintenance, Сопровождение]. Отчёт о проблеме может находиться в следующих состояниях: открыт, анализируется, ожидает обратной связи, исправлен патчем, отложен и закрыт. Состояние "отложен" используется, когда дальнейшее продвижение невозможно из-за недостатка информации или когда задача требует столько работы, что в данный момент никто над ней не работает.
+
+.Сводка процесса: сообщение о проблеме
+image::proc-pr.png["Обратитесь к абзацу ниже для версии, совместимой с программами чтения с экрана."]
+
+Проблема сообщается автором отчета. Затем она классифицируется ответственным за обработку ошибок и передается соответствующему сопровождающему. Он проверяет проблему и обсуждает её с автором отчёта до тех пор, пока не будет собрано достаточно информации для создания рабочего исправления. Это исправление затем фиксируется, и отчёт о проблеме закрывается.
+
+Роли, включенные в этот процесс:
+
+. crossref:dev-model[role-problem-originator, Инициатор отчета]
+. crossref:dev-model[role-maintainer, Сопровождение]
+. crossref:dev-model[role-bugbuster, Исправитель ошибок (Bugbuster)]
+
+[crossref:dev-model[freebsd-handle-pr, FreeBSD, 2002C]]. [crossref:dev-model[freebsd-send-pr, FreeBSD, 2002D]]
+
+[[process-reactions]]
+=== Реагирование на неправильное поведение
+
+[crossref:dev-model[freebsd-committer, FreeBSD, 2001]] содержит ряд правил, которым должны следовать коммиттеры. Однако случается, что эти правила нарушаются. Следующие правила существуют для того, чтобы можно было реагировать на неподобающее поведение. Они определяют, какие действия приведут к приостановке привилегий коммиттера на тот или иной срок.
+
+* Совершение коммитов во время заморозки кода без одобрения команды Release Engineering — 2 дня
+* Коммит изменений в ветку безопасности без одобрения - 2 дня
+* Войны коммитов — 5 дней для всех участвующих сторон
+* Невежливое или неподобающее поведение — 5 дней
+
+[crossref:dev-model[ref-freebsd-trenches, Lehey, 2002]]
+
+Для эффективности приостановок любой член основной команды (Core Team) может применить приостановку до обсуждения на почтовой рассылке "core". Повторные нарушители могут, при 2/3 голосов от основной команды, получить более строгие наказания, включая постоянное лишение прав на коммиты. (Однако последнее всегда рассматривается как крайняя мера из-за присущей ему склонности вызывать споры.) Все приостановки публикуются в почтовой рассылке "developers", доступной только коммиттерам.
+
+Важно, что вас не могут приостановить за технические ошибки. Все наказания связаны с нарушением социального этикета.
+
+Роли, участвующие в этом процессе:
+
+* crossref:dev-model[role-core, Основная команда (Core Team)]
+* crossref:dev-model[role-committer, Коммиттер]
+
+[[process-release-engineering]]
+=== Выпуск релизов
+
+Проект FreeBSD имеет команду инженеров по выпуску релизов с главным инженером, который отвечает за создание релизов FreeBSD для распространения среди пользователей через интернет или продажи в розничных магазинах. Поскольку FreeBSD доступна на нескольких платформах, а релизы для различных архитектур выпускаются одновременно, в команде есть ответственный за каждую архитектуру. Также в команде есть роли, отвечающие за координацию усилий по обеспечению качества, сборку набора пакетов и актуализацию документации. Под инженером по выпуску релизов подразумевается представитель команды инженеров по выпуску релизов.
+
+Когда готовится выпуск релиза, проект FreeBSD несколько меняет свою структуру. Составляется график выпуска, включающий заморозку функциональности и кода, выпуск промежуточных релизов и финального релиза. Заморозка функциональности означает, что новые функции не могут быть добавлены в ветку без явного согласия инженеров релиза. Заморозка кода означает, что изменения в коде (например, исправления ошибок) не могут быть добавлены без явного согласия инженеров релиза. Этот процесс заморозки функциональности и кода известен как стабилизация. В процессе выпуска релиза инженер релиза имеет полномочия откатываться к более старым версиям кода и, таким образом, "отменять" изменения, если они сочтут, что эти изменения не подходят для включения в релиз.
+
+Существует три различных вида выпусков:
+
+. .0 выпуски являются первым релизом основной версии. Они ветвятся от ветки -CURRENT и имеют значительно более длительный цикл разработки из-за нестабильного характера ветки -CURRENT
+. .X релизы — это релизы ветки -STABLE. Они запланированы к выходу каждые 4 месяца.
+. .X.Y — это выпуски с исправлениями уязвимостей, следующие за веткой .X. Они выходят только тогда, когда с момента последнего выпуска в этой ветке было объединено достаточное количество исправлений уязвимостей. Новые функции включаются редко, а команда безопасности участвует в этих выпусках гораздо активнее, чем в обычных.
+
+Для выпусков ветки -STABLE процесс выпуска начинается за 45 дней до предполагаемой даты релиза. В течение первой фазы, первых 15 дней, разработчики переносят изменения из -CURRENT, которые они хотят включить в релиз, в ветку выпуска. По окончании этого периода код входит в 15-дневный период заморозки, в течение которого допускаются только исправления ошибок, обновления документации, исправления, связанные с безопасностью, и незначительные изменения драйверов устройств. Эти изменения должны быть предварительно одобрены инженером выпуска. В начале последнего 15-дневного периода создается кандидат на выпуск для широкого тестирования. В этот период вероятность внесения изменений снижается, за исключением важных исправлений ошибок и обновлений безопасности. В этот заключительный период все выпуски считаются кандидатами на выпуск. По завершении процесса выпуска создается релиз с новым номером версии, включая бинарные дистрибутивы на веб-сайтах и создание образов CD-ROM. Однако релиз не считается «действительно выпущенным» до тех пор, пока на список рассылки freebsd-announce не будет отправлено сообщение, подписанное с помощью crossref:dev-model[tool-pgp, Pretty Good Privacy], в котором явно указано, что релиз состоялся; все, что обозначено как «релиз» до этого момента, может находиться в процессе доработки и изменяться до отправки PGP-подписанного сообщения. footnote:[Многие коммерческие поставщики используют эти образы для создания CD-ROM, которые продаются в розничных магазинах.].
+
+Версии ветки -CURRENT (то есть все версии, оканчивающиеся на ".0"), очень похожи, но с вдвое большим временным промежутком. Процесс начинается за 8 недель до выпуска с объявления графика релиза. Через две недели после начала процесса выпуска вводится заморозка функциональности, и оптимизация производительности должна быть сведена к минимуму. За четыре недели до выпуска становится доступна официальная бета-версия. За две недели до выпуска код официально ветвится в новую версию. Этой версии присваивается статус релиз-кандидата, и, как и в случае с разработкой -STABLE, заморозка кода релиз-кандидата ужесточается. Однако разработка на основной ветке разработки может продолжаться. За исключением этих различий, процессы разработки релизов схожи.
+
+*.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 crossref:dev-model[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.
+
+Большинство выпусков происходит по достижении даты, которая считается достаточно отдалённой от предыдущего выпуска. Установлена цель выпускать основные версии каждые 18 месяцев, а промежуточные — каждые 4 месяца. Сообщество пользователей чётко дало понять, что безопасность и стабильность не могут быть принесены в жертву из-за самостоятельно установленных сроков и целевых дат выпуска. Чтобы задержки не становились слишком длинными в вопросах безопасности и стабильности, требуется дополнительная дисциплина при внесении изменений в -STABLE.
+
+. Сделать график выпуска релизов
+. Заморозить функциональность
+. Заморозка кода
+. Создать ветку
+. Кандидат на выпуск
+. Стабилизировать выпуск (при необходимости вернуться к предыдущему шагу; когда выпуск считается стабильным, перейти к следующему шагу)
+. Собрать пакеты
+. Предупредить сайты-зеркала
+. Опубликовать выпуск
+
+// Keep the spaces around the external square bracket to avoid a warning in the
+// PDF converter
+[ crossref:dev-model[freebsd-releng, FreeBSD, 2002E] ]
+
+[[tools]]
+== Инструменты
+
+Основные инструменты поддержки процесса разработки — это Bugzilla, Mailman и OpenSSH. Это инструменты, разработанные сторонними организациями, которые широко используются в мире открытого исходного кода.
+
+[[tool-git]]
+=== Git
+
+Git — это система для управления несколькими версиями текстовых файлов, отслеживания внесённых изменений, их авторов и причин. Проект хранится в «репозитории», а разные версии считаются разными «ветками».
+
+[[tool-bugzilla]]
+=== Bugzilla
+
+Bugzilla — это база данных для сопровождения, состоящая из набора инструментов для отслеживания ошибок на центральном сайте. Она поддерживает процесс отслеживания ошибок, включая отправку и обработку ошибок, а также запросы и обновление базы данных, а также редактирование отчётов об ошибках. Проект использует веб-интерфейс для отправки "Отчётов о проблемах" на центральный сервер Bugzilla проекта. У коммиттеров также есть веб- и командные клиенты.
+
+[[model-mailman]]
+=== Mailman
+
+Mailman - это программа, которая автоматизирует управление почтовыми рассылками. Проект FreeBSD использует ее для ведения 16 общих рассылок, 60 технических рассылок, 4 ограниченных рассылок и 5 рассылок с логами коммитов Git. Она также используется для многих почтовых рассылок, созданных и используемых другими людьми и проектами в сообществе FreeBSD. Общие рассылки предназначены для широкой публики, технические рассылки в основном предназначены для разработки определенных областей интересов, а закрытые рассылки используются для внутренней коммуникации, не предназначенной для широкой публики. Большая часть всей коммуникации в проекте проходит через эти 85 рассылок [crossref:dev-model[ref-bsd-handbook, FreeBSD, 2003A], Приложение C].
+
+[[tool-pgp]]
+=== Pretty Good Privacy
+
+Pretty Good Privacy, более известный как PGP, — это криптосистема, использующая архитектуру открытого ключа, чтобы позволить пользователям подписывать и/или шифровать информацию цифровой подписью для обеспечения безопасной связи между двумя сторонами. Подпись используется при отправке информации множеству получателей, позволяя им убедиться, что информация не была изменена до того, как они её получили. В проекте FreeBSD это основной способ убедиться, что информация была написана тем, кто утверждает, что её создал, и не была изменена в процессе передачи.
+
+[[tool-ssh2]]
+=== Secure Shell (SSH)
+
+Secure Shell - это стандарт безопасного входа в удалённую систему и выполнения команд на ней. Он позволяет устанавливать и защищать другие соединения, называемые туннелями, между двумя взаимодействующими системами. Этот стандарт существует в двух основных версиях, и только версия два используется в проекте FreeBSD. Наиболее распространённая реализация стандарта - OpenSSH, которая входит в основную дистрибуцию проекта. Поскольку её исходный код обновляется чаще, чем выпуски FreeBSD, последняя версия также доступна в дереве портов.
+
+[[sub-projects]]
+== Подпроекты
+Подпроекты создаются для уменьшения объема коммуникации, необходимой для координации группы разработчиков. Когда проблемная область достаточно изолирована, большая часть коммуникации происходит внутри группы, сосредоточенной на проблеме, что требует меньше общения с другими группами по сравнению с ситуацией, когда группа не изолирована.
+
+[[sub-project-ports]]
+=== Подпроект Ports
+
+"Порт" — это набор метаданных и патчей, необходимых для загрузки, компиляции и корректной установки внешнего программного обеспечения в системе FreeBSD. Количество портов растёт с огромной скоростью, как показано на следующем рисунке.
+
+.Количество портов, добавленных между 1995 и 2022 годами
+[[fig-ports]]
+image::portsstatus.svg["Обратитесь к параграфам ниже для версии, удобной для экранных дикторов."]
+
+crossref:dev-model[fig-ports,image::portsstatus.svg] показывает количество портов, доступных для FreeBSD в период с 1995 по 2022 год. Похоже, что кривая сначала росла экспоненциально, а затем с середины 2001 до середины 2007 года росла линейно со скоростью около 2000 портов/год, после чего скорость роста снизилась.
+
+Поскольку внешнее программное обеспечение, описываемое портом, часто находится в стадии активной разработки, объем работы, необходимой для поддержки портов, уже велик и продолжает расти. Это привело к тому, что часть проекта FreeBSD, связанная с портами, получила более самостоятельную структуру и все больше становится подпроектом проекта FreeBSD.
+
+Порты имеют свою собственную основную команду с crossref:dev-model[role-ports-manager, Менеджером Портов] во главе, и эта команда может назначать коммиттеров без одобрения Основной команды FreeBSD (Core Team). В отличие от проекта FreeBSD, где активное сопровождение часто вознаграждается правом коммита, подпроект портов включает множество активных сопровождающих, не являющихся коммиттерами.
+
+В отличие от основного проекта, дерево портов не разветвляется. Каждый выпуск FreeBSD следует текущей коллекции портов, что обеспечивает доступ к обновлённой информации о том, где найти программы и как их собрать. Однако это означает, что порт, зависящий от системы, может требовать изменений в зависимости от версии FreeBSD, на которой он запущен.
+
+С неразветвлённым репозиторием портов невозможно гарантировать, что любой порт будет работать на чём-либо, кроме -CURRENT и -STABLE, в частности на старых, минорных выпусках. Для этого нет ни инфраструктуры, ни времени волонтёров.
+
+Команды, зависящие от Ports, такие как команда выпуска релизов, для эффективности коммуникации имеют своих собственных представителей по портам.
+
+[[sub-project-documentation]]
+=== Проект документации FreeBSD
+
+Проект документации FreeBSD был начат в январе 1995 года. От первоначальной группы, состоявшей из руководителя проекта, четырёх руководителей команд и 16 участников, сейчас общее число коммиттеров достигло 44. Список рассылки документации насчитывает чуть менее 300 участников, что указывает на довольно большое сообщество вокруг него.
+
+Цель проекта Документации — предоставить качественную и полезную документацию проекта FreeBSD, чтобы новые пользователи могли легче освоить систему, а также подробно описать расширенные функции для пользователей.
+
+Основные задачи проекта Documentation — работа над текущими проектами в "Наборе документации FreeBSD" и перевод документации на другие языки.
+
+Как и проект FreeBSD, документация разделена на те же ветви. Это сделано для того, чтобы для каждой версии всегда была обновлённая документация. В ветвях безопасности исправляются только ошибки в документации.
+
+Как и подпроект ports, проект Documentation может назначать коммиттеров документации без одобрения основной команды FreeBSD (Core Team). [crossref:dev-model[freebsd-doceng-charter, FreeBSD, 2003B]].
+
+Проект документации включает в себя extref:{fdp-primer}[вводное руководство]. Оно используется как для ознакомления новых участников проекта со стандартными инструментами и синтаксисом, так и в качестве справочника при работе над проектом.
+
+:sectnums!:
+
+[bibliography]
+[[bibliography]]
+== Список литературы
+
+[[brooks]]
+[Brooks, 1995] Фредерик П. Брукс. Авторское право © 1975, 1995 Pearson Education Limited. 0201835959. Addison-Wesley Pub Co. Мифический человекомесяц. Эссе о программной инженерии, юбилейное издание (2-е издание).
+
+[[thesis]]
+[Saers, 2003] Никлас Саерс. Авторское право © 2003. Модель проекта для FreeBSD. Кандидатская диссертация. http://niklas.saers.com/thesis.
+
+[[jorgensen2001]]
+[Йоргенсен, 2001] Нильс Йоргенсен. 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.
+
+[[ref-pmbok]]
+[PMI, 2000] Институт управления проектами. Copyright © 1996, 2000 Институт управления проектами. 1-880410-23-0. Институт управления проектами. Ньютаун Сквер, Пенсильвания, США. PMBOK Guide. A Guide to the Project Management Body of Knowledge (Руководство PMBOK. Руководство к своду знаний по управлению проектами), издание 2000 года.
+
+[[freebsd-bylaws]]
+[FreeBSD, 2000A] Copyright © 2002 The FreeBSD Project. Core Bylaws. https://www.freebsd.org/internal/bylaws/.
+
+[[freebsd-developer-handbook]]
+[FreeBSD, 2002A] Copyright © 2002 The FreeBSD Documentation Project. Руководство FreeBSD для разработчиков. extref:{developers-handbook}[Руководство FreeBSD для разработчиков].
+
+[[bsd-election2002]]
+[FreeBSD, 2002B] Copyright © 2002 Проект FreeBSD. Выборы состава основной команды (Core Team) 2002. http://election.uk.freebsd.org/candidates.html.
+
+[[freebsd-handle-pr]]
+[FreeBSD, 2002C] Даг-Эрлинг Смёрграв и Хитен Пандья. Copyright © 2002 The FreeBSD Documentation Project. The FreeBSD Documentation Project. Рекомендации по работе с сообщениями о проблемах. extref:{pr-guidelines}[Рекомендации по работе с сообщениями о проблемах].
+
+[[freebsd-send-pr]]
+[FreeBSD, 2002D] Даг-Эрлинг Смёрграв. Copyright © 2002 Проект документации FreeBSD. Проект документации FreeBSD. Составление сообщений о проблеме во FreeBSD. extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD].
+
+[[freebsd-committer]]
+[FreeBSD, 2001] Copyright © 2001 The FreeBSD Documentation Project. The FreeBSD Documentation Project. Справочник коммиттера. extref:{committers-guide}[Справочник коммиттера].
+
+[[freebsd-releng]]
+[FreeBSD, 2002E] Мюррей Стокли. Copyright © 2002 The FreeBSD Documentation Project. Проект документации FreeBSD. Подготовка релизов FreeBSD. extref:{releng}[Подготовка релизов FreeBSD].
+
+[[ref-bsd-handbook]]
+[FreeBSD, 2003A] Проект документации FreeBSD. Руководство FreeBSD. extref:{handbook}[Руководство FreeBSD].
+
+[[freebsd-contributors]]
+[FreeBSD, 2002F] Copyright © 2002 The FreeBSD Documentation Project. Проект документации FreeBSD. Участники проекта FreeBSD. extref:{contributors}[Участники проекта FreeBSD].
+
+[[freebsd-election]]
+[FreeBSD, 2002G] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. Выборы состава основной команды (Core Team) 2002. http://election.uk.freebsd.org.
+
+[[freebsd-expiration-policy]]
+[FreeBSD, 2002H] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. Политика истечения срока действия битов коммитов. 2002/04/06 15:35:30. https://www.freebsd.org/internal/expire-bits/.
+
+[[freebsd-new-account]]
+[FreeBSD, 2002I] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. Процедура создания нового аккаунта. 2002/08/19 17:11:27. https://www.freebsd.org/internal/new-account/.
+
+[[freebsd-doceng-charter]]
+[FreeBSD, 2003B] Copyright © 2002 The FreeBSD Documentation Project. The FreeBSD Documentation Project. Устав команды разработчиков документации FreeBSD. 2003/03/16 12:17. https://www.freebsd.org/internal/doceng/.
+
+[[ref-freebsd-trenches]]
+[Lehey, 2002] Грег Лехи. Copyright © 2002 Грег Лехи. Грег Лехи. Two years in the trenches. The evolution of a software project (Два года в окопах. Эволюция программного проекта). http://www.lemis.com/grog/In-the-trenches.pdf.
diff --git a/documentation/content/ru/books/dev-model/_index.po b/documentation/content/ru/books/dev-model/_index.po
new file mode 100644
index 0000000000..b619bee136
--- /dev/null
+++ b/documentation/content/ru/books/dev-model/_index.po
@@ -0,0 +1,3865 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:30+0300\n"
+"PO-Revision-Date: 2025-09-20 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksdev-model_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/dev-model/_index.adoc:1
+#, no-wrap
+msgid "A formal study of the organization of the FreeBSD project"
+msgstr "Формальное исследование организации проекта FreeBSD"
+
+#. 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 "Проектная модель для проекта FreeBSD"
+
+#. 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 [crossref:dev-model[thesis, "
+"Saers,2003]]."
+msgstr ""
+"До настоящего момента проект FreeBSD выпустил ряд описанных методик для "
+"выполнения различных частей работы. Однако, из-за растущего числа участников "
+"проекта, необходима модель проекта, обобщающая его структуру. footnote:[Это "
+"согласуется с законом Брукса, согласно которому добавление нового человека в "
+"задерживающийся проект сделает его ещё более задержанным, поскольку увеличит "
+"потребность в коммуникации. Модель проекта — это инструмент для снижения "
+"потребности в коммуникации.] Данная статья предоставляет такую модель "
+"проекта и передаётся в проект документации FreeBSD, где она может "
+"развиваться вместе с проектом, чтобы в любой момент времени отражать способ "
+"его работы. Она основана на [crossref:dev-model[диссертации, Saers,2003]]."
+
+#. 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 "Andrey A. Chernov mailto:ache@freebsd.org[ache@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:89
+msgid "Bruce A. Mah mailto:bmah@freebsd.org[bmah@freebsd.org]"
+msgstr "Bruce A. Mah mailto:bmah@freebsd.org[bmah@freebsd.org]"
+
+#. 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 "Dag-Erling Smørgrav mailto:des@freebsd.org[des@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:91
+msgid "Giorgos Keramidas mailto:keramida@freebsd.org[keramida@freebsd.org]"
+msgstr "Giorgos Keramidas mailto:keramida@freebsd.org[keramida@freebsd.org]"
+
+#. 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 ""
+"Ingvil Hovig "
+"mailto:ingvil.hovig@skatteetaten.no[ingvil.hovig@skatteetaten.no]"
+
+#. 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 "Jesper Holck mailto:jeh.inf@cbs.dk[jeh.inf@cbs.dk]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:94
+msgid "John Baldwin mailto:jhb@freebsd.org[jhb@freebsd.org]"
+msgstr "John Baldwin mailto:jhb@freebsd.org[jhb@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:95
+msgid "John Polstra mailto:jdp@freebsd.org[jdp@freebsd.org]"
+msgstr "John Polstra mailto:jdp@freebsd.org[jdp@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:96
+msgid "Kirk McKusick mailto:mckusick@freebsd.org[mckusick@freebsd.org]"
+msgstr "Kirk McKusick mailto:mckusick@freebsd.org[mckusick@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:97
+msgid "Mark Linimon mailto:linimon@freebsd.org[linimon@freebsd.org]"
+msgstr "Mark Linimon mailto:linimon@freebsd.org[linimon@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:98
+msgid "Marleen Devos"
+msgstr "Marleen Devos"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:99
+msgid "Niels Jørgenssen mailto:nielsj@ruc.dk[nielsj@ruc.dk]"
+msgstr "Niels Jørgenssen mailto:nielsj@ruc.dk[nielsj@ruc.dk]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:100
+msgid "Nik Clayton mailto:nik@freebsd.org[nik@freebsd.org]"
+msgstr "Nik Clayton mailto:nik@freebsd.org[nik@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:101
+msgid "Poul-Henning Kamp mailto:phk@freebsd.org[phk@freebsd.org]"
+msgstr "Poul-Henning Kamp mailto:phk@freebsd.org[phk@freebsd.org]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:102
+msgid "Simon L. Nielsen mailto:simon@freebsd.org[simon@freebsd.org]"
+msgstr "Simon L. Nielsen mailto:simon@freebsd.org[simon@freebsd.org]"
+
+#. 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 [crossref:dev-model[brooks, Brooks, 1995]], increasing "
+"the number of project participants increases the communication in the "
+"project exponentially. 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 ""
+"Модель проекта — это способ снижения накладных расходов на коммуникации в "
+"проекте. Как показано в [crossref:dev-model[brooks, Brooks, 1995]], "
+"увеличение числа участников проекта приводит к экспоненциальному росту "
+"коммуникаций в проекте. За последние годы FreeBSD значительно увеличил как "
+"количество активных пользователей, так и коммиттеров, что соответственно "
+"привело к росту коммуникаций. Данная модель проекта поможет снизить эти "
+"накладные расходы за счёт предоставления актуального описания проекта."
+
+#. 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.\" [crossref:dev-model[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 ""
+"Во время выборов в Core в 2002 году Марк Мюррей заявил: «Я против длинного "
+"свода правил, так как это удовлетворяет склонности к юриспруденции и "
+"противоречит техноцентричности, в которой проект так нуждается.» "
+"[crossref:dev-model[bsd-election2002, FreeBSD, 2002B]]. Эта модель проекта "
+"не предназначена для того, чтобы оправдывать создание ограничений для "
+"разработчиков, а служит инструментом для облегчения координации. Она "
+"призвана описывать проект, давая обзор того, как выполняются различные "
+"процессы. Это введение в то, как работает проект FreeBSD."
+
+#. 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 [crossref:dev-model[jorgensen2001, "
+"Jørgensen, 2001]], FreeBSD's official documents, discussions on FreeBSD "
+"mailing lists and interviews with developers."
+msgstr ""
+"Модель проекта FreeBSD будет описана по состоянию на 1 июля 2004 года. Она "
+"основана на работе Нильса Йоргенсена [crossref:dev-model[jorgensen2001, "
+"Jørгенсен, 2001]], официальных документах FreeBSD, обсуждениях в списках "
+"рассылки FreeBSD и интервью с разработчиками."
+
+#. 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 ""
+"После определения используемых терминов в этом документе будет описана "
+"организационная структура (включая описания ролей и линии коммуникации), "
+"рассмотрена модель методологии, а после представления инструментов, "
+"используемых для контроля процессов, будут описаны определенные процессы. В "
+"заключение будут представлены основные подпроекты проекта FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:125
+msgid ""
+"[crossref:dev-model[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 ""
+"[crossref:dev-model[freebsd-developer-handbook, FreeBSD, 2002A]] Разделы 1.2 "
+"и 1.3 описывают видение и архитектурные принципы проекта. Видение "
+"сформулировано как: \"Создать наилучший пакет операционной системы, подобной "
+"UNIX®, с должным уважением к оригинальной идеологии программных "
+"инструментов, а также к удобству использования, производительности и "
+"стабильности.\" Архитектурные принципы помогают определить, находится ли "
+"проблема, которую кто-то хочет решить, в рамках проекта"
+
+#. 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:136
+msgid ""
+"An \"activity\" is an element of work performed during the course of a "
+"project [crossref:dev-model[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 ""
+"\"Активность\" — это элемент работы, выполняемый в ходе проекта "
+"[crossref:dev-model[ref-pmbok, PMI, 2000]]. У неё есть результат, который "
+"ведёт к достижению цели. Такой результат может быть либо входом для другой "
+"активности, либо частью поставки процесса."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:138
+#, no-wrap
+msgid "Process"
+msgstr "Процесс"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:143
+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:145
+#, no-wrap
+msgid "Hat"
+msgstr "Роль (hat)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:151
+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 ""
+"\"Hat\" (шляпа) является синонимом роли. Роль имеет определенные обязанности "
+"в процессе и ответственность за результат процесса. Роль выполняет действия. "
+"Четко определено, по каким вопросам участники проекта и люди вне проекта "
+"должны обращаться к ответственному, выполняющему эту роль."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:153
+#, no-wrap
+msgid "Outcome"
+msgstr "Результат"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:161
+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 [crossref:dev-model[ref-pmbok, PMI, "
+"2000]]. Examples of outcomes are a piece of software, a decision made or a "
+"report written."
+msgstr ""
+"«Результат» — это конечный продукт процесса. Это синоним понятия "
+"«поставляемый результат», который определяется как «любой измеримый, "
+"осязаемый, проверяемый результат, итог или элемент, который должен быть "
+"произведён для завершения проекта или его части. Часто используется в более "
+"узком смысле в отношении внешнего поставляемого результата, который подлежит "
+"утверждению спонсором проекта или заказчиком» согласно [crossref:dev-"
+"model[ref-pmbok, PMI, 2000]]. Примерами результатов являются программное "
+"обеспечение, принятое решение или написанный отчёт."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:163
+#, no-wrap
+msgid "FreeBSD"
+msgstr "FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:166
+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 ""
+"Говоря \"FreeBSD\", мы подразумеваем UNIX-подобную операционную систему "
+"FreeBSD, основанную на BSD, тогда как говоря \"Проект FreeBSD\", мы "
+"подразумеваем организацию проекта."
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:168
+#, no-wrap
+msgid "Organisational structure"
+msgstr "Организационная структура"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:171
+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 ""
+"Хотя никто не является владельцем FreeBSD, организация FreeBSD разделена на "
+"ядро, коммиттеров и участников и является частью сообщества FreeBSD, которое "
+"существует вокруг неё."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:173
+msgid "The FreeBSD Project's structure (in order of descending authority)"
+msgstr "Структура проекта FreeBSD (в порядке убывания полномочий)"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:178
+#: documentation/content/en/books/dev-model/_index.adoc:213
+#, no-wrap
+msgid "Group"
+msgstr "Группа"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:180
+#: documentation/content/en/books/dev-model/_index.adoc:216
+#, no-wrap
+msgid "Number of people"
+msgstr "Количество людей"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:181
+#: documentation/content/en/books/dev-model/_index.adoc:217
+#, no-wrap
+msgid "Core members"
+msgstr "Основные участники"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:183
+#: documentation/content/en/books/dev-model/_index.adoc:220
+#, no-wrap
+msgid "9"
+msgstr "9"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:184
+#: documentation/content/en/books/dev-model/_index.adoc:221
+#, no-wrap
+msgid "Committers"
+msgstr "Коммиттеры"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:186
+#, no-wrap
+msgid "318"
+msgstr "318"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:187
+#: documentation/content/en/books/dev-model/_index.adoc:237
+#, no-wrap
+msgid "Contributors"
+msgstr "Участники"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:188
+#: documentation/content/en/books/dev-model/_index.adoc:239
+#, no-wrap
+msgid "~3000"
+msgstr "~3000"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:191
+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 ""
+"Количество коммиттеров было определено путем анализа журналов CVS с 1 января "
+"2004 года по 31 декабря 2004 года, а список участников — путем просмотра "
+"перечня внесенных изменений и отчетов о проблемах."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:196
+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 ""
+"Основной ресурс сообщества FreeBSD — это его разработчики: коммиттеры и "
+"контрибьюторы. Именно их вклад позволяет проекту развиваться. Обычные "
+"разработчики называются участниками (контрибьюторами). По состоянию на 1 "
+"января 2003 года в проекте насчитывается около 5500 контрибьюторов."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:200
+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:204
+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 ""
+"Проект можно разделить на четыре отдельные части, и большинство "
+"разработчиков сосредоточат своё участие на одной из частей FreeBSD. Эти "
+"четыре части — разработка ядра, разработка пользовательского пространства, "
+"порты и документация. Под базовой системой подразумеваются как ядро, так и "
+"пользовательское пространство."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:206
+msgid "This split changes our table to look like this:"
+msgstr "Это разделение изменяет нашу таблицу следующим образом:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:208
+msgid "The FreeBSD Project's structure with committers in categories"
+msgstr ""
+"Структура проекта FreeBSD с участниками, имеющими права на запись, по "
+"категориям"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:214
+#, no-wrap
+msgid "Category"
+msgstr "Категория"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:222
+#, no-wrap
+msgid "Base"
+msgstr "Базовый"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:224
+#, no-wrap
+msgid "164"
+msgstr "164"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:226
+#, no-wrap
+msgid "Docs"
+msgstr "Docs"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:228
+#, no-wrap
+msgid "45"
+msgstr "45"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:230
+#, no-wrap
+msgid "Ports"
+msgstr "Порты"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:232
+#, no-wrap
+msgid "166"
+msgstr "166"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:234
+#, no-wrap
+msgid "Total"
+msgstr "Total"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:236
+#, no-wrap
+msgid "374"
+msgstr "374"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:244
+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 ""
+"Количество коммиттеров по областям было определено путем анализа журналов "
+"CVS с 1 января 2004 года по 31 декабря 2004 года. Обратите внимание, что "
+"многие коммиттеры работают в нескольких областях, поэтому общее число больше "
+"реального количества коммиттеров. Общее количество активных уникальных "
+"коммиттеров на июнь 2022 года составляло 317."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:247
+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:252
+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 ""
+"Ядро является основным строительным блоком FreeBSD. Хотя пользовательские "
+"приложения защищены от сбоев в других пользовательских приложениях, вся "
+"система уязвима от ошибок в ядре. Это, в сочетании с огромным количеством "
+"зависимостей в ядре и тем, что нелегко увидеть все последствия изменения "
+"ядра, требует от разработчиков относительно полного понимания ядра. "
+"Множественные усилия по разработке в ядре также требуют более тесной "
+"координации, чем пользовательские приложения."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:256
+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 crossref:dev-model[role-"
+"maintainer, Maintainership] section."
+msgstr ""
+"Основные утилиты, известные как пользовательское окружение (userland), "
+"предоставляют интерфейс, который определяет FreeBSD, включая "
+"пользовательский интерфейс, общие библиотеки и внешние интерфейсы для "
+"подключения клиентов. В настоящее время 162 человека участвуют в разработке "
+"и поддержке пользовательского окружения, многие из которых являются "
+"сопровождающими (maintainers) для своей части кода. Вопросы сопровождения "
+"будут рассмотрены в разделе crossref:dev-model[role-"
+"maintainer,Сопровождение]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:259
+msgid ""
+"Documentation is handled by crossref:dev-model[sub-project-documentation, "
+"The FreeBSD Documentation Project] 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 ""
+"Документация обрабатывается crossref:dev-model[sub-project-documentation, "
+"Проектом документации FreeBSD] и включает все документы, связанные с "
+"проектом FreeBSD, включая веб-страницы. В течение 2004 года 101 человек "
+"внесли изменения в Проект документации FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:267
+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 "
+"crossref:dev-model[sub-project-ports, The Ports Subproject]."
+msgstr ""
+"Порты — это коллекция метаданных, необходимых для корректной сборки "
+"программных пакетов в FreeBSD. Например, порт для веб-браузера Mozilla "
+"содержит информацию о том, откуда загружать исходный код, какие патчи "
+"применять и как, а также как пакет должен быть установлен в системе. Это "
+"позволяет автоматизированным инструментам загружать, собирать и "
+"устанавливать пакеты. На момент написания доступно более 12600 портов "
+"footnote:[Статистика получена подсчётом количества записей в файле, "
+"загруженном portsdb на 1 апреля 2005 года. portsdb является частью порта "
+"sysutils/portupgrade.], начиная от веб-серверов и игр до языков "
+"программирования и большинства типов приложений, используемых на современных "
+"компьютерах. Порты подробно рассматриваются в разделе crossref:dev-model[sub-"
+"project-ports, Подпроект Ports]."
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:269
+#, no-wrap
+msgid "Methodology model"
+msgstr "Методологическая модель"
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:272
+#, no-wrap
+msgid "Development model"
+msgstr "Модель разработки"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:276
+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 ""
+"Не существует определенной модели того, как люди пишут код в FreeBSD. Однако "
+"Нильс Йоргенссен предложил модель того, как написанный код интегрируется в "
+"проект."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:278
+#: documentation/content/en/books/dev-model/_index.adoc:877
+msgid "Jørgenssen's model for change integration"
+msgstr "Модель Йоргенссена для интеграции изменений"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:283
+#: documentation/content/en/books/dev-model/_index.adoc:882
+#, no-wrap
+msgid "Stage"
+msgstr "Этап"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:284
+#: documentation/content/en/books/dev-model/_index.adoc:883
+#, no-wrap
+msgid "Next if successful"
+msgstr "Следующий, если успешно"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:286
+#: documentation/content/en/books/dev-model/_index.adoc:885
+#, no-wrap
+msgid "Next if unsuccessful"
+msgstr "Следующий, если неудачно"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:287
+#: documentation/content/en/books/dev-model/_index.adoc:294
+#: documentation/content/en/books/dev-model/_index.adoc:298
+#: documentation/content/en/books/dev-model/_index.adoc:302
+#: documentation/content/en/books/dev-model/_index.adoc:306
+#: documentation/content/en/books/dev-model/_index.adoc:309
+#: documentation/content/en/books/dev-model/_index.adoc:886
+#: documentation/content/en/books/dev-model/_index.adoc:893
+#: documentation/content/en/books/dev-model/_index.adoc:897
+#: documentation/content/en/books/dev-model/_index.adoc:901
+#: documentation/content/en/books/dev-model/_index.adoc:905
+#: documentation/content/en/books/dev-model/_index.adoc:908
+#, no-wrap
+msgid "code"
+msgstr "программирование"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:288
+#: documentation/content/en/books/dev-model/_index.adoc:291
+#: documentation/content/en/books/dev-model/_index.adoc:887
+#: documentation/content/en/books/dev-model/_index.adoc:890
+#, no-wrap
+msgid "review"
+msgstr "рецензирование"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:292
+#: documentation/content/en/books/dev-model/_index.adoc:295
+#: documentation/content/en/books/dev-model/_index.adoc:891
+#: documentation/content/en/books/dev-model/_index.adoc:894
+#, no-wrap
+msgid "pre-commit test"
+msgstr "предварительная проверка перед коммитом"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:296
+#: documentation/content/en/books/dev-model/_index.adoc:299
+#: documentation/content/en/books/dev-model/_index.adoc:895
+#: documentation/content/en/books/dev-model/_index.adoc:898
+#, no-wrap
+msgid "development release"
+msgstr "релиз для разработки"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:300
+#: documentation/content/en/books/dev-model/_index.adoc:303
+#: documentation/content/en/books/dev-model/_index.adoc:899
+#: documentation/content/en/books/dev-model/_index.adoc:902
+#, no-wrap
+msgid "parallel debugging"
+msgstr "параллельная отладка"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:304
+#: documentation/content/en/books/dev-model/_index.adoc:307
+#: documentation/content/en/books/dev-model/_index.adoc:903
+#: documentation/content/en/books/dev-model/_index.adoc:906
+#, no-wrap
+msgid "production release"
+msgstr "релиз для производства"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:313
+msgid ""
+"The \"development release\" is the FreeBSD-CURRENT (\"-CURRENT\") branch and "
+"the \"production release\" is the FreeBSD-STABLE branch (\"-STABLE\") "
+"[crossref:dev-model[jorgensen2001, Jørgensen, 2001]]."
+msgstr ""
+"\"Релиз для разработки\" — это ветка FreeBSD-CURRENT (\"-CURRENT\"), а "
+"\"релиз для производства\" — ветка FreeBSD-STABLE (\"-STABLE\") "
+"[crossref:dev-model[jorgensen2001, Jørgensen, 2001]]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:319
+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 ""
+"Это модель для одного изменения, которая показывает, что после написания "
+"кода разработчики ищут рецензирование сообщества и пытаются интегрировать "
+"это изменение в свои собственные системы. После интеграции изменения в "
+"версию разработки, называемую FreeBSD-CURRENT, оно тестируется многими "
+"пользователями и разработчиками сообщества FreeBSD. После достаточного "
+"тестирования оно объединяется с производственной версией, называемой FreeBSD-"
+"STABLE. Если каждая стадия не завершена успешно, разработчику необходимо "
+"вернуться, внести изменения в код и перезапустить процесс. Интеграция "
+"изменения в -CURRENT или -STABLE называется выполнением коммита."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:322
+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 ""
+"Йоргенсен обнаружил, что большинство разработчиков FreeBSD работают "
+"индивидуально, то есть эта модель используется параллельно многими "
+"разработчиками в различных текущих процессах разработки. Разработчик также "
+"может работать над несколькими изменениями одновременно, поэтому, ожидая "
+"рецензирования или тестирования одного или нескольких своих изменений, он "
+"может писать другое изменение."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:325
+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 ""
+"Поскольку каждый коммит представляет собой инкрементальное изменение, это "
+"модель с очень высокой степенью инкрементальности. Коммиты происходят "
+"настолько часто, что за один год footnote:[Для получения этого числа был "
+"исследован период с 1 января 2004 года по 31 декабря 2004 года.], было "
+"сделано 85427 коммитов, что составляет в среднем 233 коммита в день."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:329
+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:335
+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 ""
+"С точки зрения пошаговой модели (такой как каскадная модель), остальные "
+"этапы можно рассматривать как дальнейшую проверку и интеграцию системы. Эта "
+"интеграция системы также важна для определения того, будет ли изменение "
+"принято сообществом. До момента фиксации кода разработчик волен выбирать, "
+"насколько активно он будет обсуждать его с остальными участниками проекта. "
+"Чтобы -CURRENT мог выполнять роль буфера (позволяя откатывать идеи, которые "
+"оказались с невыявленными недостатками), минимальный срок, в течение "
+"которого изменения должны оставаться в -CURRENT перед слиянием в -STABLE, "
+"составляет 3 дня. Такое слияние называется MFC (Merge From Current)."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:338
+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:341
+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 ""
+"Единственными исключениями из этой модели являются исправления безопасности "
+"и изменения в функциях, объявленных устаревшими в ветке -CURRENT. В этих "
+"случаях изменения могут быть внесены напрямую в ветку -STABLE."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:346
+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 ""
+"В дополнение к множеству людей, работающих над проектом, существует "
+"множество связанных проектов в рамках FreeBSD. Это могут быть проекты, "
+"разрабатывающие совершенно новые функции, подпроекты или проекты, результаты "
+"которых интегрируются в FreeBSD footnote:[Например, разработка стека "
+"Bluetooth начиналась как подпроект, пока не была признана достаточно "
+"стабильной для включения в ветку -CURRENT. Теперь это часть основной системы "
+"FreeBSD.]. Эти проекты вписываются в FreeBSD так же, как и обычные "
+"разработки: они создают код, который интегрируется с проектом FreeBSD. "
+"Однако некоторые из них (например, Ports и Documentation) имеют привилегию "
+"применяться к обеим веткам или коммитить напрямую как в -CURRENT, так и в "
+"-STABLE."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:353
+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 ""
+"Не существует стандартов по выполнению проектирования, также как и "
+"централизованного репозитория для хранения проектов. Основной дизайн взят из "
+"4.4BSD. footnote:[По словам Кирка Маккузика, после 20 лет разработки "
+"операционных систем UNIX, интерфейсы в основном уже определены. Поэтому нет "
+"необходимости в большом количестве проектирования. Однако новые применения "
+"системы и новое оборудование приводят к тому, что некоторые реализации "
+"становятся более выгодными по сравнению с ранее предпочитаемыми. Одним из "
+"примеров является появление веб-браузинга, который превратил обычное TCP/IP-"
+"соединение в короткие всплески данных, а не в устойчивый поток за более "
+"длительный период времени.] Поскольку проектирование является частью этапа "
+"\"Программирование\" в модели Йоргенсена, каждый разработчик или подпроект "
+"сам решает, как это должно выполняться. Даже если проектирование должно "
+"храниться в централизованном репозитории, результаты этапов проектирования "
+"будут иметь ограниченную полезность, так как различия в методологиях сделают "
+"их плохо совместимыми, если вообще совместимыми. Для общего проектирования "
+"проекта, проект полагается на подпроекты, которые договариваются о "
+"совместимых интерфейсах между собой, а не на диктат интерфейсов."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:355
+#, no-wrap
+msgid "Release branches"
+msgstr "Ветви релизов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:359
+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 ""
+"Версии FreeBSD лучше всего иллюстрируются деревом с множеством ветвей, где "
+"каждая основная ветвь представляет основную версию. Минорные версии "
+"представлены ветвями основных ветвей."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:366
+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 ""
+"В следующем дереве релизов стрелки, следующие друг за другом в определенном "
+"направлении, представляют ветку. Прямоугольники со сплошными линиями и ромбы "
+"обозначают официальные релизы. Прямоугольники с пунктирными линиями "
+"представляют ветку разработки на тот момент. Ветки безопасности обозначены "
+"овалами. Ромбы отличаются от прямоугольников тем, что они представляют "
+"развилку, то есть место, где ветка разделяется на две ветки, одна из которых "
+"становится подветкой. Например, на 4.0-RELEASE ветка 4.0-CURRENT разделилась "
+"на 4-STABLE и 5.0-CURRENT. На 4.5-RELEASE ветка разветвилась на ветку "
+"безопасности под названием RELENG_4_5."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:367
+#, no-wrap
+msgid "The FreeBSD release tree"
+msgstr "Дерево релизов FreeBSD"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:368
+#, 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:368
+#, no-wrap
+msgid "branches.png"
+msgstr "branches.png"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:374
+#, no-wrap
+msgid "Major release"
+msgstr "Основные выпуски"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:375
+#, no-wrap
+msgid "Forked from"
+msgstr "Форкнут из"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:377
+#, no-wrap
+msgid "Following minor releases"
+msgstr "Следующие минорные выпуски"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:378
+#: documentation/content/en/books/dev-model/_index.adoc:398
+#, no-wrap
+msgid "..."
+msgstr "..."
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:382
+#, no-wrap
+msgid "3.0 Current (development branch)"
+msgstr "3.0 Current (ветка разработки)"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:385
+#, 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 "Ветки Releng 3: выпуски с 3.0 Release по 3.5 Release, ведущие к выпуску 3.5.1 Release и последующей ветке 3 Stable"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:386
+#, no-wrap
+msgid "4.0 Current (development branch)"
+msgstr "4.0 Current (ветка разработки)"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:387
+#, no-wrap
+msgid "3.1 Release"
+msgstr "Релиз 3.1"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:389
+#, 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 "Ветви Releng 4: релизы с 4.1 по 4.6 (и релиз 4.6.2), затем релизы с 4.7 по 4.11 (все, начиная с релиза 4.3, также ведущие к ветви Releng_4_n), и последующая ветвь релиза 4"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:390
+#, no-wrap
+msgid "5.0 Current (development branch)"
+msgstr "5.0 Current (ветка разработки)"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:391
+#, no-wrap
+msgid "4.0 Release"
+msgstr "Релиз 4.0"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:393
+#, 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 "Ветви Releng 5: Релизы с 5.0 до 5.4 (за исключением 5.0 и 5.3, которые также ведут к ветке Releng_5_n), и последующая ветка релиза 5"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:394
+#, no-wrap
+msgid "6.0 Current (development branch)"
+msgstr "6.0 Current (ветка разработки)"
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:395
+#, no-wrap
+msgid "5.3 Release"
+msgstr "Релиз 5.3"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:405
+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. [crossref:dev-model[freebsd-releng, FreeBSD, 2002E]]"
+msgstr ""
+"Последняя версия -CURRENT всегда обозначается как -CURRENT, а последний "
+"релиз -STABLE всегда обозначается как -STABLE. На этом рисунке -STABLE "
+"относится к 4-STABLE, а -CURRENT относится к 5.0-CURRENT после 5.0-RELEASE. "
+"[crossref:dev-model[freebsd-releng, FreeBSD, 2002E]]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:412
+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 ""
+"«Основной выпуск» всегда создаётся из ветки -CURRENT. Однако ветка -CURRENT "
+"не обязательно должна разветвляться в этот момент, а может сосредоточиться "
+"на стабилизации. Примером этого является то, что после 3.0-RELEASE, 3.1-"
+"RELEASE также был продолжением ветки -CURRENT, и -CURRENT не стал настоящей "
+"веткой разработки до тех пор, пока не был выпущен этот релиз и не была "
+"создана ветка 3-STABLE. Когда -CURRENT снова становится веткой разработки, "
+"за ним может следовать только основной выпуск. Ожидается, что ветка 5-STABLE "
+"будет отделена от 5.0-CURRENT примерно на момент выпуска 5.3-RELEASE. Только "
+"после отделения 5-STABLE ветка разработки получит название 6.0-CURRENT."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:414
+msgid ""
+"A \"minor release\" is made from the -CURRENT branch following a major "
+"release, or from the -STABLE branch."
+msgstr ""
+"\"Минорный релиз\" создается из ветки -CURRENT после основного релиза или из "
+"ветки -STABLE."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:417
+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 ""
+"Начиная с версии 4.3-RELEASE footnote:[Первым релизом, для которого это "
+"действительно произошло, был 4.5-RELEASE, но ветки безопасности были созданы "
+"одновременно для 4.3-RELEASE и 4.4-RELEASE.], когда выпускается минорный "
+"релиз, он становится «веткой безопасности». Это предназначено для "
+"организаций, которые не хотят следовать ветке -STABLE и потенциальным новым/"
+"изменённым функциям, которые она предлагает, но вместо этого требуют "
+"абсолютно стабильной среды, обновляемой только для внедрения исправлений "
+"безопасности. footnote:[Здесь вы видите терминологическое пересечение со "
+"словом «стабильный», что приводит к некоторой путанице. Ветка -STABLE по-"
+"прежнему является веткой разработки, цель которой — быть полезной для "
+"большинства пользователей. Если для системы неприемлемо получать изменения, "
+"которые не были объявлены на момент её развёртывания, такая система должна "
+"работать на ветке безопасности.]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:422
+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 ""
+"Каждое обновление в ветке безопасности называется \"уровнем исправления\" "
+"(patchlevel). Для каждого выполненного улучшения безопасности номер уровня "
+"исправления увеличивается, что позволяет легко отслеживать, какие улучшения "
+"безопасности были реализованы. В случаях особенно серьезных уязвимостей "
+"безопасности может быть выпущен полностью новый релиз из ветки безопасности. "
+"Примером этого является 4.6.2-RELEASE."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:424
+#, no-wrap
+msgid "Model summary"
+msgstr "Сводка модели"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:427
+msgid ""
+"To summarise, the development model of FreeBSD can be seen as the following "
+"tree:"
+msgstr ""
+"Для подведения итогов, модель разработки FreeBSD можно представить в виде "
+"следующего дерева:"
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:428
+#, no-wrap
+msgid "The overall development model"
+msgstr "Общая модель разработки"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:429
+#: documentation/content/en/books/dev-model/_index.adoc:1109
+#, 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:429
+#, no-wrap
+msgid "freebsd-code-model.png"
+msgstr "freebsd-code-model.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:432
+msgid ""
+"The tree of the FreeBSD development with ongoing development efforts and "
+"continuous integration."
+msgstr ""
+"Дерево разработки FreeBSD с текущими усилиями по разработке и непрерывной "
+"интеграцией."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:436
+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 ""
+"Дерево символизирует версии выпусков, где основные версии порождают новые "
+"главные ветви, а второстепенные версии являются версиями главной ветви. "
+"Верхняя ветвь — это ветвь -CURRENT, в которую интегрируется вся новая "
+"разработка, а ветвь -STABLE находится непосредственно под ней. Под ветвью "
+"-STABLE находятся старые, неподдерживаемые версии."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:440
+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 ""
+"Проект находится в тумане постоянной разработки, и разработчики выбирают "
+"модели разработки, которые считают подходящими. Результаты их работы затем "
+"интегрируются в -CURRENT, где проходят параллельную отладку, и наконец "
+"объединяются из -CURRENT в -STABLE. Исправления безопасности объединяются из "
+"-STABLE в ветки безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:447
+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 ""
+"Многие коммиттеры имеют специальную область ответственности. Эти роли "
+"называются \"hats\" (шляпами). Эти роли могут быть либо проектными ролями, "
+"например, офицер по связям с общественностью, либо сопровождающим "
+"определённой части кода. Поскольку это проект, где люди добровольно уделяют "
+"своё свободное время, люди с назначенными ролями не всегда доступны. Поэтому "
+"они должны назначить заместителя, который может выполнять эту роль в их "
+"отсутствие. Другой вариант — передать роль группе."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:452
+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:454
+#, no-wrap
+msgid "Hats"
+msgstr "Ответственные"
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:457
+#, no-wrap
+msgid "General Hats"
+msgstr "Стандартные роли"
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:460
+#, no-wrap
+msgid "Contributor"
+msgstr "Участник (контрибьютор)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:465
+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. [crossref:dev-model[freebsd-contributors, FreeBSD, 2002F]]"
+msgstr ""
+"Участник вносит вклад в проект FreeBSD в качестве разработчика, автора, "
+"отправляя отчеты о проблемах или другими способами способствуя прогрессу "
+"проекта. Участник не имеет особых привилегий в проекте FreeBSD. "
+"[crossref:dev-model[freebsd-contributors, FreeBSD, 2002F]]"
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:467
+#, no-wrap
+msgid "Committer"
+msgstr "Коммиттер"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:472
+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. [crossref:dev-model[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 ""
+"Человек, обладающий необходимыми привилегиями для добавления своего кода или "
+"документации в репозиторий. Коммиттер совершил коммит в течение последних 12 "
+"месяцев. [crossref:dev-model[freebsd-developer-handbook, FreeBSD, 2000A]] "
+"Активный коммиттер — это коммиттер, который в среднем совершал один коммит в "
+"месяц в течение этого времени."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:475
+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 ""
+"Стоит отметить, что нет технических препятствий, которые могли бы помешать "
+"кому-либо, получившему права на коммиты в основном или подпроекте, делать "
+"коммиты в частях исходного кода проекта, для которых у коммиттера нет явного "
+"разрешения на изменение. Однако, при желании внести изменения в части, с "
+"которыми коммиттер ранее не работал, следует изучить логи, чтобы понять, что "
+"происходило в этой области ранее, а также прочитать файл MAINTAINERS, чтобы "
+"узнать, есть ли у сопровождающего этой части какие-либо особые требования к "
+"внесению изменений в код."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:477
+#, no-wrap
+msgid "Core Team"
+msgstr "Основная команда (Core Team)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:483
+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 ""
+"Основная команда избирается коммиттерами из числа коммиттеров и выполняет "
+"функции совета директоров проекта FreeBSD. Она повышает активных участников "
+"до коммиттеров, назначает людей на четко определенные роли (hats) и является "
+"окончательным арбитром при принятии решений о направлении развития проекта. "
+"На 1 июля 2004 года в состав основной команды входило 9 членов. Выборы "
+"проводятся каждые два года."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:485
+#, no-wrap
+msgid "Maintainership"
+msgstr "Сопровождение"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:489
+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:492
+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 ""
+"В исходном коде FreeBSD есть файл MAINTAINERS, содержащий краткое описание "
+"того, как каждый сопровождающий предпочитает получать вклады. Наличие этого "
+"уведомления и контактной информации позволяет разработчикам сосредоточиться "
+"на разработке, а не застревать в медленной переписке, если сопровождающий "
+"будет недоступен в течение некоторого времени."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:495
+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:497
+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:499
+#, no-wrap
+msgid "Official Hats"
+msgstr "Официальные Роли"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:504
+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 ""
+"Официальные роли в проекте FreeBSD — это более или менее формализованные и в "
+"основном административные должности. Они обладают полномочиями и "
+"ответственностью в своей области. В следующем списке показаны направления "
+"ответственности и дано описание каждой роли, включая информацию о том, кто "
+"её занимает."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:506
+#, no-wrap
+msgid "Documentation project manager"
+msgstr "Менеджер проекта документации"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:509
+msgid ""
+"crossref:dev-model[sub-project-documentation, The FreeBSD Documentation "
+"Project] architect is responsible for defining and following up "
+"documentation goals for the committers in the Documentation project, which "
+"they supervise."
+msgstr ""
+"Архитектор crossref:dev-model[sub-project-documentation, Проекта "
+"документации FreeBSD] отвечает за определение и контроль целей документации "
+"для коммиттеров в проекте Документации, за которым они присматривают."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:512
+msgid ""
+"Hat held by: The DocEng team mailto:doceng@FreeBSD.org[doceng@FreeBSD.org]. "
+"The https://www.freebsd.org/internal/doceng/[ DocEng Charter]."
+msgstr ""
+"Роль поддерживается: Командой DocEng "
+"mailto:doceng@FreeBSD.org[doceng@FreeBSD.org]. https://www.freebsd.org/"
+"internal/doceng/[Устав DocEng]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:514
+#, no-wrap
+msgid "Postmaster"
+msgstr "Postmaster"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:518
+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 ""
+"Postmaster отвечает за корректную доставку почты на адреса электронной почты "
+"коммиттеров. Также он отвечает за работоспособность почтовых рассылок и "
+"должен принимать меры против возможных сбоев в работе почты, таких как "
+"троллинг-, спам- и вирус-фильтры."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:520
+msgid ""
+"Hat currently held by: the Postmaster Team "
+"mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org]."
+msgstr ""
+"Текущий руководитель: Команда почтовых серверов "
+"mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:522
+#, no-wrap
+msgid "Release Coordination"
+msgstr "Координация выпусков"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:525
+msgid "The responsibilities of the Release Engineering Team are"
+msgstr "Обязанности команды выпуска релизов включают"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:527
+msgid ""
+"Setting, publishing and following a release schedule for official releases"
+msgstr "Установка, публикация и соблюдение графика выпуска официальных релизов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:528
+msgid "Documenting and formalising release engineering procedures"
+msgstr "Документирование и формализация процедур выпуска релизов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:529
+msgid "Creation and maintenance of code branches"
+msgstr "Создание и поддержка веток кода"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:530
+msgid ""
+"Coordinating with the Ports and Documentation teams to have an updated set "
+"of packages and documentation released with the new releases"
+msgstr ""
+"Согласование с командами Ports и Documentation для выпуска обновленного "
+"набора пакетов и документации вместе с новыми релизами"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:531
+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:534
+msgid ""
+"Further information about the development process is available in the "
+"crossref:dev-model[process-release-engineering, Release engineering] section."
+msgstr ""
+"Дополнительная информация о процессе разработки доступна в разделе "
+"crossref:dev-model[process-release-engineering, Выпуск релизов]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:538
+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 ""
+"Роль поддерживается: командой выпуск релизов (Release Engineering) "
+"mailto:re@FreeBSD.org[re@FreeBSD.org]. https://www.freebsd.org/releng/"
+"charter/[ Устав Release Engineering]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:540
+#, no-wrap
+msgid "Public Relations & Corporate Liaison"
+msgstr "Отношения с общественностью и корпоративные связи"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:543
+msgid "The Public Relations & Corporate Liaison's responsibilities are:"
+msgstr ""
+"Обязанности отдела по связям с общественностью и корпоративным отношениям "
+"включают:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:545
+msgid ""
+"Making press statements when happenings that are important to the FreeBSD "
+"Project happen."
+msgstr ""
+"Публиковать пресс-релизы при возникновении событий, важных для проекта "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:546
+msgid ""
+"Being the official contact person for corporations that are working close "
+"with the FreeBSD Project."
+msgstr ""
+"Быть официальным контактным лицом для корпораций, тесно сотрудничающих с "
+"проектом FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:547
+msgid ""
+"Take steps to promote FreeBSD within both the Open Source community and the "
+"corporate world."
+msgstr ""
+"Принимать меры для продвижения FreeBSD как в сообществе Open Source, так и в "
+"корпоративном мире."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:548
+msgid "Handle the \"freebsd-advocacy\" mailing list."
+msgstr "Обрабатывать список рассылки \"freebsd-advocacy\"."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:550
+msgid "This hat is currently not occupied."
+msgstr "Эта роль в настоящее время не занята."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:552
+#, no-wrap
+msgid "Security Officer"
+msgstr "Ответственный за безопасность (Security Officer)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:556
+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 ""
+"Основная обязанность Ответственного за безопасность — координировать обмен "
+"информацией с сообществом безопасности и проектом FreeBSD. Ответственный за "
+"безопасность также принимает меры при поступлении сообщений о проблемах "
+"безопасности и способствует активному развитию в области безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:562
+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 crossref:dev-model[role-"
+"core, Core Team] 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 ""
+"Из-за опасений, что информация об уязвимостях может попасть к "
+"злоумышленникам до выпуска исправления, только Ответственный за "
+"безопасность, включающий руководителя, заместителя и двух членов "
+"crossref:dev-model[role-core, Core Team], получает конфиденциальную "
+"информацию о проблемах безопасности. Однако для создания или внедрения "
+"исправления Ответственный за безопасность может обратиться к команде "
+"mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] для помощи в "
+"выполнении работы."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:564
+#, no-wrap
+msgid "Source Repository Manager"
+msgstr "Менеджер репозитория исходного кода"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:570
+msgid ""
+"The Source Repository Manager is the only one who is allowed to directly "
+"modify the repository without using the crossref:dev-model[tool-git, 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 ""
+"Менеджер репозитория исходного кода — единственный, кому разрешено напрямую "
+"изменять репозиторий без использования инструмента crossref:dev-model[tool-"
+"git, Git]. В его обязанности входит оперативное решение технических проблем, "
+"возникающих в репозитории. Менеджер репозитория исходного кода имеет право "
+"отменять коммиты, если это необходимо для устранения технических проблем с "
+"Git."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:572
+msgid ""
+"Hat held by: the Source Repository Manager "
+"mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org]."
+msgstr ""
+"Роль принадлежит: Менеджеру репозитория исходного кода "
+"mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:574
+#, no-wrap
+msgid "Election Manager"
+msgstr "Менеджер выборов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:581
+msgid ""
+"The Election Manager is responsible for the crossref:dev-model[process-core-"
+"election, 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 crossref:dev-model[role-core, Core Team]"
+msgstr ""
+"Менеджер выборов отвечает за процесс crossref:dev-model[process-core-"
+"election,выборов Core Team]. Он отвечает за проведение и поддержание системы "
+"выборов, а также является окончательной инстанцией в случае незначительных "
+"непредвиденных событий в процессе выборов. Крупные непредвиденные события "
+"должны обсуждаться с crossref:dev-model[role-core,Core Team]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:583
+msgid "Hat held only during elections."
+msgstr "Роль выполняется только во время выборов."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:585
+#, no-wrap
+msgid "Web site Management"
+msgstr "Управление веб-сайтом"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:590
+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 crossref:dev-model[sub-project-"
+"documentation, The FreeBSD Documentation Project] and acts as maintainer for "
+"the \"www\" tree."
+msgstr ""
+"Роль управления веб-сайтом отвечает за координацию развертывания обновленных "
+"веб-страниц на зеркалах по всему миру, за общую структуру основного веб-"
+"сайта и систему, на которой он работает. Управление должно согласовывать "
+"содержимое с crossref:dev-model[документацией подпроекта, Документационный "
+"проект FreeBSD] и выступает в роли сопровождающего для дерева \"www\"."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:592
+msgid ""
+"Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org]."
+msgstr ""
+"Роль поддерживается: веб-мастеры FreeBSD "
+"mailto:www@FreeBSD.org[www@FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:594
+#, no-wrap
+msgid "Ports Manager"
+msgstr "Менеджер портов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:597
+msgid ""
+"The Ports Manager acts as a liaison between crossref:dev-model[sub-project-"
+"ports, The Ports Subproject] and the core project, and all requests from the "
+"project should go to the ports manager."
+msgstr ""
+"Менеджер портов выступает в роли связующего звена между crossref:dev-"
+"model[sub-project-ports, Подпроектом портов] и основным проектом, и все "
+"запросы от проекта должны направляться менеджеру портов."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:600
+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 ""
+"Роль принадлежит: Команде управления портами "
+"mailto:portmgr@FreeBSD.org[portmgr@FreeBSD.org]. https://www.freebsd.org/"
+"portmgr/charter/[Устав Portmgr]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:602
+#, no-wrap
+msgid "Standards"
+msgstr "Стандарты"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:605
+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 ""
+"Роль стандартов отвечает за обеспечение соответствия FreeBSD стандартам, "
+"которым система следует, отслеживает развитие этих стандартов и уведомляет "
+"разработчиков FreeBSD о важных изменениях. Это позволяет разработчикам "
+"действовать проактивно и сокращать время между обновлением стандартов и "
+"достижением соответствия в FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:607
+msgid ""
+"Hat currently held by: Garrett Wollman "
+"mailto:wollman@FreeBSD.org[wollman@FreeBSD.org]."
+msgstr ""
+"Текущий ответственный: Garrett Wollman "
+"mailto:wollman@FreeBSD.org[wollman@FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:609
+#, no-wrap
+msgid "Core Secretary"
+msgstr "Секретарь Core Team"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:613
+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 ""
+"Основная обязанность Секретаря Core Team — составление черновиков и "
+"публикация окончательных отчётов Core Team. Секретарь также ведёт повестку "
+"Core Team, гарантируя, что ни один вопрос не останется без решения."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:615
+msgid "Hat currently held by: {rene}."
+msgstr "Ответственный в настоящее время: {rene}."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:617
+#, no-wrap
+msgid "Bugmeister"
+msgstr "Ответственный за ошибки (Bugmeister)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:621
+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 ""
+"Ответственный за ошибки (Bugmeister) отвечает за поддержание базы данных по "
+"обслуживанию в рабочем состоянии, за корректную категоризацию записей и "
+"отсутствие недействительных записей. Они курируют исправителей ошибок "
+"(bugbusters)."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:623
+msgid ""
+"Hat currently held by: the Bugmeister Team "
+"mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]."
+msgstr ""
+"Текущий ответственный: команда Bugmeister Team "
+"mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:625
+#, no-wrap
+msgid "Donations Liaison Officer"
+msgstr "Представитель по привлечению пожертвований"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:628
+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:631
+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 ""
+"Роль поддерживается: Отделом по привлечению пожертвований "
+"mailto:donations@FreeBSD.org[donations@FreeBSD.org]. https://"
+"www.freebsd.org/donations/[ Устав Отдела по привлечению пожертвований]."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:633
+#, no-wrap
+msgid "Admin"
+msgstr "Администратор (Admin)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:636
+msgid "(Also called \"FreeBSD Cluster Admin\")"
+msgstr "(Также называется \"Администратор кластера FreeBSD\")"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:639
+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:641
+msgid ""
+"Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org]."
+msgstr ""
+"Роль поддерживается: командой администраторов "
+"mailto:admin@FreeBSD.org[admin@FreeBSD.org]."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:643
+#, no-wrap
+msgid "Process dependent hats"
+msgstr "Процессозависимые роли"
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:646
+#, no-wrap
+msgid "Report originator"
+msgstr "Инициатор отчета"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:649
+msgid "The person originally responsible for filing a Problem Report."
+msgstr "Лицо, изначально ответственное за подачу отчета о проблеме."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:651
+#, no-wrap
+msgid "Bugbuster"
+msgstr "Исправитель ошибок (Bugbuster)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:654
+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 ""
+"Человек, который либо найдет подходящего специалиста для решения проблемы, "
+"либо закроет PR, если он является дубликатом или по другим причинам не "
+"представляет интереса."
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:656
+#, no-wrap
+msgid "Mentor"
+msgstr "Наставник (Mentor)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:659
+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:661
+#, no-wrap
+msgid "Vendor"
+msgstr "Поставщик"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:664
+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:666
+#, no-wrap
+msgid "Reviewers"
+msgstr "Рецензенты"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:669
+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:672
+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:674
+#, no-wrap
+msgid "Processes"
+msgstr "Процессы"
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:677
+#, no-wrap
+msgid "Adding new and removing old committers"
+msgstr "Добавление новых и удаление старых коммиттеров"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:682
+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 ""
+"Основная команда (Core Team) отвечает за предоставление и отзыв прав на "
+"коммит для участников. Это может быть сделано только через голосование в "
+"списке рассылки Core Team. Подпроекты ports и documentation могут "
+"предоставлять права на коммит людям, работающим над этими проектами, но на "
+"данный момент не отзывали такие права."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:685
+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 ""
+"Обычно кандидата в коммиттеры основной команде (Core Team) рекомендуют "
+"коммиттеры. Для участников или посторонних обращаться в Core Team с просьбой "
+"стать коммиттером считается неблагоразумным и такая просьба, как правило, "
+"отклоняется."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:688
+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:691
+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:699
+msgid ""
+"When a contributor is given their commit bit, a crossref:dev-model[tool-pgp, "
+"Pretty Good Privacy]-signed email is sent from either crossref:dev-"
+"model[role-core-secretary, Core Secretary], crossref:dev-model[role-ports-"
+"manager, 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, crossref:dev-"
+"model[tool-ssh2, Secure Shell] public key, and PGP key from the new "
+"committer and sends them to crossref:dev-model[role-admin, 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 ""
+"Когда участнику предоставляется право коммита (commit bit), отправляется "
+"подписанное с помощью crossref:dev-model[tool-pgp, Pretty Good Privacy] "
+"письмо от crossref:dev-model[role-core-secretary, Секретаря Core Team], "
+"crossref:dev-model[role-ports-manager, Менеджера портов] или nik@freebsd.org "
+"на адреса admins@freebsd.org, назначенного наставника, нового коммиттера и "
+"Core Team, подтверждая одобрение новой учётной записи. Затем наставник "
+"собирает строку пароля, crossref:dev-model[tool-ssh2, Secure Shell] открытый "
+"ключ и PGP-ключ от нового коммиттера и отправляет их crossref:dev-model[role-"
+"admin, Администратору]. Когда новая учётная запись создана, наставник "
+"активирует право коммита и проводит нового коммиттера через остальные этапы "
+"начального процесса."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:700
+#, 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:701
+#: documentation/content/en/books/dev-model/_index.adoc:717
+#: documentation/content/en/books/dev-model/_index.adoc:764
+#: documentation/content/en/books/dev-model/_index.adoc:816
+#: documentation/content/en/books/dev-model/_index.adoc:943
+#, 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:701
+#, no-wrap
+msgid "proc-add-committer.png"
+msgstr "proc-add-committer.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:708
+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 ""
+"Когда участник отправляет фрагмент кода, принимающий коммиттер может "
+"предложить предоставить этому участнику права на коммит. Если он рекомендует "
+"это основной команде (Core Team), команда проводит голосование по этой "
+"рекомендации. Если голосование завершается в пользу предложения, новому "
+"коммиттеру назначается наставник, и новый коммиттер должен отправить свои "
+"данные администраторам для создания учётной записи. После этого новый "
+"коммиттер готов сделать свой первый коммит. По традиции, это делается путём "
+"добавления своего имени в список коммиттеров."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:715
+#, fuzzy
+#| 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."
+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. "
+"[crossref:dev-model[freebsd-expiration-policy, FreeBSD, 2002H]] There are, "
+"however, no automatic procedures for doing this. For reactions concerning "
+"commit privileges not triggered by time, see crossref:dev-model[process-"
+"reactions,section 1.5.8]."
+msgstr ""
+"Напомним, что коммиттером считается тот, кто за последние 12 месяцев внёс "
+"изменения в код. Однако право на коммиты может быть отозвано только после 18 "
+"месяцев неактивности."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:716
+#, no-wrap
+msgid "Process summary: removing a committer"
+msgstr "Процесс: удаление коммиттера"
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:717
+#, no-wrap
+msgid "proc-rm-committer.png"
+msgstr "proc-rm-committer.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:721
+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 ""
+"Когда Основная команда (Core Team) принимает решение очистить список "
+"коммиттеров, они проверяют, кто не делал коммитов за последние 18 месяцев. "
+"Коммиттеры, которые этого не сделали, лишаются прав на коммит, и их учетные "
+"записи удаляются администраторами."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:724
+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:726
+msgid "Roles in this process:"
+msgstr "Роли в этом процессе:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:728
+#: documentation/content/en/books/dev-model/_index.adoc:825
+#: documentation/content/en/books/dev-model/_index.adoc:985
+msgid "crossref:dev-model[role-core, Core Team]"
+msgstr "crossref:dev-model[role-core, Основная команда (Core Team)]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:729
+#: documentation/content/en/books/dev-model/_index.adoc:783
+msgid "crossref:dev-model[role-contributor, Contributor]"
+msgstr "crossref:dev-model[role-contributor, Участник (контрибьютор)]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:730
+#: documentation/content/en/books/dev-model/_index.adoc:782
+#: documentation/content/en/books/dev-model/_index.adoc:826
+#: documentation/content/en/books/dev-model/_index.adoc:986
+msgid "crossref:dev-model[role-committer, Committer]"
+msgstr "crossref:dev-model[role-committer, Коммиттер]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:731
+#: documentation/content/en/books/dev-model/_index.adoc:954
+msgid "crossref:dev-model[role-maintainer, Maintainership]"
+msgstr "crossref:dev-model[role-maintainer, Сопровождение]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:732
+msgid "crossref:dev-model[role-mentor, Mentor]"
+msgstr "crossref:dev-model[role-mentor, Наставник (Mentor)]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:736
+msgid ""
+"[crossref:dev-model[freebsd-bylaws, FreeBSD, 2000A]] [crossref:dev-"
+"model[freebsd-expiration-policy, FreeBSD, 2002H]] [crossref:dev-"
+"model[freebsd-new-account, FreeBSD, 2002I]]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:738
+#, no-wrap
+msgid "Committing code"
+msgstr "Коммит кода"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:744
+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 "
+"crossref:dev-model[model-pr,problem report]."
+msgstr ""
+"Добавление нового или изменённого кода — один из наиболее частых процессов в "
+"проекте FreeBSD и обычно происходит несколько раз в день. Фиксация кода "
+"может быть выполнена только \"коммиттером\". Коммиттеры фиксируют либо код, "
+"написанный ими самими, либо код, переданный им, либо код, отправленный через "
+"crossref:dev-model[model-pr,отчёт о проблеме]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:750
+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:754
+msgid ""
+"When a change is committed to a part of the source that has been contributed "
+"from an outside crossref:dev-model[role-vendor, 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 ""
+"Когда изменение фиксируется в части исходного кода, которая была получена от "
+"внешнего crossref:dev-model[role-vendor,поставщика], сопровождающий должен "
+"убедиться, что патч передан обратно поставщику. Это соответствует философии "
+"открытого исходного кода и упрощает синхронизацию с внешними проектами, так "
+"как патчи не придётся применять заново при каждом новом выпуске."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:759
+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 ""
+"После того как код был доступен для рецензирования и дальнейшие изменения не "
+"требуются, код вносится в ветку разработки -CURRENT. Если изменение "
+"применимо и для ветки -STABLE, или других веток, коммиттер устанавливает "
+"отсчёт времени для \"слияния из текущей\" (\"MFC\"). После того как пройдёт "
+"количество дней, выбранное коммиттером при установке MFC, автоматически "
+"будет отправлено письмо коммиттеру с напоминанием внести изменения в ветку "
+"-STABLE (а также, возможно, в ветки безопасности). В ветки безопасности "
+"следует сливать только критические изменения, связанные с безопасностью."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:762
+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 ""
+"Откладывание коммита в -STABLE и другие ветки позволяет проводить "
+"\"параллельную отладку\", когда закоммиченный код тестируется на широком "
+"спектре конфигураций. Это приводит к тому, что изменения в -STABLE содержат "
+"меньше ошибок, что и даёт ветке её название."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:763
+#, no-wrap
+msgid "Process summary: A committer commits code"
+msgstr "Процесс вкратце: коммиттер делает коммит кода"
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:764
+#, no-wrap
+msgid "proc-commit.png"
+msgstr "proc-commit.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:772
+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:773
+#, 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:774
+#, 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:774
+#, no-wrap
+msgid "proc-contrib.png"
+msgstr "proc-contrib.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:778
+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 ""
+"Разница, когда участник вносит код, заключается в том, что он отправляет код "
+"через интерфейс Bugzilla. Этот отчёт забирает сопровождающий, который "
+"просматривает код и делает ему коммит."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:780
+msgid "Hats included in this process are:"
+msgstr "Роли, задействованные в этом процессе:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:784
+msgid "crossref:dev-model[role-vendor, Vendor]"
+msgstr "crossref:dev-model[role-vendor, Поставщик]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:785
+msgid "crossref:dev-model[role-reviewer, Reviewers]"
+msgstr "crossref:dev-model[role-reviewer, Рецензенты]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:788
+msgid ""
+"[crossref:dev-model[freebsd-committer, FreeBSD, 2001]] [crossref:dev-"
+"model[jorgensen2001, Jørgensen, 2001]]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:790
+#, no-wrap
+msgid "Core election"
+msgstr "Выборы основной команды (Core Team)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:795
+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 ""
+"Выборы Core Team проводятся не реже чем раз в два года. footnote:[Первые "
+"выборы Core Team состоялись в сентябре 2000 года] Избираются девять "
+"участников Core Team. Новые выборы проводятся, если количество участников "
+"Core Team становится меньше семи. Новые выборы также могут быть проведены, "
+"если этого потребуют как минимум 1/3 активных коммиттеров."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:797
+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 ""
+"Когда должны состояться выборы, Core Team объявляет об этом как минимум за 6 "
+"недель и назначает менеджера выборов для их проведения."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:802
+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 ""
+"Только коммиттеры могут быть избраны в состав основной команды (Core Team). "
+"Кандидаты должны подать свои заявки как минимум за одну неделю до начала "
+"выборов, но могут уточнять свои заявления до начала голосования. Они "
+"представлены в http://election.uk.freebsd.org/candidates.html[списке "
+"кандидатов]. При составлении своих предвыборных заявлений кандидаты должны "
+"ответить на несколько стандартных вопросов, предоставленных организатором "
+"выборов."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:805
+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 ""
+"Во время выборов строго соблюдается правило, что коммиттер должен был "
+"сделать коммит в течение последних 12 месяцев. Только эти коммиттеры имеют "
+"право голосовать."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:808
+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 ""
+"При голосовании коммиттер может проголосовать один раз в поддержку до девяти "
+"номинантов. Голосование проводится в течение четырёх недель, с "
+"напоминаниями, публикуемыми в рассылке \"developers\", доступной всем "
+"коммиттерам."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:810
+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:812
+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:814
+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:815
+#, no-wrap
+msgid "Process summary: Core elections"
+msgstr "Процесс вкратце: Выборы основной команды (Core Team)"
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:816
+#, no-wrap
+msgid "proc-elections.png"
+msgstr "proc-elections.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:821
+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 ""
+"Core Team объявляет выборы и назначает руководителя выборов, который "
+"подготавливает процесс. Когда всё готово, кандидаты могут объявить о своей "
+"кандидатуре, представив заявления. Затем коммиттеры голосуют. После "
+"завершения голосования результаты выборов объявляются, и новая основная "
+"команда вступает в должность."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:823
+msgid "Hats in core elections are:"
+msgstr "Ответственный за выборы Core Team:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:827
+msgid "crossref:dev-model[role-election-manager, Election Manager]"
+msgstr "crossref:dev-model[role-election-manager, Менеджер выборов]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:831
+msgid ""
+"[crossref:dev-model[freebsd-bylaws, FreeBSD, 2000A]] [crossref:dev-model[bsd-"
+"election2002, FreeBSD, 2002B]] [crossref:dev-model[freebsd-election, "
+"FreeBSD, 2002G]]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:833
+#, no-wrap
+msgid "Development of new features"
+msgstr "Разработка новых функций"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:841
+msgid ""
+"Within the project there are sub-projects that are working on new features. "
+"These projects are generally done by one person [crossref:dev-"
+"model[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 ""
+"В рамках проекта существуют подпроекты, работающие над новыми функциями. Эти "
+"проекты обычно выполняются одним человеком [crossref:dev-"
+"model[jorgensen2001, Йоргенсен, 2001]]. Каждый проект волен организовывать "
+"разработку так, как считает нужным. Однако, когда проект объединяется с "
+"ветвью -CURRENT, он должен следовать руководствам проекта. Когда код хорошо "
+"протестирован в ветви -CURRENT и признан достаточно стабильным и актуальным "
+"для ветви -STABLE, он объединяется с ветвью -STABLE."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:848
+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 crossref:dev-model[tool-bugzilla, Bugzilla] tool."
+msgstr ""
+"Требования проекта определяются пожеланиями разработчиков, запросами "
+"сообщества в виде прямых обращений по почте, отчетов о проблемах (Problem "
+"Reports), коммерческим финансированием разработки функциональности или "
+"вкладами научного сообщества. Пожелания, которые входят в зону "
+"ответственности разработчика, передаются этому разработчику, который "
+"расставляет приоритеты между запросом и своими собственными пожеланиями. "
+"Распространенный способ организации этого процесса — ведение списка задач "
+"(TODO-list), поддерживаемого проектом. Задачи, не входящие в чью-либо зону "
+"ответственности, собираются в списках TODO, пока кто-нибудь не возьмет на "
+"себя ответственность за их выполнение. Все запросы, их распределение и "
+"отслеживание обрабатываются с помощью инструмента crossref:dev-model[tool-"
+"bugzilla, Bugzilla]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:853
+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:856
+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:863
+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 ""
+"Фаза проверки проекта состоит из двух этапов. Перед внесением кода в текущую "
+"ветку разработчики запрашивают рецензирование своего кода коллегами. Это "
+"рецензирование в основном проводится с помощью функционального тестирования, "
+"но также важна проверка кода. Когда код внесён в ветку, проводится более "
+"широкое функциональное тестирование, которое может привести к дополнительной "
+"проверке кода и отладке, если код ведёт себя не так, как ожидалось. Эта "
+"вторая форма проверки может рассматриваться как структурная верификация. "
+"Хотя сами подпроекты могут писать формальные тесты, такие как модульные "
+"тесты, они обычно не собираются основным проектом и чаще всего удаляются "
+"перед внесением кода в текущую ветку. footnote:[Однако всё больше тестов "
+"выполняется при сборке системы (make world). Эти тесты являются очень новым "
+"дополнением, и систематическая структура для них ещё не создана.]"
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:865
+#, no-wrap
+msgid "Maintenance"
+msgstr "Сопровождение"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:872
+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 ""
+"Для проекта полезно, чтобы за каждую область исходного кода отвечал хотя бы "
+"один человек, который хорошо её знает. Некоторые части кода имеют "
+"назначенных сопровождающих. Другие имеют фактических сопровождающих, а "
+"некоторые части системы не имеют сопровождающих. Сопровождающий обычно "
+"является участником подпроекта, который написал и интегрировал код, или тем, "
+"кто портировал его с платформы, для которой он был написан. footnote:"
+"[sendmail и named — примеры кода, который был объединён с других платформ.] "
+"Задача сопровождающего — убедиться, что код синхронизирован с проектом, из "
+"которого он получен, если это сторонний код, а также применять патчи, "
+"предоставленные сообществом, или исправлять обнаруженные проблемы."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:875
+msgid ""
+"The main bulk of work that is put into the FreeBSD project is maintenance. "
+"[crossref:dev-model[jorgensen2001, Jørgensen, 2001]] has made a figure "
+"showing the life cycle of changes."
+msgstr ""
+"Основной объем работы, вкладываемый в проект FreeBSD, связан с "
+"сопровождением. [crossref:dev-model[jorgensen2001, Jørgensen, 2001]] "
+"предоставляет схему, показывающую жизненный цикл изменений."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:913
+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 ""
+"Здесь \"релиз для разработки\" относится к ветке -CURRENT, а \"релиз для "
+"производства\" — к ветке -STABLE. \"Предварительная проверка перед "
+"коммитом\" — это функциональное тестирование, проводимое коллегами-"
+"разработчиками по запросу или для проверки кода с целью определения "
+"состояния подпроекта. \"Параллельная отладка\" — это функциональное "
+"тестирование, которое может вызвать дополнительный обзор и отладку, когда "
+"код включён в ветку -CURRENT."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:920
+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 ""
+"На момент написания этого документа в проекте было 269 коммиттеров. Когда "
+"они вносят изменения в ветку, это создает новый выпуск. Очень часто "
+"пользователи в сообществе отслеживают определенную ветку. Мгновенное "
+"появление нового выпуска делает изменения широко доступными сразу же и "
+"позволяет быстро получать отзывы от сообщества. Это также дает сообществу "
+"ожидаемое время реакции на проблемы, которые важны для них. Это делает "
+"сообщество более вовлеченным, что, в свою очередь, позволяет получать больше "
+"и лучше отзывов, что снова стимулирует больше сопровождения и в конечном "
+"итоге должно создать лучший продукт."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:922
+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:924
+#, no-wrap
+msgid "Problem reporting"
+msgstr "Сообщение о проблеме"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:929
+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 ""
+"До FreeBSD 10 в FreeBSD входил инструмент для отправки отчётов о проблемах "
+"под названием `send-pr`. Проблемы включают отчёты об ошибках, запросы "
+"функций, улучшения функций и уведомления о новых версиях внешнего "
+"программного обеспечения, включённого в проект. Хотя `send-pr` доступен, "
+"пользователям и разработчикам рекомендуется отправлять проблемы, используя "
+"нашу https://bugs.freebsd.org/submit/[форму отчёта о проблемах]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:941
+msgid ""
+"Problem reports are sent to an email address where it is inserted into the "
+"Problem Reports maintenance database. A crossref:dev-model[role-bugbuster, "
+"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 crossref:dev-model[model-maintenance, "
+"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 ""
+"Отчёты о проблемах отправляются на электронный адрес, откуда они попадают в "
+"базу данных сопровождения отчётов о проблемах. crossref:dev-model[role-"
+"bugbuster, Исправитель ошибок (Bugbuster)] классифицирует проблему и "
+"направляет её соответствующей группе или сопровождающему в рамках проекта. "
+"После того, как кто-то берёт ответственность за отчёт, он анализируется. "
+"Этот анализ включает проверку проблемы и разработку решения. Часто "
+"требуется обратная связь от автора отчёта или даже от сообщества FreeBSD. "
+"Как только создаётся патч для устранения проблемы, автора отчета могут "
+"попросить его протестировать. В итоге рабочий патч интегрируется в проект "
+"и, если необходимо, документируется. Затем он проходит стандартный цикл "
+"сопровождения, как описано в разделе crossref:dev-model[model-maintenance, "
+"Сопровождение]. Отчёт о проблеме может находиться в следующих состояниях: "
+"открыт, анализируется, ожидает обратной связи, исправлен патчем, отложен и "
+"закрыт. Состояние \"отложен\" используется, когда дальнейшее продвижение "
+"невозможно из-за недостатка информации или когда задача требует столько "
+"работы, что в данный момент никто над ней не работает."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:942
+#, no-wrap
+msgid "Process summary: problem reporting"
+msgstr "Сводка процесса: сообщение о проблеме"
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:943
+#, no-wrap
+msgid "proc-pr.png"
+msgstr "proc-pr.png"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:949
+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:951
+msgid "The roles included in this process are:"
+msgstr "Роли, включенные в этот процесс:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:953
+msgid "crossref:dev-model[role-problem-originator, Report originator]"
+msgstr "crossref:dev-model[role-problem-originator, Инициатор отчета]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:955
+msgid "crossref:dev-model[role-bugbuster, Bugbuster]"
+msgstr "crossref:dev-model[role-bugbuster, Исправитель ошибок (Bugbuster)]"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:958
+#, fuzzy
+#| msgid "[crossref:dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+msgid ""
+"[crossref:dev-model[freebsd-handle-pr, FreeBSD, 2002C]]. [crossref:dev-"
+"model[freebsd-send-pr, FreeBSD, 2002D]]"
+msgstr "[crossref::dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:960
+#, no-wrap
+msgid "Reacting to misbehavior"
+msgstr "Реагирование на неправильное поведение"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:966
+msgid ""
+"[crossref:dev-model[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 ""
+"[crossref:dev-model[freebsd-committer, FreeBSD, 2001]] содержит ряд правил, "
+"которым должны следовать коммиттеры. Однако случается, что эти правила "
+"нарушаются. Следующие правила существуют для того, чтобы можно было "
+"реагировать на неподобающее поведение. Они определяют, какие действия "
+"приведут к приостановке привилегий коммиттера на тот или иной срок."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:968
+msgid ""
+"Committing during code freezes without the approval of the Release "
+"Engineering team - 2 days"
+msgstr ""
+"Совершение коммитов во время заморозки кода без одобрения команды Release "
+"Engineering — 2 дня"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:969
+msgid "Committing to a security branch without approval - 2 days"
+msgstr "Коммит изменений в ветку безопасности без одобрения - 2 дня"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:970
+msgid "Commit wars - 5 days to all participating parties"
+msgstr "Войны коммитов — 5 дней для всех участвующих сторон"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:971
+msgid "Impolite or inappropriate behavior - 5 days"
+msgstr "Невежливое или неподобающее поведение — 5 дней"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:973
+#, fuzzy
+#| msgid "[crossref:dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+msgid "[crossref:dev-model[ref-freebsd-trenches, Lehey, 2002]]"
+msgstr "[crossref::dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:978
+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 ""
+"Для эффективности приостановок любой член основной команды (Core Team) может "
+"применить приостановку до обсуждения на почтовой рассылке \"core\". "
+"Повторные нарушители могут, при 2/3 голосов от основной команды, получить "
+"более строгие наказания, включая постоянное лишение прав на коммиты. (Однако "
+"последнее всегда рассматривается как крайняя мера из-за присущей ему "
+"склонности вызывать споры.) Все приостановки публикуются в почтовой рассылке "
+"\"developers\", доступной только коммиттерам."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:981
+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:983
+msgid "Hats involved in this process:"
+msgstr "Роли, участвующие в этом процессе:"
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:988
+#, no-wrap
+msgid "Release engineering"
+msgstr "Выпуск релизов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:994
+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 ""
+"Проект FreeBSD имеет команду инженеров по выпуску релизов с главным "
+"инженером, который отвечает за создание релизов FreeBSD для распространения "
+"среди пользователей через интернет или продажи в розничных магазинах. "
+"Поскольку FreeBSD доступна на нескольких платформах, а релизы для различных "
+"архитектур выпускаются одновременно, в команде есть ответственный за каждую "
+"архитектуру. Также в команде есть роли, отвечающие за координацию усилий по "
+"обеспечению качества, сборку набора пакетов и актуализацию документации. Под "
+"инженером по выпуску релизов подразумевается представитель команды инженеров "
+"по выпуску релизов."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1001
+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 ""
+"Когда готовится выпуск релиза, проект FreeBSD несколько меняет свою "
+"структуру. Составляется график выпуска, включающий заморозку "
+"функциональности и кода, выпуск промежуточных релизов и финального релиза. "
+"Заморозка функциональности означает, что новые функции не могут быть "
+"добавлены в ветку без явного согласия инженеров релиза. Заморозка кода "
+"означает, что изменения в коде (например, исправления ошибок) не могут быть "
+"добавлены без явного согласия инженеров релиза. Этот процесс заморозки "
+"функциональности и кода известен как стабилизация. В процессе выпуска релиза "
+"инженер релиза имеет полномочия откатываться к более старым версиям кода и, "
+"таким образом, \"отменять\" изменения, если они сочтут, что эти изменения не "
+"подходят для включения в релиз."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1003
+msgid "There are three different kinds of releases:"
+msgstr "Существует три различных вида выпусков:"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1005
+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 ""
+".0 выпуски являются первым релизом основной версии. Они ветвятся от ветки "
+"-CURRENT и имеют значительно более длительный цикл разработки из-за "
+"нестабильного характера ветки -CURRENT"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1006
+msgid ""
+".X releases are releases of the -STABLE branch. They are scheduled to come "
+"out every 4 months."
+msgstr ""
+".X релизы — это релизы ветки -STABLE. Они запланированы к выходу каждые 4 "
+"месяца."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1007
+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 ""
+".X.Y — это выпуски с исправлениями уязвимостей, следующие за веткой .X. Они "
+"выходят только тогда, когда с момента последнего выпуска в этой ветке было "
+"объединено достаточное количество исправлений уязвимостей. Новые функции "
+"включаются редко, а команда безопасности участвует в этих выпусках гораздо "
+"активнее, чем в обычных."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1017
+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 crossref:dev-model[tool-pgp, Pretty Good Privacy]-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 ""
+"Для выпусков ветки -STABLE процесс выпуска начинается за 45 дней до "
+"предполагаемой даты релиза. В течение первой фазы, первых 15 дней, "
+"разработчики переносят изменения из -CURRENT, которые они хотят включить в "
+"релиз, в ветку выпуска. По окончании этого периода код входит в 15-дневный "
+"период заморозки, в течение которого допускаются только исправления ошибок, "
+"обновления документации, исправления, связанные с безопасностью, и "
+"незначительные изменения драйверов устройств. Эти изменения должны быть "
+"предварительно одобрены инженером выпуска. В начале последнего 15-дневного "
+"периода создается кандидат на выпуск для широкого тестирования. В этот "
+"период вероятность внесения изменений снижается, за исключением важных "
+"исправлений ошибок и обновлений безопасности. В этот заключительный период "
+"все выпуски считаются кандидатами на выпуск. По завершении процесса выпуска "
+"создается релиз с новым номером версии, включая бинарные дистрибутивы на веб-"
+"сайтах и создание образов CD-ROM. Однако релиз не считается «действительно "
+"выпущенным» до тех пор, пока на список рассылки freebsd-announce не будет "
+"отправлено сообщение, подписанное с помощью crossref:dev-model[tool-pgp, "
+"Pretty Good Privacy], в котором явно указано, что релиз состоялся; все, что "
+"обозначено как «релиз» до этого момента, может находиться в процессе "
+"доработки и изменяться до отправки PGP-подписанного сообщения. footnote:"
+"[Многие коммерческие поставщики используют эти образы для создания CD-ROM, "
+"которые продаются в розничных магазинах.]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1026
+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 ""
+"Версии ветки -CURRENT (то есть все версии, оканчивающиеся на \".0\"), очень "
+"похожи, но с вдвое большим временным промежутком. Процесс начинается за 8 "
+"недель до выпуска с объявления графика релиза. Через две недели после начала "
+"процесса выпуска вводится заморозка функциональности, и оптимизация "
+"производительности должна быть сведена к минимуму. За четыре недели до "
+"выпуска становится доступна официальная бета-версия. За две недели до "
+"выпуска код официально ветвится в новую версию. Этой версии присваивается "
+"статус релиз-кандидата, и, как и в случае с разработкой -STABLE, заморозка "
+"кода релиз-кандидата ужесточается. Однако разработка на основной ветке "
+"разработки может продолжаться. За исключением этих различий, процессы "
+"разработки релизов схожи."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1030
+#, fuzzy
+#| msgid ""
+#| "*.0 releases go into their own branch and are aimed mainly at early "
+#| "adopters.\n"
+#| "The branch then goes through a period of stabilisation, and it is not "
+#| "until the\n"
+#| "crossref:dev-model[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"
+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 crossref:dev-model[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."
+msgstr ""
+"*.0 выпуски выделяются в отдельную ветку и ориентированы в основном на "
+"ранних последователей.\n"
+"Затем ветка проходит период стабилизации, и только после того, как\n"
+"crossref:dev-model[role-releng, Команда разработки релизов] решит, что "
+"требования к стабильности выполнены, ветка становится -STABLE, а -CURRENT "
+"переключается на следующую мажорную версию. Хотя в большинстве случаев это "
+"происходило с версиями *.1, это не является обязательным требованием.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1035
+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 ""
+"Большинство выпусков происходит по достижении даты, которая считается "
+"достаточно отдалённой от предыдущего выпуска. Установлена цель выпускать "
+"основные версии каждые 18 месяцев, а промежуточные — каждые 4 месяца. "
+"Сообщество пользователей чётко дало понять, что безопасность и стабильность "
+"не могут быть принесены в жертву из-за самостоятельно установленных сроков и "
+"целевых дат выпуска. Чтобы задержки не становились слишком длинными в "
+"вопросах безопасности и стабильности, требуется дополнительная дисциплина "
+"при внесении изменений в -STABLE."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1037
+msgid "Make release schedule"
+msgstr "Сделать график выпуска релизов"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1038
+msgid "Feature freeze"
+msgstr "Заморозить функциональность"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1039
+msgid "Code freeze"
+msgstr "Заморозка кода"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1040
+msgid "Make branch"
+msgstr "Создать ветку"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1041
+msgid "Release candidate"
+msgstr "Кандидат на выпуск"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1042
+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:1043
+msgid "Build packages"
+msgstr "Собрать пакеты"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1044
+msgid "Warn mirrors"
+msgstr "Предупредить сайты-зеркала"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1045
+msgid "Publish release"
+msgstr "Опубликовать выпуск"
+
+#. Keep the spaces around the external square bracket to avoid a warning in the
+#. PDF converter
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1049
+#, fuzzy
+#| msgid "[crossref:dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+msgid "[ crossref:dev-model[freebsd-releng, FreeBSD, 2002E] ]"
+msgstr "[crossref::dev-model[freebsd-handle-pr, FreeBSD, 2002C]]."
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1051
+#, no-wrap
+msgid "Tools"
+msgstr "Инструменты"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1055
+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 ""
+"Основные инструменты поддержки процесса разработки — это Bugzilla, Mailman и "
+"OpenSSH. Это инструменты, разработанные сторонними организациями, которые "
+"широко используются в мире открытого исходного кода."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1057
+#, no-wrap
+msgid "Git"
+msgstr "Git"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1061
+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 ""
+"Git — это система для управления несколькими версиями текстовых файлов, "
+"отслеживания внесённых изменений, их авторов и причин. Проект хранится в "
+"«репозитории», а разные версии считаются разными «ветками»."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1063
+#, no-wrap
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1069
+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 ""
+"Bugzilla — это база данных для сопровождения, состоящая из набора "
+"инструментов для отслеживания ошибок на центральном сайте. Она поддерживает "
+"процесс отслеживания ошибок, включая отправку и обработку ошибок, а также "
+"запросы и обновление базы данных, а также редактирование отчётов об ошибках. "
+"Проект использует веб-интерфейс для отправки \"Отчётов о проблемах\" на "
+"центральный сервер Bugzilla проекта. У коммиттеров также есть веб- и "
+"командные клиенты."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1071
+#, no-wrap
+msgid "Mailman"
+msgstr "Mailman"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1079
+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 [crossref:dev-model[ref-bsd-handbook, FreeBSD, 2003A], Appendix C]."
+msgstr ""
+"Mailman - это программа, которая автоматизирует управление почтовыми "
+"рассылками. Проект FreeBSD использует ее для ведения 16 общих рассылок, 60 "
+"технических рассылок, 4 ограниченных рассылок и 5 рассылок с логами коммитов "
+"Git. Она также используется для многих почтовых рассылок, созданных и "
+"используемых другими людьми и проектами в сообществе FreeBSD. Общие рассылки "
+"предназначены для широкой публики, технические рассылки в основном "
+"предназначены для разработки определенных областей интересов, а закрытые "
+"рассылки используются для внутренней коммуникации, не предназначенной для "
+"широкой публики. Большая часть всей коммуникации в проекте проходит через "
+"эти 85 рассылок [crossref:dev-model[ref-bsd-handbook, FreeBSD, 2003A], "
+"Приложение C]."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1081
+#, no-wrap
+msgid "Pretty Good Privacy"
+msgstr "Pretty Good Privacy"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1086
+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 ""
+"Pretty Good Privacy, более известный как PGP, — это криптосистема, "
+"использующая архитектуру открытого ключа, чтобы позволить пользователям "
+"подписывать и/или шифровать информацию цифровой подписью для обеспечения "
+"безопасной связи между двумя сторонами. Подпись используется при отправке "
+"информации множеству получателей, позволяя им убедиться, что информация не "
+"была изменена до того, как они её получили. В проекте FreeBSD это основной "
+"способ убедиться, что информация была написана тем, кто утверждает, что её "
+"создал, и не была изменена в процессе передачи."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1088
+#, no-wrap
+msgid "Secure Shell"
+msgstr "Secure Shell (SSH)"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1095
+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 ""
+"Secure Shell - это стандарт безопасного входа в удалённую систему и "
+"выполнения команд на ней. Он позволяет устанавливать и защищать другие "
+"соединения, называемые туннелями, между двумя взаимодействующими системами. "
+"Этот стандарт существует в двух основных версиях, и только версия два "
+"используется в проекте FreeBSD. Наиболее распространённая реализация "
+"стандарта - OpenSSH, которая входит в основную дистрибуцию проекта. "
+"Поскольку её исходный код обновляется чаще, чем выпуски FreeBSD, последняя "
+"версия также доступна в дереве портов."
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1097
+#, no-wrap
+msgid "Sub-projects"
+msgstr "Подпроекты"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1100
+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:1102
+#, no-wrap
+msgid "The Ports Subproject"
+msgstr "Подпроект Ports"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1106
+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 ""
+"\"Порт\" — это набор метаданных и патчей, необходимых для загрузки, "
+"компиляции и корректной установки внешнего программного обеспечения в "
+"системе FreeBSD. Количество портов растёт с огромной скоростью, как показано "
+"на следующем рисунке."
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:1107
+#, no-wrap
+msgid "Number of ports added between 1995 and 2022"
+msgstr "Количество портов, добавленных между 1995 и 2022 годами"
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:1109
+#, no-wrap
+msgid "portsstatus.svg"
+msgstr "portsstatus.svg"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1113
+msgid ""
+"crossref:dev-model[fig-ports,image::portsstatus.svg] 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 ""
+"crossref:dev-model[fig-ports,image::portsstatus.svg] показывает количество "
+"портов, доступных для FreeBSD в период с 1995 по 2022 год. Похоже, что "
+"кривая сначала росла экспоненциально, а затем с середины 2001 до середины "
+"2007 года росла линейно со скоростью около 2000 портов/год, после чего "
+"скорость роста снизилась."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1116
+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 ""
+"Поскольку внешнее программное обеспечение, описываемое портом, часто "
+"находится в стадии активной разработки, объем работы, необходимой для "
+"поддержки портов, уже велик и продолжает расти. Это привело к тому, что "
+"часть проекта FreeBSD, связанная с портами, получила более самостоятельную "
+"структуру и все больше становится подпроектом проекта FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1119
+msgid ""
+"Ports has its own core team with the crossref:dev-model[role-ports-manager, "
+"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 ""
+"Порты имеют свою собственную основную команду с crossref:dev-model[role-"
+"ports-manager, Менеджером Портов] во главе, и эта команда может назначать "
+"коммиттеров без одобрения Основной команды FreeBSD (Core Team). В отличие от "
+"проекта FreeBSD, где активное сопровождение часто вознаграждается правом "
+"коммита, подпроект портов включает множество активных сопровождающих, не "
+"являющихся коммиттерами."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1123
+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 ""
+"В отличие от основного проекта, дерево портов не разветвляется. Каждый "
+"выпуск FreeBSD следует текущей коллекции портов, что обеспечивает доступ к "
+"обновлённой информации о том, где найти программы и как их собрать. Однако "
+"это означает, что порт, зависящий от системы, может требовать изменений в "
+"зависимости от версии FreeBSD, на которой он запущен."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1126
+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 ""
+"С неразветвлённым репозиторием портов невозможно гарантировать, что любой "
+"порт будет работать на чём-либо, кроме -CURRENT и -STABLE, в частности на "
+"старых, минорных выпусках. Для этого нет ни инфраструктуры, ни времени "
+"волонтёров."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1128
+msgid ""
+"For efficiency of communication, teams depending on Ports, such as the "
+"release engineering team, have their own ports liaisons."
+msgstr ""
+"Команды, зависящие от Ports, такие как команда выпуска релизов, для "
+"эффективности коммуникации имеют своих собственных представителей по портам."
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1130
+#, no-wrap
+msgid "The FreeBSD Documentation Project"
+msgstr "Проект документации FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1135
+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 ""
+"Проект документации FreeBSD был начат в январе 1995 года. От первоначальной "
+"группы, состоявшей из руководителя проекта, четырёх руководителей команд и "
+"16 участников, сейчас общее число коммиттеров достигло 44. Список рассылки "
+"документации насчитывает чуть менее 300 участников, что указывает на "
+"довольно большое сообщество вокруг него."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1137
+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 ""
+"Цель проекта Документации — предоставить качественную и полезную "
+"документацию проекта FreeBSD, чтобы новые пользователи могли легче освоить "
+"систему, а также подробно описать расширенные функции для пользователей."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1139
+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 ""
+"Основные задачи проекта Documentation — работа над текущими проектами в "
+"\"Наборе документации FreeBSD\" и перевод документации на другие языки."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1143
+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 ""
+"Как и проект FreeBSD, документация разделена на те же ветви. Это сделано для "
+"того, чтобы для каждой версии всегда была обновлённая документация. В ветвях "
+"безопасности исправляются только ошибки в документации."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1147
+msgid ""
+"Like the ports sub-project, the Documentation project can appoint "
+"documentation committers without FreeBSD Core's approval. [crossref:dev-"
+"model[freebsd-doceng-charter, FreeBSD, 2003B]]."
+msgstr ""
+"Как и подпроект ports, проект Documentation может назначать коммиттеров "
+"документации без одобрения основной команды FreeBSD (Core Team). "
+"[crossref:dev-model[freebsd-doceng-charter, FreeBSD, 2003B]]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1150
+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 ""
+"Проект документации включает в себя extref:{fdp-primer}[вводное "
+"руководство]. Оно используется как для ознакомления новых участников проекта "
+"со стандартными инструментами и синтаксисом, так и в качестве справочника "
+"при работе над проектом."
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1155
+#, no-wrap
+msgid "References"
+msgstr "Список литературы"
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1159
+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 ""
+"[Brooks, 1995] Фредерик П. Брукс. Авторское право © 1975, 1995 Pearson "
+"Education Limited. 0201835959. Addison-Wesley Pub Co. Мифический "
+"человекомесяц. Эссе о программной инженерии, юбилейное издание (2-е издание)."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1162
+msgid ""
+"[Saers, 2003] Niklas Saers. Copyright © 2003. A project model for the "
+"FreeBSD Project. Candidatus Scientiarum thesis. http://niklas.saers.com/"
+"thesis."
+msgstr ""
+"[Saers, 2003] Никлас Саерс. Авторское право © 2003. Модель проекта для "
+"FreeBSD. Кандидатская диссертация. http://niklas.saers.com/thesis."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1165
+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 ""
+"[Йоргенсен, 2001] Нильс Йоргенсен. 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."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1168
+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 ""
+"[PMI, 2000] Институт управления проектами. Copyright © 1996, 2000 Институт "
+"управления проектами. 1-880410-23-0. Институт управления проектами. Ньютаун "
+"Сквер, Пенсильвания, США. PMBOK Guide. A Guide to the Project Management "
+"Body of Knowledge (Руководство PMBOK. Руководство к своду знаний по "
+"управлению проектами), издание 2000 года."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1171
+msgid ""
+"[FreeBSD, 2000A] Copyright © 2002 The FreeBSD Project. Core Bylaws. https://"
+"www.freebsd.org/internal/bylaws/."
+msgstr ""
+"[FreeBSD, 2000A] Copyright © 2002 The FreeBSD Project. Core Bylaws. https://"
+"www.freebsd.org/internal/bylaws/."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1174
+msgid ""
+"[FreeBSD, 2002A] Copyright © 2002 The FreeBSD Documentation Project. FreeBSD "
+"Developer's Handbook. extref:{developers-handbook}[Developers Handbook]."
+msgstr ""
+"[FreeBSD, 2002A] Copyright © 2002 The FreeBSD Documentation Project. "
+"Руководство FreeBSD для разработчиков. extref:{developers-handbook}"
+"[Руководство FreeBSD для разработчиков]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1177
+msgid ""
+"[FreeBSD, 2002B] Copyright © 2002 The FreeBSD Project. Core team election "
+"2002. http://election.uk.freebsd.org/candidates.html."
+msgstr ""
+"[FreeBSD, 2002B] Copyright © 2002 Проект FreeBSD. Выборы состава основной "
+"команды (Core Team) 2002. http://election.uk.freebsd.org/candidates.html."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1180
+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 ""
+"[FreeBSD, 2002C] Даг-Эрлинг Смёрграв и Хитен Пандья. Copyright © 2002 The "
+"FreeBSD Documentation Project. The FreeBSD Documentation Project. "
+"Рекомендации по работе с сообщениями о проблемах. extref:{pr-guidelines}"
+"[Рекомендации по работе с сообщениями о проблемах]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1183
+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 ""
+"[FreeBSD, 2002D] Даг-Эрлинг Смёрграв. Copyright © 2002 Проект документации "
+"FreeBSD. Проект документации FreeBSD. Составление сообщений о проблеме во "
+"FreeBSD. extref:{problem-reports}[Составление сообщений о проблеме во "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1186
+msgid ""
+"[FreeBSD, 2001] Copyright © 2001 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Committers Guide. extref:{committers-guide}"
+"[Committer's Guide]."
+msgstr ""
+"[FreeBSD, 2001] Copyright © 2001 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Справочник коммиттера. extref:{committers-"
+"guide}[Справочник коммиттера]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1189
+msgid ""
+"[FreeBSD, 2002E] Murray Stokely. Copyright © 2002 The FreeBSD Documentation "
+"Project. The FreeBSD Documentation Project. FreeBSD Release Engineering. "
+"extref:{releng}[FreeBSD Release Engineering]."
+msgstr ""
+"[FreeBSD, 2002E] Мюррей Стокли. Copyright © 2002 The FreeBSD Documentation "
+"Project. Проект документации FreeBSD. Подготовка релизов FreeBSD. extref:"
+"{releng}[Подготовка релизов FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1192
+msgid ""
+"[FreeBSD, 2003A] The FreeBSD Documentation Project. FreeBSD Handbook. extref:"
+"{handbook}[FreeBSD Handbook]."
+msgstr ""
+"[FreeBSD, 2003A] Проект документации FreeBSD. Руководство FreeBSD. extref:"
+"{handbook}[Руководство FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1195
+msgid ""
+"[FreeBSD, 2002F] Copyright © 2002 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Contributors to FreeBSD. extref:{contributors}"
+"[Contributors to FreeBSD]."
+msgstr ""
+"[FreeBSD, 2002F] Copyright © 2002 The FreeBSD Documentation Project. Проект "
+"документации FreeBSD. Участники проекта FreeBSD. extref:{contributors}"
+"[Участники проекта FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1198
+msgid ""
+"[FreeBSD, 2002G] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Core team elections 2002. http://election.uk.freebsd.org."
+msgstr ""
+"[FreeBSD, 2002G] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Выборы состава основной команды (Core Team) 2002. http://"
+"election.uk.freebsd.org."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1201
+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 ""
+"[FreeBSD, 2002H] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Политика истечения срока действия битов коммитов. 2002/04/06 15:35:30. "
+"https://www.freebsd.org/internal/expire-bits/."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1204
+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 ""
+"[FreeBSD, 2002I] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Процедура создания нового аккаунта. 2002/08/19 17:11:27. https://"
+"www.freebsd.org/internal/new-account/."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1207
+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 ""
+"[FreeBSD, 2003B] Copyright © 2002 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Устав команды разработчиков документации "
+"FreeBSD. 2003/03/16 12:17. https://www.freebsd.org/internal/doceng/."
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1209
+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 ""
+"[Lehey, 2002] Грег Лехи. Copyright © 2002 Грег Лехи. Грег Лехи. Two years in "
+"the trenches. The evolution of a software project (Два года в окопах. "
+"Эволюция программного проекта). http://www.lemis.com/grog/In-the-"
+"trenches.pdf."
+
+#~ msgid ""
+#~ "There are, however, no automatic procedures for doing this. For "
+#~ "reactions concerning commit privileges not triggered by time, see "
+#~ "crossref:dev-model[process-reactions,section 1.5.8]."
+#~ msgstr ""
+#~ "Однако не существует автоматических процедур для этого. Для действий, "
+#~ "связанных с привилегиями коммитов, не вызванных временем, см. "
+#~ "crossref:dev-model[process-reactions,раздел 1.5.8]."
diff --git a/documentation/content/ru/books/faq/_index.adoc b/documentation/content/ru/books/faq/_index.adoc
index 4c7f78082d..d197618947 100644
--- a/documentation/content/ru/books/faq/_index.adoc
+++ b/documentation/content/ru/books/faq/_index.adoc
@@ -1,18 +1,17 @@
---
-title: Часто задаваемые вопросы по FreeBSD 12.X и 13.X
-authors:
- - 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"]
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
bookOrder: 5
-tags: ["FAQ", "FreeBSD FAQ"]
+copyright: '1995-2023 The FreeBSD Documentation Project'
+description: 'Часто задаваемые вопросы по FreeBSD'
layout: single
+tags: ["FAQ", "FreeBSD FAQ"]
+title: 'Часто задаваемые вопросы по FreeBSD'
+trademarks: ["freebsd", "ieee", "linux", "microsoft", "openbsd", "netbsd", "general"]
---
-// Original EN revision (28.08.2023): 7d1e32e5138658ffb86ea5e0fb14e4740830582c
-
-= Часто задаваемые вопросы по FreeBSD {rel2-relx} и {rel-relx}
+= Часто задаваемые вопросы по FreeBSD
:doctype: book
:toc: macro
:toclevels: 1
@@ -23,18 +22,6 @@ layout: single
:source-highlighter: rouge
:experimental:
:images-path: books/faq/
-:rel-numbranch: 3
-:rel-head: 14-CURRENT
-:rel-head-relx: 14.X
-:rel-head-releng: main
-:rel-relx: 13.X
-:rel-stable: 13-STABLE
-:rel-releng: stable/13
-:rel-relengdate: January 2021
-:rel2-relx: 12.X
-:rel2-stable: 12-STABLE
-:rel2-releng: stable/12
-:rel2-relengdate: December 2018
ifdef::env-beastie[]
ifdef::backend-html5[]
@@ -58,2947 +45,403 @@ endif::[]
[.abstract-title]
Аннотация
-Этот документ является так называемым FAQ (Frequently Asked Questions), то есть списком Часто Задаваемых Вопросов по FreeBSD версий {rel-relx} и {rel2-relx}.
-Мы прилагаем все усилия, чтобы сделать этот FAQ максимально информативным; если у вас есть идеи по его усовершенствованию, присылайте их на адрес {freebsd-doc}.
-
-Самая последняя редакция этого документа всегда доступна на extref:{faq}[Web-сайте FreeBSD].
-Его также можно сгрузить в виде одного
-большого файла в формате link:.[HTML] по HTTP или в различных других форматах с
-https://download.freebsd.org/doc/[FTP-сервера FreeBSD].
+Это Часто Задаваемые Вопросы (FAQ) по FreeBSD. Были приложены все усилия, чтобы сделать это руководство максимально информативным.
'''
toc::[]
-== Вступление
-
-=== FreeBSD - что это такое?
-
-FreeBSD - это современная операционная система для настольных компьютеров, ноутбуков, серверов и встраиваемых систем с поддержкой большого количества https://www.FreeBSD.org/ru/platforms/[платформ].
-
-В основе FreeBSD лежит операционная система "4.4BSD-Lite" Калифорнийского Университета (Беркли) с некоторыми усовершенствованиями из "4.4BSD-Lite2".
-Также она косвенно базируется на 386BSD (BSD Net/2, перенесённой на платформу i386(TM) Уильямом Джолитцем (William Jolitz)), хотя от того первоначального кода осталось очень мало.
-
-FreeBSD используется компаниями, Интернет-провайдерами, научными работниками, профессионалами в вычислительной технике, студентами и рядовыми пользователями по всему миру для работы, образования и отдыха.
-
-Для более детального знакомства с FreeBSD обратитесь к extref:{handbook}/[Руководству по FreeBSD].
-
-[[FreeBSD-goals]]
-=== Какова цель FreeBSD?
-
-Цель проекта FreeBSD - предоставить быструю и стабильную операционную систему общего назначения, которую можно использовать в любых целях без каких-либо ограничений.
-
-[[bsd-license-restrictions]]
-=== Есть ли в лицензии FreeBSD какие-то ограничения?
-
-Да.
-Эти ограничения не касаются аспектов использования кода, но главным образом описывают отношение к этому коду со стороны Проекта FreeBSD. Текст лицензионного соглашения доступен https://www.FreeBSD.org/ru/copyright/freebsd-license/[здесь], и вкратце он может быть изложен следующим образом:
-
-* Не говорите, что это написано вами.
-* Не судитесь с нами, если что-то не работает.
-* Не удаляйте и не изменяйте лицензию.
-
-Многие из нас вкладывают в проект значительные усилия и определённо были бы не против получения небольшой финансовой поддержки сейчас и в будущем, но мы на этом не настаиваем.
-Мы надеемся, что наша основная и самая значительная "миссия" - предоставить код всем желающим, для любых целей, так чтобы он нашел самое широкое применение и принёс наибольшую пользу. Это, на наш взгляд, одна из самых фундаментальных целей Free Software, которую мы с энтузиазмом поддерживаем.
+[[introduction]]
+== Введение
-Часть исходного кода нашей системы, подпадающая под действие
-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! В этом разделе представлен обзор системы FreeBSD: что это такое, её происхождение, цели, варианты использования и сообщество, стоящее за ней.
-Для большинства людей это возможно.
-Но этот вопрос не так уж и однозначен.
+Узнайте причины выбора этого названия, научитесь участвовать в разработке проекта и изучите богатую экосистему FreeBSD в контексте открытых операционных систем.
-Большинство пользователей на самом деле не используют операционную систему. Они работают с приложениями. Именно прикладные программы и используют операционную систему. FreeBSD разработана для того, чтобы дать надежное и полнофункциональное окружение для приложений. Она поддерживает широкий спектр Web-браузеров, офисных пакетов, программ для работы с электронной почтой, графических пакетов, программных сред, сетевых серверов и многое другое. Большинство этих приложений могут
-быть получено из https://www.FreeBSD.org/ports/[Коллекции Портов].
+[[what-is-FreeBSD]]
+=== Что такое FreeBSD?
-Если приложение доступно только для одной операционной системы, то нельзя всего лишь заменить эту операционную систему. Однако есть вероятность, что похожая программа существует для FreeBSD. В качестве сервера для офиса, или сервера Интернет, или надежной рабочей станции FreeBSD практически всегда справится со всем, что вам нужно. Многие пользователи по всему миру, включая как новичков, так и опытных администраторов UNIX(R), используют FreeBSD в качестве своей единственной настольной операционной системы.
+FreeBSD — это универсальная и открытая операционная система, подобная UNIX(R), известная своей исключительной стабильностью, безопасностью и производительностью. Разрабатываемая преданным сообществом добровольцев, она основана на операционной системе Berkeley Software Distribution (BSD) UNIX.
-Пользователям, переходящим на 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>
+FreeBSD предоставляет мощную и настраиваемую среду, подходящую для широкого спектра применений — от серверов и встраиваемых систем до настольных компьютеров и сетевого оборудования. Приверженность принципам открытого исходного кода обеспечивает прозрачный и совместный процесс разработки, что делает FreeBSD надежным выбором для тех, кто ищет стабильную и высокоадаптируемую операционную систему.
[[why-called-FreeBSD]]
-=== Почему система называется именно FreeBSD?
-
-* Она может использоваться безо всяческих выплат, даже для извлечения выгоды.
-* Все исходные тексты операционной системы свободно доступны, на её использование в других разработках (как коммерческих, так и некоммерческих) и дальнейшее распространение наложены минимальные ограничения.
-* Любой, у кого есть усовершенствования или исправления, может предоставить свой код и он будет (правда, с парой оговорок) добавлен в исходные тексты системы.
-
-Следует отметить, что слово "free" используется здесь в двух смыслах: один означает "бесплатно", а другой "делать всё, что хотите". За исключением пары вещей, которые вы _не можете_ делать с FreeBSD, например, претендовать на то, что являетесь её разработчиком, на самом деле можно делать с ней всё, что вам заблагорассудится.
-
-[[differences-to-other-bsds]]
-=== В чём заключается разница между FreeBSD и NetBSD, OpenBSD и другими операционными системами с открытым кодом семейства BSD?
+=== Почему система называется FreeBSD?
-Джеймс Ховард (James Howard) создал хорошее описание истории и отличий между разными проектами под названием https://jameshoward.us/archive/bsd-family-tree/[Семейное древо BSD], в котором даётся подробный ответ на этот вопрос.
-Часть информации там устарела, однако историческая часть остаётся точной.
+Название "FreeBSD" происходит от его корней в операционной системе UNIX Berkeley Software Distribution (BSD), известной своим вкладом в мир открытого программного обеспечения. Слово "Free" в FreeBSD подчеркивает приверженность принципам свободного и открытого программного обеспечения, которые предоставляют пользователям свободу изучать, изменять и распространять исходный код.
-Многие из проектов семейства BSD обмениваются изменениями и готовым кодом даже
-сегодня. Все они происходят от общего предка.
+Стоит отметить, что слово «free» здесь используется в двух значениях: одно означает «бесплатно», а другое — «делай что хочешь».
-Цели проекта FreeBSD описаны выше в <<FreeBSD-goals>>. Цели других наиболее
-известных проектов семейства BSD можно кратко описать так:
-
-* 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}.
-
-Вплоть до версии 12.0 ветка {rel2-relx} была известна как _-STABLE_.
-Однако к моменту выхода {rel-head-relx} ветка {rel2-relx} получит статус
-"extended support" (расширенная поддержка), и исправления будут вноситься
-только для серьёзных проблем, к примеру, связанных с безопасностью.
-
-Релизы делаются <<release-freq,раз в несколько месяцев>>. Хотя многие стараются отслеживать актуальное состояние исходных текстов FreeBSD (обратите внимание на вопросы о <<current,FreeBSD-CURRENT>> и <<stable,FreeBSD-STABLE>>), делать это не обязательно, так как исходные тексты постоянно меняются.
-
-Более полную информацию о релизах FreeBSD можно получить на странице
-https://www.FreeBSD.org/releng/#release-build[Информации о подготовке релизов]
-и на странице Справочника man:release[7].
-
-[[current]]
-=== Что такое FreeBSD-CURRENT?
-
-extref:{handbook}cutting-edge/[FreeBSD-CURRENT, current] - это версия
-операционной системы, находящаяся в стадии разработки, которая должна потом
-стать новой веткой FreeBSD-STABLE. Таким образом, она представляет реальный
-интерес только для разработчиков системы и её фанатов. Обратитесь к
-extref:{handbook}cutting-edge/[соответствующему разделу, current]
-extref:{handbook}[Руководства] для прояснения деталей работы с _-CURRENT_.
-
-Пользователям, не знакомым с FreeBSD, не следует использовать FreeBSD-CURRENT.
-Эта ветка зачастую меняется очень быстро и иногда из-за ошибок может быть неработоспособной.
-Подразумевается, что те, кто используют FreeBSD-CURRENT, должны быть в состоянии изучить проблему, найти причину и сообщить о этом.
-
-[[stable]]
-=== В чём смысл FreeBSD-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?
+[[FreeBSD-goals]]
+=== Какова цель проекта FreeBSD?
-{re} выпускает новую старшую версию FreeBSD в среднем каждые 18 месяцев и младшие версии каждые 8 месяцев. Даты релизов обычно объявляются заранее, так что те, кто работает над системой, знают, когда их проекты должны быть закончены и протестированы. Период тестирования предшествует выходу каждого релиза, для того, чтобы удостовериться в том, что добавление новых возможностей не повлияло на стабильность работы релиза. Многие пользователи расценивают такую осторожность как одну из приятнейших черт FreeBSD, хотя необходимость дожидаться _-STABLE_ для получения всех этих новых возможностей может несколько разочаровывать.
+Проект FreeBSD преследует ясную и непоколебимую цель: предоставить высококачественную UNIX-подобную операционную систему с открытым исходным кодом, которая отличается высокой производительностью, безопасностью и стабильностью.
-Дополнительная информация о процессе подготовки релиза (в том числе планы выпуска последующих релизов) может быть найдена на страницах Web-сайта FreeBSD, посвящённых https://www.FreeBSD.org/releng/[выпуску релизов].
+Он стремится предоставить универсальную платформу, подходящую для широкого спектра вычислительных задач — от серверов и рабочих станций до встраиваемых систем и не только. FreeBSD разрабатывается с твердой приверженностью принципам открытого исходного кода, создавая среду для сотрудничества, в которой вклад глобального сообщества разработчиков помогает формировать и совершенствовать операционную систему. Эта приверженность качеству, свободе и надежности отличает FreeBSD и способствует её постоянному успеху как проекта с открытым исходным кодом.
-Для тех, кому нужно или хочется, еженедельно выпускаются бинарные снапшоты, как описано выше.
+[[FreeBSD-usecases]]
+=== Для каких задач подходит FreeBSD?
-[[snapshot-freq]]
-=== Когда выпускаются снэпшоты FreeBSD?
-
-link:https://www.FreeBSD.org/snapshots/[Снэпшот]-релизы FreeBSD
-выпускаются исходя из актуального состояния веток _-CURRENT_ и _-STABLE_.
-Цели выпуска каждого такого снэпшот-релиза таковы:
-
-* Протестировать самую последнюю версию программы установки системы.
-* Дать людям, которые хотят работать с ветками _-CURRENT_ или _-STABLE_,
-но не имеют достаточно времени или пропускной способности сети
-для отслеживания ежедневных изменений, простой способ их
-начальной установки.
-* Зафиксировать состояние определённого кода на какой-то
-момент времени на случай, если позже мы что-нибудь очень сильно
-сломаем.
-(Хотя Git, как правило, не позволяет случиться ничему такому ужасному).
-* Обеспечить все новые функции и исправления, которым
-требуется тестирование, как можно большим количеством
-потенциальных тестировщиков.
-
-Не утверждается, что всякий снэпшот _-CURRENT_ с любой точки зрения имеет
-качество "готового продукта". Если нужна стабильно
-работающая и полностью протестированная система, то
-придерживайтесь политики использования полноценных релизов.
-
-Снэпшот-релизы доступны непосредственно
-link:https://www.FreeBSD.org/snapshots/[отсюда].
-
-Официальные снэпшоты регулярно выпускаются для всех активно разрабатываемых
-веток.
+FreeBSD — это универсальная операционная система, которая превосходно подходит для различных сценариев использования. Она особенно хорошо зарекомендовала себя в серверных средах, где её стабильность и производительность делают её популярным выбором для веб-хостинга, баз данных и сетевых приложений. Надёжные механизмы безопасности FreeBSD также делают её отличным вариантом для развёртывания межсетевых экранов и защищённых устройств. Помимо серверов, FreeBSD может быть адаптирована для работы в специализированных средах, включая встраиваемые системы и игровые консоли. Её гибкость, надёжность и открытый исходный код делают FreeBSD привлекательным выбором для широкого спектра вычислительных задач.
[[responsible]]
-=== Кто отвечает за разработку 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 доступны на странице
-https://www.freebsd.org/where/[поиска релизов FreeBSD]:
-
-* Для получения самого последнего релиза {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].
-
-=== Как можно получить доступ к базе сообщений о проблемах (Problem Report)?
-
-База данных всех сообщений пользователей о проблемах может быть запрошена с помощью нашего https://bugs.FreeBSD.org/search/[Web-интерфейса].
-
-Можно использовать link:https://www.FreeBSD.org/support/bugreports/[Web-интерфейс] для отсылки сообщений об ошибках через браузер.
-
-Перед тем, как посылать сообщение об ошибке, прочтите статью extref:{problem-reports}[Составление сообщений о проблеме во FreeBSD] о том, как писать хорошие сообщения об ошибках.
-
-== Документация и поддержка
-
-[[books]]
-=== Есть ли хорошие книги по FreeBSD?
-
-В рамках проекта создаётся обширная документация, которая доступна в онлайне по
-следующей ссылке: https://www.FreeBSD.org/docs/[https://www.FreeBSD.org/docs/].
-
-[[doc-formats]]
-=== Можно ли получить документацию в другом формате, например, в виде PDF?
-
-Да.
-link:https://download.freebsd.org/doc/[Документация доступна к сгрузке также и
-в других форматах] на сайте FreeBSD.
-
-Каталоги с документацией подразделяется на категории в зависимости от:
-
-* Имени документа, например, `faq` или `handbook`.
-* Языка документа на базе наименования региональных настроек, размещаемых в
-каталоге [.filename]#/usr/share/locale# системы FreeBSD, без учёта кодировки,
-так как во всей документации сейчас используется UTF-8.
-На данный момент доступны следующие языки:
-
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Кодировка
-| Язык
-
-|`en`
-|Английский
-
-|`bn-bd`
-|Бенгальский или Бангла (Бангладеш)
-
-|`da`
-|Датский
-
-|`de`
-|Немецкий
+=== Кто отвечает за FreeBSD?
-|`el`
-|Греческий
+FreeBSD - это проект с открытым исходным кодом, развиваемый сообществом и имеющий децентрализованную структуру. Его разработка и поддержка осуществляются глобальным сообществом преданных добровольцев, разработчиков и организаций, которые совместно работают над улучшением и расширением возможностей операционной системы.
-|`es`
-|Испанский
+Ключевые решения, касающиеся проекта FreeBSD, такие как общее направление развития проекта или право на добавление кода в дерево исходных текстов, принимаются избираемой командой разработчиков (Core Team) из девяти человек.
-|`fr`
-|Французский
+Этот совместный и ориентированный на сообщество подход был основополагающим для успеха и долголетия FreeBSD в качестве надежной и устойчивой UNIX-подобной операционной системы.
-|`hu`
-|Венгерский
-
-|`it`
-|Итальянский
-
-|`ja`
-|Японский
-
-|`ko`
-|Корейский
-
-|`mn`
-|Монгольский
-
-|`nl`
-|Голландский
-
-|`pl`
-|Польский
+[[how-to-contribute]]
+=== Как я могу внести свой вклад в FreeBSD? Чем я могу помочь?
-|`pt-br`
-|Португальский (Бразилия)
+Мы принимаем все виды вкладов: документацию, код и даже произведения искусства. Конкретные рекомендации о том, как это сделать, смотрите в статье extref:{contributing}[Участие в разработке FreeBSD].
-|`ru`
-|Русский
+И спасибо за идеи!
-|`tr`
-|Турецкий
+[[bsd-license-restrictions]]
+=== Есть ли ограничения в лицензии FreeBSD?
-|`zh-cn`
-|Упрощённый китайский (Китай)
+FreeBSD распространяется под лицензией https://www.FreeBSD.org/copyright/freebsd-license/[BSD License], известной своим разрешительным характером.
-|`zh-tw`
-|Традиционный китайский (Тайвань)
-|===
-+
-[NOTE]
-====
-Некоторые документы могут иметься не на всех языках.
-====
+Данная лицензия накладывает очень мало ограничений на использование FreeBSD:
-* Формат документа.
-Мы распространяем документацию в нескольких различных форматах.
-У каждого из форматов имеются свои плюсы и свои минусы.
-Некоторые форматы лучше подходят для чтения в on-line, тогда как другие предназначены для получения эстетично выглядящей бумажной копии.
-Наличие документации во всех этих форматах обеспечивает возможность прочтения нашими пользователями любой её части как с экрана монитора, так и на бумаге после вывода на печать.
-На данный момент доступны следующие форматы;
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Формат
-| Значение
-
-|`html`
-|В зависимости от документа: Один большой HTML-файл, содержащий документ полностью, или набор небольших связанных HTML-файлов, в обоих случаях содержащих изображения, таблицы стилей и код JavaScript
-
-|`pdf`
-|Adobe's Portable Document Format
-|===
-* Способ сжатия и создания архива.
-.. В случае формата `html`, файлы пакетируются с помощью man:tar[1].
-Получающийся файл [.filename]#.tar# затем сжимается утилитой man:gzip[1].
-.. При использовании формата PDF создаётся один файл. К примеру,
-[.filename]#explaining-bsd_en.pdf#, [.filename]#faq_en.pdf# и так далее.
-
-Выбрав формат, сгрузите файлы, распакуйте их при необходимости, а затем
-скопируйте документацию в соответствующие места.
-
-Например, HTML-версию FAQ можно найти в
-[.filename]#doc/en/books/faq/faq_en.tar.gz#. Для сгрузки и распаковки этого
-файла выполните:
-
-[source,shell]
-....
-% fetch https://download.freebsd.org/doc/en/books/faq/faq_en.tar.gz
-% tar xvf faq_en.tar.gz
-....
+* Не утверждайте, что это написали вы.
+* Не подавайте на нас в суд, если что-то сломается.
+* Не удаляйте и не изменяйте лицензию.
-Если файл сжат, tar автоматически определит подходящий формат и корректно его распакует, в результате чего появится набор файлов.
-Главным является [.filename]#index.html#, и в нём находится всё содержимое документа, начиная с оглавления, ссылающегося на остальные части документа.
+Лицензия означает, что вы можете свободно изменять, распространять и даже продавать FreeBSD, *не будучи обязанным публиковать свои изменения как открытый исходный код*. Однако есть несколько минимальных условий, таких как сохранение оригинального уведомления об авторских правах и отказ от гарантий при распространении FreeBSD. В целом, лицензия BSD предоставляет высокую степень свободы и гибкости, что делает FreeBSD привлекательным выбором для широкого спектра приложений и проектов.
-[[mailing]]
-=== Где найти информацию по спискам рассылки FreeBSD? Какие существуют телеконференции по FreeBSD?
+Код в нашем дереве исходников, подпадающий под действие https://www.FreeBSD.org/copyright/COPYING[GNU General Public License (GPL)] или https://www.FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public License (LGPL)], сопровождается несколько большими ограничениями, по крайней мере, в части обеспечения доступа, в отличие от обычной противоположной ситуации.
-Исчерпывающая информация содержится в extref:{handbook}eresources/[разделе
-Руководства, eresources-mail], который посвящён спискам рассылки, и в
-extref:{handbook}eresources/[разделе Руководства, eresources-news], касающемся
-новостных конференций.
+[[replace-current-OS]]
+=== Может ли FreeBSD заменить мою текущую операционную систему?
-[[irc]]
-=== Существуют ли каналы IRC (Internet Relay Chat) по FreeBSD?
+Для многих пользователей и администраторов — да. Но этот вопрос не настолько однозначен.
-Да, в большинстве крупнейших сетей IRC имеется канал для обсуждения FreeBSD, а
-на wiki-странице FreeBSD размещён актуальный
-https://wiki.freebsd.org/IRC/Channels[список IRC-каналов].
+FreeBSD — это мощная и универсальная операционная система, которая может заменить или сосуществовать с множеством других операционных систем в зависимости от конкретных потребностей пользователей и администраторов. Однако возможность замены вашей текущей операционной системы на FreeBSD зависит от таких факторов, как ваше оборудование, требования к программному обеспечению и уровень знакомства с FreeBSD.
-Все эти каналы разные и не связаны друг к другом. Поскольку их манеры общения
-отличаются, попробуйте каждый, пока не найдёте соответствующий вашему стилю.
+Хотя она предлагает надежную и многофункциональную альтернативу, важно оценить ваши конкретные задачи и требования к совместимости перед переходом.
-[[forums]]
-=== Есть ли какие-нибудь web-форумы для обсуждения FreeBSD?
+Если приложение доступно только в одной операционной системе, эту операционную систему нельзя просто заменить.
-Официальные форумы FreeBSD расположены по адресу https://forums.FreeBSD.org/[https://forums.FreeBSD.org/].
+Пользователи, переходящие на FreeBSD из другой UNIX-подобной среды, найдут FreeBSD похожей. Пользователи, не знакомые с UNIX, например пользователи Windows(R), должны быть готовы потратить дополнительное время на изучение принципов работы UNIX.
-[[training]]
-=== Где можно пройти платные курсы по FreeBSD и получить поддержку?
+[[run-popular-software]]
+=== Может ли FreeBSD запускать популярное открытое программное обеспечение?
-http://www.ixsystems.com[iXsystems, Inc.], дочерней компанией которой является http://www.freebsdmall.com/[FreeBSD Mall], оказывает http://www.ixsystems.com/support[услуги поддержки] программного обеспечения FreeBSD на коммерческой основе, в дополнение к разработкам на платформе FreeBSD и решениям, требующим тонкой настройки.
+Да, FreeBSD хорошо подходит для запуска популярного открытого программного обеспечения. Его совместимость с широким спектром приложений и библиотек делает его предпочтительным выбором для тех, кто хочет развертывать и использовать пакеты открытого ПО. FreeBSD предоставляет надежную и стабильную среду, поддерживающую различные языки программирования, базы данных, веб-серверы и другое ПО, часто используемое в сообществе открытого исходного кода. Система портов и пакетов FreeBSD упрощает установку и управление таким ПО, гарантируя, что пользователи могут легко получить доступ и запускать свои любимые открытые инструменты и приложения на FreeBSD с минимальными трудностями.
-BSD Certification Group, Inc. предоставляет сертификацию системного администрирования DragonFly BSD, FreeBSD, NetBSD и OpenBSD. Для получения дополнительной информации посетите http://www.BSDCertification.org[их сайт].
+[[install-software]]
+=== Как установить программное обеспечение в FreeBSD?
-Чтобы попасть в этот список, другие организации, осуществляющие обучение и поддержку, должны обратиться к нам в Проект.
+FreeBSD предоставляет несколько методов установки программного обеспечения. Один из наиболее распространённых методов — использование встроенного менеджера пакетов man:pkg[8], который упрощает процесс, загружая и устанавливая предварительно собранные бинарные пакеты. Другой подход — компиляция и установка программ из исходного кода с использованием коллекции man:ports[7], что обеспечивает гибкий и настраиваемый способ установки программного обеспечения.
-== Установка
+Документация FreeBSD предоставляет подробные руководства по обоим методам, гарантируя, что пользователи смогут легко расширить возможности своей системы с помощью необходимого программного обеспечения.
-[[which-architecture]]
-=== Какую архитектуру нужно загрузить? У меня есть 64-разрядный процессор Intel(R), но я вижу только amd64.
+[[differences-to-other-bsds]]
+=== Каковы различия между FreeBSD, NetBSD, OpenBSD и другими открытыми BSD-операционными системами?
-amd64 - это термин, применяемый во FreeBSD для обозначения 64-разрядной архитектуры x86 (также известна как "x86-64" или "x64"). На большинстве современных компьютеров следует использовать amd64. Для более старых подойдёт i386. При установке системы на отличную от x86 архитектуру, выберите платформу, наиболее подходящую для оборудования.
+FreeBSD, NetBSD, OpenBSD и DragonFly BSD - все они являются частью семейства BSD с открытым исходным кодом, разделяя общие UNIX-подобные основы, но каждый имеет свою собственную направленность и приоритеты. Эти различия отражают уникальные цели каждого проекта, и хотя они имеют сходства, их конкретные сильные стороны и акценты ориентированы на различные сценарии использования и предпочтения в экосистеме BSD.
-[[floppy-download]]
-=== Какой файл нужно скачать для установки FreeBSD?
+[[freebsd-linux-distribution]]
+=== Является ли FreeBSD дистрибутивом Linux(R)?
-На странице https://www.freebsd.org/ru/where/[Получение FreeBSD] выберите
-`[iso]` с соответствующей оборудованию архитектурой.
+Нет, FreeBSD *не* является дистрибутивом Linux.
-Можно использовать любой из:
+Хотя FreeBSD и Linux являются UNIX-подобными операционными системами и имеют много общего, у них разные ядра. Linux использует ядро Linux, тогда как FreeBSD использует ядро FreeBSD, основанное на операционной системе Berkeley Software Distribution (BSD) UNIX.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| файл
-| описание
+FreeBSD и Linux имеют свои уникальные сообщества разработчиков, циклы выпуска версий и архитектуры систем, что делает их отдельными и независимыми операционными системами.
-|[.filename]#disc1.iso#
-|Содержит достаточно для установки FreeBSD и минимальный набор пакетов.
+FreeBSD предоставляет свои собственные преимущества, включая отличную модель лицензирования, дизайн системы и пользовательские утилиты по сравнению с дистрибутивами Linux.
-|[.filename]#dvd1.iso#
-|Наподобие [.filename]#disc1.iso#, но с дополнительными пакетами.
+[[run-linux-programs-freebsd]]
+=== Возможно ли запускать Linux-программы в FreeBSD?
-|[.filename]#memstick.img#
-|Образ с автозагрузкой для записи на USB флешку.
+Да, FreeBSD предоставляет слой совместимости, известный как _linuxulator_ (man:linux[4]), который позволяет многим Linux-программам работать в FreeBSD. Эта функция обеспечивает выполнение широкого спектра Linux-бинарников без необходимости в отдельной Linux-среде.
-|[.filename]#bootonly.iso#
-|Минимальный образ, требующий сетевое подключение для завершения установки FreeBSD.
-|===
+Тем не менее, важно отметить, что множество широко используемых программ с открытым исходным кодом *имеют собственные версии для FreeBSD*, доступные через систему портов и пакетов.
-Полные инструкции по этой процедуре, а также более подробную информацию по
-общим вопросам, возникающим при установке, можно найти в
-extref:{handbook}bsdinstall[разделе Руководства об установке FreeBSD].
+[[installing-freebsd]]
+== Установка FreeBSD
-=== Что нужно делать, если установочный образ не запускается?
+Процесс установки FreeBSD — это первый шаг к использованию возможностей этой мощной операционной системы с открытым исходным кодом. В этом разделе представлена важная информация о том, где получить FreeBSD, подробные инструкции по установке, а также объяснение таких концепций, как FreeBSD-CURRENT и FreeBSD-STABLE. Также рассматриваются график выпуска релизов и снимков (snapshots), инструменты настройки после установки, методы поиска пакетов и ответы на часто задаваемые вопросы об обновлении пакетов.
-Это может быть вызвано тем, что образ был загружен по FTP не в режиме _binary_.
+[[where-get]]
+=== Где взять FreeBSD?
-В некоторых клиентских программах FTP по умолчанию используется текстовый (_ascii_) режим передачи, в котором любые последовательности символов "конец строки" заменяются на используемые в системе клиента. В таком случае образ загрузочного диска будет неизбежно испорчен. Проверьте контрольную сумму SHA-256 полученного файла: если он не _точно_ такой же как на FTP-сервере, то ошибка произошла, скорее всего, в процессе передачи.
+FreeBSD доступна для бесплатной загрузки по ссылке: link:https://www.FreeBSD.org/where/[официальный сайт FreeBSD].
-В случае использования командной строки FTP-клиента введите команду _binary_ в командной строке FTP после подключения к серверу, но перед началом передачи файла.
+Кроме того, FreeBSD также может быть доступен через различные зеркальные сайты, что обеспечивает доступность для пользователей по всему миру. Основным и наиболее надежным источником для получения последних выпусков и обновлений FreeBSD является link:https://www.FreeBSD.org/where/[официальный сайт], что делает его идеальной отправной точкой для начала работы с FreeBSD.
[[install-instructions-location]]
=== Где находятся инструкции по установке FreeBSD?
-Инструкции по установке можно найти в extref:{handbook}bsdinstall/[главе
-Руководства], посвящённой установке FreeBSD.
-
-[[custom-boot-floppy]]
-=== Как сделать собственный установочный диск?
-
-Индивидуальный установочный носитель FreeBSD можно создать, запустив процедуру построения индивидуального релиза. Следуйте инструкциям в статье о extref:{releng}[подготовке релизов FreeBSD].
-
-[[windows-coexist]]
-=== Может ли Windows(R) сосуществовать с FreeBSD? (специфично для x86)
-
-Да, если Windows(R) установлена первой. Загрузчик FreeBSD будет управлять процессом выбора загрузки Windows(R) или FreeBSD. Если Windows(R) устанавливается следом, то это приведёт к перезаписи загрузчика. Если такое случится, обратитесь к следующему разделу.
+Инструкции по установке можно найти в главе extref:{handbook}bsdinstall/[Установка FreeBSD Руководства].
-[[bootmanager-restore]]
-=== Другая операционная система уничтожила мой загрузчик операционной системы! Как мне его вернуть? (специфично для x86)
-
-Способ восстановления зависит от используемого загрузчика. Меню выбора загрузки, используемое во FreeBSD, можно переустановить с помощью man:boot0cfg[8]. Пример для восстановления меню загрузки на диске _ada0_:
-
-[source,shell]
-....
-# boot0cfg -B ada0
-....
-
-Неинтерактивный загрузчик MBR можно установить с помощью man:gpart[8]:
-
-[source,shell]
-....
-# gpart bootcode -b /boot/mbr ada0
-....
-
-Более сложные ситуации, включая использование дисков GPT, рассматриваются в man:gpart[8].
-
-[[need-complete-sources]]
-=== Нужно ли устанавливать исходные тексты системы?
-
-В общем случае, нет. Для работы основной системы присутствие исходных текстов не требуется. Некоторые порты наподобие [.filename]#sysutils/lsof# не будут собираться без установленных исходных текстов системы. В частности, если порт собирает модуль ядра или напрямую обращается к структурам ядра, в этом случае исходные тексты должны быть установлены.
-
-[[need-kernel]]
-=== Нужно ли перекомпилировать ядро?
-
-Обычно нет.
-Поставляемое ядро `GENERIC` содержит драйвера, необходимые для типового компьютера.
-Инструмент man:freebsd-update[8] не может использоваться для обновления FreeBSD с собственным ядром, и это является ещё одной причиной для того, чтобы по возможности придерживаться использования ядра `GENERIC`.
-Для компьютеров с очень небольшим объёмом ОЗУ, таких как встраиваемые системы, может потребоваться собственное небольшое ядро, содержащее только необходимые драйверы.
+[[current]]
+=== Что такое концепция FreeBSD-CURRENT?
-[[password-encryption]]
-=== Какой из методов шифрования паролей (DES, Blowfish или MD5) я должен использовать, и как указать, шифрование какого типа применяется пользователями?
+FreeBSD-CURRENT представляет собой ветку разработки операционной системы FreeBSD. Это самая передовая версия FreeBSD, в которой ведётся активная разработка.
-Во FreeBSD по умолчанию используется метод шифрования _SHA512_.
-Пароли, зашифрованные методом DES, остаются доступными для обратной совместимости с операционными системами, в которых всё ещё используется менее защищённый метод шифрования паролей.
-FreeBSD также поддерживает пароли в форматах Blowfish и MD5.
-Управление выбором используемого метода для новых паролей осуществляется через параметр входа `passwd_format` в файле [.filename]#/etc/login.conf#, принимающий значения `des`, `blf` (если они доступны) или `md5`.
-Подробная информация о параметрах входа находится на странице Справочника man:login.conf[5].
+Хотя он включает последние функции, улучшения и экспериментальные изменения, он не всегда может быть таким стабильным, как FreeBSD-STABLE или релизные версии.
-[[ffs-limits]]
-=== Какие существуют ограничения для файловой системы FFS?
+FreeBSD-CURRENT — это платформа для разработчиков и энтузиастов, которые хотят внести свой вклад в будущее FreeBSD и оставаться на переднем крае её разработки, даже несмотря на то, что в ней могут иногда происходить значительные изменения и *она не рекомендуется для производственных систем*.
-Наибольший размер файловой системы FFS ограничен практически количеством памяти, которая требуется для работы man:fsck[8]. man:fsck[8] использует 1 бит на фрагмент, и для стандартного размера фрагмента 4 Кбайт это эквивалентно использованию 32 Мбайт памяти на терабайт дискового пространства. Это означает, что на архитектурах с ограничением размера пользовательского процесса в 2 Гбайт (например, i386(TM)) максимальный размер файловой системы, доступный для man:fsck[8], составляет ~60 Тбайт.
+[[stable]]
+=== Что такое концепция FreeBSD-STABLE?
-Без ограничения на память для man:fsck[8] максимальный размер файловой системы составляет 2 ^ 64 (блоков) * 32 Кбайт => 16 экса * 32 Кбайт => 512 зеттабайт.
+Ветка FreeBSD-STABLE — это более стабильная ветка разработки по сравнению с CURRENT. Она содержит код, который проходит дополнительные тестирование и доработку перед слиянием в ветку RELEASE. STABLE — хороший выбор для тех, кто хочет следить за разработкой FreeBSD, но предпочитает более стабильную среду, чем CURRENT.
-Максимальный размер файла на FFS приблизительно равен 2 петабайт со стандартным размером блока 32 Кбайт. Каждый 32 Кбайтный блок может адресовать до 4096 блоков. С использованием тройной косвенной адресации это составляет 32 Кбайт * 12 + 32 Кбайт * 4096 + 32 Кбайт * 4096^2 + 32 Кбайт * 4096^3. Увеличение размера блока до 64 Кбайт увеличит максимальный размер файла в 16 раз.
+[[release-freq]]
+=== Когда выходят выпуски FreeBSD?
-[[archsw-readin-failed-error]]
-=== Я скомпилировал новое ядро и при загрузке получил сообщение об ошибке readin failed.
+Версия {re} выпускает новую основную версию FreeBSD примерно каждые 18 месяцев и новую промежуточную версию — в среднем каждые 8 месяцев. Даты выпуска объявляются заранее, чтобы разработчики знали, когда их проекты должны быть завершены и протестированы. Перед каждым выпуском проводится период тестирования, чтобы убедиться, что добавление новых функций не нарушает стабильность релиза.
-Ядро и компоненты системы не синхронизированы. Такая конфигурация не поддерживается. Обязательно используйте команды `make buildworld` и `make buildkernel` для обновления ядра.
+[[snapshot-freq]]
+=== Когда создаются снимки состояния FreeBSD?
-Загрузите систему, непосредственно указав ядро на втором этапе загрузки, нажав любую клавишу до запуска загрузчика при появлении символов `|`.
+Снимки FreeBSD обычно создаются с регулярными интервалами для всех активно разрабатываемых веток. Эти снимки фиксируют состояние исходного кода FreeBSD и связанных с ним бинарных пакетов на определённый момент времени. Частота создания снимков может варьироваться, но обычно они делаются еженедельно или раз в две недели. Эти снимки предоставляют пользователям возможность получить доступ к последним изменениям и разработкам в FreeBSD, помогая им оставаться в курсе прогресса проекта.
[[general-configuration-tool]]
-=== Существует ли инструмент для настройки системы после её установки?
-
-Да, bsdconfig предоставляет замечательный интерфейс для пост-установочной настройки FreeBSD.
-
-[[hardware]]
-== Аппаратная совместимость
-
-[[compatibility-general]]
-=== Вопросы общего характера
-
-[[which-hardware-to-get]]
-==== Я хочу приобрести некое оборудование для моей системы FreeBSD. Какая модель/производитель/тип лучше всего?
-
-Это постоянно обсуждается в списках рассылки FreeBSD и является ожидаемым вопросом, так как аппаратура меняется очень быстро. Обратитесь к Hardware Notes для
-FreeBSD link:{u-rel123-hardware}[{rel123-current}] или
-link:{u-rel131-hardware}[{rel131-current}], а также поищите в
-https://www.FreeBSD.org/search/#mailinglists[архивах списков рассылки] перед
-тем, как задавать вопросы о самом последнем и лучшем оборудовании. Весьма
-вероятно, что обсуждение касаемо этого типа оборудования велось как раз на прошлой неделе.
-
-Перед приобретением лэптопа посмотрите архивы {freebsd-questions} или, возможно, более специфичные списки рассылки по данному типу оборудования.
-
-[[memory-upper-limitation]]
-==== Каковы ограничения на оперативную память?
-
-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 Гбайт.
-
-Для преодоления ограничения в 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, добавив следующую строку:
-
-[.programlisting]
-....
-options PAE
-....
-
-PAE не является широко используемым в настоящее время, поскольку большинство нового x86 аппаратного обеспечения также поддерживает работу в 64-разрядном режиме, также известном как AMD64 или Intel(R) 64. Этот режим имеет большее адресное пространство и не нуждается в таких трюках. FreeBSD поддерживает AMD64, и рекомендуется использование этой версии FreeBSD вместо версии i386(TM), если требуется больше 4 Гбайт памяти.
-
-[[compatibility-processors]]
-=== Аппаратные платформы и процессоры
-
-[[architectures]]
-==== Поддерживает ли FreeBSD аппаратные платформы, отличные от x86?
-
-Полноценно поддерживаются архитектуры первого класса, такие, как
-i386 или amd64. Архитектуры 2 и 3 класса поддерживаются, исходя
-из принципа наибольшего внимания при имеющихся возможностях.
-Полное описание классов доступно в extref:{committers-guide}[Руководстве
-коммиттера, archs].
-
-Полный список поддерживаемых архитектур находится на https://www.FreeBSD.org/ru/platforms/[странице], посвящённой платформам.
+=== Есть ли инструмент для выполнения задач пост-установочной конфигурации?
-[[smp-support]]
-==== Поддерживает ли FreeBSD многопроцессорные системы (SMP)?
+Да. man:bsdconfig[8] предоставляет удобный интерфейс для настройки FreeBSD после установки.
-FreeBSD поддерживает симметричное мультипроцессирование (SMP) на всех невстраиваемых платформах (например, i386, amd64 и так далее). SMP также поддерживается для arm и MIPS, хотя некоторые процессоры могут это не поддерживать. В реализации SMP во FreeBSD используется мелкодисперсная синхронизация, и производительность масштабируется почти линейно с ростом количества процессоров.
+[[search-software-freebsd]]
+=== Как найти программное обеспечение для установки в FreeBSD?
-За подробной информацией обращайтесь к странице Справочника man:smp[4].
+Поиск программного обеспечения для установки в FreeBSD упрощается благодаря менеджеру пакетов man:pkg[8] и команде `pkg search`.
-[[microcode]]
-==== Что такое микрокод? Как установить обновление микрокода для процессоров AMD или Intel?
+Пользователи могут использовать эту команду для поиска доступных пакетов по ключевым словам, названиям пакетов или описаниям. Эта функция помогает быстро найти нужное программное обеспечение в обширной коллекции портов и пакетов FreeBSD, упрощая процесс добавления новых приложений и инструментов в систему FreeBSD.
-Микрокод является программным средством реализации аппаратных инструкций процессора.
-Его использование позволяет исправлять ошибки процессора без замены микросхемы.
+[[latest-packages-freebsd]]
+=== Почему я не получаю последние пакеты в моей системе FreeBSD?
-Установите package:sysutils/cpu-microcode[], а затем добавьте:
+Доступность последних пакетов в FreeBSD может зависеть от различных факторов, включая частоту обновлений репозитория пакетов и используемую версию FreeBSD.
-[.programlisting]
-....
-microcode_update_enable="YES"
-....
-
-в [.filename]#/etc/rc.conf#
-
-[[compatibility-peripherals]]
-=== Периферийные устройства
-
-[[supported-peripherals]]
-==== Какого рода периферийные устройства поддерживает FreeBSD?
-
-За информацией о списке оборудования, о котором известно, что оно
-работоспособно, а также данными о каких бы то ни было ограничечниях, обратитесь
-к Hardware Notes для FreeBSD link:{u-rel123-hardware}
-[{rel123-current}] или link:{u-rel131-hardware}[{rel131-current}].
-
-[[compatibility-kbd-mice]]
-=== Клавиатуры и мыши
-
-[[moused]]
-==== Можно ли использовать мышь вне X Window?
-
-Используемый по умолчанию драйвер консоли man:syscons[4] предоставляет возможность использования указателя мыши в текстовых консолях для выделения и переноса текста. Запустите демон мыши man:moused[8] и включите отображение указателя мыши в виртуальной консоли:
-
-[source,shell]
-....
-# moused -p /dev/xxxx -t yyyy
-# vidcontrol -m on
-....
-
-Здесь _xxxx_ - это имя устройства мыши, а _yyyy_ - тип протокола, используемого мышью. Даемон мыши может автоматически определять тип протокола большинства мышей, за исключением старых, работающих по последовательному интерфейсу. Для выполнения автоматического определения в качестве протокола укажите `auto`. Если автоматическое определение не работает, то обратитесь к справочным страницам по man:moused[8] для получения списка поддерживаемых типов протоколов.
-
-Для мыши типа PS/2 добавьте строчку `moused_enable="YES"` в файл [.filename]#/etc/rc.conf# для запуска даемона мыши во время загрузки системы. Кроме того, для использования даемона мыши во всех виртуальных терминалах, а не только на консоли, добавьте `allscreens_flags="-m on"` в файле [.filename]#/etc/rc.conf#.
-
-После запуска даемона мыши, доступ к мыши должен согласовываться между даемоном мыши и другими программами типа X Window. Обратитесь к вопросу из FAQ<<x-and-moused, Почему моя мышь не работает с X?>> для получения более полной информации по этому вопросу.
-
-[[text-mode-cut-paste]]
-==== Как можно вырезать и копировать текст с помощью мыши в текстовой консоли?
-
-Удалить данные с помощью мыши нельзя.
-Однако их можно скопировать и вставить.
-После запуска даемона мыши, как описано в ответе на <<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 ^[[3~ ed-delete-next-char # for xterm
-....
-
-Для C Shell добавьте следующие строки в [.filename]#~/.cshrc#. Смотрите man:csh[1].
-
-[.programlisting]
-....
-bindkey ^[[3~ delete-char # for xterm
-....
-
-[[compatibility-other]]
-=== Другое оборудование
-
-[[es1370-silent-pcm]]
-==== Есть ли решение проблемы отсутствия звука при использовании звуковых адаптеров man:pcm[4]?
-
-Некоторые звуковые адаптеры при каждой загрузке устанавливают нулевой уровень
-громкости выводимого звука. При работе с 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)?
-
-Наиболее вероятная причина заключается в различии между адресами физической и виртуальной памяти.
-
-Существующее соглашение для большинства оборудования ПК заключается в использовании пространства памяти, лежащей в диапазоне между 3.5 ГБ и 4 ГБ для специальных нужд (обычно для нужд PCI). Это пространство адресов используется для доступа к PCI оборудованию. Как результат, реальная физическая память не может быть получена в данном адресном пространстве.
-
-Какие действия выполняются с памятью в данном регионе, зависит от оборудования. К сожалению, некоторое оборудование ничего не выполняет и возможность использовать эти 500 МБ ОЗУ полностью потеряна.
-
-К счастью, большинство оборудования перераспределяет память к более верхней позиции, так что она всё ещё может использоваться. Тем не менее, это может вызвать некоторое замешательство при просмотре сообщений, выдаваемых при загрузке.
-
-На 32-битной версии FreeBSD кажется, что эта память потерялась, поскольку она переназначится в диапазон выше 4 ГБ, который не доступен для 32 битного ядра. В данном случае, решение заключается в сборке ядра с PAE. За дополнительной информацией обращайтесь к статье об ограничениях памяти.
-
-На 64nbsp;битной версии FreeBSD или в случае использования ядра с включённым PAE FreeBSD корректно определит и перераспределит память, так, что она станет годной к использованию. Тем не менее, во время загрузки может показаться, что FreeBSD определяет больше памяти, чем реально имеется в системе из-за описанного перераспределения. Это нормально, и информация о доступной памяти будет скорректирована по окончанию процесса загрузки.
-
-[[signal11]]
-=== Программы аварийно завершают работу с ошибкой Signal 11.
-
-Ошибки выполнения, связанные с сигналом 11, происходят, когда процесс пытается обратиться к области памяти, доступ к которой ему не был дан операционной системой. Если что-то подобное происходит в случайные, казалось бы, промежутки времени, следует начать поиск причины.
-
-Эти проблемы могут быть классифицированы следующим образом:
-
-. Если проблема возникает только в определённом самостоятельно разработанном приложении, то скорее всего это ошибка в коде.
-. Если это проблема в части базового комплекта системы FreeBSD, то это тоже может быть ошибка в программном коде, хотя в большинстве случаев такие проблемы обнаруживаются и ошибки исправляются задолго до того, как обычным читателям FAQ доводится использовать этот код (именно для этого предназначена версия -CURRENT).
-
-Вероятно, это не связано с ошибкой во FreeBSD, если проблема проявляется при компиляции программы, и при этом ошибка компилятора каждый раз разная.
-
-Например, если запуск `make buildworld` завершился неудачей при попытке компиляции [.filename]#ls.c# в [.filename]#ls.o# и при повторном запуске компиляция снова прервалась на том же месте, то это ошибка процесса построения. Обновите исходные тексты и попробуйте снова. Если же компиляция прерывается в каком-то другом месте, то причина наиболее вероятно кроется в оборудовании.
-
-В первом случае воспользуйтесь отладчиком, к примеру, man:gdb[1], для нахождения точки программы, в которой делается попытка доступа к неверному адресу, и исправьте эту ошибку.
+Также следует отметить, что для портов FreeBSD существуют две ветки. Наиболее обновляемая называется `latest`, а наиболее стабильная — `quarterly`. Для использования самых свежих пакетов необходимо настроить ветку `latest`. Информацию о настройке веток можно найти в link:{handbook}ports/[главе о портах в Руководстве].
-Во втором случае проверьте, какой компонент вашего оборудования неисправен.
-
-Среди часто приводящих к этому причин:
-
-. Жёсткие диски могут перегреваться. Проверьте работоспособность вентиляторов, так как жёсткие диски и другое оборудование могут перегреваться.
-. Процессор перегревается. Это может произойти при разгоне процессора или при поломке процессорного вентилятора.
-В любом случае убедитесь, что ваше оборудование работает в нормальном режиме,
-как ему и положено, по крайней мере, на момент поиска причин неисправности.
-В противном случае сбросьте частоту на настройки по умолчанию.)
-+
-Что касается разгона, то медленная система обходится дешевле, чем сгоревшая система, требующая замены!
-К тому же проблемы на таких системах не находят понимания общественности.
-. Проблемная память. Если установлены различные микросхемы 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/[Ограничения файлов/процессов, 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_`.
-
-Либо же, если на клиентской машине установлен package:x11/xterm[], запуск `resize` позволит узнать у терминала правильные размеры и применить эти значения.
-
-[[connection-delay]]
-=== Почему подключение через ssh или telnet к моему компьютеру занимает так долго времени?
-
-Симптом: между моментом установления TCP-соединения и выдачей клиентским программным обеспечением запроса на ввод пароля (или, в случае использования man:telnet[1], выдачей приглашения на вход) проходит большой промежуток времени.
-
-Проблема: скорее всего, задержка вызвана программным обеспечением на стороне сервера, которое пытается преобразовать IP-адрес клиента в имя хоста.
-Многие серверы, включая Telnet и SSH, поставляемые с FreeBSD, делают это для того, чтобы, кроме всего прочего, записать имя хоста в файле журнала для справки администратора.
-
-Лечение: Если проблема возникает при подключении клиента к любому серверу, то причина в клиенте. Если проблема возникает только при чьей-либо попытке подключиться к серверу, то проблема в сервере.
+[[hardware]]
+== Оборудование
-Если проблема с клиентом, то единственным методом ее решения является исправление DNS, чтобы сервер смог распознать вашу машину. Если это происходит в локальной сети, то предположите, что это проблема с сервером, и продолжайте чтение. Если это происходит в сети Интернет, обратитесь к вашему провайдеру.
+В разделе «Оборудование» рассматривается совместимость FreeBSD с различными аппаратными конфигурациями. Он охватывает широкий круг тем, включая поддерживаемые архитектуры, максимальный объем оперативной памяти, масштабируемость процессоров, совместимость с видеокартами, поддержку Wi-Fi-адаптеров, а также работу с сетевыми картами 10 Gigabit Ethernet. Независимо от того, планируется ли развертывание FreeBSD на серверах, рабочих станциях или специализированном оборудовании, этот раздел дает представление о возможностях и ограничениях FreeBSD, предоставляя информацию о выборе и настройке оборудования.
-Если проблема с сервером в локальной сети, настройте сервер для разрешения запросов на преобразование адреса в имя хоста в диапазоне локальных адресов. Обратитесь к страницам Справочника по man:hosts[5] и man:named[8] для получения более подробной информации. Если это происходит в сети Интернет, то проблема может заключаться в некорректной работе ресолвера локального сервера. Для проверки попробуйте получить адрес другого хоста, такого как `www.yahoo.com`. Если это не работает, то в этом и состоит проблема.
+[[architectures-support]]
+=== Какие архитектуры поддерживает FreeBSD?
-Из-за свежей установки FreeBSD, также возможно, что информация о домене и сервере имён отсутствует в [.filename]#/etc/resolv.conf#. Это часто будет вызывать задержку в работе SSH, так как опция `UseDNS` по умолчанию установлена в значение `yes` в [.filename]#/etc/ssh/sshd_config#. Если именно это является причиной проблемы, то добавьте недостающую информацию в [.filename]#/etc/resolv.conf#, либо в качестве временной меры установите `UseDNS` в `no` в файле [.filename]#sshd_config#.
+FreeBSD поддерживает широкий спектр архитектур, что делает его гибким выбором для различных аппаратных сред. Совместимость распространяется на такие архитектуры, как `amd64`, `arm64`, `riscv` и другие.
-[[file-table-full]]
-=== Почему в man:dmesg[8] регулярно выводятся сообщения file: table is full?
+Полный список поддерживаемых архитектур можно найти на странице link:https://www.FreeBSD.org/platforms/[платформ].
-Такое сообщение об ошибке сигнализирует о том, что в системе закончились
-доступные файловые дескрипторы. Обратитесь к разделу
-extref:{handbook}config/[kern.maxfiles, kern-maxfiles] главы о
-extref:{handbook}config/[настройке ограничений ядра, configtuning-kernel-limits] Руководства для выяснения всех подробностей и поиска решения.
+[[ram-support]]
+=== Сколько оперативной памяти поддерживает FreeBSD?
-[[computer-clock-skew]]
-=== Почему часы на моем компьютере показывают неправильное время?
+FreeBSD как операционная система обычно поддерживает столько же физической памяти (RAM), сколько и платформа, на которой она работает. Следует учитывать, что разные платформы имеют разные ограничения по памяти.
-На компьютере установлено по меньшей мере два таймера, и FreeBSD выбрала не тот.
+Например, платформы `amd64` поддерживают до 4 ТБ физической памяти.
-Запустите man:dmesg[8] и посмотрите строки, содержащие слово `Timecounter`. FreeBSD выбирает таймер с наибольшим значением качества.
+[[cpu-support]]
+=== Сколько процессоров поддерживает FreeBSD?
-[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 варьируется в зависимости от архитектуры. На системах amd64 и arm64 FreeBSD может эффективно использовать до 1024 процессоров. На системах с архитектурой powerpc FreeBSD поддерживает до 256 процессоров, а на системах risc-v — до 16 процессоров.
-Удостоверьтесь в этом, проверив man:sysctl[3]-переменную `kern.timecounter.hardware`.
+[[graphics-cards-support]]
+=== Какие графические карты поддерживает FreeBSD?
-[source,shell]
-....
-# sysctl kern.timecounter.hardware
-kern.timecounter.hardware: ACPI-fast
-....
+Известные производители графических устройств, такие как Intel(R), AMD(R) или NVIDIA(R), хорошо поддерживаются.
-Это может быть неработающий таймер ACPI. Самым простым решением будет отключить таймер ACPI в [.filename]#/boot/loader.conf#:
+Список поддерживаемых видеокарт от link:https://wiki.freebsd.org/Graphics/Intel-GPU-Matrix[Intel] и link:https://wiki.freebsd.org/Graphics/AMD-GPU-Matrix[AMD] можно найти в FreeBSD Wiki.
-[.programlisting]
-....
-debug.acpi.disabled="timer"
-....
+[[wifi-support]]
+=== Какие Wi-Fi карты поддерживает FreeBSD?
-Либо же BIOS может изменить частоту таймера TSC - возможно, для изменения скорости работы процессора при работе от батареи или переводя в режим пониженного электропитания, но FreeBSD не отслеживает это, и в результате часы начинают спешить или отставать.
+Это область, которая быстро меняется по состоянию на 2025 год, поэтому рекомендуется проверить Список совместимого оборудования для выбранного link:https://www.freebsd.org/releases/[релиза].
-В этом примере имеется также и таймер `i8254`, и он может быть выбран записью его имени в man:sysctl[3]-переменную `kern.timecounter.hardware`.
+Список устройств PCIe Wi-Fi, которые хорошо работают в FreeBSD:
-[source,shell]
-....
-# sysctl kern.timecounter.hardware=i8254
-kern.timecounter.hardware: TSC -> i8254
-....
+* Устройства на чипсетах Intel, поддерживаемые man:iwlwifi[4] (высокоскоростные — начиная с FreeBSD 14.3)
+* Realtek RTL8188CE Mini PCIe
-Теперь компьютер должен аккуратнее следить за временем.
+Список USB Wi-Fi устройств, которые хорошо работают в FreeBSD:
-Чтобы это изменение вступало в силу во время загрузки системы, добавьте в файл [.filename]#/etc/sysctl.conf# такую строчку:
+* USB-адаптеры RT5370 (поддерживают режим hostap)
+* 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])
-[.programlisting]
-....
-kern.timecounter.hardware=i8254
-....
-=== Что означает сообщение swap_pager: indefinite wait buffer:?
+[[gigabit-ethernet-network-support]]
+=== Поддерживает ли FreeBSD сетевые карты 10 Gigabit Ethernet?
-Это значит, что процесс пытается считать страницу памяти с
-диска, но попытки сделать это оканчиваются неудачно в течение
-более 20 секунд. Это может быть вызвано повреждёнными блоками
-на диске, кабелями, подключением или другим оборудованием ввода/вывода. Если диск сам по себе повреждён, вы также увидите ошибки работы с диском в [.filename]#/var/log/messages# и в выводе `dmesg`. В противном случае проверьте кабели и подключения.
+FreeBSD обеспечивает надежную поддержку сетевых карт 10 Gigabit Ethernet, что делает его подходящим выбором для высокоскоростных сетевых сред. Ядро FreeBSD включает драйверы для широкого спектра адаптеров 10 Gigabit Ethernet от различных производителей, гарантируя беспрерывную интеграцию и оптимальную производительность сети.
-[[lock-order-reversal]]
-=== Что такое lock order reversal?
+Дополнительную информацию можно получить по ссылке: link:https://wiki.freebsd.org/Networking/10GbE[FreeBSD Wiki].
-Ядро FreeBSD использует несколько блокировок для арбитража доступа к соответствующим ресурсам.
-Когда несколько потоков в ядре пытаются захватить несколько блокировок подряд, всегда существует возможность появления мёртвой блокировки (deadlock), где два потока захватили по одной блокировке и заблокированы в ожидании освобождения другим потоком второй блокировки.
-Такой проблемы синхронизации можно избежать, если все потоки получают блокировки в одинаковом порядке.
+[[documentation-support]]
+== Документация и Поддержка
-Система диагностирования блокировок man:witness[4], которая по умолчанию включена во FreeBSD-CURRENT и выключена для стабильных веток и релизов, определяет возможность появления мёртвых блокировок из-за ошибок их использования, включая захват нескольких блокировок в различном порядке в разных частях ядра.
-Механизм man:witness[4] пытается обнаруживать эту проблему по мере её появления и сообщает о ней на системную консоль сообщением `lock order reversal` (которое также часто называют LOR).
+В этом разделе представлены полезные ресурсы для тех, кто хочет углубить свои знания о FreeBSD. Здесь рассматриваются различные темы, включая рекомендуемые книги для изучения FreeBSD, варианты коммерческого обучения и поддержки, информацию о понимании внутреннего устройства FreeBSD, а также о том, где можно получить помощь в сообществе FreeBSD.
-В силу консервативности man:witness[4] возможны ложные срабатывания.
-При правильном срабатывании такое сообщение _не_ означает, что система находится в состоянии мёртвой блокировки; его следует рассматривать как предупреждение о том, что в этом месте могла произойти мёртвая блокировка.
-
-[NOTE]
-====
-Плохие LOR обычно быстро исправляют, поэтому перед написанием сообщения в списки рассылки следует проверить архивы {freebsd-current}.
-====
-
-[[called-with-non-sleepable-locks-held]]
-=== Что означают сообщения `Called ... with the following non-sleepable locks held`?
-
-Это означает, что функция, которая может находиться в "спящем" состоянии была вызвана во время использования мьютекс (или другого не "засыпающего") блокирования.
-
-Объяснением того, что это ошибка, является то, что мьютексы не предполагают нахождения в удерживаемом состоянии длительные промежутки времени, и блокируются только на короткие периоды синхронизации.
-Это правило позволяет драйверам устройств использовать мьютексы для синхронизации с остальной частью ядра во время прерываний.
-Прерывания (во FreeBSD) могут находиться не в "спящем состоянии". Следовательно необходимо, чтобы не было подсистем в ядре, которые бы занимались блокировкой длительный период, используя мьютекс.
-
-Для нахождения таких ошибок в ядро могут быть добавлены assertions, которые будут взаимодействовать с подсистемой man:witness[4] для генерирования предупреждения или фатальной ошибки (в зависимости от системной конфигурации) в случаях когда производится потенциально блокирующий вызов с удержанием мьютекса.
+[[books]]
+=== Какие есть хорошие книги о FreeBSD?
-В общем, такие предупреждения не критичны, но тем не менее, с неудачной синхронизацией (timing) они могут вызвать нежелательные эффекты, начиная от незначительной задержки в ответной реакции системы до полной её блокировки.
+Энтузиасты и изучающие FreeBSD могут ознакомиться с разнообразными информативными книгами, посвящёнными этой операционной системе. Эти книги охватывают темы от основ FreeBSD до продвинутого системного администрирования и разработки.
-Дополнительная информация о синхронизации во FreeBSD находится на странице Справочника man:locking[9].
+Некоторые примечательные книги включают *"FreeBSD: Подробное руководство" ("Absolute FreeBSD: The Complete Guide To FreeBSD")* Майкла В. Лукаса и серию *"FreeBSD Mastery"* того же автора, среди прочих. Эти ресурсы предоставляют ценные знания и помогают пользователям любого уровня освоить FreeBSD и раскрыть её потенциал.
-[[touch-not-found]]
-=== Почему процесс buildworld/installworld завершается с сообщением touch: not found?
+Помимо книг, проект FreeBSD создает обширную документацию, доступную онлайн на портале link:https://docs.FreeBSD.org/[Документация].
-Эта ошибка не означает, что не найдена утилита man:touch[1]. Ошибка наверняка появляется из-за того, что даты модификации файлов установлены в будущем. Если CMOS часы установлены на локальное время, отрегулируйте часовой механизм ядра, запустив команду `adjkerntz -i` в однопользовательском режиме.
+[[training]]
+=== Где можно получить коммерческое обучение и поддержку FreeBSD?
-[[applications]]
-== Прикладные программы
+Для тех, кто ищет профессиональное обучение и поддержку по FreeBSD, несколько коммерческих поставщиков предлагают индивидуальные услуги. Проект FreeBSD ведет link:https://www.freebsd.org/commercial/[список компаний], у которых можно запросить поддержку.
-=== Где находятся все прикладные программы?
+[[learn-advanced]]
+=== Как можно узнать больше о внутреннем устройстве FreeBSD?
-Обратитесь на link:https://www.FreeBSD.org/ports/[страницу портов], содержащую
-информацию о программных продуктах, перенесённых во FreeBSD.
+Для более глубокого изучения внутреннего устройства FreeBSD заинтересованные лица могут обратиться к таким ресурсам, как "FreeBSD: Дизайн и архитектура (The Design And Implementation Of The FreeBSD Operating System)". Ещё одним ценным источником информации является extref:{arch-handbook}[Руководство по архитектуре FreeBSD], который предоставляет подробные сведения об архитектуре FreeBSD, организации системы и принципах проектирования
-Большинство портов должно нормально работать во всех поддерживаемых версиях FreeBSD. Неработоспособные порты специально помечаются соответствующим образом. При выходе нового релиза FreeBSD в него в каталог [.filename]#ports/# также включается актуальная на момент выхода Коллекция Портов.
+Кроме того, изучение исходного кода FreeBSD, доступного в репозитории исходных текстов FreeBSD, дает ценное представление об основных компонентах операционной системы.
-FreeBSD умеет работать со сжатыми двоичными пакетами для упрощения установки и удаления портов. Используйте man:pkg[7] для управления процессом установки пакетов.
+[[help-freebsd-system]]
+=== Как получить помощь в системе FreeBSD?
-[[how-do-download-ports-tree]]
-=== Как загрузить дерево Портов? Следует ли использовать Git?
+Получить помощь в системе FreeBSD довольно просто. FreeBSD предоставляет обширную встроенную документацию, доступную через команду man:man[1], которая содержит подробную информацию о различных командах и компонентах системы.
-Обратитесь к разделу
-extref:{handbook}ports/[Установка Коллекции Портов, ports-using-installation-methods].
+Кроме того, extref:{handbook}[Руководство FreeBSD], доступное как онлайн, так и локально в системе, служит ценным ресурсом для получения подробных инструкций.
-[[ports-4x]]
-=== Почему этот порт не компилируется на моей машине с {rel2-relx} - или {rel-relx} -STABLE?
+Если возникают конкретные проблемы, можно обратиться за помощью в сообщество FreeBSD через списки рассылки, форумы или IRC, чтобы получить своевременные решения и советы от опытных пользователей и разработчиков FreeBSD.
-Если установленная версия FreeBSD значительно отстаёт от _-CURRENT_ или
-_-STABLE_, обновите Коллекцию Портов, следуя указаниям раздела
-extref:{handbook}ports/[Использование Коллекции Портов, ports-using]. Если
-система находится в актуальном состоянии, то, возможно, кто-то внёс изменение в
-порт, который работоспособен в _-CURRENT_, но
-не работает в _-STABLE_. https://bugs.FreeBSD.org/submit/[Отправьте]
-сообщение об ошибке, так как предполагается, что Коллекция Портов
-работает как для ветки _-CURRENT_, так и _-STABLE_.
+[[community-questions]]
+== Вопросы о сообществе
-[[make-index]]
-=== Я попытался сформировать файл INDEX командой make index, однако попытка окончилась неудачей. Почему?
+Изучите этот раздел, чтобы узнать о способах взаимодействия с сообществом FreeBSD.
-Первым делом убедитесь, что Коллекция Портов находится в актуальном состоянии. Ошибки, которые отражаются на построении файла [.filename]#INDEX# из актуальной копии Коллекции Портов, бросаются в глаза и поэтому практически всегда исправляются немедленно.
+Узнайте о каналах FreeBSD в IRC для обсуждений в реальном времени, веб-форумах для обмена мнениями, а также о почтовых рассылках и группах новостей FreeBSD для углубленных обсуждений и получения обновлений.
-В редких случаях [.filename]#INDEX# не перестраивается из-за странных
-комбинаций значений переменных `OPTIONS_SET`, заданных в
-файле [.filename]#make.conf#. Если вы подозреваете, что
-дело именно в этом, то, прежде чем сообщать об этом в {freebsd-ports},
-попытайтесь сформировать [.filename]#INDEX# с отключенными значениями этих
-переменных.
+[[irc]]
+=== Есть ли каналы FreeBSD в IRC (Internet Relay Chat)?
-[[ports-update]]
-=== Я обновил исходные тексты. Как теперь обновить установленные порты?
+Да, большинство крупных IRC-сетей имеют канал для обсуждения FreeBSD, а на вики FreeBSD доступен актуальный link:https://wiki.freebsd.org/IRC/Channels[список IRC-каналов].
-С FreeBSD не поставляется инструмент обновления портов, но есть несколько инструментов, немного облегчающих этот процесс. Кроме того, для упрощения работы с портами доступны дополнительные инструменты; смотрите раздел Руководства FreeBSD extref:{handbook}ports/[об обновлении портов, ports-using].
+Каждый из этих каналов уникален и не связан с другими. Поскольку их стили общения различаются, попробуйте каждый, чтобы найти подходящий вам стиль чата.
-[[ports-major-upgrade]]
-=== Нужно ли мне перекомпилировать все порты каждый раз, когда я выполняю мажорное обновление (со сменой старшей версии FreeBSD)?
+[[forums]]
+=== Есть ли веб-форумы для обсуждения FreeBSD?
-Да!
-Хотя на новой системе программное обеспечение, скомпилированное под более старый релиз, будет работать, но только до тех пор, пока вы не начнёте устанавливать другие порты или обновлять существующие.
+Официальные форумы FreeBSD расположены по ссылке: link:https://forums.FreeBSD.org/[Домашняя страница форумов FreeBSD].
-Когда система обновляется, различные совместно используемые библиотеки, загружаемые модули и другие части системы замещаются более новыми версиями. Приложения, скомпонованные с более старыми версиями, могут перестать запускаться либо начнут функционировать неправильно.
+[[mailing]]
+=== Где найти информацию о списках рассылки FreeBSD?
-Для получения дополнительной информации обращайтесь к
-extref:{handbook}cutting-edge/[разделу, посвящённому обновлениям, freebsdupdate-upgrade]
-Руководства по FreeBSD.
+Списки рассылки с открытым доступом можно найти по ссылке: link:https://lists.freebsd.org/[списки рассылки FreeBSD].
-[[ports-minor-upgrade]]
-=== Нужно ли мне перекомпилировать все порты каждый раз, когда я выполняю минорное обновление (без изменения старшей версии FreeBSD)?
+[[misc]]
+== Разные вопросы
-В общем случае этого не требуется.
-Разработчики FreeBSD делают всё возможное для сохранения двоичной совместимости между всеми релизами в пределах одной старшей версии. Любые исключения из этого правила документируются в "Примечаниях к релизу", и там же даются советы, которых следует придерживаться.
+Изучите множество интересных и практичных вопросов о FreeBSD, начиная от выбора оболочки (shell) до особенностей системы и даже имени питомца 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`.
+=== Почему /bin/sh такой минималистичный? Почему FreeBSD не использует bash или другую оболочку?
-[[kernelconfig]]
-== Конфигурирование ядра
+Многие люди сталкиваются с необходимостью написания сценариев командной оболочки, которые будут переносимы между различными системами. Именно поэтому POSIX(R) детально определяет стандарты для оболочки и утилит. Большинство сценариев пишутся на Bourne shell (man:sh[1]), так как несколько важных программных интерфейсов требуют использования Bourne shell для интерпретации команд. Поскольку Bourne shell так часто и широко применяется, важно, чтобы он быстро запускался, имел предсказуемое поведение и требовал мало памяти.
-[[make-kernel]]
-=== Я хочу изменить настройки ядра. Это сложно?
+Существующая реализация — это наш наилучший подход к одновременному удовлетворению как можно большего числа этих требований. Чтобы сохранить `/bin/sh` компактным, мы не добавили многие удобные функции, которые есть в других оболочках.
-Вовсе нет!
-Обратитесь к extref:{handbook}kernelconfig/[разделу о настройке ядра]
-Руководства, который посвящён этому вопросу.
+Вот почему доступны другие, более функциональные оболочки, такие как `bash`, `scsh`, man:tcsh[1] и `zsh`.
-[NOTE]
-====
-Новый файл [.filename]#kernel# будет установлен в каталог [.filename]#/boot/kernel# вместе со своими модулями, а старое ядро и его модули будут перемещены в каталог [.filename]#/boot/kernel.old#.
-Если сделана ошибка в конфигурации, просто загрузите предыдущую версию ядра.
-====
-
-[[why-kernel-big]]
-=== Почему моё ядро такое большое?
-
-Ядра `GENERIC`, поставляемые в составе FreeBSD, компилируется в _режиме отладки_.
-Ядра, построенные в таком режиме, содержат отладочную информацию, которая хранится в отдельных файлах, используемых для отладки.
-Файлы для отладки размещаются в [.filename]#/usr/lib/debug/boot/kernel/#.
-Заметьте, что снижения производительности при использовании отладочного ядра нет или оно незначительно, и отладочное ядро полезно иметь под рукой на случай аварийного завершения работы системы.
-
-При нехватке дискового пространства существует несколько вариантов уменьшения размера [.filename]#/boot/kernel/# и [.filename]#/usr/lib/debug/#.
-
-Чтобы не устанавливать файлы с символьной информацией, убедитесь в наличии следующей строки в [.filename]#/etc/src.conf#:
-
-[.programlisting]
-....
-WITHOUT_KERNEL_SYMBOLS=yes
-....
-
-Для получения дополнительной информации смотрите страницу Справочника man:src.conf[5].
-
-Если вы хотите совсем избежать создания файлов для отладки, убедитесь в
-выполнении следующих двух условий:
-
-* В конфигурационном файле ядра нет такой строчки:
-+
-[.programlisting]
-....
-makeoptions DEBUG=-g
-....
-
-* Вы не запускали утилиту man:config[8] с опцией `-g`.
-
-В любой из вышеописанных ситуаций ядро будет построено с отладочным режимом.
-
-Чтобы скомпилировать и установить только нужные модули, укажите их в [.filename]#/etc/make.conf#:
-
-[.programlisting]
-....
-MODULES_OVERRIDE= accf_http ipfw
-....
-
-Замените _accf_httpd ipfw_ на нужный список модулей. Это уменьшит размер
-каталога с ядром, а также время сборки. Для получения дополнительной
-информации почитайте [.filename]#/usr/share/examples/etc/make.conf#.
-
-Для дальнейшего уменьшения размера также можно удалить ненужные устройства из ядра. Для получения дополнительной информации смотрите <<make-kernel>>.
-
-Для вступления любого из этих действий в силу следуйте указаниям по
-extref:{handbook}kernelconfig/[сборке и установке, kernelconfig-building] нового ядра.
-
-К вашему сведению, примерный размер ядра 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>> строится без проблем.
-Попробуйте сгрузить дерево исходных текстов повторно и посмотрите, решилась
-ли проблема. Если с зеркалирующим сервером есть проблемы, попробуйте
-использовать другое зеркало.
-
-[[scheduler-in-use]]
-=== Какой планировщик используется в работающей системе?
-
-Название используемого планировщика доступно напрямую в виде значения sysctl-параметра `kern.sched.name`:
-
-[source,shell]
-....
-% sysctl kern.sched.name
-kern.sched.name: ULE
-....
-
-=== Что такое kern.sched.quantum?
-
-`kern.sched.quantum` определяет максимальное количество тактов, которое процесс может выполняться, не будучи прерванным.
-
-== Диски, файловые системы и начальные загрузчики
-
-[[adding-disks]]
-=== Как добавить в систему новый диск?
-
-Обратитесь к разделу extref:{handbook}disks/[Добавление дисков, disks-adding] Руководства по FreeBSD.
-
-[[new-huge-disk]]
-=== Как перенести систему на большой новый диск?
-
-Самый лучший способ заключается в переустановке операционной системы на новый диск с последующим переносом пользовательских данных. Это настоятельно рекомендуется при отслеживании ветки _-STABLE_ в течение более одного релиза или при обновлении релиза вместо установки нового. Установите booteasy на оба диска с помощью man:boot0cfg[8] и выполняйте загрузку с любого из них, пока не будете довольны новой конфигурацией. Пропустите следующий абзац, чтобы перейти к вопросу переноса данных после этой операции.
-
-Либо разбейте на разделы и разметьте новый диск с помощью man:sade[8] или man:gpart[8]. Если диски отформатированы в MBR, то booteasy можно установить на оба диска с помощью man:boot0cfg[8] для того, чтобы иметь возможность выполнять загрузку как старой, так и новой системы после выполнения копирования.
-
-После подготовки диска данные нельзя просто так взять и перенести. Используйте для этого инструменты, которые учитывают файлы устройств и системные флаги, например, man:dump[8]. И хотя рекомендуется выполнять перенос данных в однопользовательском режиме, это не является обязательным условием.
-
-Если на дисках стоит UFS, никогда не используйте ничего, кроме man:dump[8] и man:restore[8] для переноса корневой файловой системы. Эти команды также следует использовать при переносе отдельного раздела на другой пустой раздел. Последовательность шагов при использовании `dump` для переноса данных с раздела UFS на новый раздел:
-
-[.procedure]
-====
-. выполните команду `newfs` над новым разделом.
-. командой `mount` смонтируйте его во временный каталог.
-. командой `cd` перейдите в этот каталог.
-. выполните команду `dump` над старым разделом, направив вывод в новый раздел.
-====
-
-Например, чтобы перенести корневую файловую систему на устройство [.filename]#/dev/ada1s1a# с использованием каталога [.filename]#/mnt# в качестве временной точки монтирования, наберите:
-
-[source,shell]
-....
-# newfs /dev/ad1as1a
-# mount /dev/ad1as1a /mnt
-# cd /mnt
-# dump 0af - / | restore rf -
-....
-
-Переразбиение разделов с использованием `dump` требует несколько больше усилий. Для объединения раздела типа [.filename]#/var# с его вышестоящим разделом, создайте новый раздел, достаточно большой для размещения их обоих, переместите вышестоящий раздел так, как это описано выше, а затем переместите нижестоящий раздел в пустой каталог, созданный при первом перемещении:
-
-[source,shell]
-....
-# newfs /dev/ada1s1a
-# mount /dev/ad1as1a /mnt
-# cd /mnt
-# dump 0af - / | restore rf -
-# cd var
-# dump 0af - /var | restore rf -
-....
-
-Для отделения каталога от вышестоящего, скажем, для размещения [.filename]#/var# в собственном разделе, которого не было, создайте оба раздела, затем смонтируйте нижестоящий раздел в подходящий каталог во временную точку монтирования, а затем переместите старый единый раздел:
-
-[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 -
-....
-
-Для перемещения пользовательских данных также имеются программы man:cpio[1] и man:pax[1]. Известно, что они теряют информацию о флагах файлов, так что используйте их с осторожностью.
-
-[[safe-softupdates]]
-=== На каких разделах можно без опаски использовать механизм Soft Updates? Я слышал, что использование Soft Updates на / могут приводить к проблемам. Что насчёт журналируемых Soft Updates?
-
-Краткий ответ: обычно Soft Updates можно использовать без опаски на всех разделах.
-
-Подробный ответ: Soft Updates имеют две характеристики, которые могут быть нежелательны на некоторых разделах. Во-первых, раздел с Soft Updates имеет небольшой шанс потери данных по время аварийного останова системы. Раздел не будет попорчен, поскольку данные будет просто потеряны. Во-вторых, Soft Updates могут приводить к временной нехватке дискового пространства.
-
-При использовании Soft Updates ядро может задерживать до тридцати секунд запись изменений на физический диск. При удалении большого файла он остается на диске, пока ядро не выполнит фактическое удаление. Это может привести к очень простой гонке. Предположим, удаляется один большой файл и тут же создаётся другой большой файл. Первый файл на самом деле ещё не удалён с диска, поэтому для второго файла на диске может не хватить места. Это приведёт к ошибке о том, что на разделе нет достаточного пространства, несмотря на то, что только что освободилось много места. Через пару секунд создание файла сработает, как и ожидалось.
-
-Если система может аварийно остановиться после того, как ядро примет набор данных для записи на диск, но перед тем, как данные реально запишутся, то данные могут потеряться. Такой риск чрезвычайно мал, но в целом управляем.
-
-Эти проблемы влияют на все разделы, использующие Soft Updates. Итак, что это означает для корневого раздела?
-
-Жизненно важная информация на корневом разделе меняется очень редко. Если в системе произойдет сбой в период тридцатисекундного окна после выполнения такого изменения, возможно, что данные окажутся потерянными. Этот риск незначителен для большинства применений, но его нужно учитывать. Если система не может принять такой риск, не используйте Soft Updates с корневой файловой системой!
-
-[.filename]#/# традиционно является одним из самых маленьких разделов. Если каталог [.filename]#/tmp# размещён в [.filename]#/# и у вас заполнен [.filename]#/tmp#, то могут периодически возникать проблемы с дисковым пространством. Создание символической ссылки [.filename]#/tmp#, указывающей на [.filename]#/var/tmp# решит эту проблему.
-
-В заключение, man:dump[8] не работает в режиме реального времени (-L) с файловой системой, для которой включены журналируемые Soft Updates (SU+J).
-
-=== Можно ли смонтировать другие файловые системы?
-
-FreeBSD поддерживает ряд других файловых систем.
-
-UFS::
-Компакт-диски с файловой системой UFS могут быть смонтированы без всяких проблем.
-Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.
-
-ext2/ext3::
-FreeBSD поддерживает разделы `ext2fs`, `ext3fs` и `ext4fs`. За дополнительной
-информацией обратитесь к странице Справочника man:ext2fs[5].
-
-NTFS::
-Поддержка NTFS, реализованная на базе FUSE, доступна в виде порта
-package:sysutils/fusefs-ntfs[]. Для получения более полной информации
-обратитесь к man:ntfs-3g[8].
-
-FAT::
-Во FreeBSD имеется драйвер для работы с FAT в режиме чтения-записи. Для получения дополнительной информации обратитесь к странице справочника man:mount_msdosfs[8].
-
-ZFS::
-FreeBSD включает в себя портированную из Sun(TM) реализацию файловой системы ZFS. В настоящее время рекомендуется использовать её только на платформе amd64 с достаточным объемом памяти. Для получения более полной информации обратитесь к странице Справочника man:zfs[8].
-
-FreeBSD включает сетевую файловую систему NFS. В Коллекции портов FreeBSD имеется несколько приложений FUSE для поддержки многих других файловых систем.
-
-[[mount-dos]]
-=== Как смонтировать вторичный раздел DOS?
-
-Вторичные разделы 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.
-
-[[grub-loader]]
-=== Как загрузить FreeBSD и Linux(R) с помощью GRUB?
-
-Для загрузки FreeBSD с использованием GRUB добавьте следующие строки в [.filename]#/boot/grub/menu.lst# или [.filename]#/boot/grub/grub.conf#, в зависимости от используемого дистрибутива Linux(R).
-
-[.programlisting]
-....
-title FreeBSD 9.1
-root (hd0,a)
-kernel /boot/loader
-....
-
-Где _hd0,a_ указывает на корневой раздел на первом диске. Чтобы указать номер слайса, напишите что-то вроде _(hd0,2,a)_. По умолчанию, если номер слайса не указан, GRUB ищет первый слайс c разделом `a`.
-
-[[booteasy-loader]]
-=== Как загрузить FreeBSD и Linux(R) с помощью BootEasy?
-
-Установите LILO в начало загрузочного раздела Linux(R), а не в Master Boot
-Record. После этого загрузите LILO из BootEasy.
-
-Это рекомендуется делать при одновременном использовании Windows(R) и Linux(R), чтобы упростить восстановление работоспособности Linux(R) в случае переустановки Windows(R).
-
-[[changing-bootprompt]]
-=== Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?
-
-Этого нельзя сделать со стандартным загрузчиком, не переписав его. В категории [.filename]#sysutils# Коллекции Портов есть ряд других менеджеров загрузки.
-
-[[removable-drives]]
-=== Как использовать устройство для чтения сменных дисков?
-
-Если у вас уже есть файловая система на устройстве, то используйте такую команду:
-
-[source,shell]
-....
-# mount -t msdosfs /dev/da0s1 /mnt
-....
-
-Если это устройство будет использоваться только на системах FreeBSD, то разбейте его на разделы UFS или ZFS. Это обеспечит поддержку длинных имён файлов, увеличение производительности и надёжность. Если устройство будет использоваться с другими операционными системами, то лучше сделать более совместимый выбор, например, msdosfs.
-
-[source,shell]
-....
-# dd if=/dev/zero of=/dev/da0 count=2
-# gpart create -s GPT /dev/da0
-# gpart add -t freebsd-ufs /dev/da0
-....
-
-Наконец, остаётся создать новую файловую систему:
-
-[source,shell]
-....
-# newfs /dev/da0p1
-....
-
-и смонтировать её:
-
-[source,shell]
-....
-# mount /dev/da0s1 /mnt
-....
+[[keyboard-delete-key]]
+=== Как использовать клавишу Delete в sh и csh?
-Хорошо ещё добавить строку в файл [.filename]#/etc/fstab# (прочтите справку по man:fstab[5]), чтобы в будущем можно было просто давать команду `mount /mnt`:
+Для оболочки Bourne Shell добавьте следующие строки в файл [.filename]#~/.shrc#:
[.programlisting]
....
-/dev/da0p1 /mnt ufs rw,noauto 0 0
-....
-
-[[mount-cd-superblock]]
-=== Почему при монтировании компакт-диска выдаётся сообщение Incorrect super block?
-
-Необходимо указать тип монтируемого устройства. Это описано в разделе
-Руководства extref:{handbook}disks/[Использование CD с данными, mounting-cd].
-
-[[cdrom-not-configured]]
-=== При монтировании компакт-диска выдаётся сообщение Device not configured.
-
-Обычно это означает, что в приводе нет компакт-диска либо устройство не
-обнаружено на шине. Обратитесь к разделу extref:{handbook}disks/[Использование
-CD с данными, mounting-cd] в Руководстве, где подробно обсуждается этот вопрос.
-
-[[cdrom-unicode-filenames]]
-=== Почему при монтировании CD-ROM во FreeBSD все неанглийские символы в именах файлов отображаются как вопросительные знаки?
-
-Скорее всего, на компакт-диске для хранения информации о файлах и каталогах используется расширение "Joliet". Это описано в разделе Руководства об
-extref:{handbook}disks/[использовании CD с данными, mounting-cd].
-
-[[burncd-isofs]]
-=== Записанный во FreeBSD CD не читается ни в какой другой операционной системой. Почему?
-
-Это означает, что на CD был записан непосредственно необработанный файл без создания файловой системы ISO 9660. Прочтите раздел Руководства об
-extref:{handbook}disks/[использовании CD с данными].
-
-[[copy-cd]]
-=== Как создать образ CD с данными?
-
-Это описано в разделе Руководства о extref:{handbook}disks/[записи данных на
-файловую систему ISO, mkisofs]. Более полную информацию о работе с
-компакт-дисками можно найти в разделе о extref:{handbook}disks/[создании
-компакт-дисков, creating-cds] в главе Руководства об устройствах хранения
-данных.
-
-[[mount-audio-CD]]
-=== Почему я не могу смонтировать аудио CD?
-
-Попытка смонтировать аудио 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`.
-
-[source,shell]
-....
-# sysctl vfs.usermount=1
+bind ^[[3~ ed-delete-next-char # for xterm
....
-Чтобы это срабатывало во время загрузки системы, добавьте строчку `vfs.usermount=1` в файл [.filename]#/etc/sysctl.conf#.
-
-Пользователи могут монтировать только те устройства, к которым у них имеется доступ на чтение. Чтобы разрешить пользователям монтировать устройство, должны быть заданы разрешения в [.filename]#/etc/devfs.conf#.
-
-Например, чтобы разрешить пользователям монтировать первое устройство USB, добавьте такую строчку:
+Для оболочки C Shell добавьте следующие строки в файл [.filename]#~/.cshrc#:
[.programlisting]
....
-# Allow all users to mount a USB drive.
- own /dev/da0 root:operator
- perm /dev/da0 0666
-....
-
-Теперь все пользователи могут монтировать устройства с правами доступа на чтение в собственные каталоги:
-
-[source,shell]
-....
-% mkdir ~/my-mount-point
-% mount -t msdosfs /dev/da0 ~/my-mount-point
+bindkey ^[[3~ delete-char # for xterm
....
-Размонтирование устройства осуществляется просто:
-
-[source,shell]
-....
-% umount ~/my-mount-point
-....
+[[forgot-root-pw]]
+=== Я забыл пароль root! Что делать?
-Использование `vfs.usermount`, однако, имеет некоторые негативные стороны, связанные с вопросами безопасности. Более правильным способом работы с носителями в формате MS-DOS(R) является использование пакета package:emulators/mtools[] из Коллекции Портов.
+Не паникуйте! Перезагрузите систему, введите `boot -s` при появлении запроса `Boot:`, чтобы перейти в однопользовательский режим. На вопрос о выборе оболочки нажмите kbd:[Enter], после чего появится приглашение #. Введите `mount -urw /`, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, затем выполните `mount -a` для перемонтирования всех файловых систем. Выполните `passwd root`, чтобы изменить пароль `root`, а затем введите man:exit[1] для продолжения загрузки.
-[NOTE]
+[TIP]
====
-Имя устройства, использованное в предыдущих примерах, должно быть изменено в соответствии с конфигурацией.
+Если при входе в однопользовательский режим всё ещё запрашивается пароль `root`, это означает, что консоль помечена как `insecure` в [.filename]#/etc/ttys#. В этом случае потребуется загрузиться с установочного диска FreeBSD, выбрать [.guimenuitem]#Live CD# или [.guimenuitem]#Shell# в начале процесса установки и выполнить указанные выше команды. Смонтируйте конкретный раздел в этом случае и затем выполните chroot для него. Например, замените `mount -urw /` на `mount /dev/ada0p1 /mnt; chroot /mnt` для системы на _ada0p1_.
====
-[[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/[Руководства, 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].
-
-== ZFS
-
-=== Какой минимальный объём ОЗУ требуется для ZFS?
-
-Для комфортного использования требуется 4 Гбайт ОЗУ, но конкретная нагрузка может сильно различаться.
-
-[[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 вряд
-ли сможет что-то сильно улучшить.
-
-[[what-is-l2arc]]
-=== Что такое L2ARC?
-
-L2ARC - это кэш на чтение, хранимый на быстром устройстве, таком как SSD. Этот кэш не сохраняется между перезагрузками. Следует заметить, что ОЗУ выступает
-как кэширующее устройство первого уровня, а L2ARC необходим
-только при нехватке оперативной памяти.
-
-L2ARC требует пространства в ARC для его индексации. Таким образом, рабочий
-набор, который идеально помещается в ARC, не будет там помещаться при
-использовании L2ARC, поскольку часть ARC будет отведена под индекс L2ARC с
-вытеснением части рабочего набора в L2ARC, более медленный, чем ОЗУ.
-
-[[should-enable-dedup]]
-=== Целесообразно ли включение дедупликации?
-
-В общем случае нет.
-
-Дедупликация занимает значительный объём ОЗУ и может увеличить задержки операций ввода/вывода.
-Если только данные не являются сильно дублированными (сильно дублированными являются образы виртуальных машин или резервные копии пользовательских данных), то дедупликация может принести больше вреда, чем пользы.
-Другое соображение касается невозможности отменить статус дедупликации.
-Если данные записаны при включённой дедупликации, её выключение не приведёт к обратной репликации объединённых блоков до момента их модификации.
-
-Дедупликация также может приводить к некоторым неожиданным ситуациям.
-В частности, удаление файлов может сильно замедлиться.
-
-[[zpool-fully-full]]
-=== Я не могу создать или удалить файлы на пуле ZFS. Как я могу это исправить?
-
-Такое может произойти при 100% заполненности пула. ZFS требуется свободное место на диске для записи метаданных транзакций. Для восстановления работоспособного состояния пула обрежьте файл перед его удалением.
-
-[source,shell]
-....
-% truncate -s 0 unimportant-file
-....
-
-Обрезка файла работает по той причине, что новая транзакция при этом не
-запускается, но вместо этого создаются новые свободные блоки.
-
-[NOTE]
+[TIP]
====
-На системах с дополнительными настройками наборов данных ZFS,
-такими, как дедупликация, свободное место может не быть доступно сразу.
+Если корневой раздел не удаётся смонтировать в однопользовательском режиме, возможно, разделы зашифрованы, и их невозможно смонтировать без ключей доступа. Дополнительную информацию см. в разделе о зашифрованных дисках в extref:{handbook}disks/[Handbook, disks-encrypting].
====
-[[zfs-ssd-trim]]
-=== Поддерживается ли TRIM в ZFS для твердотельных накопителей?
-
-ZFS во FreeBSD 12.3 и 12.4: TRIM включен по умолчанию.
-Для отключения TRIM: добавьте строку ниже в файл
-[.filename]#/etc/sysctl.conf#, затем перезапустите систему.
-
-[.programlisting]
-....
-vfs.zfs.trim.enabled=0
-....
-
-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# и поменяйте значение там.
-
-К примеру, для запуска man:sshd[8], поставляемого с системой сервера OpenSSH:
-
-[source,shell]
-....
-# echo 'sshd_enable="YES"' >> /etc/rc.conf
-....
-
-Альтернативным способом является использование 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.
-
-Это неправильный подход, потому что системный crontab имеет формат, отличный от пользовательских crontab. Системный crontab имеет дополнительное поле, указывающее, под каким пользователем запускать команду. man:cron[8] полагает, что имя пользователя является первым словом в команде на выполнение. Поскольку такой команды не существует, отображается это сообщение об ошибке.
-
-Чтобы удалить лишний неправильный crontab:
-
-[source,shell]
-....
-# crontab -r
-....
-
-[[su-wheel-group]]
-=== Команда su выдаёт сообщение you are not in the correct group to su root, когда я пытаюсь сменить привилегии на root.
-
-Это особенность работы системы защиты. Для того, чтобы сменить пользовательский идентификатор с помощью `su` на пользователя `root` или любого другого с привилегиями суперпользователя, учётная запись должна являться членом группы `wheel`. Если бы этого не было, то любой, имеющий доступ к системе и узнавший пароль пользователя `root`, смог бы получить в системе уровень доступа суперпользователя.
-
-Чтобы разрешить кому-либо менять привилегии на `root`, включите его в группу `wheel` с помощью `pw`.
-
-[source,shell]
-....
-# pw groupmod wheel -m lisa
-....
-
-В примере выше пользователь `lisa` будет добавлен в группу `wheel`.
-
[[rcconf-readonly]]
-=== Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать?
-
-Перезапустите систему, используя в приглашении загрузчика команду `boot -s` для входа в однопользовательский режим. При получении приглашения на ввод полного пути до командного процессора нажмите `Enter`, а затем выполните команду `mount -urw /` для повторного монтирования корневой файловой системы в режиме чтения/записи. Вам может также потребоваться выполнить команду `mount -a -t ufs` для монтирования файловой системы, в которой расположен ваш любимый текстовый редактор.
-Если редактор расположен на сетевой файловой системе, выполните сетевые настройки вручную до монтирования сетевой файловой системы, либо воспользуйтесь редактором, находящимся в локальной файловой системе, таким, как man:ed[1].
-
-Чтобы использовать полноэкранный редактор, такой как man:vi[1] или man:emacs[1], выполните команду `export TERM=xterm`, чтобы эти редакторы смогли получить корректную информацию из базы данных man:termcap[5].
-
-После выполнения этих шагов отредактируйте файл [.filename]#/etc/rc.conf# для исправления ошибки. Сообщение об ошибке, выводимое сразу же после сообщений при загрузке ядра, должно указать на номер строки в файле, которая содержит ошибку.
-
-[[printer-setup]]
-=== Почему у меня возникают проблемы с установкой принтера?
-
-Обратитесь к соответствующему extref:{handbook}printing/[разделу] Руководства, посвящённому печати, за советами по разрешению проблем.
-
-[[keyboard-mappings]]
-=== Как я могу откорректировать раскладку клавиатуры для моей системы?
-
-Обратитесь к разделу Руководства, посвящённому extref:{handbook}l10n/[использованию локализации, using-localization], а именно к части, описывающей extref:{handbook}l10n/[настройку консоли, setting-console].
-
-[[user-quotas]]
-=== Почему не получается заставить работать дисковые квоты?
-
-. Возможно, что ядро не сконфигурировано должным образом для работы с квотами. В этом случае добавьте следующую строчку в конфигурационный файл ядра и пересоберите ядро:
-+
-[.programlisting]
-....
-options QUOTA
-....
-
-+
-Прочтите link:{handbook}disks/[главу Руководства по квотам, quotas] для
-получения полной информации.
-. Не включайте квотирование на разделе [.filename]#/#.
-. Помещайте файл с квотами в ту файловую систему, которую он обслуживает:
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Файловая система
-| Файл квот
-
-|[.filename]#/usr#
-|[.filename]#/usr/admin/quotas#
-
-|[.filename]#/home#
-|[.filename]#/home/admin/quotas#
-
-|...
-|...
-|===
-
-[[sysv-ipc]]
-=== Поддерживает ли FreeBSD вызовы IPC из System V?
-
-Да, во FreeBSD в ядро [.filename]#GENERIC# включена поддержка IPC в стиле System V, в том числе совместно используемой памяти, сообщений и семафоров.
-В нестандартном ядре поддержка может быть включена посредством загрузки модулей ядра [.filename]#sysvshm.ko#, [.filename]#sysvsem.ko# и [.filename]#sysvmsg.ko# или добавлением в конфигурационный файл ядра следующих строк:
+=== Я допустил ошибку в rc.conf или другом стартовом файле, и теперь не могу его отредактировать, потому что файловая система доступна только для чтения. Что мне делать?
-[.programlisting]
-....
-options SYSVSHM # enable shared memory
-options SYSVSEM # enable for semaphores
-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] для продолжения процесса загрузки.
-
-[NOTE]
-====
-Если при входе в однопользовательский режим предлагается ввести пароль пользователя `root`, это означает, что консоль была помечена как `insecure` в [.filename]#/etc/ttys#. В этом случае потребуется загрузиться с установочного диска FreeBSD, выбрать [.guimenuitem]#Live CD# или [.guimenuitem]#Shell# в начале процесса установки и выполнить указанные выше команды. В этом случае смонтируйте нужный раздел и выполните туда chroot. Например, замените команду `mount -urw /` на `mount /dev/ada0p1 /mnt; chroot /mnt` для системы, расположенной на _ada0p1_.
-====
-
-[NOTE]
-====
-Если корневой раздел не получается смонтировать в однопользовательском режиме, то возможно, что разделы являются зашифрованными, и смонтировать их без ключей доступа не представляется возможным.
-За дополнительной информацией обратитесь к разделу extref:{handbook}disks/[Руководства, disks-encrypting], посвящённому шифрованию дисков во FreeBSD.
-====
-
-[[CAD-reboot]]
-=== Как запретить перезагрузку по нажатию Control Alt Delete?
+Перезагрузите систему, используя `boot -s` в приглашении загрузчика, чтобы войти в однопользовательский режим. При запросе пути к оболочке нажмите kbd:[Enter] и выполните `mount -urw /`, чтобы перемонтировать корневую файловую систему в режиме чтения/записи. Также может потребоваться выполнить `mount -a -t ufs` для монтирования файловой системы, где находится ваш предпочитаемый редактор. Если этот редактор находится на сетевой файловой системе, либо настройте сеть вручную перед монтированием сетевых файловых систем, либо используйте редактор, расположенный на локальной файловой системе, например, man:ed[1].
-При использовании стандартного драйвера консоли man:vt[4] этого можно добиться,
-задав следующий системный параметр man:sysctl[8]:
+Чтобы использовать полноэкранные редакторы, такие как man:vi[1] или man:emacs[1], выполните команду `export TERM=xterm`, чтобы эти редакторы могли загрузить корректные данные из базы man:termcap[5].
-[source,shell]
-....
-# sysctl kern.vt.kbd_reboot=0
-....
-
-=== Как преобразовать текстовые файлы DOS в формат UNIX(R)?
-
-Воспользуйтесь следующей командой man:perl[1]:
-
-[source,shell]
-....
-% perl -i.bak -npe 's/\r\n/\n/g' file(s)
-....
-
-где _file(s)_ - это один или несколько файлов для обработки. Преобразование делается в том же самом файле, оригинальные файлы сохраняются с расширением [.filename]#.bak#.
-
-Либо используйте man:tr[1]:
-
-[source,shell]
-....
-% tr -d '\r' < dos-text-file > unix-file
-....
-
-где _dos-text-file_ - это имя файла, содержащего текст DOS, а в файл _unix-file_ будет помещён уже преобразованный текст. Этот способ может работать гораздо быстрее, чем при использовании `perl`.
-
-Еще один способ отформатировать тестовые файлы DOS состоит в использовании package:converters/dosunix[] из Коллекции Портов. Для получения дополнительной информации ознакомьтесь с документацией порта.
-
-[[reread-rc]]
-=== Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
-
-Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.
-
-[source,shell]
-....
-# shutdown now
-# return
-# exit
-....
-
-[[release-candidate]]
-=== Я пытался обновить мою систему до последней -STABLE, а получил -BETAx, -RC или -PRERELEASE! Что происходит?
-
-Краткий ответ: это же просто название. _RC_ означает "Release Candidate". Это значит, что вскоре произойдет выход релиза. Во FreeBSD появление _-PRERELEASE_, как правило, равнозначно прекращению внесения изменений в код системы перед появлением релиза. (Для некоторых релизом метка _-BETA_ использовалась точно так же, как и _-PRERELEASE_.)
-
-Подробный ответ: во FreeBSD релизы выпускаются из одного из двух мест. Крупные релизы, точка-ноль, такие, как 9.0-RELEASE и 10.0-RELEASE, ответвляются от основного потока разработки, более известного как <<current,-CURRENT>>. Мелкие релизы, такие, как 6.3-RELEASE или 5.2-RELEASE, являлись снэпшотами активной ветки <<stable,-STABLE>>. Начиная с 4.3-RELEASE, каждый релиз также имеет свою ветвь, которой могут следовать те, кому необходим сверхконсервативный метод обновления (как правило, внесение только тех исправлений, которые касаются вопросов обеспечения безопасности).
-
-Когда делается релиз, то ветвь, из которой он выпускается, подвергается некоторой подготовке. Частью этого процесса является замораживание кода. Когда инициируется замораживание кода, то имя ветки изменяется для того, чтобы отразить факт близости релиза. Например, если ветка называлась 6.2-STABLE, то её имя будет изменено на 6.3-PRERELEASE, чтобы обозначить момент прекращения внесения изменений в код системы и период дополнительного тестирования перед выходом релиза. В это время исправления ошибок могут быть внесены в код системы для того, чтобы быть включенными в релиз. Когда исходный код подготовлен к выпуску релиза, имя будет изменено на 6.3-RC для обозначения того, что релиз будет сделан, скорее всего, именно из этого кода. Когда код находится на этапе RC, в нём могут исправляться только самые критичные ошибки. Как только релиз (в нашем примере 6.3-RELEASE) и ветка релиза будут созданы, ветвь будет переименована в 6.3-STABLE.
-
-Для получения дополнительной информации о номерах версий и различных ветках Git обратитесь к статье о extref:{releng}[выпуске релизов].
-
-[[kernel-chflag-failure]]
-=== Я попытался установить новое ядро, однако утилита man:chflags[1] не сработала. Как это обойти?
-
-Краткий ответ: Режим безопасности имеет значение больше нуля. Для установки ядра перезагрузите машину и войдите в однопользовательский режим.
-
-Подробный ответ: FreeBSD запрещает менять системные флаги при работе на уровнях безопасности, превышающих 0. Чтобы проверить текущий уровень безопасности:
-
-[source,shell]
-....
-# sysctl kern.securelevel
-....
-
-Уровень безопасности нельзя понизить в многопользовательском режиме, поэтому для установки ядра загрузитесь в однопользовательский режим, или измените уровень безопасности в [.filename]#/etc/rc.conf#, а затем выполните перезагрузку. Обратитесь к странице Справочника по man:init[8] за подробной информацией о `securelevel` и посмотрите [.filename]#/etc/defaults/rc.conf# и справочную страницу по man:rc.conf[5] для выяснения подробностей о файле [.filename]#rc.conf#.
-
-[[kernel-securelevel-time]]
-=== Не получается изменить системное время больше чем на одну секунду! Как это обойти?
-
-Краткий ответ: Система работает на уровне безопасности со значением выше 1. Для смены даты перезагрузите машину и войдите в однопользовательский режим.
-
-Подробный ответ: FreeBSD запрещает менять системное время больше чем на одну секунду на уровне безопасности выше 1. Чтобы определить уровень безопасности:
-
-[source,shell]
-....
-# sysctl kern.securelevel
-....
-
-Уровень безопасности нельзя понизить в многопользовательском режиме. Для изменения даты перезагрузите систему в однопользовательский режим, либо измените уровень безопасности в [.filename]#/etc/rc.conf#, а затем выполните перезагрузку. Обратитесь к странице Справочника по man:init[8] за подробной информацией о `securelevel` и посмотрите [.filename]#/etc/defaults/rc.conf# и справочную страницу по man:rc.conf[5] для выяснения подробностей о файле [.filename]#rc.conf#.
-
-[[statd-mem-leak]]
-=== Для чего rpc.statd использует 256 Мбайт оперативной памяти?
-
-Нет, это не ошибка утечки памяти и он не использует 256 Мбайт оперативной памяти.
-Для удобства `rpc.statd` отображает большой объём памяти в своё адресное пространство.
-Здесь нет ничего ужасно неправильного с технической точки зрения; просто это сбивает с толку программы вроде man:top[1] и man:ps[1].
-
-man:rpc.statd[8] отображает свой статусный файл ([.filename]#/var/db/statd.status#) в сообственное адресное пространство; для того, чтобы избежать последующих беспокойств о повторном отображении статусного файла в память, когда его размер нужно будет увеличить, под этот файл выделяется щедро заданный объём.
-
-[[unsetting-schg]]
-=== Почему я не могу снять с файла флаг schg?
-
-Система работает на уровне защиты выше нуля. Понизьте уровень защиты и
-попробуйте ещё раз. Для получения более подробной информации обратитесь к
-<<securelevel,разделу FAQ об уровне защиты>> и справочной странице man:init[8].
-
-[[vnlru]]
-=== Что такое vnlru?
-
-`vnlru` сбрасывает и освобождает vnode, когда система достигает ограничения по параметру `kern.maxvnodes`. Этот поток ядра в основном работает вхолостую и активируется только при наличии огромного объема ОЗУ и обращении к десяткам тысяч файлов небольшого размера.
-
-[[top-memory-states]]
-=== Что означают различные состояния памяти, показываемые утилитой top?
-
-* `Active`: по статистике страницы недавно использовались.
-* `Inactive`: по статистике страницы недавно не использовались.
-* `Laundry`: страницы, которые, согласно статистике, давно не использовались,
-но содержат данные, то есть их содержимое необходимо сохранить перед тем, как
-повторно использовать.
-* `Free`: страницы, не содержащие данных, и которые можно повторно использовать
-прямо сейчас.
-* `Wired`: страницы, зафиксированные в памяти, обычно для использования ядром, а также иногда для специального использования процессами.
-
-Страницы чаще всего записываются на диск (типа синхронизации VM), когда они находятся в состоянии Laundry, однако синхронизироваться могут также и страницы в состоянии Active и Inactive.
-Это зависит от возможности отслеживания центральным процессором бита 'модифицированности', и в некоторых ситуациях это может быть лучше для блока синхронизируемых страниц VM, вне зависимости от их принадлежности к той или иной очереди.
-В большинстве встречающихся ситуаций лучше всего представлять очередь Laundry как очередь условно неиспользуемых страниц, которые могут быть, а могут и не быть в процессе записи на диск.
-Очередь Inactive содержит как чистые, так и грязные страницы; чистые страницы ближе к голове очереди потребляются сразу же для восполнения нехватки свободных страниц памяти, а грязные страницы перемещаются в очередь Laundry для последующей обработки.
-
-Есть ещё некоторые другие флаги (например, флаг занятости или счётчик занятости), которые могут влиять на описанные правила.
+После выполнения этих действий отредактируйте файл [.filename]#/etc/rc.conf#, чтобы исправить синтаксическую ошибку. Сообщение об ошибке, отображаемое сразу после сообщений загрузки ядра, должно указывать номер строки в файле, в которой допущена ошибка.
[[free-memory-amount]]
=== Сколько свободной памяти доступно?
-Есть пара определений "свободной памяти".
-В наиболее распространённом случае это объём памяти, доступной к немедленному потреблению без высвобождения уже используемой.
-Этот объём равен объёму очереди свободных страниц вместе с некоторыми другими зарезервированными страницами.
-Этот размер доступен в виде man:sysctl[8]-переменной `vm.stats.vm.v_free_count`, которая показывается, например, утилитой man:top[1].
-Во втором случае "свободная память" обозначает общий объём виртуальной памяти, доступной пользовательским процессам, который зависит от объёма раздела подкачки и доступной к использованию оперативной памяти.
-Другие определения "свободной памяти" также возможны, но они достаточно бесполезны, ведь в любом случае важно сохранять низкий уровень подкачки и избегать исчерпания раздела подкачки.
+Существует несколько видов "свободной памяти". Наиболее распространенный - это объем памяти, который доступен немедленно, без освобождения уже используемой памяти. Это размер очереди свободных страниц плюс некоторые другие зарезервированные страницы. Этот объем отображается через `vm.stats.vm.v_free_count` man:sysctl[8] и, например, выводится man:top[1]. Другой вид "свободной памяти" - это общий объем виртуальной памяти, доступной пользовательским процессам, который зависит от суммы swap-пространства и используемой памяти. Возможны и другие определения "свободной памяти", но их описание относительно бесполезно; гораздо важнее следить за тем, чтобы частота подкачки оставалась низкой, и избегать исчерпания swap-пространства.
-[[var-empty]]
-=== Что такое [.filename]#/var/empty#?
-
-[.filename]#/var/empty# представляет собой каталог, который используется в программе man:sshd[8] при выполнении разделения полномочий. Каталог [.filename]#/var/empty# пуст, его владельцем является `root`, и на нём установлен флаг `schg`. Этот каталог не должен удаляться.
-
-[[newsyslog-expectations]]
-=== Я поменял /etc/newsyslog.conf. Как проверить правильность изменений?
-
-Чтобы посмотреть, что будет делать man:newsyslog[8], используйте следующую команду:
-
-[source,shell]
-....
-% newsyslog -nrvv
-....
-
-=== Как поправить часовой пояс?
+[[timezone]]
+=== Мое время указано неверно, как я могу изменить часовой пояс?
Используйте man:tzsetup[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 выполните одно из действий:
-
-Используйте мета-порт [.filename]#x11/xorg#, который выполняет построение и установку всех компонентов Xorg.
-
-Используйте [.filename]#x11/xorg-minimal#, который выполняет построение и установку только необходимых компонентов Xorg.
-
-Установите Xorg из пакетов FreeBSD.
-
-[source,shell]
-....
-# pkg install xorg
-....
-
-После установки Xorg следуйте указаниям в разделе
-extref:{handbook}x11/[Конфигурация X11, x-config] Руководства по FreeBSD.
-
-[[running-X-securelevels]]
-=== Я попытался запустить X, но получил сообщение 'No devices detected' после ввода команды startx. Что мне теперь делать?
-
-Вероятно, в системе установлен повышенный уровень безопасности (`securelevel`). При повышенном уровне защиты систему X запустить невозможно, потому что X требуются права на операции записи в устройство man:io[4]. Дополнительная информация находится на странице Справочника man:init[8].
-
-Существует два решения проблемы: возвратить нулевое значение `securelevel` или запускать man:xdm[8] (или любой другой менеджер дисплеев) во время загрузки, до того, как будет повышено значение `securelevel`.
-
-Обратитесь к <<xdm-boot>> для получения более полной информации о запуске
-man:xdm[8] во время загрузки.
-
-[[x-and-moused]]
-=== Почему моя мышь не работает с X?
-
-При использовании стандартного драйвера консоли 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#, чтобы в нём были следующие строки:
-
-[.programlisting]
-....
-Section "InputDevice"
- Option "Protocol" "SysMouse"
- Option "Device" "/dev/sysmouse"
-.....
-....
-
-Начиная с версии Xorg 7.4 раздел `InputDevice` в файле [.filename]#xorg.conf# игнорируется, и вместо него используется механизм автоматически определяемых устройств. Чтобы восстановить прежнее поведение, добавьте в раздел `ServerLayout` или `ServerFlags` такую строку:
-
-[.programlisting]
-....
-Option "AutoAddDevices" "false"
-....
-
-Некоторые предпочитают использовать в X устройство [.filename]#/dev/mouse#. Чтобы оно работало, файл устройства [.filename]#/dev/mouse# должен являться ссылкой на [.filename]#/dev/sysmouse# (посмотрите справку по man:sysmouse[4]). Это можно сделать, добавив следующую строку в [.filename]#/etc/devfs.conf# (посмотрите справку по man:devfs.conf[5]):
-
-[.programlisting]
-....
-link sysmouse mouse
-....
-
-Ссылка может быть создана путем перезапуска man:devfs[5] с использованием следующей команды (из под пользователя `root`):
-
-[source,shell]
-....
-# service devfs restart
-....
-
-[[x-and-wheel]]
-=== У моей мыши есть колёсико. Могу ли я его использовать при работе в X?
-
-Да, если X настроена для использования 5-кнопочной мыши. Для этого добавьте строчки `Buttons 5` и `ZAxisMapping 4 5` в раздел "InputDevice" файла [.filename]#/etc/X11/xorg.conf# как показано в этом примере:
-
-[.programlisting]
-....
-Section "InputDevice"
- Identifier "Mouse1"
- Driver "mouse"
- Option "Protocol" "auto"
- Option "Device" "/dev/sysmouse"
- Option "Buttons" "5"
- Option "ZAxisMapping" "4 5"
-EndSection
-....
-
-Использование мыши может быть активировано в Emacs путём добавления в
-[.filename]#~/.emacs# следующих строк:
-
-[.programlisting]
-....
-;; wheel mouse
-(global-set-key [mouse-4] 'scroll-down)
-(global-set-key [mouse-5] 'scroll-up)
-....
-
-=== Как заставить работать тачпад Synaptics в X?
-
-Для его работы понадобится настроить некоторые вещи.
-
-Чтобы использовать драйвер synaptics из Xorg, для начала удалите строку moused_enable из [.filename]#rc.conf#.
-
-Для включения synaptics добавьте следующую строку в [.filename]#/boot/loader.conf#:
-
-[.programlisting]
-....
-hw.psm.synaptics_support="1"
-....
-
-Добавьте следующее в [.filename]#/etc/X11/xorg.conf#:
-
-[.programlisting]
-....
-Section "InputDevice"
-Identifier "Touchpad0"
-Driver "synaptics"
-Option "Protocol" "psm"
-Option "Device" "/dev/psm0"
-EndSection
-....
-
-Добавьте в раздел "ServerLayout" вот что:
-
-[.programlisting]
-....
-InputDevice "Touchpad0" "SendCoreEvents"
-....
-
-=== Как использовать удалённые X-дисплеи?
-
-Из соображений обеспечения информационной безопасности открывать удалённые окна на машине по умолчанию запрещено.
-
-Для включения этой возможности запустите X с аргументом `-listen_tcp`:
-
-[source,shell]
-....
-% startx -listen_tcp
-....
-
-=== Что такое виртуальные консоли и как изменить их количество?
-
-Виртуальные консоли предоставляют несколько одновременных сеансов работы с той же самой машиной без установки какой бы то ни было сети или запуска X.
-
-При запуске системы после вывода сообщений этапа загрузки на консоль выдаётся приглашение для входа в систему. Введите своё имя и пароль, чтобы начать работу на первой виртуальной консоли.
-
-Чтобы запустить ещё один сеанс, скажем, чтобы заглянуть в документацию по программе или для чтения электронной почты во время ожидания завершения передачи данных по FTP, нажмите kbd:[F2], удерживая kbd:[Alt]. Это отобразит приглашение на второй виртуальной консоли. Чтобы вернуться к первоначальному сеансу, нажмите kbd:[Alt+F1].
-
-По умолчанию во FreeBSD задействованы восемь виртуальных консолей, а комбинации клавиш kbd:[Alt+F1], kbd:[Alt+F2], kbd:[Alt+F3] и далее служат для переключения между ними.
-
-Чтобы увеличить количество виртуальных консолей, отредактируйте [.filename]#/etc/ttys# (смотрите страницу Справочника man:ttys[5]), добавив туда записи для терминалов с именами от [.filename]#ttyv8# до [.filename]#ttyvc# после комментария про "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
-....
-
-Чем больше виртуальных терминалов, тем больше ресурсов используется. Это может привести к проблемам на системах с 8 Мбайт ОЗУ или меньше. Подумайте о смене статуса консолей с `secure` на `insecure`.
-
-[IMPORTANT]
-====
-Чтобы запустить сервер X, нужно зарезервировать под него хотя бы один виртуальный терминал со значением `off`. Это означает, что под виртуальные консоли можно отвести только одиннадцать функциональных клавиш, и ещё одна остаётся за X-сервером.
-====
-
-Например, чтобы запустить X и 11 виртуальных консолей, нужно настроить двенадцатый виртуальный терминал:
-
-[.programlisting]
-....
-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].
-
-[[xdm-boot]]
-=== Как запустить XDM во время загрузки?
-
-Есть две философские школы, проповедующие различные методы запуска 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_tty` (которое по умолчанию
-определено как `ttyv8`) может быть задано в файле [.filename]#/etc/rc.conf#
-для указания виртуального терминала, на котором запускается man:xdm[8].
-
-[[xconsole-failure]]
-=== При запуске xconsole выдаётся сообщение Couldn't open console.
-
-Если X запускается с помощью startx, права на устройство [.filename]#/dev/console#_не_ изменяются, поэтому такие программы как xterm -C и xconsole не будут работать.
-
-Это зависит от прав доступа, установленных для консоли по умолчанию. В многопользовательской системе вовсе не нужно, чтобы любой пользователь мог выводить информацию на системную консоль. Для пользователей, вошедших в систему через VTY, для решения этой проблемы существует файл man:fbtab[5].
-
-В общем, раскомментируйте строчку в файле [.filename]#/etc/fbtab# (посмотрите справку по man:fbtab[5]):
-
-[.programlisting]
-....
-/dev/ttyv0 0600 /dev/console
-....
-
-Этого будет достаточно для того, чтобы всякий, кто вошёл в систему с терминала [.filename]#/dev/ttyv0#, имел доступ к консоли.
-
-[[ps2-x]]
-=== Моя мышь PS/2 в X работает неправильно.
-
-Мышь и драйвер могли рассинхронизироваться. В редких случаях драйвер может ошибочно сообщать о проблемах синхронизации:
-
-[.programlisting]
-....
-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-splash] Руководства FreeBSD.
-
-=== Можно ли в X задействовать kbd:[Windows]-клавиши на клавиатуре?
-
-Да.
-Воспользуйтесь man:xmodmap[1] для привязки функций к этим клавишам.
-
-Если все клавиатуры Windows стандартны, то эти три клавиши имеют следующие клавиатурные коды:
-
-* 115 - клавиша kbd:[Windows] между клавишами kbd:[Ctrl] и kbd:[Alt] с левой стороны
-* 116 - клавиша kbd:[Windows] справа от kbd:[AltGr]
-* 117 - клавиша kbd:[Menu], слева от клавиши kbd:[Ctrl], находящейся справа
-
-Чтобы заставить левую клавишу kbd:[Windows] набирать запятую, попробуйте выполнить такую команду:
-
-[source,shell]
-....
-# xmodmap -e "keycode 115 = comma"
-....
-
-Для того, чтобы переопределения клавиш kbd:[Windows] выполнялись автоматически каждый раз при запуске X, поместите команды `xmodmap` в [.filename]#~/.xinitrc# либо, что предпочтительней, создайте файл [.filename]#~/.xmodmaprc# и включите в него параметры `xmodmap` по одному на строку, затем добавьте в [.filename]#~/.xinitrc# такую строку:
-
-[.programlisting]
-....
-xmodmap $HOME/.xmodmaprc
-....
-
-Например, чтобы переопределить эти 3 клавиши так, чтобы они выполняли функции клавиш kbd:[F13], kbd:[F14] и kbd:[F15]. Это позволит легко привязать их к полезным функциям в приложениях или менеджере окон.
-
-Чтобы сделать это, поместите такие строки в файл [.filename]#~/.xmodmaprc#:
-
-[.programlisting]
-....
-keycode 115 = F13
-keycode 116 = F14
-keycode 117 = F15
-....
-
-При использовании менеджера рабочего стола package:x11-wm/fvwm2[] клавиши можно переопределить так, чтобы нажатие kbd:[F13] сворачивало в иконку (и восстанавливало предыдущий размер) того окна, на которое указывает курсор, kbd:[F14] перемещало окно с курсором на передний план или, если оно уже впереди, возвращало обратно, а kbd:[F15] вызывало главное меню Workplace, даже если курсор находится не на рабочем столе, что бывает полезно, когда рабочий стол совсем не виден.
-
-Следующие записи в [.filename]#~/.fvwmrc# позволяют достичь описанных выше функций:
-
-[.programlisting]
-....
-Key F13 FTIWS A Iconify
-Key F14 FTIWS A RaiseLower
-Key F15 A A Menu Workplace Nop
-....
-
-[[x-3d-acceleration]]
-=== Как активировать аппаратное ускорение 3D-графики для OpenGL(R)?
-
-Наличие 3D-ускорения зависит от версии сервера Xorg и типа графического
-адаптера. Для адаптера nVidia используйте предскомпилированный драйвер для
-FreeBSD, установив один из нижеследующих портов:
-
-Последние версии адаптеров nVidia поддерживаются портом
-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-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] Руководства.
-
-[[router]]
-=== Может ли машина с FreeBSD использоваться как выделенный маршрутизатор?
-
-Да.
-Обратитесь к разделу Руководства, посвящённому
-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:[natd, network-natd].
-
-[[ethernet-aliases]]
-=== Как настроить алиас в сети Ethernet?
-
-Если алиас находится в той же самой сети, что и уже настроенный на интерфейсе адрес, допишите к этой команде `netmask 0xffffffff`:
-
-[source,shell]
-....
-# ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff
-....
-
-В противном случае укажите сетевой адрес и маску обычным образом:
-
-[source,shell]
-....
-# ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
-....
-
-Дополнительная информация может быть найдена в extref:{handbook}config/[Руководстве,
-configtuning-virtual-hosts] по FreeBSD.
-
-=== Почему я не могу смонтировать диск Linux(R) по NFS?
-
-Некоторые версии NFS для Linux(R) поддерживают запросы на монтирование только с привилегированного порта; попробуйте выполнить следующую команду:
-
-[source,shell]
-....
-# 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].
-
-[[ip-multicast]]
-=== Как включить поддержку multicast IP?
-
-Установите пакет package:net/mrouted[] и добавьте `mrouted_enable="YES"` в [.filename]#/etc/rc.conf# для запуска этого сервиса во время загрузки.
-
-[[fqdn-hosts]]
-=== Почему я должен использовать FQDN для хостов не в моей сети?
-
-За ответом на этот вопрос обратитесь к extref:{handbook}mail/[Руководству,
-mail-trouble] по FreeBSD.
-
-[[network-permission-denied]]
-=== Почему при выполнении любых сетевых операций выдаётся сообщение Permission denied?
-
-Если ядро скомпилировано с параметром `IPFIREWALL`, имейте в виду, что политикой по умолчанию является запрет прохождения любых пакетов, которые не разрешены явным образом.
-
-Если межсетевой экран был случайно сконфигурирован неверным образом, то для восстановления работоспособности сети наберите такую команду из-под пользователя `root`:
-
-[source,shell]
-....
-# ipfw add 65534 allow all from any to any
-....
-
-Рассмотрите использование `firewall_type='open'` в файле [.filename]#/etc/rc.conf#.
-
-Дополнительная информация о настройке данного межсетевого экрана находится в
-extref:{handbook}firewalls/[соответствующей главе, firewalls-ipfw] Руководства.
-
-[[ipfw-fwd]]
-=== Почему моё правило “fwd” для `ipfw` по перенаправлению сервиса на другую машину не работает?
-
-Возможно, потому что вместо простого перенаправления пакетов нужна трансляция сетевых адресов (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" часто работает не так, как ожидает пользователь.
-Описанное поведение является особенностью, а не ошибкой.
-
-Обратитесь к <<service-redirect,FAQ о перенаправлении сервисов>>, руководству по man:natd[8] или одной из нескольких утилит для перенаправления портов из link:https://www.FreeBSD.org/ports/[Коллекции Портов] для того, чтобы сделать это правильно.
-
-[[service-redirect]]
-=== Как можно перенаправить запросы сервисов с одной машины на другую?
-
-Запросы FTP и других сервисов можно перенаправить с помощью порта package:sysutils/socket[]. Замените запись для этого сервиса в [.filename]#/etc/inetd.conf# на вызов `socket`, как показано в этом примере для ftpd:
-
-[.programlisting]
-....
-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]), однако это устройство удалено из вашего ядра. Постройте новое ядро с добавлением в его конфигурационный файл следующей строки:
-
-[.programlisting]
-....
-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. Помимо всего прочего, такие сообщения могут быть вызваны следующими действиями:
-
-* Лобовая атака типа отказ в обслуживании DoS (в отличие от атак в один пакет, которые используют конкретную брешь в защите).
-* Сканирование портов в попытке осуществить подключение к большому количеству портов (в отличие от проб нескольких известных портов).
-
-Первое число в сообщении показывает количество пакетов, которое ядро отправило
-бы при отсутствии ограничений, а второе число отражает лимит.
-Этот лимит управляется при помощи переменной `net.inet.icmp.icmplim`.
-В этом примере устанавливается лимит на `300` пакетов в секунду:
-
-[source,shell]
-....
-# sysctl net.inet.icmp.icmplim=300
-....
-
-Для выключения подобных сообщений без отключения самого ограничения используйте `net.inet.icmp.icmplim_output`, чтобы подавить вывода:
-
-[source,shell]
-....
-# sysctl net.inet.icmp.icmplim_output=0
-....
-
-И наконец, чтобы полностью выключить это ограничение, сделайте `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 (песочница)?
-
-"Sandbox" - это термин, используемый при обеспечении безопасности. Он имеет два значения:
-
-* Процесс, помещённый внутрь некоторых виртуальных стен, которые предназначены для предотвращения взлома всей системы в результате взлома этого конкретного процесса.
-+
-Процесс может работать только в границах этих стен.
-Поскольку, что бы этот процесс ни делал, он эти стены разрушить не может, особый аудит его кода не нужен для того, чтобы с уверенностью сказать, насколько его работа безопасна для системы.
-+
-Стеной может служить, например, идентификатор пользователя. Вот определение, даваемое на страницах Справочника man:security[7] и man:named[8].
-+
-Рассмотрим, например, службу `ntalk` (смотрите man:inetd[8]).
-Раньше эта служба запускалась с полномочиями пользователя `root`.
-Теперь она запускается с полномочиями пользователя с идентификатором `tty`.
-Пользователь `tty` является песочницей, предназначенной для того, чтобы
-пользователю, которому удалось проникнуть в систему через `ntalk`, было сложнее
-взломать систему и получить полномочия больше, чем обладает этот идентификатор.
-* Процесс, помещённый внутрь симулируемой машины.
-Это означает, что некто, взломавший процесс, может думать, что может сломать и
-систему в целом, однако фактически может сломать только симулятор этой машины
-и не может модифицировать никаких реальных данных.
-+
-Самым распространённым способом достигнуть такого результата является построение имитирующего окружения в каталоге и затем запуск процессов в этом каталоге через chroot (т.е. задав этот каталог в качестве [.filename]#/# для этого процесса, а не реальный [.filename]#/# всей системы).
-+
-Другим часто используемым методом является монтирование низлежащей файловой системы в режиме "только для чтения" и затем создание уровня файловой системы поверх неё, что даёт процессу видимость доступа по записи на ту файловую систему. Процесс будет полагать, что может записывать в те файлы, но это будет единственный процесс, который увидит результат - другие процессы не будут этого делать ни в коем случае.
-+
-Попытка сделать такой тип песочницы настолько прозрачна, что пользователь (или взломщик) даже не поймёт, что он в ней находится.
-
-В UNIX(R) реализованы два типа "песочниц". Один на уровне процесса, и один на уровне идентификаторов пользователей.
-
-Каждый процесс в UNIX(R) полностью защищён от других процессов. Никакой процесс не может модифицировать адресное пространство другого процесса.
-
-В UNIX(R) каждым процессом владеет некоторый идентификатор пользователя. Если этот пользователь не `root`, он ограждает процесс от других, владельцами которых являются другие пользователи. Этот идентификатор используется также для защиты данных на диске.
-
-[[securelevel]]
-=== Что такое уровень безопасности (securelevel)?
-
-`securelevel` является механизмом обеспечения безопасности, который реализован в ядре. Когда уровень защиты больше нуля, ядро ограничивает выполнение некоторых операций; даже суперпользователю `root` запрещается их выполнять. Механизм уровня защиты ограничивает возможности по:
-
-* снятию некоторых флагов с файлов, таких, как `schg` (системный флаг неизменяемости),
-* записи в память ядра через устройства [.filename]#/dev/mem# и [.filename]#/dev/kmem#,
-* загрузке модулей ядра и
-* изменению правил сетевого экрана.
-
-Для выяснения состояния уровня защиты в работающей системе:
-
-[source,shell]
-....
-# sysctl -n kern.securelevel
-....
-
-Результат содержит текущее значение уровня защиты.
-Если оно больше нуля, то по крайней мере некоторые из защит этого механизма включены.
-
-Уровень защиты работающей системы не может быть понижен, поскольку это противоречит назначению этого механизма.
-Если для задачи требуется неположительный уровень защиты, измените значения переменных `kern_securelevel` и `kern_securelevel_enable` в файле [.filename]#/etc/rc.conf#, а затем перезагрузите систему.
-
-Более подробная информация об уровнях защиты и о том, какие специфические действия выполняют все уровни, может быть найдена на справочных страницах о man:init[8].
-
-[WARNING]
-====
-
-Уровень защиты не является панацеей; в нём есть много недостатков. Зачастую он даёт обманчивое чувство безопасности.
-
-Одной из самых больших проблем является то, что для его эффективной работы все файлы, используемые в процессе загрузки, должны быть защищены.
-Если атакующий сможет заставить систему выполнять свой код до установки уровня защиты (что происходит достаточно поздно во время процесса загрузки, так как некоторые вещи, выполняемые системой в это время, не могут быть сделаны при повышенном уровне защиты), то эта защита может быть отключена.
-Хотя такая задача по защите всех файлов, используемых в процессе загрузки, технически вполне осуществима, если это будет сделано, то поддержка системы станет кошмаром, так как для изменения конфигурационного файла придётся останавливать систему, переводя её по крайней мере в однопользовательский режим.
-
-Это обстоятельство, а также ряд других, часто обсуждаются в списках рассылки, в частности, во {freebsd-security}.
-Поищите в link:https://www.FreeBSD.org/search/[архивах] более подробное обсуждение. Предпочтителен более гибкий механизм.
-====
-
-[[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` до того, как использовать его для входа в систему.
-
-[[serial]]
-== Коммуникационные адаптеры
-
-В этом разделе освещены вопросы о работе последовательных адаптеров во FreeBSD.
-
-[[serial-console-prompt]]
-=== Как сделать так, чтобы приглашение boot: выводилось на консоль на последовательном порту?
-
-Подробная информация находится в extref:{handbook}serialcomms/[этом разделе Руководства, serialconsole-setup].
-
-[[found-serial]]
-=== Как узнать, обнаружила ли FreeBSD последовательные порты или внутренние модемы?
-
-В процессе своей загрузки ядро FreeBSD будет пытаться найти последовательные порты, с поддержкой которых ядро сконфигурировано. Внимательно просмотрите сообщения загрузки либо выполните такую команду после того, как система запустилась и работает:
-
-[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
-....
-
-В этом примере присутствуют два последовательных порта. Первый находится на IRQ4, порт ввода/вывода `0x3f8`, и построен на микросхеме UART типа 16550. Второй использует тот же тип микросхемы, но находится на IRQ3 и использует адрес порта ввода/вывода `0x2f8`. Внутренние модемы выглядят точно также, как последовательные порты, за исключением того, что модем к ним подключен всегда.
-
-В ядро [.filename]#GENERIC# встроена поддержка двух последовательных портов, с теми же IRQ и адресами портов ввода/вывода, как указано в примере выше. Если эти настройки не соответствуют системе или имеется больше внутренних модемов или последовательных портов, чем описано в ядре, переконфигурируйте его, следуя инструкциям в разделе <<make-kernel,о построении ядра>>.
-
-[[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 последний последовательный порт. Также укажите следующую опцию в файле конфигурации ядра:
-
-[.programlisting]
-....
-COM_MULTIPORT
-....
-
-В следующем примере указано содержимое [.filename]#/boot/device.hints# для 4-портового последовательного адаптера AST на 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"
-....
-
-Флаги указывают, что управляющий порт имеет младший номер устройства `7` (`0x700`), и все порты совместно используют один и тот же номер IRQ (`0x001`).
-
-[[default-serial-params]]
-=== Можно ли настроить для последовательного порта режим работы по умолчанию?
-
-Смотрите раздел Руководства по FreeBSD, посвящённый
-extref:{handbook}serialcomms/[последовательным соединениям, serial-hw-config].
-
-[[cannot-tip]]
-=== Почему не удаётся запустить tip или cu?
-
-Встроенные утилиты man:tip[1] и man:cu[1] могут получить доступ к каталогу [.filename]#/var/spool/lock# только из-под пользователя `uucp` и членов группы `dialer`. Используйте группу `dialer` для управления доступом к модему или удалённым системам посредством добавления в неё пользовательских учётных записей.
-
-Либо же можно разрешить всем запускать man:tip[1] и man:cu[1]:
-
-[source,shell]
-....
-# chmod 4511 /usr/bin/cu
-# chmod 4511 /usr/bin/tip
-....
-
-== Разное
-
[[more-swap]]
-=== Почему FreeBSD использует много места в разделе подкачки даже при большом объёме свободной памяти?
+=== FreeBSD использует много swap-пространства, даже когда в компьютере остаётся свободная память. Почему?
-FreeBSD активно перемещает неиспользуемые страницы памяти, к которым не было обращений, в раздел подкачки, чтобы увеличить объём доступной физической памяти для активного использования. Такое активное использование раздела подкачки компенсируется использованием дополнительной свободной оперативной памяти для кеширования.
+FreeBSD активно перемещает полностью неиспользуемые страницы основной памяти в своп, чтобы освободить больше основной памяти для активного использования. Такое активное использование свопа компенсируется за счет использования дополнительной свободной памяти для кэширования.
-Заметьте, что хотя FreeBSD предпочитает использовать раздел подкачки, страницы не перемещаются произвольно при полностью неактивной системе. По этой причине система не будет находиться целиком в разделе подкачки после ночного простаивания.
+Обратите внимание, что хотя FreeBSD активно работает в этом направлении, она не принимает произвольных решений о выгрузке страниц, когда система действительно простаивает. Таким образом, система не будет полностью выгружена в своп после простоя в течение ночи.
[[top-freemem]]
-=== Почему утилита man:top[1] показывает очень маленький объём свободной памяти, даже когда запущено всего лишь несколько приложений?
-
-Просто дело в том, что под свободной памятью подразумевается никак не
-используемая память. Вся память, которая программам явно не выделялась,
-используется ядром FreeBSD для дискового кэша. Значения, показываемые
-утилитой &man.top.1; с метками `Inact` и `Laundry`, являются кэшированными
-данными разных степеней устаревания. То, что данные находятся в кэше, означает, что система не будет обращаться к медленному диску снова за теми данными, обращение к которым было недавно, повышая таким образом общую производительность. В общем случае маленькие значения в пункте `Free`, показываемые утилитой man:top[1] для свободной памяти - это хорошо, если, конечно они не _очень_ маленькие.
-
-[[chmod-symlinks]]
-=== Почему командой chmod невозможно изменить права на символические ссылки?
-
-Символические ссылки не имеют атрибутов доступа, и по умолчанию утилита man:chmod[1] следует по символической ссылке, чтобы по возможности изменить права доступа на исходный файл. Для файла [.filename]#foo# с символической ссылкой [.filename]#bar# на этот файл эта команда всегда будет выполняться успешно.
+=== Почему top показывает очень мало свободной памяти, даже когда у меня запущено очень мало программ?
-[source,shell]
-....
-% chmod g-w bar
-....
-
-Однако права на файл [.filename]#bar# не изменятся.
-
-Чтобы это работало, используйте опцию `-H` или `-L` вместе с опцией `-R`. Обратитесь к страницам Справочника по команде man:chmod[1] и по man:symlink[7].
+Простой ответ заключается в том, что свободная память — это потраченная впустую память.
-[WARNING]
-====
-
-Опция `-R` выполняет man:chmod[1] _рекурсивно_. Будьте внимательны, задавая каталоги или символические ссылки на каталоги в параметрах man:chmod[1]. Чтобы изменить права на каталог, на который указывает символическая ссылка, используйте man:chmod[1] без опций и следуйте символической ссылке с помощью лидирующего слэша ([.filename]#/#). Например, если [.filename]#foo# является символической ссылкой на каталог [.filename]#bar#, то чтобы изменить права на [.filename]#foo# (на самом деле на [.filename]#bar#), выполните такую команду:
-
-[source,shell]
-....
-% chmod 555 foo/
-....
-
-Если задан ведущий слэш, то man:chmod[1] будет следовать символической ссылке [.filename]#foo#, меняя права на каталог [.filename]#bar#.
-====
-
-[[dos-binaries]]
-=== Могу ли я запускать программы для DOS во FreeBSD?
-
-Да.
-Программа эмуляции DOS, package:emulators/doscmd[], доступна в Коллекции Портов
-FreeBSD.
-
-Если doscmd не достаточно, package:emulators/pcemu[] эмулирует 8088 и набор сервисов BIOS, достаточный для запуска многих приложений текстового режима DOS. Требуется X Window System.
-
-В Коллекции Портов FreeBSD также имеется package:emulators/dosbox[]. Программа в основном предназначена для эмуляции старых игр, написанных под DOS, для хранения файлов которых используется локальная файловая система.
-
-[[translation]]
-=== Что мне нужно сделать, чтобы перевести документацию FreeBSD на мой родной язык?
-
-Ознакомьтесь с extref:{fdp-primer}[FAQ по Переводам, translations] из FreeBSD Documentation Project Primer.
-
-[[freebsd-mail-bounces]]
-=== Почему возвращается моя электронная почта, отправленная на любой из адресов FreeBSD.org?
-
-В почтовой системе `FreeBSD.org` в Postfix применяются некоторые проверки входящей почты, и отвергаются сообщения, которые были неправильно сформированы при пересылке либо как-то иначе похожи на спам. Вот некоторые из требований:
-
-* IP-адрес клиента SMTP должен иметь обратное преобразование в символическое имя.
-* Полное имя хоста, указанное на этапе EHLO/HELO в процессе обмена сообщениями SMTP, должно разрешаться в IP-адрес клиента.
-
-Дополнительные советы по доставке письма:
-
-* Письмо должно быть отправлено в текстовом формате. Сообщение в почтовый список рассылки, как правило, не должно иметь размер больше 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) и интерактивного чата.
+Любая память, которую программы не используют активно, применяется в ядре FreeBSD в качестве дискового кэша. Значения, отображаемые в man:top[1] с метками `Inact` и `Laundry`, представляют собой кэшированные данные на разных уровнях старения. Эти кэшированные данные позволяют системе не обращаться к медленному диску повторно для данных, к которым она недавно обращалась, тем самым повышая общую производительность. В целом, низкое значение памяти, отображаемое как `Free` в man:top[1], является хорошим признаком, при условии, что оно не _очень_ низкое.
[[daemon-name]]
-=== Как зовут этого маленького симпатичного красного парня?
+=== Как зовут этого милого маленького красного человечка?
-У него нет определённого имени, он называется просто "даемон BSD".
-Если вам непременно нужно имя, называйте его "beastie".
-Заметьте, что "beastie" произносится как "BSD".
+У него нет имени, и его просто называют "демон BSD". Если вам непременно нужно имя, называйте его "биести" (beastie). Обратите внимание, что "биести" произносится как "Би-Эс-Ди".
-Больше о даемоне BSD можно узнать из его http://www.mckusick.com/beastie/index.html[домашней страницы].
+Дополнительная информация о демоне 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].
-
-В общем, использовать изображение можно в высокохудожественном стиле и в личных целях, если даются соответствующие отсылки. Перед использованием знака в коммерческих целях обратитесь за разрешением к {mckusick}. Дополнительная информация находится на http://www.mckusick.com/beastie/index.html[домашней странице Даемона BSD].
+=== Могу ли я использовать изображение BSD-демона?
-[[daemon-images]]
-=== Не найдётся ли у вас изображений даемона BSD, которые можно использовать?
+Возможно. Демон BSD защищен авторским правом Маршалла Кирка Маккузика. Ознакомьтесь с его http://www.mckusick.com/beastie/mainpage/copyright.html[Заявлением об использовании изображения демона BSD] для получения подробных условий использования.
-В каталоге [.filename]#/usr/share/examples/BSD_daemon/# есть рисунки в форматах
-eps и Xfig.
-
-[[glossary]]
-=== При просмотре списков рассылки я встретил сокращение или другой термин, который мне не понятен. Где я должен посмотреть, что он значит?
-
-Обратитесь к extref:{handbook}glossary/[Глоссарию FreeBSD].
+В заключение, изображение можно использовать в хорошем вкусе, для личного пользования, при условии указания соответствующей авторской принадлежности. Перед коммерческим использованием логотипа свяжитесь с {mckusick} для получения разрешения. Подробнее можно узнать на http://www.mckusick.com/beastie/index.html[домашней странице BSD Daemon].
[[bikeshed-painting]]
-=== Почему я должен беспокоиться о цвете велосипедных навесов (bikeshed)?
-
-На самом деле, очень краткий ответ на этот вопрос заключается в том, что вы этого делать не должны. Если давать более подробный ответ, то ваше умение делать навесы не должно означать, что вы должны препятствовать другим делать их просто потому, что вам не нравится цвет, в который они собираются их окрашивать. Эта метафора означает, что вам не нужно обсуждать каждую мелочь просто потому, что вы знаете о ней достаточно много. Некоторые люди отмечают, что объём шума, генерируемый при появлении некоторого изменения, находится в обратной зависимости от сложности самого изменения.
-
-Более пространный и полный ответ заключается в том, что после очень долгого обсуждения того, должна ли утилита man:sleep[1] обрабатывать дробное число, заданное в качестве второго аргумента, {phk} опубликовал большое сообщение,
-озаглавленное link:http://www.bikeshed.com[Велосипедный навес (любого цвета) на
-зелёной траве...]. Соответствующие части этого сообщения цитируются ниже.
-
-{phk} on freebsd-hackers, October 2, 1999
-"Что это за история с этим навесом для велосипеда?", кто-то из вас спрашивал меня.
-
-Это долгая история, точнее, это старая история, но на самом деле она коротка.
-В начале 1960-х годов Сирил Норткот Паркинсон (C. Northcote Parkinson) написал книгу "Законы Паркинсона", которая содержит много интересных взглядов на процесс управления.
-
-_[немного выдержек из краткого содержания книги]_
-
-В конкретном примере велосипедный навес сопоставляется с другим важным объектом - атомной электростанцией. Я полагаю, что это иллюстрирует древность книги.
-
-Паркинсон показывает, что вы можете прийти на совещание руководителей и получить добро на строительство многомиллионной или даже многомиллиардной атомной электростанции, но если вы хотите построить навес для велосипеда, то погрязнете в бесконечных обсуждениях.
-
-Паркинсон объясняет это тем, что атомная станция настолько большой, дорогой и сложный объект, что люди не могут его осознать и вместо того, чтобы попробовать это сделать, они полагаются на то, что кто-то уже проверил все мелочи до того, как всё зашло так далеко. В своей книге Ричард П. Фейнманн (Richard P. Feynmann) даёт несколько интересных и очень поучительных примеров, связанных с Лос Аламос.
-
-Велосипедный навес - это противоположный случай. Любой может построить навес за один уикэнд, и у него ещё останется время посмотреть футбол по телевизору. Так что не важно, насколько хорошо вы готовились к обсуждению, насколько убедительны будут ваши аргументы, кто-нибудь воспользуется шансом показать, что он не зря ест свой хлеб, что он обращает внимание, что он _здесь_.
+=== Почему меня должен волновать цвет сарая для велосипедов?
-В Дании это называется “оставить отпечаток своего пальца”.
-Это всё касается личной гордости и престижа, это возможность указать куда-то и сказать: “Вот! Это сделал я”.
-Это сильно выражено в политиках, но присутствует во многих людях, которые получают возможность сделать это.
-Просто вспомните об отпечатках ног во влажном цементе.
+Очень, очень краткий ответ — не должен. Более развёрнутый ответ: просто потому, что вы способны построить сарай для велосипедов, это не значит, что вы должны мешать другим делать то же самое лишь из-за того, что вам не нравится цвет, которым они собираются его покрасить. Это метафора, напоминающая, что не нужно спорить о каждой мелочи только потому, что у вас достаточно знаний для этого. Некоторые люди отмечали, что количество шума, вызванного изменением, обратно пропорционально сложности этого изменения.
-== Юмор от 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, чтобы сменить электрическую лампочку?
-
-Необходимо иметь ровно одну тысячу сто шестьдесят девять разработчиков:
-
-Двадцать три сообщат в -CURRENT о том, что не горит свет;
-
-Четыре начнут утверждать, что это проблема конфигурации и такие сообщения нужно посылать в -questions;
-
-Трое оформят PR по этому поводу, причём одно их них будет направлено в doc и будет содержать только строчку "здесь темно";
-
-Один закоммитит неоттестированную лампочку, что сломает построение системы, а затем через пять минут вернёт всё назад;
-
-Восемь поругаются с авторами PR по поводу включения патчей в PR;
-
-Пять сообщат о том, что не проходит компиляция системы;
-
-Тридцать один человек ответит, что у них всё работает и наверное, те обновились в неподходящее время;
-
-Один пошлёт патч для новой лампочки в -hackers;
-
-Один пожалуется, что у него имелись патчики ещё три года назад, но когда он послал их в -CURRENT, они были проигнорированы и он имел неудачный опыт работы с системой PR; кроме того предлагаемая лампочка не имеет отражателя.
-
-Тридцать семь начнут кричать, что лампочки не относятся к базовой системе, что коммиттеры не имеют права делать такие вещи без опроса общественности и ЧТО ВООБЩЕ -CORE ДЕЛАЕТ ПО ЭТОМУ ПОВОДУ?
-
-Две сотни напишут о цвете велосипедного навеса;
-
-Трое скажут, что этот патч не соответствует man:style[9]
-
-Семнадцать возразят, что предлагаемая новая лампа подпадает под лицензию GPL;
-
-Пятьсот восемьдесят шесть раздуют флейм по поводу сравнения лицензий GPL, BSD, MIT, NPL и личных мнений о неизвестных основателей FSF;
-
-Семеро пошлют различные части этих обсуждений в -chat и -advocacy;
-
-Один закоммитит предлагаемую лампу, хотя она светит хуже, чем старая;
-
-Двое откатят эти изменения с ужасной руганью в журнале коммитта о том, что лучше FreeBSD будет сидеть в темноте, чем с тусклой лампой.
-
-Сорок шесть громко воспротивятся этому изменению и потребуют объяснений от -core;
-
-Одиннадцать попросят уменьшить размер лампочки, чтобы она подошла к их Тамагочи на случай, если мы когда-нибудь соберёмся переносить FreeBSD на эту платформу;
-
-Семьдесят три заявят о SNR в -hackers и -chat и в знак протеста отпишутся;
-
-Тринадцать пошлют письма "unsubscribe", "How do I unsubscribe?" или "Please remove me from the list" с обычной подписью;
-
-Один закоммитит работающую лампочку в то время, как все будут слишком заняты руганью, чтобы это заметить;
-
-Тридцать один человек напишет, что новая лампочка будет светить на 0.364% ярче, если её откомпилировать с помощью TenDRA (хотя при этом она приобретёт форму куба) и что FreeBSD должна перейти на компилятор TenDRA, а не на GCC;
-
-Один заметит, что у лампочки отсутствует цоколь;
-
-Девять (включая авторов PR) спросят "что такое MFC?";
-
-Спустя две недели после смены лампочки пятьдесят семь человек сообщат о том, что света всё равно нет.
-
-_{nik} добавил:_
-
-_Я сильно смеялся над всем этим._
-
-_И тогда я подумал, "Постойте-ка, найдётся ли кто-нибудь, чтобы задокументировать это?"_
-
-_И на меня снизошло озарение :-)_
-
-_{tabthorpe}_ говорит: "Нет, _настоящие_ хакеры FreeBSD не боятся темноты!"
-
-[[dev-null]]
-=== Куда направляются данные, записываемые в /dev/null?
-
-Они отправляются в специальную сточную трубу для данных в CPU, где преобразуются в тепло, выдуваемое через охлаждающие вентиляторы. Вот почему охлаждение ЦП становится все более важным; так как люди используют все более быстрые процессоры, они все менее заботятся о данных, все большее их количество оканчивает свой путь в [.filename]#/dev/null#, перегревая ЦП. Если вы удалите [.filename]#/dev/null# (что соответственно отключит трубу данных в ЦП), то ваш процессор может охладиться, но система начнет переполняться излишними данными и начнет работать с ошибками. Если у вас быстрое сетевое подключение, вы можете охладить CPU, читая данные из [.filename]#/dev/random# и посылая их куда-нибудь; однако вы рискуете перегреть ваше сетевое соединение и [.filename]#/# или разозлить вашего провайдера, так как большинство данных преобразуется в тепло на его оборудовании, но, как правило, у него хорошее охлаждение, так что если вы не перестараетесь, все должно быть в порядке.
-
-_Пол Робинсон (Paul Robinson) добавляет:_
-
-Есть и другие методы. Как знает каждый хороший системный администратор, частью хорошей практики является посылка данных на экран интересным образом, чтобы феи, которые образуют картинку, были счастливы. Экранные феи (часто неправильно называемые "пикселами") различаются по цвету головных уборов, которые они носят (красные, зеленые или синие), и прячутся или появляются (показывая, таким образом, цвет своих шляп), когда получают немного пищи. Видеоадаптеры преобразуют данные в еду для фей, а затем посылают ее феям - чем дороже адаптер, тем лучше еда, тем лучше ведут себя феи. Они также нуждаются в постоянной стимуляции - вот зачем нужны хранители экранов.
-
-Продолжив наше предположение, вы можете просто выдавать случайные данные на консоль, таким образом позволяя феям их потреблять. Это вовсе приводит к прекращению выделения тепла, феи постоянно счастливы, а данные быстро исчезают, даже если на вашем экране все выглядит несколько хаотично.
-
-Как бывший администратор крупного провайдера, который имел много проблем при попытке поддерживать постоянную температуру в серверной комнате, я выступаю против того, чтобы люди посылали ненужные им данные в сеть. Волшебников, которые выполняют коммутацию пакетов и маршрутизацию, это также затрудняет.
-
-[[punk-my-friend]]
-=== Мой коллега проводит слишком много времени за компьютером.
-Как я могу отвадить его от этого?
-
-Установите пакет package:games/sl[] и дождитесь момента, когда коллега ошибочно
-введёт `sl` вместо `ls`.
-
-== Сложные темы
-
-[[learn-advanced]]
-=== Как можно узнать больше о внутреннем устройстве FreeBSD?
-
-Обратитесь к extref:{arch-handbook}[Руководству по архитектуре FreeBSD].
-
-Кроме того, большинство общих знаний о UNIX(R) непосредственно применимо к FreeBSD.
-
-[[how-to-contribute]]
-=== Как внести свой вклад в проект FreeBSD? Что можно сделать в качестве помощи?
-
-Мы принимаем помощь в любой форме: документации, кода и даже
-художественной графики. Обратитесь к соответствующей статье
-extref:{contributing}[Участие в проекте FreeBSD], в которой вы найдёте советы
-относительно того, как это сделать.</para>
-
-И спасибо вам за то, что вы об этом подумали!
-
-[[define-snap-release]]
-=== Что такое снапшоты и релизы?
-
-В http://cgit.FreeBSD.org/src/[хранилище Git] сейчас находятся {rel-numbranch} активно/полуактивно развивающихся ветки FreeBSD.
-(Более ранние ветки изменяются очень редко, именно поэтому в разработке только {rel-numbranch} активные ветки):
-
-* {rel2-releng}, также известная как {rel2-stable}
-* {rel-releng}, также известная как {rel-stable}
-* {rel-head-releng}, также известная как _-CURRENT_ и {rel-head}
-
-На данный момент _-CURRENT_ является находящимся в разработке деревом
-{rel-head-relx}; ветка {rel-stable}, {rel-releng}, отделилась от _-CURRENT_
-{rel-relengdate}, а ветка {rel2-stable}, {rel2-releng}, отделилась от
-_-CURRENT_ {rel2-relengdate}.
-
-=== Что делать при аварийном останове системы?
-
-Вот типичная паника ядра:
-
-[.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
-....
-
-Этого сообщения не достаточно.
-Хотя значение указателя инструкций важно, но оно зависит от конфигурации, поскольку значение меняется для каждого конкретного файла ядра.
-Если это ядро [.filename]#GENERIC# из одного из снэпшотов, то кто-то ещё может отследить функцию, вызвавшую ошибку, но в случае со специально сконфигурированным ядром только вы можете сказать нам, где случилась ошибка.
-
-Чтобы продолжить:
-
-[.procedure]
-====
-. Запишите значение указателя инструкций.
-Заметьте, что часть `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
-....
-+
-Если и это не привело ни к каким результатам, отрежьте следующую цифру. Повторяйте, пока не получите хоть что-то. Результатом будет список функций, которые, возможно, привели к аварийному останову. Этот механизм обнаружения ошибочного места довольно неточен, но это всё же лучше, чем ничего.
-====
-
-Тем не менее, лучшим способом выяснить причину, вызвавшую аварийный останов, является получение аварийного дампа системы, а затем использование man:kgdb[1] для получения трассировки вызовов в этом дампе.
-
-В любом случае, метод таков:
-
-[.procedure]
-====
-. Убедитесь в том, что в файле конфигурации ядра имеется следующая строка:
-+
-[.programlisting]
-....
-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-....
-+
-. Перейдите в каталог [.filename]#/usr/src#:
-+
-[source,shell]
-....
-# cd /usr/src
-....
-+
-. Скомпилируйте ядро:
-+
-[source,shell]
-....
-# make buildkernel KERNCONF=MYKERNEL
-....
-+
-. Дождитесь завершения компиляции.
-+
-[source,shell]
-....
-# make installkernel KERNCONF=MYKERNEL
-....
-+
-. Выполните перезагрузку.
-====
-
-[NOTE]
-====
-Если не указать `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].
-
-Чтобы получать аварийный дамп, отредактируйте файл [.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]
-====
-Аварийные дампы FreeBSD обычно имеют размер, равный объёму оперативной памяти. Поэтому убедитесь в наличии достаточного места для хранения дампа в каталоге [.filename]#/var/crash#. Либо запустите вручную man:savecore[8], чтобы создать аварийный дамп в другом каталоге, где достаточно места. Размер аварийного дампа можно уменьшить, указав в конфигурации ядра `options MAXMEM=N`, где _N_ - значение в Кбайт для объёма памяти, которое будет использоваться ядром. Например, для 1 Гбайт ОЗУ установите ограничение на использование памяти ядром в 128 Мбайт, так чтобы размер аварийного дампа был равен 128 Мбайт, а не 1 Гбайт.
-====
-
-Как только аварийный дамп получен, трассировку вызовов можно получить таким образом:
-
-[source,shell]
-....
-% kgdb /usr/obj/usr/src/sys/MYKERNEL/kernel.debug /var/crash/vmcore.0
-(kgdb) backtrace
-....
-
-Заметьте, что это может дать несколько экранов полезной информации. Лучше всего использовать man:script[1] для перехвата всего вывода. При использовании необработанного файла ядра со всей отладочной информацией может быть найдена конкретная строка исходного текста ядра, при достижении которой случилась аварийная остановка. Для выяснения последовательности событий, приведших к аварийному останову, трассировка стека обычно читается снизу вверх. Также можно использовать man:kgdb[1] для вывода значений различных переменных или структур, чтобы выяснить состояние системы во время аварии.
-
-[TIP]
-====
-
-Если есть второй компьютер, то можно настроить man:kgdb[1] на режим удалённой отладки, включая определение точек останова и пошаговый проход по коду ядра.
-====
-
-[NOTE]
-====
-Если включена поддержка `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 этого может быть недостаточно.
-
-Чтобы увеличить доступное пространство, добавьте следующую строку в файл конфигурации ядра и пересоберите ядро:
-
-[.programlisting]
-....
-options KVA_PAGES=N
-....
-
-Чтобы получить нужное значение для _N_, разделите желаемый размер адресного пространства (в мегабайтах) на четыре (для 2 Гбайт это будет `512`).
+Более длинный и полный ответ заключается в том, что после долгих споров о том, должна ли команда man:sleep[1] принимать аргументы в виде дробных секунд, {phk} опубликовал длинное сообщение под названием link:http://www.bikeshed.com[Велосипедный сарай (любого цвета) на более зелёной траве...].
[[acknowledgments]]
-== Наши благодарности
-
-Этот небольшой скромный документ с ответами на часто задаваемые вопросы создавался, переписывался, редактировался, сокращался, растягивался, уродовался, потрошился, пристально разглядывался, полностью перетряхивался, обдумывался, отвергался, перестраивался, критиковался и снова укреплялся в течение последнего десятилетия силами сотен, если не тысяч, людей.
-Постоянно.
+== Благодарности
-Мы хотим поблагодарить каждого из них и приглашаем вас
-extref:{contributing}[присоединиться к ним], чтобы сделать этот FAQ ещё лучше.
+Этот FAQ претерпел бесчисленные правки и улучшения благодаря разнообразной группе участников на протяжении последних десятилетий.
diff --git a/documentation/content/ru/books/faq/_index.po b/documentation/content/ru/books/faq/_index.po
new file mode 100644
index 0000000000..421abd6349
--- /dev/null
+++ b/documentation/content/ru/books/faq/_index.po
@@ -0,0 +1,1811 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-06-29 21:20+0100\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfaq_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\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 "Часто задаваемые вопросы по FreeBSD"
+
+#. 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 ""
+"Это Часто Задаваемые Вопросы (FAQ) по FreeBSD. Были приложены все усилия, "
+"чтобы сделать это руководство максимально информативным."
+
+#. 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 ""
+"Добро пожаловать в мир FreeBSD! В этом разделе представлен обзор системы "
+"FreeBSD: что это такое, её происхождение, цели, варианты использования и "
+"сообщество, стоящее за ней."
+
+#. 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 ""
+"Узнайте причины выбора этого названия, научитесь участвовать в разработке "
+"проекта и изучите богатую экосистему FreeBSD в контексте открытых "
+"операционных систем."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:63
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr "Что такое FreeBSD?"
+
+#. 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 ""
+"FreeBSD — это универсальная и открытая операционная система, подобная "
+"UNIX(R), известная своей исключительной стабильностью, безопасностью и "
+"производительностью. Разрабатываемая преданным сообществом добровольцев, "
+"она основана на операционной системе Berkeley Software Distribution (BSD) "
+"UNIX."
+
+#. 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 ""
+"FreeBSD предоставляет мощную и настраиваемую среду, подходящую для широкого "
+"спектра применений — от серверов и встраиваемых систем до настольных "
+"компьютеров и сетевого оборудования. Приверженность принципам открытого "
+"исходного кода обеспечивает прозрачный и совместный процесс разработки, что "
+"делает FreeBSD надежным выбором для тех, кто ищет стабильную и "
+"высокоадаптируемую операционную систему."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:72
+#, no-wrap
+msgid "Why is it called FreeBSD?"
+msgstr "Почему система называется FreeBSD?"
+
+#. 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 ""
+"Название \"FreeBSD\" происходит от его корней в операционной системе UNIX "
+"Berkeley Software Distribution (BSD), известной своим вкладом в мир "
+"открытого программного обеспечения. Слово \"Free\" в FreeBSD подчеркивает "
+"приверженность принципам свободного и открытого программного обеспечения, "
+"которые предоставляют пользователям свободу изучать, изменять и "
+"распространять исходный код."
+
+#. 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 ""
+"Стоит отметить, что слово «free» здесь используется в двух значениях: одно "
+"означает «бесплатно», а другое — «делай что хочешь»."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:80
+#, no-wrap
+msgid "What is the goal of the FreeBSD Project?"
+msgstr "Какова цель проекта FreeBSD?"
+
+#. 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 ""
+"Проект FreeBSD преследует ясную и непоколебимую цель: предоставить "
+"высококачественную UNIX-подобную операционную систему с открытым исходным "
+"кодом, которая отличается высокой производительностью, безопасностью и "
+"стабильностью."
+
+#. 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 ""
+"Он стремится предоставить универсальную платформу, подходящую для широкого "
+"спектра вычислительных задач — от серверов и рабочих станций до встраиваемых "
+"систем и не только. FreeBSD разрабатывается с твердой приверженностью "
+"принципам открытого исходного кода, создавая среду для сотрудничества, в "
+"которой вклад глобального сообщества разработчиков помогает формировать и "
+"совершенствовать операционную систему. Эта приверженность качеству, свободе "
+"и надежности отличает FreeBSD и способствует её постоянному успеху как "
+"проекта с открытым исходным кодом."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:89
+#, no-wrap
+msgid "What uses cases is FreeBSD good for?"
+msgstr "Для каких задач подходит FreeBSD?"
+
+#. 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 ""
+"FreeBSD — это универсальная операционная система, которая превосходно "
+"подходит для различных сценариев использования. Она особенно хорошо "
+"зарекомендовала себя в серверных средах, где её стабильность и "
+"производительность делают её популярным выбором для веб-хостинга, баз данных "
+"и сетевых приложений. Надёжные механизмы безопасности FreeBSD также делают "
+"её отличным вариантом для развёртывания межсетевых экранов и защищённых "
+"устройств. Помимо серверов, FreeBSD может быть адаптирована для работы в "
+"специализированных средах, включая встраиваемые системы и игровые консоли. "
+"Её гибкость, надёжность и открытый исходный код делают FreeBSD "
+"привлекательным выбором для широкого спектра вычислительных задач."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:98
+#, no-wrap
+msgid "Who is responsible for FreeBSD?"
+msgstr "Кто отвечает за FreeBSD?"
+
+#. 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 ""
+"FreeBSD - это проект с открытым исходным кодом, развиваемый сообществом и "
+"имеющий децентрализованную структуру. Его разработка и поддержка "
+"осуществляются глобальным сообществом преданных добровольцев, разработчиков "
+"и организаций, которые совместно работают над улучшением и расширением "
+"возможностей операционной системы."
+
+#. 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 an elected Core Team of nine people."
+msgstr ""
+"Ключевые решения, касающиеся проекта FreeBSD, такие как общее направление "
+"развития проекта или право на добавление кода в дерево исходных текстов, "
+"принимаются избираемой командой разработчиков (Core Team) из девяти человек."
+
+#. 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 ""
+"Этот совместный и ориентированный на сообщество подход был основополагающим "
+"для успеха и долголетия FreeBSD в качестве надежной и устойчивой UNIX-"
+"подобной операционной системы."
+
+#. 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 "Как я могу внести свой вклад в FreeBSD? Чем я могу помочь?"
+
+#. 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 ""
+"Мы принимаем все виды вкладов: документацию, код и даже произведения "
+"искусства. Конкретные рекомендации о том, как это сделать, смотрите в "
+"статье extref:{contributing}[Участие в разработке FreeBSD]."
+
+#. 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 "Есть ли ограничения в лицензии FreeBSD?"
+
+#. 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 ""
+"FreeBSD распространяется под лицензией https://www.FreeBSD.org/copyright/"
+"freebsd-license/[BSD License], известной своим разрешительным характером."
+
+#. 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 ""
+"Данная лицензия накладывает очень мало ограничений на использование FreeBSD:"
+
+#. 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 ""
+"Лицензия означает, что вы можете свободно изменять, распространять и даже "
+"продавать FreeBSD, *не будучи обязанным публиковать свои изменения как "
+"открытый исходный код*. Однако есть несколько минимальных условий, таких "
+"как сохранение оригинального уведомления об авторских правах и отказ от "
+"гарантий при распространении FreeBSD. В целом, лицензия BSD предоставляет "
+"высокую степень свободы и гибкости, что делает FreeBSD привлекательным "
+"выбором для широкого спектра приложений и проектов."
+
+#. 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 ""
+"Код в нашем дереве исходников, подпадающий под действие https://www.FreeBSD."
+"org/copyright/COPYING[GNU General Public License (GPL)] или https://www."
+"FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public License "
+"(LGPL)], сопровождается несколько большими ограничениями, по крайней мере, в "
+"части обеспечения доступа, в отличие от обычной противоположной ситуации."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:133
+#, no-wrap
+msgid "Can FreeBSD replace my current operating system?"
+msgstr "Может ли FreeBSD заменить мою текущую операционную систему?"
+
+#. 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 ""
+"FreeBSD — это мощная и универсальная операционная система, которая может "
+"заменить или сосуществовать с множеством других операционных систем в "
+"зависимости от конкретных потребностей пользователей и администраторов. "
+"Однако возможность замены вашей текущей операционной системы на FreeBSD "
+"зависит от таких факторов, как ваше оборудование, требования к программному "
+"обеспечению и уровень знакомства с FreeBSD."
+
+#. 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 ""
+"Пользователи, переходящие на FreeBSD из другой UNIX-подобной среды, найдут "
+"FreeBSD похожей. Пользователи, не знакомые с UNIX, например пользователи "
+"Windows(R), должны быть готовы потратить дополнительное время на изучение "
+"принципов работы UNIX."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:149
+#, no-wrap
+msgid "Can FreeBSD run popular open source software?"
+msgstr "Может ли FreeBSD запускать популярное открытое программное обеспечение?"
+
+#. 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 ""
+"Да, FreeBSD хорошо подходит для запуска популярного открытого программного "
+"обеспечения. Его совместимость с широким спектром приложений и библиотек "
+"делает его предпочтительным выбором для тех, кто хочет развертывать и "
+"использовать пакеты открытого ПО. FreeBSD предоставляет надежную и "
+"стабильную среду, поддерживающую различные языки программирования, базы "
+"данных, веб-серверы и другое ПО, часто используемое в сообществе открытого "
+"исходного кода. Система портов и пакетов FreeBSD упрощает установку и "
+"управление таким ПО, гарантируя, что пользователи могут легко получить "
+"доступ и запускать свои любимые открытые инструменты и приложения на FreeBSD "
+"с минимальными трудностями."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:157
+#, no-wrap
+msgid "How can I install software in FreeBSD?"
+msgstr "Как установить программное обеспечение в FreeBSD?"
+
+#. 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 ""
+"FreeBSD предоставляет несколько методов установки программного обеспечения. "
+"Один из наиболее распространённых методов — использование встроенного "
+"менеджера пакетов man:pkg[8], который упрощает процесс, загружая и "
+"устанавливая предварительно собранные бинарные пакеты. Другой подход — "
+"компиляция и установка программ из исходного кода с использованием коллекции "
+"man:ports[7], что обеспечивает гибкий и настраиваемый способ установки "
+"программного обеспечения."
+
+#. 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 ""
+"Документация FreeBSD предоставляет подробные руководства по обоим методам, "
+"гарантируя, что пользователи смогут легко расширить возможности своей "
+"системы с помощью необходимого программного обеспечения."
+
+#. 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 "Каковы различия между FreeBSD, NetBSD, OpenBSD и другими открытыми BSD-операционными системами?"
+
+#. 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 ""
+"FreeBSD, NetBSD, OpenBSD и DragonFly BSD - все они являются частью семейства "
+"BSD с открытым исходным кодом, разделяя общие UNIX-подобные основы, но "
+"каждый имеет свою собственную направленность и приоритеты. Эти различия "
+"отражают уникальные цели каждого проекта, и хотя они имеют сходства, их "
+"конкретные сильные стороны и акценты ориентированы на различные сценарии "
+"использования и предпочтения в экосистеме BSD."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:172
+#, no-wrap
+msgid "Is FreeBSD a Linux(R) distribution?"
+msgstr "Является ли FreeBSD дистрибутивом Linux(R)?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:175
+msgid "No, FreeBSD is *not* a Linux distribution."
+msgstr "Нет, FreeBSD *не* является дистрибутивом Linux."
+
+#. 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 ""
+"Хотя FreeBSD и Linux являются UNIX-подобными операционными системами и имеют "
+"много общего, у них разные ядра. Linux использует ядро Linux, тогда как "
+"FreeBSD использует ядро FreeBSD, основанное на операционной системе Berkeley "
+"Software Distribution (BSD) UNIX."
+
+#. 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 ""
+"FreeBSD и Linux имеют свои уникальные сообщества разработчиков, циклы "
+"выпуска версий и архитектуры систем, что делает их отдельными и независимыми "
+"операционными системами."
+
+#. 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 ""
+"FreeBSD предоставляет свои собственные преимущества, включая отличную модель "
+"лицензирования, дизайн системы и пользовательские утилиты по сравнению с "
+"дистрибутивами Linux."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:184
+#, no-wrap
+msgid "Is it possible to run Linux programs on FreeBSD?"
+msgstr "Возможно ли запускать Linux-программы в FreeBSD?"
+
+#. 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 ""
+"Да, FreeBSD предоставляет слой совместимости, известный как _linuxulator_ "
+"(man:linux[4]), который позволяет многим Linux-программам работать в "
+"FreeBSD. Эта функция обеспечивает выполнение широкого спектра Linux-"
+"бинарников без необходимости в отдельной Linux-среде."
+
+#. 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 ""
+"Тем не менее, важно отметить, что множество широко используемых программ с "
+"открытым исходным кодом *имеют собственные версии для FreeBSD*, доступные "
+"через систему портов и пакетов."
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:192
+#, no-wrap
+msgid "Installing FreeBSD"
+msgstr "Установка FreeBSD"
+
+#. 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 ""
+"Процесс установки FreeBSD — это первый шаг к использованию возможностей этой "
+"мощной операционной системы с открытым исходным кодом. В этом разделе "
+"представлена важная информация о том, где получить FreeBSD, подробные "
+"инструкции по установке, а также объяснение таких концепций, как FreeBSD-"
+"CURRENT и FreeBSD-STABLE. Также рассматриваются график выпуска релизов и "
+"снимков (snapshots), инструменты настройки после установки, методы поиска "
+"пакетов и ответы на часто задаваемые вопросы об обновлении пакетов."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:199
+#, no-wrap
+msgid "Where can I get FreeBSD?"
+msgstr "Где взять FreeBSD?"
+
+#. 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 ""
+"FreeBSD доступна для бесплатной загрузки по ссылке: link:https://www.FreeBSD."
+"org/where/[официальный сайт FreeBSD]."
+
+#. 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 ""
+"Кроме того, FreeBSD также может быть доступен через различные зеркальные "
+"сайты, что обеспечивает доступность для пользователей по всему миру. "
+"Основным и наиболее надежным источником для получения последних выпусков и "
+"обновлений FreeBSD является link:https://www.FreeBSD.org/where/[официальный "
+"сайт], что делает его идеальной отправной точкой для начала работы с FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:207
+#, no-wrap
+msgid "Where are the instructions for installing FreeBSD?"
+msgstr "Где находятся инструкции по установке FreeBSD?"
+
+#. 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 ""
+"Инструкции по установке можно найти в главе extref:{handbook}bsdinstall/"
+"[Установка FreeBSD Руководства]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:212
+#, no-wrap
+msgid "What is the FreeBSD-CURRENT concept?"
+msgstr "Что такое концепция FreeBSD-CURRENT?"
+
+#. 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 ""
+"FreeBSD-CURRENT представляет собой ветку разработки операционной системы "
+"FreeBSD. Это самая передовая версия FreeBSD, в которой ведётся активная "
+"разработка."
+
+#. 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 ""
+"Хотя он включает последние функции, улучшения и экспериментальные изменения, "
+"он не всегда может быть таким стабильным, как FreeBSD-STABLE или релизные "
+"версии."
+
+#. 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 ""
+"FreeBSD-CURRENT — это платформа для разработчиков и энтузиастов, которые "
+"хотят внести свой вклад в будущее FreeBSD и оставаться на переднем крае её "
+"разработки, даже несмотря на то, что в ней могут иногда происходить "
+"значительные изменения и *она не рекомендуется для производственных систем*."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:222
+#, no-wrap
+msgid "What is the FreeBSD-STABLE concept?"
+msgstr "Что такое концепция FreeBSD-STABLE?"
+
+#. 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 ""
+"Ветка FreeBSD-STABLE — это более стабильная ветка разработки по сравнению с "
+"CURRENT. Она содержит код, который проходит дополнительные тестирование и "
+"доработку перед слиянием в ветку RELEASE. STABLE — хороший выбор для тех, "
+"кто хочет следить за разработкой FreeBSD, но предпочитает более стабильную "
+"среду, чем CURRENT."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:229
+#, no-wrap
+msgid "When are FreeBSD releases made of?"
+msgstr "Когда выходят выпуски FreeBSD?"
+
+#. 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 ""
+"Версия {re} выпускает новую основную версию FreeBSD примерно каждые 18 "
+"месяцев и новую промежуточную версию — в среднем каждые 8 месяцев. Даты "
+"выпуска объявляются заранее, чтобы разработчики знали, когда их проекты "
+"должны быть завершены и протестированы. Перед каждым выпуском проводится "
+"период тестирования, чтобы убедиться, что добавление новых функций не "
+"нарушает стабильность релиза."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:236
+#, no-wrap
+msgid "When are FreeBSD snapshots made?"
+msgstr "Когда создаются снимки состояния FreeBSD?"
+
+#. 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 ""
+"Снимки FreeBSD обычно создаются с регулярными интервалами для всех активно "
+"разрабатываемых веток. Эти снимки фиксируют состояние исходного кода "
+"FreeBSD и связанных с ним бинарных пакетов на определённый момент времени. "
+"Частота создания снимков может варьироваться, но обычно они делаются "
+"еженедельно или раз в две недели. Эти снимки предоставляют пользователям "
+"возможность получить доступ к последним изменениям и разработкам в FreeBSD, "
+"помогая им оставаться в курсе прогресса проекта."
+
+#. 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 ""
+"Да. man:bsdconfig[8] предоставляет удобный интерфейс для настройки FreeBSD "
+"после установки."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:249
+#, no-wrap
+msgid "How can I search for software to install in FreeBSD?"
+msgstr "Как найти программное обеспечение для установки в FreeBSD?"
+
+#. 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 ""
+"Поиск программного обеспечения для установки в FreeBSD упрощается благодаря "
+"менеджеру пакетов man:pkg[8] и команде `pkg search`."
+
+#. 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 ""
+"Пользователи могут использовать эту команду для поиска доступных пакетов по "
+"ключевым словам, названиям пакетов или описаниям. Эта функция помогает "
+"быстро найти нужное программное обеспечение в обширной коллекции портов и "
+"пакетов FreeBSD, упрощая процесс добавления новых приложений и инструментов "
+"в систему FreeBSD."
+
+#. 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 "Почему я не получаю последние пакеты в моей системе FreeBSD?"
+
+#. 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 ""
+"Доступность последних пакетов в FreeBSD может зависеть от различных "
+"факторов, включая частоту обновлений репозитория пакетов и используемую "
+"версию FreeBSD."
+
+#. 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 ""
+"Также следует отметить, что для портов FreeBSD существуют две ветки. "
+"Наиболее обновляемая называется `latest`, а наиболее стабильная — "
+"`quarterly`. Для использования самых свежих пакетов необходимо настроить "
+"ветку `latest`. Информацию о настройке веток можно найти в link:{handbook}"
+"ports/[главе о портах в Руководстве]."
+
+#. 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 ""
+"В разделе «Оборудование» рассматривается совместимость FreeBSD с различными "
+"аппаратными конфигурациями. Он охватывает широкий круг тем, включая "
+"поддерживаемые архитектуры, максимальный объем оперативной памяти, "
+"масштабируемость процессоров, совместимость с видеокартами, поддержку Wi-Fi-"
+"адаптеров, а также работу с сетевыми картами 10 Gigabit Ethernet. "
+"Независимо от того, планируется ли развертывание FreeBSD на серверах, "
+"рабочих станциях или специализированном оборудовании, этот раздел дает "
+"представление о возможностях и ограничениях FreeBSD, предоставляя информацию "
+"о выборе и настройке оборудования."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:274
+#, no-wrap
+msgid "What architectures does FreeBSD support?"
+msgstr "Какие архитектуры поддерживает FreeBSD?"
+
+#. 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 ""
+"FreeBSD поддерживает широкий спектр архитектур, что делает его гибким "
+"выбором для различных аппаратных сред. Совместимость распространяется на "
+"такие архитектуры, как `amd64`, `arm64`, `riscv` и другие."
+
+#. 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 ""
+"Полный список поддерживаемых архитектур можно найти на странице link:https://"
+"www.FreeBSD.org/platforms/[платформ]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:282
+#, no-wrap
+msgid "How much RAM does FreeBSD support?"
+msgstr "Сколько оперативной памяти поддерживает FreeBSD?"
+
+#. 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 ""
+"FreeBSD как операционная система обычно поддерживает столько же физической "
+"памяти (RAM), сколько и платформа, на которой она работает. Следует "
+"учитывать, что разные платформы имеют разные ограничения по памяти."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:288
+msgid "For example, `amd64` platforms support up to 4TB of physical memory."
+msgstr "Например, платформы `amd64` поддерживают до 4 ТБ физической памяти."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:290
+#, no-wrap
+msgid "How many processors does FreeBSD support?"
+msgstr "Сколько процессоров поддерживает FreeBSD?"
+
+#. 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 ""
+"Поддержка процессоров в FreeBSD варьируется в зависимости от архитектуры. "
+"На системах amd64 и arm64 FreeBSD может эффективно использовать до 1024 "
+"процессоров. На системах с архитектурой powerpc FreeBSD поддерживает до 256 "
+"процессоров, а на системах risc-v — до 16 процессоров."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:297
+#, no-wrap
+msgid "What graphics cards does FreeBSD support?"
+msgstr "Какие графические карты поддерживает FreeBSD?"
+
+#. 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 ""
+"Известные производители графических устройств, такие как Intel(R), AMD(R) "
+"или NVIDIA(R), хорошо поддерживаются."
+
+#. 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 ""
+"Список поддерживаемых видеокарт от link:https://wiki.freebsd.org/Graphics/"
+"Intel-GPU-Matrix[Intel] и link:https://wiki.freebsd.org/Graphics/AMD-GPU-"
+"Matrix[AMD] можно найти в FreeBSD Wiki."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:304
+#, no-wrap
+msgid "What Wi-Fi cards does FreeBSD support?"
+msgstr "Какие Wi-Fi карты поддерживает FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:307
+msgid ""
+"This is a rapidly changing area as of 2025, so it's worth checking the "
+"Hardware Compatibility List for your chosen link:https://www.freebsd.org/"
+"releases/[release]."
+msgstr ""
+"Это область, которая быстро меняется по состоянию на 2025 год, поэтому "
+"рекомендуется проверить Список совместимого оборудования для выбранного "
+"link:https://www.freebsd.org/releases/[релиза]."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:309
+msgid "The list of PCIe Wi-Fi devices that are known to work well on FreeBSD:"
+msgstr "Список устройств PCIe Wi-Fi, которые хорошо работают в FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:311
+msgid ""
+"Intel chipset devices covered by man:iwlwifi[4] (high-speed as of FreeBSD "
+"14.3)"
+msgstr ""
+"Устройства на чипсетах Intel, поддерживаемые man:iwlwifi[4] ("
+"высокоскоростные — начиная с FreeBSD 14.3)"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:312
+msgid "Realtek RTL8188CE Mini PCIe"
+msgstr "Realtek RTL8188CE Mini PCIe"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:314
+msgid "The list of USB Wi-Fi devices that are known to work well on FreeBSD:"
+msgstr "Список USB Wi-Fi устройств, которые хорошо работают в FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:316
+msgid "RT5370 USB dongles (supports hostap mode)"
+msgstr "USB-адаптеры RT5370 (поддерживают режим hostap)"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:317
+msgid "TP-Link TL-WDN3200 (RT5592, man:if_run[4])"
+msgstr "TP-Link TL-WDN3200 (RT5592, man:if_run[4])"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:318
+msgid "TP-Link TL-WN725N v2 (RTL8188EU, man:rtwn[4])"
+msgstr "TP-Link TL-WN725N v2 (RTL8188EU, man:rtwn[4])"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:319
+msgid "TP-Link Archer T4U (RTL8812AU, man:rtwn[4])"
+msgstr "TP-Link Archer T4U (RTL8812AU, man:rtwn[4])"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:320
+msgid "D-Link DWA-131 (RTL8192CU, man:rtwn[4])"
+msgstr "D-Link DWA-131 (RTL8192CU, man:rtwn[4])"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:321
+msgid "D-Link DWA-171 rev A1 (RTL8821AU, man:rtwn[4])"
+msgstr "D-Link DWA-171 rev A1 (RTL8821AU, man:rtwn[4])"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:322
+msgid "ASUS USB-N10 NANO (RTL8188CUS, man:rtwn[4])"
+msgstr "ASUS USB-N10 NANO (RTL8188CUS, man:rtwn[4])"
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:325
+#, no-wrap
+msgid "Does FreeBSD support 10 Gigabit Ethernet network cards?"
+msgstr "Поддерживает ли FreeBSD сетевые карты 10 Gigabit Ethernet?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:329
+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 ""
+"FreeBSD обеспечивает надежную поддержку сетевых карт 10 Gigabit Ethernet, "
+"что делает его подходящим выбором для высокоскоростных сетевых сред. Ядро "
+"FreeBSD включает драйверы для широкого спектра адаптеров 10 Gigabit Ethernet "
+"от различных производителей, гарантируя беспрерывную интеграцию и "
+"оптимальную производительность сети."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:331
+msgid ""
+"More information can be obtained at the link:https://wiki.freebsd.org/"
+"Networking/10GbE[FreeBSD Wiki]."
+msgstr ""
+"Дополнительную информацию можно получить по ссылке: link:https://wiki."
+"freebsd.org/Networking/10GbE[FreeBSD Wiki]."
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:333
+#, no-wrap
+msgid "Documentation and Support"
+msgstr "Документация и Поддержка"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:337
+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 ""
+"В этом разделе представлены полезные ресурсы для тех, кто хочет углубить "
+"свои знания о FreeBSD. Здесь рассматриваются различные темы, включая "
+"рекомендуемые книги для изучения FreeBSD, варианты коммерческого обучения и "
+"поддержки, информацию о понимании внутреннего устройства FreeBSD, а также о "
+"том, где можно получить помощь в сообществе FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:339
+#, no-wrap
+msgid "What good books are there about FreeBSD?"
+msgstr "Какие есть хорошие книги о FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:343
+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 ""
+"Энтузиасты и изучающие FreeBSD могут ознакомиться с разнообразными "
+"информативными книгами, посвящёнными этой операционной системе. Эти книги "
+"охватывают темы от основ FreeBSD до продвинутого системного "
+"администрирования и разработки."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:346
+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 ""
+"Некоторые примечательные книги включают *\"FreeBSD: Подробное руководство"
+"\" (\"Absolute FreeBSD: The Complete Guide To FreeBSD\")* Майкла В. Лукаса и "
+"серию *\"FreeBSD Mastery\"* того же автора, среди прочих. Эти ресурсы "
+"предоставляют ценные знания и помогают пользователям любого уровня освоить "
+"FreeBSD и раскрыть её потенциал."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:348
+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 ""
+"Помимо книг, проект FreeBSD создает обширную документацию, доступную онлайн "
+"на портале link:https://docs.FreeBSD.org/[Документация]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:350
+#, no-wrap
+msgid "Where can I get commercial FreeBSD training and support?"
+msgstr "Где можно получить коммерческое обучение и поддержку FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:354
+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 ""
+"Для тех, кто ищет профессиональное обучение и поддержку по FreeBSD, "
+"несколько коммерческих поставщиков предлагают индивидуальные услуги. Проект "
+"FreeBSD ведет link:https://www.freebsd.org/commercial/[список компаний], у "
+"которых можно запросить поддержку."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:356
+#, no-wrap
+msgid "How can I learn more about FreeBSD's internals?"
+msgstr "Как можно узнать больше о внутреннем устройстве FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:360
+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 ""
+"Для более глубокого изучения внутреннего устройства FreeBSD заинтересованные "
+"лица могут обратиться к таким ресурсам, как \"FreeBSD: Дизайн и архитектура "
+"(The Design And Implementation Of The FreeBSD Operating System)\". Ещё "
+"одним ценным источником информации является extref:{arch-handbook}"
+"[Руководство по архитектуре FreeBSD], который предоставляет подробные "
+"сведения об архитектуре FreeBSD, организации системы и принципах "
+"проектирования"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:362
+msgid ""
+"Additionally, reviewing the FreeBSD source code, available through the "
+"FreeBSD source repository, provides valuable insights into the operating "
+"system's core components."
+msgstr ""
+"Кроме того, изучение исходного кода FreeBSD, доступного в репозитории "
+"исходных текстов FreeBSD, дает ценное представление об основных компонентах "
+"операционной системы."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:364
+#, no-wrap
+msgid "How can I get help in a FreeBSD system?"
+msgstr "Как получить помощь в системе FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:369
+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 ""
+"Получить помощь в системе FreeBSD довольно просто. FreeBSD предоставляет "
+"обширную встроенную документацию, доступную через команду man:man[1], "
+"которая содержит подробную информацию о различных командах и компонентах "
+"системы."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:371
+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 ""
+"Кроме того, extref:{handbook}[Руководство FreeBSD], доступное как онлайн, "
+"так и локально в системе, служит ценным ресурсом для получения подробных "
+"инструкций."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:373
+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 ""
+"Если возникают конкретные проблемы, можно обратиться за помощью в сообщество "
+"FreeBSD через списки рассылки, форумы или IRC, чтобы получить своевременные "
+"решения и советы от опытных пользователей и разработчиков FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:375
+#, no-wrap
+msgid "Community Questions"
+msgstr "Вопросы о сообществе"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:378
+msgid ""
+"Explore this section to discover ways to engage with the FreeBSD community."
+msgstr ""
+"Изучите этот раздел, чтобы узнать о способах взаимодействия с сообществом "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:381
+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 ""
+"Узнайте о каналах FreeBSD в IRC для обсуждений в реальном времени, веб-"
+"форумах для обмена мнениями, а также о почтовых рассылках и группах новостей "
+"FreeBSD для углубленных обсуждений и получения обновлений."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:383
+#, no-wrap
+msgid "Are there FreeBSD IRC (Internet Relay Chat) channels?"
+msgstr "Есть ли каналы FreeBSD в IRC (Internet Relay Chat)?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:386
+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 ""
+"Да, большинство крупных IRC-сетей имеют канал для обсуждения FreeBSD, а на "
+"вики FreeBSD доступен актуальный link:https://wiki.freebsd.org/IRC/"
+"Channels[список IRC-каналов]."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:389
+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:391
+#, no-wrap
+msgid "Are there any web based forums to discuss FreeBSD?"
+msgstr "Есть ли веб-форумы для обсуждения FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:394
+msgid ""
+"The official FreeBSD forums are located at the link:https://forums.FreeBSD."
+"org/[FreeBSD Forums homepage]."
+msgstr ""
+"Официальные форумы FreeBSD расположены по ссылке: link:https://forums."
+"FreeBSD.org/[Домашняя страница форумов FreeBSD]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:396
+#, no-wrap
+msgid "Where do I find info on the FreeBSD mailing lists?"
+msgstr "Где найти информацию о списках рассылки FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:399
+msgid ""
+"The public mailing lists can be found at the link:https://lists.freebsd.org/"
+"[FreeBSD mailing lists]."
+msgstr ""
+"Списки рассылки с открытым доступом можно найти по ссылке: link:https://"
+"lists.freebsd.org/[списки рассылки FreeBSD]."
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:401
+#, no-wrap
+msgid "Miscellaneous Questions"
+msgstr "Разные вопросы"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:404
+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 ""
+"Изучите множество интересных и практичных вопросов о FreeBSD, начиная от "
+"выбора оболочки (shell) до особенностей системы и даже имени питомца FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:406
+#, no-wrap
+msgid "Why is /bin/sh so minimal? Why does FreeBSD not use bash or another shell?"
+msgstr "Почему /bin/sh такой минималистичный? Почему FreeBSD не использует bash или другую оболочку?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:412
+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 ""
+"Многие люди сталкиваются с необходимостью написания сценариев командной "
+"оболочки, которые будут переносимы между различными системами. Именно "
+"поэтому POSIX(R) детально определяет стандарты для оболочки и утилит. "
+"Большинство сценариев пишутся на Bourne shell (man:sh[1]), так как несколько "
+"важных программных интерфейсов требуют использования Bourne shell для "
+"интерпретации команд. Поскольку Bourne shell так часто и широко "
+"применяется, важно, чтобы он быстро запускался, имел предсказуемое поведение "
+"и требовал мало памяти."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:415
+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 ""
+"Существующая реализация — это наш наилучший подход к одновременному "
+"удовлетворению как можно большего числа этих требований. Чтобы сохранить `/"
+"bin/sh` компактным, мы не добавили многие удобные функции, которые есть в "
+"других оболочках."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:417
+msgid ""
+"That is why other more featureful shells like `bash`, `scsh`, man:tcsh[1], "
+"and `zsh` are available."
+msgstr ""
+"Вот почему доступны другие, более функциональные оболочки, такие как `bash`, "
+"`scsh`, man:tcsh[1] и `zsh`."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:419
+#, no-wrap
+msgid "How do I use my delete key in sh and csh?"
+msgstr "Как использовать клавишу Delete в sh и csh?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:422
+msgid "For the Bourne Shell, add the following lines to [.filename]#~/.shrc#:"
+msgstr ""
+"Для оболочки Bourne Shell добавьте следующие строки в файл [.filename]#~/."
+"shrc#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/faq/_index.adoc:426
+#, no-wrap
+msgid "bind ^[[3~ ed-delete-next-char # for xterm\n"
+msgstr "bind ^[[3~ ed-delete-next-char # for xterm\n"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:429
+msgid "For the C Shell, add the following lines to [.filename]#~/.cshrc#:"
+msgstr ""
+"Для оболочки C Shell добавьте следующие строки в файл [.filename]#~/.cshrc#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/faq/_index.adoc:433
+#, no-wrap
+msgid "bindkey ^[[3~ delete-char # for xterm\n"
+msgstr "bindkey ^[[3~ delete-char # for xterm\n"
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:436
+#, no-wrap
+msgid "I have forgotten the root password! What do I do?"
+msgstr "Я забыл пароль root! Что делать?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:443
+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 ""
+"Не паникуйте! Перезагрузите систему, введите `boot -s` при появлении запроса "
+"`Boot:`, чтобы перейти в однопользовательский режим. На вопрос о выборе "
+"оболочки нажмите kbd:[Enter], после чего появится приглашение #. Введите "
+"`mount -urw /`, чтобы перемонтировать корневую файловую систему в режиме "
+"чтения/записи, затем выполните `mount -a` для перемонтирования всех файловых "
+"систем. Выполните `passwd root`, чтобы изменить пароль `root`, а затем "
+"введите man:exit[1] для продолжения загрузки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/faq/_index.adoc:450
+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 ""
+"Если при входе в однопользовательский режим всё ещё запрашивается пароль "
+"`root`, это означает, что консоль помечена как `insecure` в [.filename]#/etc/"
+"ttys#. В этом случае потребуется загрузиться с установочного диска FreeBSD, "
+"выбрать [.guimenuitem]#Live CD# или [.guimenuitem]#Shell# в начале процесса "
+"установки и выполнить указанные выше команды. Смонтируйте конкретный раздел "
+"в этом случае и затем выполните chroot для него. Например, замените `mount -"
+"urw /` на `mount /dev/ada0p1 /mnt; chroot /mnt` для системы на _ada0p1_."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/faq/_index.adoc:456
+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 ""
+"Если корневой раздел не удаётся смонтировать в однопользовательском режиме, "
+"возможно, разделы зашифрованы, и их невозможно смонтировать без ключей "
+"доступа. Дополнительную информацию см. в разделе о зашифрованных дисках в "
+"extref:{handbook}disks/[Handbook, disks-encrypting]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:459
+#, 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 "Я допустил ошибку в rc.conf или другом стартовом файле, и теперь не могу его отредактировать, потому что файловая система доступна только для чтения. Что мне делать?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:465
+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 ""
+"Перезагрузите систему, используя `boot -s` в приглашении загрузчика, чтобы "
+"войти в однопользовательский режим. При запросе пути к оболочке нажмите kbd:"
+"[Enter] и выполните `mount -urw /`, чтобы перемонтировать корневую файловую "
+"систему в режиме чтения/записи. Также может потребоваться выполнить `mount -"
+"a -t ufs` для монтирования файловой системы, где находится ваш "
+"предпочитаемый редактор. Если этот редактор находится на сетевой файловой "
+"системе, либо настройте сеть вручную перед монтированием сетевых файловых "
+"систем, либо используйте редактор, расположенный на локальной файловой "
+"системе, например, man:ed[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:467
+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 ""
+"Чтобы использовать полноэкранные редакторы, такие как man:vi[1] или man:"
+"emacs[1], выполните команду `export TERM=xterm`, чтобы эти редакторы могли "
+"загрузить корректные данные из базы man:termcap[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:470
+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 ""
+"После выполнения этих действий отредактируйте файл [.filename]#/etc/rc."
+"conf#, чтобы исправить синтаксическую ошибку. Сообщение об ошибке, "
+"отображаемое сразу после сообщений загрузки ядра, должно указывать номер "
+"строки в файле, в которой допущена ошибка."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:472
+#, no-wrap
+msgid "How much free memory is available?"
+msgstr "Сколько свободной памяти доступно?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:480
+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 ""
+"Существует несколько видов \"свободной памяти\". Наиболее распространенный "
+"- это объем памяти, который доступен немедленно, без освобождения уже "
+"используемой памяти. Это размер очереди свободных страниц плюс некоторые "
+"другие зарезервированные страницы. Этот объем отображается через `vm.stats."
+"vm.v_free_count` man:sysctl[8] и, например, выводится man:top[1]. Другой "
+"вид \"свободной памяти\" - это общий объем виртуальной памяти, доступной "
+"пользовательским процессам, который зависит от суммы swap-пространства и "
+"используемой памяти. Возможны и другие определения \"свободной памяти\", но "
+"их описание относительно бесполезно; гораздо важнее следить за тем, чтобы "
+"частота подкачки оставалась низкой, и избегать исчерпания swap-пространства."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:482
+#, no-wrap
+msgid "My time is wrong, how can I change the timezone?"
+msgstr "Мое время указано неверно, как я могу изменить часовой пояс?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:485
+msgid "Use man:tzsetup[8]."
+msgstr "Используйте man:tzsetup[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:487
+#, no-wrap
+msgid "FreeBSD uses a lot of swap space even when the computer has free memory left. Why?"
+msgstr "FreeBSD использует много swap-пространства, даже когда в компьютере остаётся свободная память. Почему?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:491
+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 ""
+"FreeBSD активно перемещает полностью неиспользуемые страницы основной памяти "
+"в своп, чтобы освободить больше основной памяти для активного использования. "
+"Такое активное использование свопа компенсируется за счет использования "
+"дополнительной свободной памяти для кэширования."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:494
+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 ""
+"Обратите внимание, что хотя FreeBSD активно работает в этом направлении, она "
+"не принимает произвольных решений о выгрузке страниц, когда система "
+"действительно простаивает. Таким образом, система не будет полностью "
+"выгружена в своп после простоя в течение ночи."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:496
+#, no-wrap
+msgid "Why does top show very little free memory even when I have very few programs running?"
+msgstr "Почему top показывает очень мало свободной памяти, даже когда у меня запущено очень мало программ?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:499
+msgid "The simple answer is that free memory is wasted memory."
+msgstr ""
+"Простой ответ заключается в том, что свободная память — это потраченная "
+"впустую память."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:504
+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 ""
+"Любая память, которую программы не используют активно, применяется в ядре "
+"FreeBSD в качестве дискового кэша. Значения, отображаемые в man:top[1] с "
+"метками `Inact` и `Laundry`, представляют собой кэшированные данные на "
+"разных уровнях старения. Эти кэшированные данные позволяют системе не "
+"обращаться к медленному диску повторно для данных, к которым она недавно "
+"обращалась, тем самым повышая общую производительность. В целом, низкое "
+"значение памяти, отображаемое как `Free` в man:top[1], является хорошим "
+"признаком, при условии, что оно не _очень_ низкое."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:506
+#, no-wrap
+msgid "What is the cute little red guy's name?"
+msgstr "Как зовут этого милого маленького красного человечка?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:511
+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 ""
+"У него нет имени, и его просто называют \"демон BSD\". Если вам непременно "
+"нужно имя, называйте его \"биести\" (beastie). Обратите внимание, что "
+"\"биести\" произносится как \"Би-Эс-Ди\"."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:513
+msgid ""
+"More about the BSD daemon is available on his http://www.mckusick.com/"
+"beastie/index.html[home page]."
+msgstr ""
+"Дополнительная информация о демоне BSD доступна на его http://www.mckusick."
+"com/beastie/index.html[домашней странице]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:515
+#, no-wrap
+msgid "Can I use the BSD daemon image?"
+msgstr "Могу ли я использовать изображение BSD-демона?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:520
+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 ""
+"Возможно. Демон BSD защищен авторским правом Маршалла Кирка Маккузика. "
+"Ознакомьтесь с его http://www.mckusick.com/beastie/mainpage/copyright."
+"html[Заявлением об использовании изображения демона BSD] для получения "
+"подробных условий использования."
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:524
+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 ""
+"В заключение, изображение можно использовать в хорошем вкусе, для личного "
+"пользования, при условии указания соответствующей авторской принадлежности. "
+"Перед коммерческим использованием логотипа свяжитесь с {mckusick} для "
+"получения разрешения. Подробнее можно узнать на http://www.mckusick.com/"
+"beastie/index.html[домашней странице BSD Daemon]."
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:526
+#, no-wrap
+msgid "Why should I care what color the bikeshed is?"
+msgstr "Почему меня должен волновать цвет сарая для велосипедов?"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:532
+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:534
+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 ""
+"Более длинный и полный ответ заключается в том, что после долгих споров о "
+"том, должна ли команда man:sleep[1] принимать аргументы в виде дробных "
+"секунд, {phk} опубликовал длинное сообщение под названием link:http://www."
+"bikeshed.com[Велосипедный сарай (любого цвета) на более зелёной траве...]."
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:536
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Благодарности"
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:538
+msgid ""
+"This FAQ has undergone countless revisions and improvements by a diverse "
+"group of contributors over the past decades."
+msgstr ""
+"Этот FAQ претерпел бесчисленные правки и улучшения благодаря разнообразной "
+"группе участников на протяжении последних десятилетий."
+
+#~ msgid ""
+#~ "Discover FreeBSD's compatibility with various Wi-Fi cards, making it easy "
+#~ "to connect your system to wireless networks."
+#~ msgstr ""
+#~ "Изучите совместимость FreeBSD с различными Wi-Fi адаптерами, что "
+#~ "позволяет легко подключать вашу систему к беспроводным сетям."
+
+#, no-wrap
+#~ msgid "The FreeBSD Funnies"
+#~ msgstr "Юмор от FreeBSD"
+
+#~ msgid ""
+#~ "Take a break from technicalities and dive into the playful side of "
+#~ "FreeBSD."
+#~ msgstr ""
+#~ "Отвлекитесь от технических деталей и окунитесь в игровую сторону FreeBSD."
+
+#, no-wrap
+#~ msgid "How cool is FreeBSD?"
+#~ msgstr "Насколько крута FreeBSD?"
+
+#, no-wrap
+#~ msgid "Has anyone done any temperature testing while running FreeBSD?"
+#~ msgstr "Выполнял ли кто-нибудь тестирование температуры при работе FreeBSD?"
+
+#~ 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 ""
+#~ "Нет, но мы провели множество слепых тестов на добровольцах, которым "
+#~ "предварительно ввели 250 микрограммов LSD-25. 35% добровольцев заявили, "
+#~ "что FreeBSD на вкус отдаёт апельсином, тогда как GNU/Linux(R) напоминает "
+#~ "фиолетовый туман. Ни одна из групп не отметила существенных различий в "
+#~ "температуре."
+
+#~ msgid ""
+#~ "Seriously, FreeBSD uses ACPI (Advanced Configuration and Power "
+#~ "Interface), therefore FreeBSD can put the CPU into low power mode."
+#~ msgstr ""
+#~ "Серьезно, FreeBSD использует ACPI (Advanced Configuration and Power "
+#~ "Interface), поэтому FreeBSD может перевести процессор в режим пониженного "
+#~ "энергопотребления."
+
+#, no-wrap
+#~ msgid "Where does data written to /dev/null go?"
+#~ msgstr "Куда деваются данные, записанные в /dev/null?"
+
+#~ 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 ""
+#~ "Он попадает в специальный накопитель данных в процессоре, где "
+#~ "преобразуется в тепло, которое отводится через радиатор и вентилятор. "
+#~ "Именно поэтому охлаждение процессора становится все более важным: по мере "
+#~ "того как пользователи привыкают к более быстрым процессорам, они "
+#~ "становятся менее внимательными к своим данным, и все больше данных "
+#~ "оказывается в [.filename]#/dev/null#, перегревая их процессоры."
+
+#~ 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 ""
+#~ "Если вы удалите файл [.filename]#/dev/null# (что фактически отключает "
+#~ "\"слив\" данных в процессор), ваш процессор может стать холоднее, но "
+#~ "система быстро \"засорится\" избытком данных и начнёт вести себя "
+#~ "нестабильно."
+
+#~ 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 ""
+#~ "Если у вас быстрый сетевой канал, вы можете охладить процессор, читая "
+#~ "данные из [.filename]#/dev/random# и отправляя их куда-нибудь; однако вы "
+#~ "рискуете перегреть сетевой канал и [.filename]#/# или разозлить своего "
+#~ "провайдера, так как большая часть данных в конечном итоге будет "
+#~ "преобразована в тепло их оборудованием, но у них обычно хорошее "
+#~ "охлаждение, так что если не переусердствовать, всё будет в порядке."
+
+#, no-wrap
+#~ msgid "My colleague sits at the computer too much, how can I prank them?"
+#~ msgstr "Мой коллега слишком много сидит за компьютером, как я могу разыграть его?"
+
+#~ msgid ""
+#~ "Install package:games/sl[] and wait for they to mistype `sl` for `ls`."
+#~ msgstr ""
+#~ "Установите пакет:games/sl[] и дождитесь, когда он случайно наберет `sl` "
+#~ "вместо `ls`."
diff --git a/documentation/content/ru/books/fdp-primer/_index.adoc b/documentation/content/ru/books/fdp-primer/_index.adoc
new file mode 100644
index 0000000000..945a1bf839
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/_index.adoc
@@ -0,0 +1,59 @@
+---
+add_single_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+bookOrder: 50
+copyright: '1998-2023 The FreeBSD Documentation Project'
+description: 'Все, что вам нужно знать, чтобы начать участвовать в проекте документации FreeBSD'
+next: books/fdp-primer/preface
+params:
+ path: /books/fdp-primer/
+showBookMenu: true
+tags: ["FDP", "documentation", "FreeBSD", "Index"]
+title: 'Проект документации FreeBSD: введение для новых участников'
+trademarks: ["freebsd", "general", "git"]
+weight: 10
+---
+
+= Проект документации FreeBSD: введение для новых участников
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/fdp-primer/
+
+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[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Аннотация
+
+Спасибо, что стали частью проекта документации FreeBSD! Ваш вклад чрезвычайно важен, и мы очень ценим его.
+
+Это руководство содержит информацию, необходимую для начала работы с Проектом документации FreeBSD (FDP), включая инструменты, программное обеспечение и философию, лежащую в основе Проекта документации.
+
+Это работа в процессе. Исправления и дополнения всегда приветствуются.
+
+'''
diff --git a/documentation/content/ru/books/fdp-primer/_index.po b/documentation/content/ru/books/fdp-primer/_index.po
new file mode 100644
index 0000000000..d03b601e86
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/_index.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primer_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Все, что вам нужно знать, чтобы начать участвовать в проекте документации FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/_index.adoc:1
+#: documentation/content/en/books/fdp-primer/_index.adoc:18
+#, no-wrap
+msgid "FreeBSD Documentation Project Primer for New Contributors"
+msgstr "Проект документации FreeBSD: введение для новых участников"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:51
+msgid "Abstract"
+msgstr "Аннотация"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:54
+msgid ""
+"Thank you for becoming a part of the FreeBSD Documentation Project. Your "
+"contribution is extremely valuable, and we appreciate it."
+msgstr ""
+"Спасибо, что стали частью проекта документации FreeBSD! Ваш вклад "
+"чрезвычайно важен, и мы очень ценим его."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:56
+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 ""
+"Это руководство содержит информацию, необходимую для начала работы с "
+"Проектом документации FreeBSD (FDP), включая инструменты, программное "
+"обеспечение и философию, лежащую в основе Проекта документации."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:59
+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:60
+msgid "'''"
+msgstr "'''"
diff --git a/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.adoc b/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.adoc
new file mode 100644
index 0000000000..4dc39524fe
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.adoc
@@ -0,0 +1,338 @@
+---
+description: 'Краткое введение в Asciidoctor'
+next: books/fdp-primer/rosetta
+params:
+ path: /books/fdp-primer/asciidoctor-primer/
+prev: books/fdp-primer/doc-build
+showBookMenu: true
+tags: ["AsciiDoc", "Asciidoctor", "Primer", "Introduction", "Guide"]
+title: 'Глава 6. Введение в Asciidoctor'
+weight: 7
+---
+
+[[asciidoctor-primer]]
+= Основы Asciidoctor
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 6
+: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::[]
+
+Большая часть документации FDP написана с использованием AsciiDoc. В этой главе объясняется, что это значит, как читать и понимать исходный код документации, а также используемые методы. Для получения полного справочника по возможностям Asciidoctor обратитесь к link:https://docs.asciidoctor.org/home/[документации Asciidoctor]. Некоторые примеры, используемые в этой главе, взяты из link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference[краткого справочника по синтаксису AsciiDoc].
+
+[[asciidoctor-primer-overview]]
+== Обзор
+
+В первые дни существования компьютеров электронный текст был простым. Существовало несколько наборов символов, таких как ASCII или EBCDIC, но на этом всё и заканчивалось. Текст был текстом, и вы видели именно то, что получали. Никаких изысков, никакого форматирования, никакого интеллекта.
+
+Неизбежно, этого оказалось недостаточно. Когда текст представлен в формате, пригодном для машинной обработки, ожидается, что машины смогут использовать и обрабатывать его интеллектуально. Авторы хотят указывать, что определённые фразы должны быть выделены, добавлены в глоссарий или преобразованы в гиперссылки. Имена файлов могут отображаться моноширинным шрифтом при просмотре на экране, но курсивом при печати или в любом другом из множества вариантов представления.
+
+Однажды надеялись, что искусственный интеллект (ИИ) сделает это легко. Компьютер прочитает документ и автоматически определит ключевые фразы, имена файлов, текст, который читатель должен ввести, примеры и многое другое. К сожалению, в реальной жизни всё оказалось не так просто, и компьютерам до сих пор требуется помощь, прежде чем они смогут осмысленно обрабатывать текст.
+
+Точнее говоря, им нужна помощь в определении, что есть что. Рассмотрим этот текст:
+
+Для удаления [.filename]#/tmp/foo# используйте man:rm[1].
+
+[source, shell]
+----
+% rm /tmp/foo
+----
+
+Читателю легко понять, какие части являются именами файлов, какие — командами для ввода, какие — ссылками на страницы руководства и так далее. Однако компьютер, обрабатывающий документ, не может надежно определить это. Для этого нам нужна разметка.
+
+Предыдущий пример фактически представлен в этом документе следующим образом:
+
+....
+To remove */tmp/foo*, use man:rm[1].
+
+[source,shell]
+----
+% rm /tmp/foo
+----
+....
+
+[[asciidoctor-headings]]
+== Заголовки
+
+Asciidoctor поддерживает шесть уровней заголовков. Если тип документа `article`, можно использовать только один заголовок уровня 0 (`=`). Если тип документа `book`, то может быть несколько заголовков уровня 0 (`=`).
+
+Вот пример заголовков в `article`.
+
+....
+= Название документа (Уровень 0)
+
+== Уровень 1 Название Раздела
+
+=== Уровень 2 Раздел Заголовок
+
+==== Уровень 3 Раздел Заголовок
+
+===== Уровень 4 Раздел Заголовок
+
+====== Level 5 Section Title
+
+== Другой заголовок раздела первого уровня
+....
+
+[WARNING]
+====
+Уровни разделов нельзя пропускать при вложении разделов.
+
+Следующий синтаксис неверен.
+
+....
+= Заголовок документа
+
+== Уровень 1
+
+==== Уровень 3
+....
+====
+
+[[asciidoctor-paragraphs]]
+== Абзацы
+
+Абзацы не требуют специальной разметки в AsciiDoc. Абзац определяется одной или несколькими последовательными строками текста. Чтобы создать новый абзац, оставьте одну пустую строку.
+
+Например, это заголовок с двумя абзацами.
+
+....
+= Это заголовок
+
+Это первый абзац. Это тоже первый абзац.
+
+А это второй абзац.
+....
+
+[[asciidoctor-lists]]
+== Списки
+
+Asciidoctor поддерживает несколько типов списков, наиболее распространённые — `ordered` и `unordered`. Для получения дополнительной информации о списках см. link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[AsciiDoc Syntax Quick Reference].
+
+[[asciidoctor-ordered-lists]]
+=== Упорядоченные списки
+
+Для создания нумерованного списка используйте символ `.`.
+
+Например, это нумерованный список.
+
+....
+. Первый пункт
+. Второй пункт
+.. Подпункт второго пункта
+. Третий пункт
+....
+
+И это будет отображено как.
+
+. Первый пункт
+. Второй пункт
+.. Подпункт второго пункта
+. Третий пункт
+
+[[asciidoctor-unordered-lists]]
+=== Неупорядоченные списки
+
+Для создания маркированного списка используйте символ `*`.
+
+Например, это ненумерованный список.
+
+....
+* Первый пункт
+* Второй пункт
+** Подпункт второго пункта
+* Третий пункт
+....
+
+И это будет отображено как.
+
+* Первый пункт
+* Второй пункт
+** Подпункт второго пункта
+* Третий пункт
+
+[[asciidoctor-links]]
+== Links
+
+[[asciidoctor-links-external]]
+=== Внешние ссылки
+
+Чтобы указать на другой веб-сайт, следует использовать макрос `link`.
+
+....
+link:https://www.FreeBSD.org[FreeBSD]
+....
+
+[NOTE]
+====
+Как описано в документации Asciidoctor, макрос `link` не требуется, когда цель начинается со схемы URL, такой как `https`. Тем не менее, рекомендуется всё равно использовать его, чтобы гарантировать корректное отображение ссылки в Asciidoctor, особенно в языках с нелатинской письменностью, таких как японский.
+====
+
+[[asciidoctor-links-internal]]
+=== Ссылки на другую книгу или статью
+
+Для указания на другую книгу или статью следует использовать переменные Asciidoctor. Например, если мы находимся в статье `cups` и хотим сослаться на `ipsec-must`, необходимо выполнить следующие шаги.
+
+. Включите файл [.filename]#urls.adoc# из папки [.filename]#~/doc/shared#.
++
+....
+\include::shared/{lang}/urls.adoc[]
+....
++
+. Затем создайте ссылку с использованием переменной Asciidoctor на статью `ipsec-must`.
++
+....
+extref:{ipsec-must}[Статья IPSec-Must]
+....
++
+И это будет отображено как.
++
+extref:{ipsec-must}[Статья IPSec-Must]
+
+[NOTE]
+====
+Макрос `extref` определён как расширение. Он предназначен для корректного отображения ссылки в различных выходных форматах
+====
+
+=== Ссылки на тот же файл или на другой файл в той же книге
+
+Книги структурированы в разных каталогах для поддержания удобной организации. Чтобы создать ссылку из одного подкаталога книги в другой подкаталог той же книги, используйте макрос `crossref`:
+....
+crossref:doc-build[documentation-makefile, Эта ссылка]
+....
+И это будет отображено как
+
+crossref:doc-build[documentation-makefile, Эта ссылка]
+
+[NOTE]
+====
+Макрос `crossref` определен как расширение. Он предназначен для формирования корректной ссылки в различных выходных форматах
+====
+
+[NOTE]
+====
+Используйте макрос `crossref` для внутридокументных ссылок. Хотя указание имени текущего документа может быть неудобным, это гарантирует корректное отображение ссылки в различных выходных форматах
+====
+
+[WARNING]
+====
+Не используйте макрос `xref` или его сокращение `<<` `>>`. Они не работают хорошо во всех выходных форматах.
+====
+
+[[asciidoctor-images-icons]]
+== Изображения и иконки
+
+Изображения и иконки играют ключевую роль в улучшении общего пользовательского опыта. Эти визуальные элементы стратегически интегрированы для передачи информации, пояснения концепций и создания визуально привлекательного интерфейса.
+
+[[asciidoctor-images]]
+=== Изображения
+
+Изображения помогают проиллюстрировать сложные концепции, делая их более понятными для пользователей.
+
+Первым шагом будет добавление изображения в директорию `images` по пути:
+
+* [.filename]#~/website/static/images/# для веб-сайта.
+* [.filename]#~/documentation/static/images/# для документации.
+
+Например, чтобы добавить новое изображение в процесс установки FreeBSD, изображение сохраняется по пути [.filename]#~/documentation/static/images/books/handbook/bsdinstall/new-image3.png#.
+
+Следующим шагом будет настройка атрибутов Asciidoctor `images-path` и `imagesdir`.
+
+В качестве примера мы используем заголовок статьи extref:{freebsd-releng}[Подготовка релизов FreeBSD].
+
+[source, asciidoc]
+....
+= Подготовка релизов FreeBSD
+:doctype: article
+
+[...]
+
+:images-path: articles/freebsd-releng/ <1>
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+
+[...]
+
+:imagesdir: ../../../images/{images-path} <2>
+endif::[]
+endif::[]
+
+[...]
+
+....
+
+<.> Ссылается на путь внутри папки [.filename]#/static/images#.
+<.> Делает ссылку на атрибут Asciidoctor.
+
+Как только изображение окажется в нужном пути и атрибуты Asciidoctor будут настроены в документе, можно использовать макрос `image`.
+
+Вот пример:
+
+....
+image::new-image3.png[New step in the FreeBSD install process]
+....
+
+[TIP]
+====
+Для улучшения доступности обязательно добавлять описательный текст к каждому изображению.
+====
+
+[[asciidoctor-icons]]
+=== Иконки
+
+Значки служат интуитивно понятными символами для быстрого распознавания и навигации.
+
+Первым шагом для использования иконок является добавление свойства `icons` в раздел свойств Asciidoctor в начале каждого документа.
+
+....
+:icons: font
+....
+
+После установки свойства иконки Asciidoctor можно добавить иконку, поддерживаемую link:https://fontawesome.com/v4/icons/[Font Awesome].
+
+Это пример использования иконки `envelope`:
+
+....
+icon:envelope[link=mailto:test@example.com, title="contact"]
+....
+
+[TIP]
+====
+Для повышения доступности веб-сайта атрибут `title` является обязательным.
+====
+
+[[asciidoctor-conclusion]]
+== Заключение
+
+Это заключение введения в Asciidoctor. Из-за ограничений по объёму и сложности некоторые аспекты не были рассмотрены глубоко (или вообще не затронуты).
diff --git a/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.po b/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.po
new file mode 100644
index 0000000000..9c60728aa5
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/asciidoctor-primer/_index.po
@@ -0,0 +1,795 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-07 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerasciidoctor-primer_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
+#, no-wrap
+msgid "A brief introduction to Asciidoctor"
+msgstr "Краткое введение в Asciidoctor"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Asciidoctor Primer"
+msgstr "Глава 6. Введение в Asciidoctor"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:14
+#, no-wrap
+msgid "Asciidoctor Primer"
+msgstr "Основы Asciidoctor"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:55
+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 ""
+"Большая часть документации FDP написана с использованием AsciiDoc. В этой "
+"главе объясняется, что это значит, как читать и понимать исходный код "
+"документации, а также используемые методы. Для получения полного "
+"справочника по возможностям Asciidoctor обратитесь к link:https://"
+"docs.asciidoctor.org/home/[документации Asciidoctor]. Некоторые примеры, "
+"используемые в этой главе, взяты из link:https://docs.asciidoctor.org/"
+"asciidoc/latest/syntax-quick-reference[краткого справочника по синтаксису "
+"AsciiDoc]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:57
+#, no-wrap
+msgid "Overview"
+msgstr "Обзор"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:63
+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 ""
+"В первые дни существования компьютеров электронный текст был простым. "
+"Существовало несколько наборов символов, таких как ASCII или EBCDIC, но на "
+"этом всё и заканчивалось. Текст был текстом, и вы видели именно то, что "
+"получали. Никаких изысков, никакого форматирования, никакого интеллекта."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:68
+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:72
+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:75
+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:77
+msgid "To remove [.filename]#/tmp/foo#, use man:rm[1]."
+msgstr "Для удаления [.filename]#/tmp/foo# используйте man:rm[1]."
+
+#. type: delimited block - 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:81
+#, no-wrap
+msgid "% rm /tmp/foo\n"
+msgstr "% rm /tmp/foo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:86
+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:88
+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:91
+#, no-wrap
+msgid "To remove */tmp/foo*, use man:rm[1].\n"
+msgstr "To remove */tmp/foo*, use man:rm[1].\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:96
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"----\n"
+"% rm /tmp/foo\n"
+"----\n"
+msgstr ""
+"[source,shell]\n"
+"----\n"
+"% rm /tmp/foo\n"
+"----\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:99
+#, no-wrap
+msgid "Headings"
+msgstr "Заголовки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:104
+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 ""
+"Asciidoctor поддерживает шесть уровней заголовков. Если тип документа "
+"`article`, можно использовать только один заголовок уровня 0 (`=`). Если "
+"тип документа `book`, то может быть несколько заголовков уровня 0 (`=`)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:106
+msgid "This is an example of headings in an `article`."
+msgstr "Вот пример заголовков в `article`."
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:108
+#, no-wrap
+msgid "Document Title (Level 0)"
+msgstr "Название документа (Уровень 0)"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:110
+#, no-wrap
+msgid "Level 1 Section Title"
+msgstr "Уровень 1 Название Раздела"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:112
+#, no-wrap
+msgid "Level 2 Section Title"
+msgstr "Уровень 2 Раздел Заголовок"
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:114
+#, no-wrap
+msgid "Level 3 Section Title"
+msgstr "Уровень 3 Раздел Заголовок"
+
+#. type: Title =====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:116
+#, no-wrap
+msgid "Level 4 Section Title"
+msgstr "Уровень 4 Раздел Заголовок"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:119
+msgid "====== Level 5 Section Title"
+msgstr "====== Level 5 Section Title"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:120
+#, no-wrap
+msgid "Another Level 1 Section Title"
+msgstr "Другой заголовок раздела первого уровня"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:126
+msgid "Section levels cannot be skipped when nesting sections."
+msgstr "Уровни разделов нельзя пропускать при вложении разделов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:128
+msgid "The following syntax is not correct."
+msgstr "Следующий синтаксис неверен."
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:130
+#, no-wrap
+msgid "Document Title"
+msgstr "Заголовок документа"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:132
+#, no-wrap
+msgid "Level 1"
+msgstr "Уровень 1"
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:134
+#, no-wrap
+msgid "Level 3"
+msgstr "Уровень 3"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:139
+#, no-wrap
+msgid "Paragraphs"
+msgstr "Абзацы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:144
+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 ""
+"Абзацы не требуют специальной разметки в AsciiDoc. Абзац определяется одной "
+"или несколькими последовательными строками текста. Чтобы создать новый "
+"абзац, оставьте одну пустую строку."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:146
+msgid "For example, this is a heading with two paragraphs."
+msgstr "Например, это заголовок с двумя абзацами."
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:148
+#, no-wrap
+msgid "This is the heading"
+msgstr "Это заголовок"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:152
+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:154
+msgid "And this is the second paragraph."
+msgstr "А это второй абзац."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:157
+#, no-wrap
+msgid "Lists"
+msgstr "Списки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:161
+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 ""
+"Asciidoctor поддерживает несколько типов списков, наиболее распространённые "
+"— `ordered` и `unordered`. Для получения дополнительной информации о "
+"списках см. link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-"
+"reference/#lists[AsciiDoc Syntax Quick Reference]."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:163
+#, no-wrap
+msgid "Ordered lists"
+msgstr "Упорядоченные списки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:166
+msgid "To create an ordered list use the `.` character."
+msgstr "Для создания нумерованного списка используйте символ `.`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:168
+msgid "For example, this is an ordered list."
+msgstr "Например, это нумерованный список."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:174
+#, no-wrap
+msgid ""
+". First item\n"
+". Second item\n"
+".. Subsecond item\n"
+". Third item\n"
+msgstr ""
+". Первый пункт\n"
+". Второй пункт\n"
+".. Подпункт второго пункта\n"
+". Третий пункт\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:177
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:198
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:241
+msgid "And this would be rendered as."
+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 "First 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 "Second 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 "Subsecond item"
+msgstr "Подпункт второго пункта"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:182
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:203
+msgid "Third item"
+msgstr "Третий пункт"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:184
+#, no-wrap
+msgid "Unordered lists"
+msgstr "Неупорядоченные списки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:187
+msgid "To create an unordered list use the `*` character."
+msgstr "Для создания маркированного списка используйте символ `*`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:189
+msgid "For example, this is an unordered list."
+msgstr "Например, это ненумерованный список."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:195
+#, no-wrap
+msgid ""
+"* First item\n"
+"* Second item\n"
+"** Subsecond item\n"
+"* Third item\n"
+msgstr ""
+"* Первый пункт\n"
+"* Второй пункт\n"
+"** Подпункт второго пункта\n"
+"* Третий пункт\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:205
+#, no-wrap
+msgid "Links"
+msgstr "Links"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:208
+#, no-wrap
+msgid "External links"
+msgstr "Внешние ссылки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:211
+msgid "To point to another website the `link` macro should be used."
+msgstr "Чтобы указать на другой веб-сайт, следует использовать макрос `link`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:214
+#, no-wrap
+msgid "link:https://www.FreeBSD.org[FreeBSD]\n"
+msgstr "link:https://www.FreeBSD.org[FreeBSD]\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:220
+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 ""
+"Как описано в документации Asciidoctor, макрос `link` не требуется, когда "
+"цель начинается со схемы URL, такой как `https`. Тем не менее, рекомендуется "
+"всё равно использовать его, чтобы гарантировать корректное отображение "
+"ссылки в Asciidoctor, особенно в языках с нелатинской письменностью, таких "
+"как японский."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:223
+#, no-wrap
+msgid "Links to another book or article"
+msgstr "Ссылки на другую книгу или статью"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:227
+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 ""
+"Для указания на другую книгу или статью следует использовать переменные "
+"Asciidoctor. Например, если мы находимся в статье `cups` и хотим сослаться "
+"на `ipsec-must`, необходимо выполнить следующие шаги."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:229
+msgid ""
+"Include the [.filename]#urls.adoc# file from [.filename]#~/doc/shared# "
+"folder."
+msgstr ""
+"Включите файл [.filename]#urls.adoc# из папки [.filename]#~/doc/shared#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:232
+#, no-wrap
+msgid "\\include::shared/{lang}/urls.adoc[]\n"
+msgstr "\\include::shared/{lang}/urls.adoc[]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:235
+msgid ""
+"Then create a link using the Asciidoctor variable to the `ipsec-must` "
+"article."
+msgstr ""
+"Затем создайте ссылку с использованием переменной Asciidoctor на статью "
+"`ipsec-must`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:238
+#, no-wrap
+msgid "extref:{ipsec-must}[IPSec-Must article]\n"
+msgstr "extref:{ipsec-must}[Статья IPSec-Must]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:243
+msgid "extref:{ipsec-must}[IPSec-Must article]"
+msgstr "extref:{ipsec-must}[Статья IPSec-Must]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:248
+msgid ""
+"The `extref` macro is defined as an extension. It is designed to render the "
+"correct link across the different outputs"
+msgstr ""
+"Макрос `extref` определён как расширение. Он предназначен для корректного "
+"отображения ссылки в различных выходных форматах"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:250
+#, no-wrap
+msgid "Links to the same file or to another file in the same book"
+msgstr "Ссылки на тот же файл или на другой файл в той же книге"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:255
+msgid ""
+"Books are structured in different directories to keep a sane layout. To "
+"create a link from one subdirectory of a book to another subdirectory of the "
+"same book, use the `crossref` macro:"
+msgstr ""
+"Книги структурированы в разных каталогах для поддержания удобной "
+"организации. Чтобы создать ссылку из одного подкаталога книги в другой "
+"подкаталог той же книги, используйте макрос `crossref`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:257
+#, no-wrap
+msgid "crossref:doc-build[documentation-makefile, This link]\n"
+msgstr "crossref:doc-build[documentation-makefile, Эта ссылка]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:259
+msgid "And this would be rendered as"
+msgstr "И это будет отображено как"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:261
+msgid "crossref:doc-build[documentation-makefile, This link]"
+msgstr "crossref:doc-build[documentation-makefile, Эта ссылка]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:266
+msgid ""
+"The `crossref` macro is defined as an extension. It is designed to render "
+"the correct link across the different outputs"
+msgstr ""
+"Макрос `crossref` определен как расширение. Он предназначен для "
+"формирования корректной ссылки в различных выходных форматах"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:273
+msgid ""
+"Use the `crossref` macro for intra-document links too. Although it might be "
+"inconvenient to write the name of the current document, it ensures the "
+"correct link is rendered across the different outputs"
+msgstr ""
+"Используйте макрос `crossref` для внутридокументных ссылок. Хотя указание "
+"имени текущего документа может быть неудобным, это гарантирует корректное "
+"отображение ссылки в различных выходных форматах"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:279
+msgid ""
+"Do not use either the `xref` macro or its shortcut `<<` `>>`. They do not "
+"work well in all output formats."
+msgstr ""
+"Не используйте макрос `xref` или его сокращение `<<` `>>`. Они не работают "
+"хорошо во всех выходных форматах."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:282
+#, no-wrap
+msgid "Images and Icons"
+msgstr "Изображения и иконки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:286
+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:288
+#, no-wrap
+msgid "Images"
+msgstr "Изображения"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:291
+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:293
+msgid ""
+"The first step will be to add the image in the images directory in the path:"
+msgstr ""
+"Первым шагом будет добавление изображения в директорию `images` по пути:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:295
+msgid "[.filename]#~/website/static/images/# for the website."
+msgstr "[.filename]#~/website/static/images/# для веб-сайта."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:296
+msgid "[.filename]#~/documentation/static/images/# for the documentation."
+msgstr "[.filename]#~/documentation/static/images/# для документации."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:298
+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 ""
+"Например, чтобы добавить новое изображение в процесс установки FreeBSD, "
+"изображение сохраняется по пути [.filename]#~/documentation/static/images/"
+"books/handbook/bsdinstall/new-image3.png#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:300
+msgid ""
+"The next step will be to configure the Asciidoctor attributes `images-path` "
+"and `imagesdir`."
+msgstr ""
+"Следующим шагом будет настройка атрибутов Asciidoctor `images-path` и "
+"`imagesdir`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:302
+msgid ""
+"We are going to use as an example the header of the extref:{freebsd-releng}"
+"[FreeBSD Release Engineering] article."
+msgstr ""
+"В качестве примера мы используем заголовок статьи extref:{freebsd-releng}"
+"[Подготовка релизов FreeBSD]."
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:305
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr "Подготовка релизов FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:307
+msgid ":doctype: article"
+msgstr ":doctype: article"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:309
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:316
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:321
+msgid "[...]"
+msgstr "[...]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:311
+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:314
+msgid "ifdef::env-beastie[] ifdef::backend-html5[]"
+msgstr ""
+"ifdef::env-beastie[]\n"
+"ifdef::backend-html5[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:319
+msgid ":imagesdir: ../../../images/{images-path} <2> endif::[]"
+msgstr ""
+":imagesdir: ../../../images/{images-path} <2>\n"
+"endif::[]\n"
+"endif::[]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:325
+msgid "Makes reference to the path inside [.filename]#/static/images# folder."
+msgstr "Ссылается на путь внутри папки [.filename]#/static/images#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:326
+msgid "Makes reference to the Asciidoctor attribute."
+msgstr "Делает ссылку на атрибут Asciidoctor."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:328
+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 ""
+"Как только изображение окажется в нужном пути и атрибуты Asciidoctor будут "
+"настроены в документе, можно использовать макрос `image`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:330
+msgid "This is an example:"
+msgstr "Вот пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:333
+#, no-wrap
+msgid "image::new-image3.png[New step in the FreeBSD install process]\n"
+msgstr "image::new-image3.png[New step in the FreeBSD install process]\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:338
+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:341
+#, no-wrap
+msgid "Icons"
+msgstr "Иконки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:344
+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:346
+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 ""
+"Первым шагом для использования иконок является добавление свойства `icons` в "
+"раздел свойств Asciidoctor в начале каждого документа."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:349
+#, no-wrap
+msgid ":icons: font\n"
+msgstr ":icons: font\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:352
+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 ""
+"После установки свойства иконки Asciidoctor можно добавить иконку, "
+"поддерживаемую link:https://fontawesome.com/v4/icons/[Font Awesome]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:354
+msgid "This is an example about how to use the `envelope` icon:"
+msgstr "Это пример использования иконки `envelope`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:357
+#, 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:362
+msgid ""
+"To improve the accessibility of the website, the `title` attribute is "
+"mandatory."
+msgstr ""
+"Для повышения доступности веб-сайта атрибут `title` является обязательным."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:365
+#, no-wrap
+msgid "Conclusion"
+msgstr "Заключение"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:368
+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 ""
+"Это заключение введения в Asciidoctor. Из-за ограничений по объёму и "
+"сложности некоторые аспекты не были рассмотрены глубоко (или вообще не "
+"затронуты)."
diff --git a/documentation/content/ru/books/fdp-primer/book.adoc b/documentation/content/ru/books/fdp-primer/book.adoc
new file mode 100644
index 0000000000..e1222e61f5
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/book.adoc
@@ -0,0 +1,102 @@
+---
+add_split_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '1998-2023 The FreeBSD Documentation Project'
+description: 'Все, что вам нужно знать, чтобы начать участвовать в проекте документации FreeBSD'
+tags: ["FDP", "documentation", "FreeBSD", "Index"]
+title: 'Проект документации FreeBSD: введение для новых участников'
+trademarks: ["freebsd", "general", "git"]
+---
+
+= Проект документации FreeBSD: введение для новых участников
+:doctype: book
+:toc: macro
+:toclevels: 2
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:book: true
+:pdf: false
+:images-path: books/fdp-primer/
+
+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[]
+:chapters-path: content/{{% lang %}}/books/fdp-primer/
+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]
+Аннотация
+
+Спасибо за то, что стали частью проекта FreeBSD Documentation Project. Ваш вклад чрезвычайно важен, и мы это ценим.
+
+Это руководство содержит информацию, необходимую для начала работы с Проектом документации FreeBSD (FDP), включая инструменты, программное обеспечение и философию, лежащую в основе Проекта документации.
+
+Это работа в процессе. Исправления и дополнения всегда приветствуются.
+
+'''
+
+toc::[]
+
+:sectnums!:
+
+include::{chapters-path}preface/_index.adoc[leveloffset=+1]
+
+:sectnums:
+
+include::{chapters-path}overview/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}tools/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}working-copy/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}structure/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}doc-build/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}asciidoctor-primer/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}rosetta/_index.adoc[leveloffset=+1]
+
+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!:
+
+include::{chapters-path}examples/_index.adoc[leveloffset=+1]
+
+:sectnums:
diff --git a/documentation/content/ru/books/fdp-primer/book.po b/documentation/content/ru/books/fdp-primer/book.po
new file mode 100644
index 0000000000..a525887906
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/book.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerbook/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Все, что вам нужно знать, чтобы начать участвовать в проекте документации FreeBSD"
+
+#. 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 "Проект документации FreeBSD: введение для новых участников"
+
+#. 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 ""
+"Спасибо за то, что стали частью проекта FreeBSD Documentation Project. Ваш "
+"вклад чрезвычайно важен, и мы это ценим."
+
+#. 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 ""
+"Это руководство содержит информацию, необходимую для начала работы с "
+"Проектом документации FreeBSD (FDP), включая инструменты, программное "
+"обеспечение и философию, лежащую в основе Проекта документации."
+
+#. 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/ru/books/fdp-primer/doc-build/_index.adoc b/documentation/content/ru/books/fdp-primer/doc-build/_index.adoc
new file mode 100644
index 0000000000..ae8a161020
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/doc-build/_index.adoc
@@ -0,0 +1,662 @@
+---
+description: 'Описывает процесс сборки документации FreeBSD'
+next: books/fdp-primer/asciidoctor-primer
+params:
+ path: /books/fdp-primer/doc-build/
+prev: books/fdp-primer/structure
+showBookMenu: true
+tags: ["build", "process", "make"]
+title: 'Глава 5. Процесс сборки документации FreeBSD'
+weight: 6
+---
+
+[[doc-build]]
+= Процесс сборки документации FreeBSD
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 5
+: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::[]
+
+Эта глава описывает организацию процесса сборки документации и использование man:make[1] для управления этим процессом.
+
+[[doc-build-rendering]]
+== Преобразование AsciiDoc в выходные форматы
+
+Из одного исходного файла AsciiDoc можно получить различные типы выходных данных.
+
+[cols="20%,20%,60%", frame="none", options="header"]
+|===
+| Форматы
+| Тип файла
+| Описание
+
+|`html`
+|HTML
+|Глава статьи (`article`) или книги (`book`).
+
+|`pdf`
+|PDF
+|Portable Document Format.
+
+|`epub`
+|EPUB
+|Электронная публикация.
+Формат файла ePub.
+|===
+
+[[doc-build-rendering-html]]
+=== Преобразование в html
+
+Для преобразования документации и веб-сайта в `html` используйте один из следующих примеров.
+
+[[documentation-build-example]]
+.Собрать документацию
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make
+....
+====
+
+[[website-build-example]]
+.Собрать веб-сайт
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/website
+% make
+....
+====
+
+[[project-build-example]]
+.Собрать весь проект документации
+[example]
+====
+[source, shell]
+....
+% cd ~/doc
+% make -j2
+....
+====
+
+Ниже приведены примеры сложных сборок:
+
+[[documentation-build-example-verbose]]
+.Собрать документацию на английском и испанском языках с подробными и отладочными сообщениями
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make DOC_LANG="en es" HUGO_ARGS="--verbose --debug"
+....
+====
+
+[[documentation-build-example-server]]
+.Собрать и предоставить контент с помощью внутреннего веб-сервера Hugo
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make run
+....
+Этот веб-сервер по умолчанию работает на `localhost`, порт `1313`.
+
+Для обслуживания контента с помощью внутреннего веб-сервера Hugo, привязанного к определенному IP-адресу и порту:
+
+[source, shell]
+....
+% make run BIND=192.168.15.10 HUGO_ARGS="-p 8080"
+....
+
+Имя хоста (`hostname`) также может быть установлено в качестве базового URL для внутреннего веб-сервера Hugo:
+
+[source, shell]
+....
+% make run BIND=192.168.15.10 HOSTNAME=example.com
+....
+====
+
+[[documentation-build-example-offline]]
+.Сборка документации в html для использования в автономном режиме
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make html
+....
+
+Для сжатия вывода в формате html добавьте `DOC_HTML_ARCHIVE=1`:
+
+[source, shell]
+....
+% cd ~/doc/documentation
+% DOC_HTML_ARCHIVE=1 make html
+....
+====
+
+[[doc-build-rendering-pdf]]
+=== Рендеринг в pdf
+
+Для преобразования документации в `pdf` используйте один из следующих примеров.
+
+[[document-pdf-example]]
+.Собрать все документы в pdf
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make pdf
+....
+====
+
+[[document-pdf-articles-example]]
+.Собрать все статьи в pdf
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make pdf-articles
+....
+====
+
+[[document-pdf-books-example]]
+.Собрать все книги в формате pdf
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make pdf-books
+....
+====
+
+[[document-pdf-language-example]]
+.Сборка документов в pdf для определённых языков
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make DOC_LANG="en" pdf
+....
+Это соберет все документы на английском языке в формате pdf.
+
+[source, shell]
+....
+% cd ~/doc/documentation
+% make DOC_LANG="en fr" pdf-books
+....
+Это соберет все книги на английском и французском языках в формате pdf.
+====
+
+[[doc-build-toolset]]
+== Набор инструментов для сборки документации FreeBSD
+
+Вот инструменты, используемые для сборки и установки документации FDP.
+
+* Основным инструментом сборки является man:make[1], а именно Berkeley Make.
+* Hugo
+* AsciiDoctor
+* Git
+
+[[doc-build-makefile]]
+== Информация о Makefile в дереве документации
+
+В проекте документации есть три файла [.filename]#Makefile# для сборки всей или части документации.
+
+* Файл [.filename]#Makefile# в каталоге [.filename]#documentation# предназначен только для сборки документации.
+* Файл [.filename]#Makefile# в директории [.filename]#website# предназначен только для сборки веб-сайта.
+* [.filename]#Makefile# в корне дерева исходников собирает как документацию, так и веб-сайт.
+
+Файл [.filename]#Makefile# в подкаталогах также поддерживает `make run` для обслуживания собранного содержимого с помощью внутреннего веб-сервера Hugo. По умолчанию этот веб-сервер работает на порту 1313.
+
+[[documentation-makefile]]
+=== Makefile в каталоге documentation
+
+Этот [.filename]#Makefile# имеет следующую форму:
+
+[source, shell]
+....
+# Generate the FreeBSD documentation
+#
+# Copyright (c) 2020-2025, The FreeBSD Documentation Project
+# Copyright (c) 2020-2025, Sergio Carlavilla <carlavilla@FreeBSD.org>
+#
+# Targets intended for use on the command line
+#
+# all (default) - generate the books TOC and compile all the documentation
+# 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.
+# epub - build EPUB versions of the articles and books (Experimental).
+#
+# The run target uses hugo's built-in webserver to make the documentation site
+# available for local browsing. The documentation should have been built prior
+# to attempting to use the `run` target. By default, hugo will start its
+# webserver on port 1313.
+
+MAINTAINER=carlavilla@FreeBSD.org <.>
+
+# List of languages without book translations
+ARTICLEONLY_LANGS= bn-bd da ko tr
+# List of languages without article translations
+BOOKONLY_LANGS= mn
+
+# List of all languages we have content for
+ALL_LANGUAGES= bn-bd da de el en es fr hu it ja ko mn nl pl pt-br ru tr zh-cn zh-tw <.>
+
+LOCALBASE?= /usr/local
+
+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
+
+.if defined(DOC_LANG) && !empty(DOC_LANG)
+LANGUAGES= ${DOC_LANG:S/,/ /g}
+.if ${LANGUAGES:Men} == "" && ${.TARGETS:Mpdf*} == "" && ${.TARGETS:Mhtml*} == ""
+.warning "Warning: cannot skip 'en'; adding it back"
+LANGUAGES+= en
+.endif
+.else
+LANGUAGES= ${ALL_LANGUAGES}
+.endif
+
+RUBYLIB = ../shared/lib
+.export RUBYLIB
+
+RUN_DEPENDS= ${HUGO_CMD} \
+ ${LOCALBASE}/bin/asciidoctor \
+ ${LOCALBASE}/bin/rougify
+
+.ifndef HOSTNAME
+. ifdef BIND
+.HOST=$(BIND)
+. else
+.HOST=localhost
+. endif
+.else
+.HOST=$(HOSTNAME)
+.endif
+
+# Strip the languages with only articles from the list of languages we
+# will use to build books.
+BOOK_LANGS= ${LANGUAGES}
+.for a in ${ARTICLEONLY_LANGS}
+BOOK_LANGS:= ${BOOK_LANGS:N${a}}
+.endfor
+
+# Strip the languages with only books from the list of languages we
+# will use to build articles.
+ARTICLE_LANGS= ${LANGUAGES}
+.for a in ${BOOKONLY_LANGS}
+ARTICLE_LANGS:= ${ARTICLE_LANGS:N${a}}
+.endfor
+
+# Take the list of all languages, and take out the ones we have been
+# asked for. We'll feed this to hugo.
+SKIP_LANGS=
+.for a in ${ALL_LANGUAGES}
+.if ${LANGUAGES:M${a}} == ""
+SKIP_LANGS+= ${a}
+.endif
+.endfor
+
+.ORDER: all run <.>
+
+.ORDER: requirements <.>
+.ORDER: starting-message
+.ORDER: starting-message build
+.ORDER: build
+
+all: requirements starting-message generate-pgpkeys-txt build
+run: requirements starting-message generate-pgpkeys-txt run-local
+
+# clean does not call pdf-clean as that is a subset of hugo-clean
+clean: hugo-clean pgp-clean
+
+requirements:
+.for dep in ${RUN_DEPENDS}
+.if !exists(${dep})
+ @(echo ${dep} not found, please run 'pkg install docproj'; exit 1)
+.endif
+.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)
+.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)
+.endif
+
+starting-message: .PHONY <.>
+ @echo ---------------------------------------------------------------
+ @echo Building the documentation
+ @echo included languages: ${LANGUAGES}
+ @echo excluded languages: ${SKIP_LANGS}
+ @echo ---------------------------------------------------------------
+
+generate-pgpkeys-txt: static/pgpkeys/pgpkeys.txt
+
+static/pgpkeys/pgpkeys.txt: static/pgpkeys/*key
+ ${RUBY_CMD} ./tools/global-pgpkeys-creator.rb
+
+run-local: .PHONY <.>
+ HUGO_DISABLELANGUAGES="${SKIP_LANGS}" ${HUGO_CMD} server \
+ ${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL="http://$(.HOST):1313"
+
+build: .PHONY <.>
+ HUGO_DISABLELANGUAGES="${SKIP_LANGS}" ${HUGO_CMD} ${HUGO_ARGS}
+
+build-offline: .PHONY
+ HUGO_DISABLELANGUAGES="${SKIP_LANGS}" ${HUGO_CMD} ${HUGO_OFFLINE_ARGS}
+
+pgp-clean: .PHONY
+ rm -f static/pgpkeys/pgpkeys.txt
+
+hugo-clean: .PHONY
+ rm -rf resources public
+
+#
+# PDF targets
+# Use DOC_LANG to choose the language, e.g., make DOC_LANG="en fr" pdf-books
+#
+pdf: pdf-articles pdf-books
+
+pdf-books: requirements-pdf
+.for _lang in ${BOOK_LANGS}
+ ./tools/asciidoctor.sh books ${_lang} pdf
+.endfor
+
+pdf-articles: requirements-pdf
+.for _lang in ${ARTICLE_LANGS}
+ ./tools/asciidoctor.sh articles ${_lang} pdf
+.endfor
+
+pdf-clean: pdf-articles-clean pdf-books-clean
+
+pdf-books-clean:
+.for _lang in ${BOOK_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/books
+ -rmdir ${.CURDIR}/public/${_lang}
+.endfor
+ -rmdir ${.CURDIR}/public/
+
+pdf-articles-clean:
+.for _lang in ${ARTICLE_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/articles
+.if !exists(${.CURDIR}/public/${_lang}/books)
+ rm -fr ${.CURDIR}/public/${_lang}
+.endif
+.endfor
+ -rmdir ${.CURDIR}/public
+
+#
+# HTML targets
+#
+html: build-offline html-clean-global html-clean-articles html-clean-books html-archive html-archive-clean-files
+
+html-clean: hugo-clean
+
+html-clean-global:
+ rm -fr ${.CURDIR}/public/index.html
+ rm -rf pgpkeys js
+
+html-clean-articles:
+.for _lang in ${ARTICLE_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/index.html
+ rm -fr ${.CURDIR}/public/${_lang}/articles/index.html
+.endfor
+
+html-clean-books:
+.for _lang in ${BOOK_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/books/index.html
+.endfor
+
+html-archive:
+.if defined(DOC_HTML_ARCHIVE)
+.for _lang in ${ARTICLE_LANGS}
+ ./tools/asciidoctor.sh articles ${_lang} archive
+.endfor
+.for _lang in ${BOOK_LANGS}
+ ./tools/asciidoctor.sh books ${_lang} archive
+.endfor
+.endif
+
+html-archive-clean-files:
+.if defined(DOC_HTML_ARCHIVE)
+ find ${.CURDIR}/public/ ! -name '*.pdf' ! -name '*.tar.gz' -type f -delete
+ find ${.CURDIR}/public/ -type d -empty -delete
+.endif
+
+#
+# EPUB targets
+# Use DOC_LANG to choose the language, e.g., make DOC_LANG="en fr" epub-books
+#
+epub: epub-articles epub-books
+
+epub-books: requirements-epub
+ @echo ---------------------------------------------------------------
+ @echo !!! EPUB output is experimental !!!
+ @echo
+ @echo Asciidoctor EPUB3 is currently alpha software. Use accordingly. Although the
+ @echo bulk of AsciiDoc content is converted, there’s still work needed to fill in
+ @echo gaps where conversion is incomplete or unstyled.
+ @echo https://docs.asciidoctor.org/epub3-converter/latest/#project-status
+ @echo ---------------------------------------------------------------
+.for _lang in ${BOOK_LANGS}
+ ./tools/asciidoctor.sh books ${_lang} epub
+.endfor
+
+epub-articles: requirements-epub
+ @echo ---------------------------------------------------------------
+ @echo !!! EPUB output is experimental !!!
+ @echo
+ @echo Asciidoctor EPUB3 is currently alpha software. Use accordingly. Although the
+ @echo bulk of AsciiDoc content is converted, there’s still work needed to fill in
+ @echo gaps where conversion is incomplete or unstyled.
+ @echo https://docs.asciidoctor.org/epub3-converter/latest/#project-status
+ @echo ---------------------------------------------------------------
+.for _lang in ${ARTICLE_LANGS}
+ ./tools/asciidoctor.sh articles ${_lang} epub
+.endfor
+
+epub-clean: epub-articles-clean epub-books-clean
+
+epub-books-clean:
+.for _lang in ${BOOK_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/books
+ -rmdir ${.CURDIR}/public/${_lang}
+.endfor
+ -rmdir ${.CURDIR}/public/
+
+epub-articles-clean:
+.for _lang in ${ARTICLE_LANGS}
+ rm -fr ${.CURDIR}/public/${_lang}/articles
+.if !exists(${.CURDIR}/public/${_lang}/books)
+ rm -fr ${.CURDIR}/public/${_lang}
+.endif
+.endfor
+ -rmdir ${.CURDIR}/public
+....
+
+<.> Флаг `MAINTAINER` указывает, кто является сопровождающим данного Makefile.
+<.> Флаг `ALL_LANGUAGES` указывает, на каких языках должно быть сгенерировано оглавление.
+<.> Флаг `RUBY_CMD` указывает расположение бинарного файла Ruby.
+<.> `HUGO_CMD` — флаг, указывающий расположение бинарного файла Hugo.
+<.> Директивы `.ORDER` используются для обеспечения беспроблемного выполнения нескольких заданий make.
+<.> Цель `all` собирает документацию и помещает результат в *~/doc/documentation/public*.
+<.> `starting-message` показывает сообщение в CLI, чтобы уведомить пользователя о том, что процесс выполняется.
+<.> `run-local` запускает веб-сервер hugo на порту 1313 или на случайном свободном порту, если указанный порт уже занят.
+<.> `build` собирает документацию и помещает результат в *~/doc/documentation/public*.
+
+[[website-makefile]]
+=== Makefile в каталоге website
+
+Этот [.filename]#Makefile# имеет следующий вид:
+
+[source, shell]
+....
+# Generate the FreeBSD website
+#
+# Copyright (c) 2020-2025, The FreeBSD Documentation Project
+# Copyright (c) 2020-2025, Sergio Carlavilla <carlavilla@FreeBSD.org>
+#
+# Targets intended for use on the command line
+#
+# all (default) - generate the releases.toml and compile all the website
+# run - serves the built website for local browsing
+#
+# The run target uses hugo's built-in webserver to make the built website
+# available for local browsing. The website should have been built prior
+# to attempting to use the `run` target. By default, hugo will start its
+# webserver on port 1313.
+
+MAINTAINER=carlavilla@FreeBSD.org <.>
+
+# List of all languages we have content for
+ALL_LANGUAGES= de el en es fr hu it ja nl ru tr zh-cn zh-tw
+
+LOCALBASE?= /usr/local
+
+RUBY_CMD = ${LOCALBASE}/bin/ruby <.>
+HUGO_CMD = ${LOCALBASE}/bin/hugo <.>
+HUGO_ARGS?= --verbose
+RUBYLIB = ../shared/lib
+.export RUBYLIB
+
+.ifndef HOSTNAME
+. ifdef BIND
+.HOST=$(BIND)
+. else
+.HOST=localhost
+. endif
+.else
+.HOST=$(HOSTNAME)
+.endif
+
+.if defined(DOC_LANG) && !empty(DOC_LANG)
+LANGUAGES= ${DOC_LANG:S/,/ /g}
+.if ${LANGUAGES:Men} == ""
+.warning "Warning: cannot skip 'en'; adding it back"
+LANGUAGES+= en
+.endif
+.else
+LANGUAGES= ${ALL_LANGUAGES}
+.endif
+
+# Take the list of all languages, and take out the ones we have been
+# asked for via DOC_LANG. We'll feed this to hugo.
+SKIP_LANGS=
+.for a in ${ALL_LANGUAGES}
+.if ${LANGUAGES:M${a}} == ""
+SKIP_LANGS+= ${a}
+.endif
+.endfor
+
+.ORDER: all run <.>
+
+.ORDER: starting-message generate-releases
+.ORDER: starting-message build
+.ORDER: generate-releases build
+.ORDER: build post-build
+.ORDER: post-build end-message
+
+all: starting-message generate-releases build post-build end-message <.>
+run: starting-message generate-releases run-local
+clean: hugo-clean releases-clean
+
+starting-message: .PHONY <.>
+ @echo "---------------------------------------------------------------"
+ @echo "Building the website started on $$(date)"
+ @echo " included languages: ${LANGUAGES}"
+ @echo " excluded languages: ${SKIP_LANGS}"
+ @echo "---------------------------------------------------------------"
+
+end-message: .PHONY
+ @echo "---------------------------------------------------------------"
+ @echo "Building the website completed on $$(date)"
+ @echo "---------------------------------------------------------------"
+
+generate-releases: data/releases.toml <.>
+
+data/releases.toml:
+ ${RUBY_CMD} ./tools/releases-toml.rb
+
+run-local: .PHONY <.>
+ HUGO_DISABLELANGUAGES="${SKIP_LANGS}" ${HUGO_CMD} server \
+ ${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL="http://$(.HOST):1313"
+
+build: .PHONY <.>
+ HUGO_DISABLELANGUAGES="${SKIP_LANGS}" ${HUGO_CMD} ${HUGO_ARGS}
+
+post-build: cgi-permissions
+
+cgi-permissions:
+ @chmod 555 ./public/cgi/*.cgi
+
+hugo-clean:
+ rm -fr public resources
+
+releases-clean:
+ rm -f data/releases.toml
+....
+
+<.> Флаг `MAINTAINER` указывает, кто является сопровождающим данного Makefile.
+<.> Флаг `RUBY_CMD` указывает расположение бинарного файла Ruby.
+<.> `HUGO_CMD` — флаг, указывающий расположение бинарного файла Hugo.
+<.> Директивы `.ORDER` используются для обеспечения беспроблемного выполнения нескольких заданий make.
+<.> Цель `all` собирает веб-сайт и помещает результат в *~/doc/website/public*.
+<.> `starting-message` показывает сообщение в CLI, чтобы уведомить пользователя о том, что процесс выполняется.
+<.> `generate-releases` вызывает скрипт, используемый для преобразования переменных AsciiDoc в переменные TOML. После этого преобразования переменные релизов можно использовать как в AsciiDoc, так и в пользовательских шаблонах Hugo.
+<.> `run-local` запускает веб-сервер hugo на порту 1313 или на случайном свободном порту, если указанный порт уже занят.
+<.> `build` собирает веб-сайт и помещает результат в *~/doc/website/public*.
diff --git a/documentation/content/ru/books/fdp-primer/doc-build/_index.po b/documentation/content/ru/books/fdp-primer/doc-build/_index.po
new file mode 100644
index 0000000000..0d37e7d901
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/doc-build/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-23 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerdoc-build_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:1
+#, no-wrap
+msgid "Describes the FreeBSD Documentation Build Process"
+msgstr "Описывает процесс сборки документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. The FreeBSD Documentation Build Process"
+msgstr "Глава 5. Процесс сборки документации FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:14
+#, no-wrap
+msgid "The FreeBSD Documentation Build Process"
+msgstr "Процесс сборки документации FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:52
+msgid ""
+"This chapter covers organization of the documentation build process and how "
+"man:make[1] is used to control it."
+msgstr ""
+"Эта глава описывает организацию процесса сборки документации и использование "
+"man:make[1] для управления этим процессом."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:54
+#, no-wrap
+msgid "Rendering AsciiDoc into Output"
+msgstr "Преобразование AsciiDoc в выходные форматы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:57
+msgid ""
+"Different types of output can be produced from a single AsciiDoc source file."
+msgstr ""
+"Из одного исходного файла AsciiDoc можно получить различные типы выходных "
+"данных."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:61
+#, no-wrap
+msgid "Formats"
+msgstr "Форматы"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:62
+#, no-wrap
+msgid "File Type"
+msgstr "Тип файла"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:64
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:65
+#, no-wrap
+msgid "`html`"
+msgstr "`html`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:66
+#, no-wrap
+msgid "HTML"
+msgstr "HTML"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:68
+#, no-wrap
+msgid "An `article` or `book` chapter."
+msgstr "Глава статьи (`article`) или книги (`book`)."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:69
+#, no-wrap
+msgid "`pdf`"
+msgstr "`pdf`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:70
+#, no-wrap
+msgid "PDF"
+msgstr "PDF"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:72
+#, no-wrap
+msgid "Portable Document Format."
+msgstr "Portable Document Format."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:73
+#, no-wrap
+msgid "`epub`"
+msgstr "`epub`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:74
+#, no-wrap
+msgid "EPUB"
+msgstr "EPUB"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:76
+#, no-wrap
+msgid ""
+"Electronic Publication.\n"
+"ePub file format."
+msgstr ""
+"Электронная публикация.\n"
+"Формат файла ePub."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:79
+#, no-wrap
+msgid "Rendering to html"
+msgstr "Преобразование в html"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:82
+msgid ""
+"To render the documentation and the website to `html` use one of the "
+"following examples."
+msgstr ""
+"Для преобразования документации и веб-сайта в `html` используйте один из "
+"следующих примеров."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:84
+#, no-wrap
+msgid "Build the documentation"
+msgstr "Собрать документацию"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:91
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:95
+#, no-wrap
+msgid "Build the website"
+msgstr "Собрать веб-сайт"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:102
+#, no-wrap
+msgid ""
+"% cd ~/doc/website\n"
+"% make\n"
+msgstr ""
+"% cd ~/doc/website\n"
+"% make\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:106
+#, no-wrap
+msgid "Build the entire documentation project"
+msgstr "Собрать весь проект документации"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:113
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% make -j2\n"
+msgstr ""
+"% cd ~/doc\n"
+"% make -j2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:117
+msgid "Advanced build examples are given below:"
+msgstr "Ниже приведены примеры сложных сборок:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:119
+#, 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:126
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en es\" HUGO_ARGS=\"--verbose --debug\"\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en es\" HUGO_ARGS=\"--verbose --debug\"\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:130
+#, no-wrap
+msgid "Build and serve the content with Hugo’s internal webserver"
+msgstr "Собрать и предоставить контент с помощью внутреннего веб-сервера Hugo"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:137
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make run\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make run\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:139
+msgid "This webserver runs on `localhost`, port `1313` by default."
+msgstr "Этот веб-сервер по умолчанию работает на `localhost`, порт `1313`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:141
+msgid ""
+"To serve the content with Hugo’s internal webserver binding a specific IP "
+"address and port:"
+msgstr ""
+"Для обслуживания контента с помощью внутреннего веб-сервера Hugo, "
+"привязанного к определенному IP-адресу и порту:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:145
+#, no-wrap
+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:148
+msgid "A `hostname` can also be set as base url to Hugo’s internal webserver:"
+msgstr ""
+"Имя хоста (`hostname`) также может быть установлено в качестве базового URL "
+"для внутреннего веб-сервера Hugo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:152
+#, no-wrap
+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: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:156
+#, no-wrap
+msgid "Build documentation in html for offline usage"
+msgstr "Сборка документации в html для использования в автономном режиме"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:163
+#, 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:166
+msgid "To compress the html output, add `DOC_HTML_ARCHIVE=1`:"
+msgstr "Для сжатия вывода в формате html добавьте `DOC_HTML_ARCHIVE=1`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:171
+#, 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:175
+#, no-wrap
+msgid "Rendering to pdf"
+msgstr "Рендеринг в pdf"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:178
+msgid ""
+"To render the documentation to `pdf`, use one of the following examples."
+msgstr ""
+"Для преобразования документации в `pdf` используйте один из следующих "
+"примеров."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:180
+#, no-wrap
+msgid "Build all documents in pdf"
+msgstr "Собрать все документы в pdf"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:187
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make pdf\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:191
+#, no-wrap
+msgid "Build all articles in pdf"
+msgstr "Собрать все статьи в pdf"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:198
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf-articles\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make pdf-articles\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:202
+#, no-wrap
+msgid "Build all books in pdf"
+msgstr "Собрать все книги в формате pdf"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:209
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf-books\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make pdf-books\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:213
+#, no-wrap
+msgid "Build documents in pdf for specific languages"
+msgstr "Сборка документов в pdf для определённых языков"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:220
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en\" pdf\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en\" pdf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:222
+msgid "This will build all English documents in pdf."
+msgstr "Это соберет все документы на английском языке в формате pdf."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:227
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en fr\" pdf-books\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en fr\" pdf-books\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:229
+msgid "This will build all English and French books in pdf."
+msgstr ""
+"Это соберет все книги на английском и французском языках в формате pdf."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:232
+#, no-wrap
+msgid "The FreeBSD Documentation Build Toolset"
+msgstr "Набор инструментов для сборки документации FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:235
+msgid "These are the tools used to build and install the FDP documentation."
+msgstr "Вот инструменты, используемые для сборки и установки документации FDP."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:237
+msgid "The primary build tool is man:make[1], specifically Berkeley Make."
+msgstr ""
+"Основным инструментом сборки является man:make[1], а именно Berkeley Make."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:238
+msgid "Hugo"
+msgstr "Hugo"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:239
+msgid "AsciiDoctor"
+msgstr "AsciiDoctor"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:240
+msgid "Git"
+msgstr "Git"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:242
+#, no-wrap
+msgid "Understanding the Makefile in the Documentation Tree"
+msgstr "Информация о Makefile в дереве документации"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:245
+msgid ""
+"There are three [.filename]#Makefile# files for building some or all of the "
+"documentation project."
+msgstr ""
+"В проекте документации есть три файла [.filename]#Makefile# для сборки всей "
+"или части документации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:247
+msgid ""
+"The [.filename]#Makefile# in the [.filename]#documentation# directory will "
+"build only the documentation."
+msgstr ""
+"Файл [.filename]#Makefile# в каталоге [.filename]#documentation# "
+"предназначен только для сборки документации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:248
+msgid ""
+"The [.filename]#Makefile# in the [.filename]#website# directory will build "
+"only the website."
+msgstr ""
+"Файл [.filename]#Makefile# в директории [.filename]#website# предназначен "
+"только для сборки веб-сайта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:249
+msgid ""
+"The [.filename]#Makefile# at the top of the tree will build both the "
+"documentation and the website."
+msgstr ""
+"[.filename]#Makefile# в корне дерева исходников собирает как документацию, "
+"так и веб-сайт."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:252
+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 ""
+"Файл [.filename]#Makefile# в подкаталогах также поддерживает `make run` для "
+"обслуживания собранного содержимого с помощью внутреннего веб-сервера Hugo. "
+"По умолчанию этот веб-сервер работает на порту 1313."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:254
+#, no-wrap
+msgid "Documentation Makefile"
+msgstr "Makefile в каталоге documentation"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:257
+msgid "This [.filename]#Makefile# takes the following form:"
+msgstr "Этот [.filename]#Makefile# имеет следующую форму:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:282
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD documentation\n"
+"#\n"
+"# Copyright (c) 2020-2025, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2025, 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 ""
+"# Generate the FreeBSD documentation\n"
+"#\n"
+"# Copyright (c) 2020-2025, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2025, 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:284
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:566
+#, 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:289
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:292
+#, 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 ""
+"# 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"
+
+#. 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:571
+#, 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:301
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:311
+#, 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 ""
+".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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:314
+#, no-wrap
+msgid ""
+"RUBYLIB =\t../shared/lib\n"
+".export\tRUBYLIB\n"
+msgstr ""
+"RUBYLIB =\t../shared/lib\n"
+".export\tRUBYLIB\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:318
+#, no-wrap
+msgid ""
+"RUN_DEPENDS=\t${HUGO_CMD} \\\n"
+"\t\t${LOCALBASE}/bin/asciidoctor \\\n"
+"\t\t${LOCALBASE}/bin/rougify\n"
+msgstr ""
+"RUN_DEPENDS=\t${HUGO_CMD} \\\n"
+"\t\t${LOCALBASE}/bin/asciidoctor \\\n"
+"\t\t${LOCALBASE}/bin/rougify\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:328
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:587
+#, 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 ""
+".ifndef HOSTNAME\n"
+". ifdef BIND\n"
+".HOST=$(BIND)\n"
+". else\n"
+".HOST=localhost\n"
+". endif\n"
+".else\n"
+".HOST=$(HOSTNAME)\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:335
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:342
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:351
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:353
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:608
+#, 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:358
+#, no-wrap
+msgid ""
+".ORDER: requirements <.>\n"
+".ORDER: starting-message\n"
+".ORDER: starting-message build\n"
+".ORDER: build\n"
+msgstr ""
+".ORDER: requirements <.>\n"
+".ORDER: starting-message\n"
+".ORDER: starting-message build\n"
+".ORDER: build\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:361
+#, no-wrap
+msgid ""
+"all: requirements starting-message generate-pgpkeys-txt build\n"
+"run: requirements starting-message generate-pgpkeys-txt run-local\n"
+msgstr ""
+"all: requirements starting-message generate-pgpkeys-txt build\n"
+"run: requirements starting-message generate-pgpkeys-txt run-local\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:364
+#, 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 ""
+"# clean does not call pdf-clean as that is a subset of hugo-clean\n"
+"clean: hugo-clean pgp-clean\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:371
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:376
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:381
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:388
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:390
+#, 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:393
+#, no-wrap
+msgid ""
+"static/pgpkeys/pgpkeys.txt: static/pgpkeys/*key\n"
+"\t${RUBY_CMD} ./tools/global-pgpkeys-creator.rb\n"
+msgstr ""
+"static/pgpkeys/pgpkeys.txt: static/pgpkeys/*key\n"
+"\t${RUBY_CMD} ./tools/global-pgpkeys-creator.rb\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:397
+#, 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 ""
+"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"
+
+#. 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:642
+#, no-wrap
+msgid ""
+"build: .PHONY <.>\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_ARGS}\n"
+msgstr ""
+"build: .PHONY <.>\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_ARGS}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:403
+#, no-wrap
+msgid ""
+"build-offline: .PHONY\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_OFFLINE_ARGS}\n"
+msgstr ""
+"build-offline: .PHONY\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_OFFLINE_ARGS}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:406
+#, no-wrap
+msgid ""
+"pgp-clean: .PHONY\n"
+"\trm -f static/pgpkeys/pgpkeys.txt\n"
+msgstr ""
+"pgp-clean: .PHONY\n"
+"\trm -f static/pgpkeys/pgpkeys.txt\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:409
+#, no-wrap
+msgid ""
+"hugo-clean: .PHONY\n"
+"\trm -rf resources public\n"
+msgstr ""
+"hugo-clean: .PHONY\n"
+"\trm -rf resources public\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:415
+#, 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 ""
+"#\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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:420
+#, 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 ""
+"pdf-books: requirements-pdf\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\t./tools/asciidoctor.sh books ${_lang} pdf\n"
+".endfor\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:425
+#, 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 ""
+"pdf-articles: requirements-pdf\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\t./tools/asciidoctor.sh articles ${_lang} pdf\n"
+".endfor\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:427
+#, 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:434
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:443
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:448
+#, 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 ""
+"#\n"
+"# HTML targets\n"
+"#\n"
+"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:450
+#, 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:454
+#, no-wrap
+msgid ""
+"html-clean-global:\n"
+"\trm -fr ${.CURDIR}/public/index.html\n"
+"\trm -rf pgpkeys js\n"
+msgstr ""
+"html-clean-global:\n"
+"\trm -fr ${.CURDIR}/public/index.html\n"
+"\trm -rf pgpkeys js\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:460
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:465
+#, 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 ""
+"html-clean-books:\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/books/index.html\n"
+".endfor\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:475
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:481
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:487
+#, 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 ""
+"#\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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:500
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:513
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:515
+#, 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:522
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:531
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:534
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:656
+msgid "The `MAINTAINER` flag specifies who is the maintainer of this Makefile."
+msgstr ""
+"Флаг `MAINTAINER` указывает, кто является сопровождающим данного Makefile."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:535
+msgid ""
+"`ALL_LANGUAGES` flag specifies in which languages the table of contents has "
+"to be generated."
+msgstr ""
+"Флаг `ALL_LANGUAGES` указывает, на каких языках должно быть сгенерировано "
+"оглавление."
+
+#. 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 "`RUBY_CMD` flag specifies the location of the Ruby binary."
+msgstr "Флаг `RUBY_CMD` указывает расположение бинарного файла Ruby."
+
+#. 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 "`HUGO_CMD` flag specifies the location of the Hugo binary."
+msgstr "`HUGO_CMD` — флаг, указывающий расположение бинарного файла Hugo."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:538
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:659
+msgid ""
+"`.ORDER` directives are used to ensure multiple make jobs may run without "
+"problem."
+msgstr ""
+"Директивы `.ORDER` используются для обеспечения беспроблемного выполнения "
+"нескольких заданий make."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:539
+msgid ""
+"`all` target builds the documentation and puts the result in *~/doc/"
+"documentation/public*."
+msgstr ""
+"Цель `all` собирает документацию и помещает результат в *~/doc/documentation/"
+"public*."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:540
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:661
+msgid ""
+"`starting-message` shows a message in the CLI to show the user that the "
+"process is running."
+msgstr ""
+"`starting-message` показывает сообщение в CLI, чтобы уведомить пользователя "
+"о том, что процесс выполняется."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:541
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:664
+msgid ""
+"`run-local` runs hugo webserver on port 1313, or a random free port if that "
+"is already in use."
+msgstr ""
+"`run-local` запускает веб-сервер hugo на порту 1313 или на случайном "
+"свободном порту, если указанный порт уже занят."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:542
+msgid ""
+"`build` builds the documentation and puts the result in the *~/doc/"
+"documentation/public*."
+msgstr ""
+"`build` собирает документацию и помещает результат в *~/doc/documentation/"
+"public*."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:544
+#, no-wrap
+msgid "Website Makefile"
+msgstr "Makefile в каталоге website"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:547
+msgid "This [.filename]#Makefile# takes the form of:"
+msgstr "Этот [.filename]#Makefile# имеет следующий вид:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:564
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD website\n"
+"#\n"
+"# Copyright (c) 2020-2025, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2025, 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 ""
+"# Generate the FreeBSD website\n"
+"#\n"
+"# Copyright (c) 2020-2025, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2025, 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:569
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:577
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:597
+#, 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 ""
+".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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:606
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:614
+#, 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 ""
+".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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:618
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:625
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:630
+#, no-wrap
+msgid ""
+"end-message: .PHONY\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+"\t@echo \"Building the website completed on $$(date)\"\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+msgstr ""
+"end-message: .PHONY\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+"\t@echo \"Building the website completed on $$(date)\"\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:632
+#, 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:635
+#, no-wrap
+msgid ""
+"data/releases.toml:\n"
+"\t${RUBY_CMD} ./tools/releases-toml.rb\n"
+msgstr ""
+"data/releases.toml:\n"
+"\t${RUBY_CMD} ./tools/releases-toml.rb\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:639
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:644
+#, 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:647
+#, no-wrap
+msgid ""
+"cgi-permissions:\n"
+"\t@chmod 555 ./public/cgi/*.cgi\n"
+msgstr ""
+"cgi-permissions:\n"
+"\t@chmod 555 ./public/cgi/*.cgi\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:650
+#, no-wrap
+msgid ""
+"hugo-clean:\n"
+"\trm -fr public resources\n"
+msgstr ""
+"hugo-clean:\n"
+"\trm -fr public resources\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:653
+#, no-wrap
+msgid ""
+"releases-clean:\n"
+"\trm -f data/releases.toml\n"
+msgstr ""
+"releases-clean:\n"
+"\trm -f data/releases.toml\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:660
+msgid ""
+"`all` target builds the website and puts the result in *~/doc/website/"
+"public*."
+msgstr ""
+"Цель `all` собирает веб-сайт и помещает результат в *~/doc/website/public*."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:663
+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 ""
+"`generate-releases` вызывает скрипт, используемый для преобразования "
+"переменных AsciiDoc в переменные TOML. После этого преобразования переменные "
+"релизов можно использовать как в AsciiDoc, так и в пользовательских шаблонах "
+"Hugo."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:664
+msgid ""
+"`build` builds the website and puts the result in the *~/doc/website/public*."
+msgstr ""
+"`build` собирает веб-сайт и помещает результат в *~/doc/website/public*."
diff --git a/documentation/content/ru/books/fdp-primer/editor-config/_index.adoc b/documentation/content/ru/books/fdp-primer/editor-config/_index.adoc
new file mode 100644
index 0000000000..7c95bf0bee
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/editor-config/_index.adoc
@@ -0,0 +1,323 @@
+---
+description: 'Конфигурация, используемая в текстовых редакторах в проекте документации FreeBSD'
+next: books/fdp-primer/trademarks
+params:
+ path: /books/fdp-primer/editor-config/
+prev: books/fdp-primer/writing-style
+showBookMenu: true
+tags: ["editor", "configuration", "vim", "emacs", "FreeBSD"]
+title: 'Глава 13. Настройка редактора'
+weight: 13
+---
+
+[[editor-config]]
+= Настройка редактора
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 13
+: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::[]
+
+Настройка конфигурации текстового редактора может ускорить и упростить работу с документами, а также помочь им соответствовать рекомендациям FDP.
+
+[[editor-config-vim]]
+== Vim
+
+Установите из package:editors/vim[], затем следуйте инструкциям по настройке в разделе crossref:editor-config[editor-config-vim-config,Конфигурация]. Более опытные пользователи могут использовать полноценный линтер, например link:https://github.com/dense-analysis/ale[Ale], который также может работать как клиент link:https://langserver.org/[Language Server Protocol] для Vim.
+
+[[editor-config-vim-use]]
+=== Использование
+
+Создатели страниц Справочника могут использовать следующие сочетания клавиш для переформатирования:
+
+* Нажмите kbd:[P], чтобы переформатировать абзацы или выделенный текст в режиме Visual.
+* Нажмите kbd:[T], чтобы заменить группы из восьми пробелов на табуляцию.
+
+В документацию добавлен линтер link:https://vale.sh[Vale] для проверки грамматических и стилистических ошибок. Vale поддерживает различные редакторы и IDE.
+
+Vale может быть уже установлен как зависимость мета-порта package:textproc/docproj[]. Если нет, установите package:textproc/vale[] с помощью:
+
+[source, console]
+....
+$ pkg install vale
+....
+
+Установите link:https://github.com/dense-analysis/ale[Ale] для интеграции в package:editors/vim[], чтобы использовать 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
+....
+
+Пользователи, использующие менеджеры плагинов для package:editors/vim[], не нуждаются в вышеописанном и должны следовать инструкциям своего менеджера плагинов для установки link:https://github.com/dense-analysis/ale[Ale].
+
+В данный момент из-за ошибки в link:https://vale.sh[Vale] необходимо скопировать конфигурацию link:https://vale.sh[Vale] в домашний каталог. Учитывая, что репозиторий был склонирован в [.filename]#~/doc#, скопируйте следующим образом:
+
+[source, console?prompt=%]
+....
+% cp -R ~/doc/.vale* ~/
+....
+
+[[editor-config-vim-config]]
+=== Конфигурация
+
+Отредактируйте файл [.filename]#~/.vimrc#, добавив следующие строки в конец файла:
+
+[source.programlisting, viml]
+.`~/.vimrc`
+....
+if has("autocmd")
+ 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\+$/
+ 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
+endfunction " ShowSpecial()
+
+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]
+======
+Приведённая выше конфигурация автоматически удалит конечную строку, конечные пробелы и множественные пробелы, которые могут отображать дополнительные нежелательные изменения в выводе `git diff`. В таких случаях обязательно укажите это в сообщении коммита.
+======
+
+[[editor-config-emacs]]
+== Emacs
+
+Установка из package:editors/emacs[] или package:editors/emacs-devel[].
+
+[[editor-config-emacs-igor]]
+=== Автоматизированная проверка правописания с Flycheck и Igor
+
+Пакет link:https://www.flycheck.org/[Flycheck] доступен из link:https://melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA). Если MELPA ещё не добавлен в packages-archives Emacs, его можно добавить, выполнив
+
+[source, emacs-lisp]
+....
+(add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t)
+....
+
+Добавьте строку в файл инициализации Emacs (один из [.filename]#~/.emacs#, [.filename]#~/.emacs.el# или [.filename]#~/.emacs.d/init.el#), чтобы сделать это изменение постоянным.
+
+Для установки Flycheck выполните
+
+[source, emacs-lisp]
+....
+(package-install 'flycheck)
+....
+
+Создайте проверяющий модуль Flycheck для package:textproc/igor[] с помощью выполнения
+
+[source, emacs-lisp]
+....
+(flycheck-define-checker igor
+ "FreeBSD Documentation Project sanity checker.
+
+See URLs https://www.freebsd.org/docproj/ and
+http://www.freshports.org/textproc/igor/."
+ :command ("igor" "-X" source-inplace)
+ :error-parser flycheck-parse-checkstyle
+ :modes (nxml-mode)
+ :standard-input t)
+
+ (add-to-list 'flycheck-checkers 'igor 'append)
+....
+
+Еще раз, добавьте эти строки в файл инициализации Emacs, чтобы изменения стали постоянными.
+
+[[editor-config-emacs-specifc]]
+=== Специфичные настройки документации FreeBSD
+
+Чтобы применить настройки, специфичные для проекта документации FreeBSD, создайте файл [.filename]#.dir-locals.el# в корневом каталоге репозитория документации и добавьте в него следующие строки:
+
+[source, emacs-lisp]
+....
+;;; Directory Local Variables
+;;; For more information see (info "(emacs) Directory Variables")
+
+((nxml-mode
+ (eval . (turn-on-auto-fill))
+ (fill-column . 70)
+ (eval . (require 'flycheck))
+ (eval . (flycheck-mode 1))
+ (flycheck-checker . igor)
+ (eval . (add-to-list 'rng-schema-locating-files "~/.emacs.d/schema/schemas.xml"))))
+....
+
+[[editor-config-nano]]
+== nano
+
+Установка из package:editors/nano[].
+
+[[editor-config-nano-config]]
+=== Конфигурация
+
+В текущей версии nano нет файла подсветки синтаксиса для adoc/asciidoc. Поэтому создадим его с нуля, используя текстовый редактор для создания нового файла или добавления строк в [.filename]#~/.nanorc# со следующим содержимым:
+
+[source]
+.`~/.nanorc`
+....
+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
+# (after zero or more tabs) should be a tab
+color ,blue "^([TAB]*[ ]{8})+"
+# tabs after spaces
+color ,yellow "( )+TAB"
+# highlight indents that have an odd number of spaces
+color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}"
+....
+
+Обработать файл для создания встроенных табуляций:
+
+[source, console?prompt=%]
+....
+% perl -i'' -pe 's/TAB/\t/g' ~/.nanorc
+....
+
+[[editor-config-nano-use]]
+=== Использование
+
+Укажите дополнительные полезные опции при запуске редактора:
+
+[source, console?prompt=%]
+....
+% nano -AKipwz -T8 _index.adoc
+....
+
+Пользователи man:csh[1] могут определить алиас в [.filename]#~/.cshrc#, чтобы автоматизировать эти параметры:
+
+[source, shell]
+....
+alias nano "nano -AKipwz -r 70 -T8"
+....
+
+После определения псевдонима параметры будут добавлены автоматически:
+
+[source, console?prompt=%]
+....
+% nano _index.adoc
+....
diff --git a/documentation/content/ru/books/fdp-primer/editor-config/_index.po b/documentation/content/ru/books/fdp-primer/editor-config/_index.po
new file mode 100644
index 0000000000..3d65adbf1e
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/editor-config/_index.po
@@ -0,0 +1,697 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-08-19 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primereditor-config_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Конфигурация, используемая в текстовых редакторах в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. Editor Configuration"
+msgstr "Глава 13. Настройка редактора"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:14
+#, no-wrap
+msgid "Editor Configuration"
+msgstr "Настройка редактора"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:52
+msgid ""
+"Adjusting your text editor configuration can make working on document files "
+"quicker and easier, and help documents conform to FDP guidelines."
+msgstr ""
+"Настройка конфигурации текстового редактора может ускорить и упростить "
+"работу с документами, а также помочь им соответствовать рекомендациям FDP."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:54
+#, no-wrap
+msgid "Vim"
+msgstr "Vim"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:58
+msgid ""
+"Install from package:editors/vim[], then follow the configuration "
+"instructions in crossref:editor-config[editor-config-vim-config, "
+"Configuration]. 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 ""
+"Установите из package:editors/vim[], затем следуйте инструкциям по настройке "
+"в разделе crossref:editor-config[editor-config-vim-config,Конфигурация]. "
+"Более опытные пользователи могут использовать полноценный линтер, например "
+"link:https://github.com/dense-analysis/ale[Ale], который также может "
+"работать как клиент link:https://langserver.org/[Language Server Protocol] "
+"для Vim."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:60
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:309
+#, no-wrap
+msgid "Use"
+msgstr "Использование"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:63
+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:65
+msgid ""
+"Press kbd:[P] to reformat paragraphs or text that has been selected in "
+"Visual mode."
+msgstr ""
+"Нажмите kbd:[P], чтобы переформатировать абзацы или выделенный текст в "
+"режиме Visual."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:66
+msgid "Press kbd:[T] to replace groups of eight spaces with a tab."
+msgstr ""
+"Нажмите kbd:[T], чтобы заменить группы из восьми пробелов на табуляцию."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:69
+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 ""
+"В документацию добавлен линтер link:https://vale.sh[Vale] для проверки "
+"грамматических и стилистических ошибок. Vale поддерживает различные "
+"редакторы и IDE."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:72
+msgid ""
+"Vale may already be installed as a dependency of the package:textproc/"
+"docproj[] meta-port. If not, install package:textproc/vale[] with:"
+msgstr ""
+"Vale может быть уже установлен как зависимость мета-порта package:textproc/"
+"docproj[]. Если нет, установите package:textproc/vale[] с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:76
+#, 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:79
+msgid ""
+"Install link:https://github.com/dense-analysis/ale[Ale] to integrate into "
+"package:editors/vim[], for using package:textproc/vale[]."
+msgstr ""
+"Установите link:https://github.com/dense-analysis/ale[Ale] для интеграции в "
+"package:editors/vim[], чтобы использовать package:textproc/vale[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:84
+#, 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 ""
+"% 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:87
+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 ""
+"Пользователи, использующие менеджеры плагинов для package:editors/vim[], не "
+"нуждаются в вышеописанном и должны следовать инструкциям своего менеджера "
+"плагинов для установки link:https://github.com/dense-analysis/ale[Ale]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:90
+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 ""
+"В данный момент из-за ошибки в link:https://vale.sh[Vale] необходимо "
+"скопировать конфигурацию link:https://vale.sh[Vale] в домашний каталог. "
+"Учитывая, что репозиторий был склонирован в [.filename]#~/doc#, скопируйте "
+"следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:94
+#, 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:97
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:243
+#, no-wrap
+msgid "Configuration"
+msgstr "Конфигурация"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:100
+msgid "Edit [.filename]#~/.vimrc#, adding these lines to the end of the file:"
+msgstr ""
+"Отредактируйте файл [.filename]#~/.vimrc#, добавив следующие строки в конец "
+"файла:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:102
+#, no-wrap
+msgid "`~/.vimrc`"
+msgstr "`~/.vimrc`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:108
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:113
+#, no-wrap
+msgid ""
+"function 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"
+" return 0\n"
+"endfunction \" Set_Highlights_Adoc()\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:119
+#, 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:125
+#, 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 ""
+"function ShowSpecial()\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:138
+#, 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:145
+#, 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:158
+#, 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:166
+#, 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:172
+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 ""
+"Приведённая выше конфигурация автоматически удалит конечную строку, конечные "
+"пробелы и множественные пробелы, которые могут отображать дополнительные "
+"нежелательные изменения в выводе `git diff`. В таких случаях обязательно "
+"укажите это в сообщении коммита."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:175
+#, no-wrap
+msgid "Emacs"
+msgstr "Emacs"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:178
+msgid "Install from package:editors/emacs[] or package:editors/emacs-devel[]."
+msgstr ""
+"Установка из package:editors/emacs[] или package:editors/emacs-devel[]."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:180
+#, no-wrap
+msgid "Automated Proofreading with Flycheck and Igor"
+msgstr "Автоматизированная проверка правописания с Flycheck и Igor"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:184
+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 ""
+"Пакет link:https://www.flycheck.org/[Flycheck] доступен из link:https://"
+"melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA). Если MELPA "
+"ещё не добавлен в packages-archives Emacs, его можно добавить, выполнив"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:188
+#, 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:191
+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 ""
+"Добавьте строку в файл инициализации Emacs (один из [.filename]#~/.emacs#, "
+"[.filename]#~/.emacs.el# или [.filename]#~/.emacs.d/init.el#), чтобы сделать "
+"это изменение постоянным."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:193
+msgid "To install Flycheck, evaluate"
+msgstr "Для установки Flycheck выполните"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:197
+#, 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:200
+msgid "Create a Flycheck checker for package:textproc/igor[] by evaluating"
+msgstr ""
+"Создайте проверяющий модуль Flycheck для package:textproc/igor[] с помощью "
+"выполнения"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:205
+#, no-wrap
+msgid ""
+"(flycheck-define-checker igor\n"
+" \"FreeBSD Documentation Project sanity checker.\n"
+msgstr ""
+"(flycheck-define-checker igor\n"
+" \"FreeBSD Documentation Project sanity checker.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:212
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:214
+#, 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:217
+msgid ""
+"Again, add these lines to Emacs's initialization file to make the changes "
+"permanent."
+msgstr ""
+"Еще раз, добавьте эти строки в файл инициализации Emacs, чтобы изменения "
+"стали постоянными."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:219
+#, no-wrap
+msgid "FreeBSD Documentation Specific Settings"
+msgstr "Специфичные настройки документации FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:222
+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 ""
+"Чтобы применить настройки, специфичные для проекта документации FreeBSD, "
+"создайте файл [.filename]#.dir-locals.el# в корневом каталоге репозитория "
+"документации и добавьте в него следующие строки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:227
+#, no-wrap
+msgid ""
+";;; Directory Local Variables\n"
+";;; For more information see (info \"(emacs) Directory Variables\")\n"
+msgstr ""
+";;; Directory Local Variables\n"
+";;; For more information see (info \"(emacs) Directory Variables\")\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:235
+#, 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 ""
+"((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"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:238
+#, no-wrap
+msgid "nano"
+msgstr "nano"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:241
+msgid "Install from package:editors/nano[]."
+msgstr "Установка из package:editors/nano[]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:247
+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 ""
+"В текущей версии nano нет файла подсветки синтаксиса для adoc/asciidoc. "
+"Поэтому создадим его с нуля, используя текстовый редактор для создания "
+"нового файла или добавления строк в [.filename]#~/.nanorc# со следующим "
+"содержимым:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:249
+#, no-wrap
+msgid "`~/.nanorc`"
+msgstr "`~/.nanorc`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:299
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:302
+msgid "Process the file to create embedded tabs:"
+msgstr "Обработать файл для создания встроенных табуляций:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:306
+#, 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:312
+msgid "Specify additional helpful options when running the editor:"
+msgstr "Укажите дополнительные полезные опции при запуске редактора:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:316
+#, no-wrap
+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:319
+msgid ""
+"Users of man:csh[1] can define an alias in [.filename]#~/.cshrc# to automate "
+"these options:"
+msgstr ""
+"Пользователи man:csh[1] могут определить алиас в [.filename]#~/.cshrc#, "
+"чтобы автоматизировать эти параметры:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:323
+#, 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:326
+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:330
+#, no-wrap
+msgid "% nano _index.adoc\n"
+msgstr "% nano _index.adoc\n"
diff --git a/documentation/content/ru/books/fdp-primer/examples/_index.adoc b/documentation/content/ru/books/fdp-primer/examples/_index.adoc
new file mode 100644
index 0000000000..239beff506
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/examples/_index.adoc
@@ -0,0 +1,139 @@
+---
+description: 'Пример статьи и книги, используемых в проекте документации FreeBSD'
+params:
+ path: /books/fdp-primer/examples/
+prev: books/fdp-primer/see-also/
+showBookMenu: true
+tags: ["examples", "tutorial", "AsciiDoctor", "Book", "Article"]
+title: 'Приложение A. Примеры'
+weight: 16
+---
+
+[appendix]
+[[examples]]
+= Примеры
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: A
+: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::[]
+
+Эти примеры не являются исчерпывающими — они не содержат всех элементов, которые может быть желательно использовать, особенно в преамбуле документа. Для дополнительных примеров использования AsciiDoctor изучите исходный AsciiDoc код для этого и других документов, доступных в Git-репозитории *doc* или онлайн, начиная с link:https://cgit.freebsd.org/doc/[https://cgit.freebsd.org/doc/].
+
+[[examples-asciidoctor-book]]
+== *Книга* AsciiDoctor
+
+.*Книга* AsciiDoctor
+[example]
+====
+[.programlisting]
+....
+---
+title: An Example Book
+authors:
+ - author: The FreeBSD Documentation Project
+copyright: 1995-2021 The FreeBSD Documentation Project
+releaseinfo: ""
+trademarks: ["general"]
+---
+
+= Пример книги
+: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
+
+ifeval::["{backend}" == "html5"]
+:chapters-path: content/ru/books/bookname/
+endif::[]
+
+ifeval::["{backend}" == "pdf"]
+:chapters-path:
+endif::[]
+
+ifeval::["{backend}" == "epub3"]
+:chapters-path:
+endif::[]
+
+[abstract] Аннотация
+
+Раздел аннотации
+
+'''
+
+toc::[]
+
+:sectnums!:
+
+\include::{chapters-path}preface/_index.adoc[leveloffset=+1]
+
+:sectnums:
+
+\include::{chapters-path}parti.adoc[lines=7..18]
+
+\include::{chapters-path}chapter-name/_index.adoc[leveloffset=+1]
+....
+
+====
+
+[[examples-asciidoctor-article]]
+== *Статья* AsciiDoctor
+
+.*Статья* AsciiDoctor
+[example]
+====
+[.programlisting]
+....
+---
+title: An Example Article
+authors:
+ - author: Your name and surname
+ email: foo@example.com
+trademarks: ["general"]
+---
+
+= Пример статьи
+:doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental:
+
+'''
+
+toc::[]
+
+== Мой первый раздел
+
+Это первый раздел в моей статье.
+
+=== Мой первый подраздел
+
+Это первый подраздел в моей статье.
+
+....
+
+====
diff --git a/documentation/content/ru/books/fdp-primer/examples/_index.po b/documentation/content/ru/books/fdp-primer/examples/_index.po
new file mode 100644
index 0000000000..7cc6adac70
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/examples/_index.po
@@ -0,0 +1,261 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-07-03 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerexamples_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Пример статьи и книги, используемых в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:1
+#, no-wrap
+msgid "Appendix A. Examples"
+msgstr "Приложение A. Примеры"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:14
+#, no-wrap
+msgid "Examples"
+msgstr "Примеры"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:53
+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 ""
+"Эти примеры не являются исчерпывающими — они не содержат всех элементов, "
+"которые может быть желательно использовать, особенно в преамбуле документа. "
+"Для дополнительных примеров использования AsciiDoctor изучите исходный "
+"AsciiDoc код для этого и других документов, доступных в Git-репозитории "
+"*doc* или онлайн, начиная с link:https://cgit.freebsd.org/doc/[https://"
+"cgit.freebsd.org/doc/]."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:55
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:57
+#, no-wrap
+msgid "AsciiDoctor *book*"
+msgstr "*Книга* AsciiDoctor"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:62
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:132
+#, no-wrap
+msgid "---\n"
+msgstr "---\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:69
+#, 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 ""
+"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"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:71
+#, no-wrap
+msgid "An Example Book"
+msgstr "Пример книги"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:89
+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 ""
+":doctype: book\n"
+":toc: macro\n"
+":toclevels: 2\n"
+":icons: font\n"
+":xrefstyle: basic\n"
+":relfileprefix: ../\n"
+":outfilesuffix:\n"
+":sectnums:\n"
+":sectnumlevels: 6\n"
+":partnums:\n"
+":chapter-signifier: Chapter\n"
+":part-signifier: Part\n"
+":source-highlighter: rouge\n"
+":experimental:\n"
+":skip-front-matter:\n"
+":book: true\n"
+":pdf: false"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:93
+msgid ""
+"ifeval::[\"{backend}\" == \"html5\"] :chapters-path: content/en/books/"
+"bookname/ endif::[]"
+msgstr ""
+"ifeval::[\"{backend}\" == \"html5\"]\n"
+":chapters-path: content/en/books/bookname/\n"
+"endif::[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:97
+msgid "ifeval::[\"{backend}\" == \"pdf\"] :chapters-path: endif::[]"
+msgstr ""
+"ifeval::[\"{backend}\" == \"pdf\"]\n"
+":chapters-path:\n"
+"endif::[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:101
+msgid "ifeval::[\"{backend}\" == \"epub3\"] :chapters-path: endif::[]"
+msgstr ""
+"ifeval::[\"{backend}\" == \"epub3\"]\n"
+":chapters-path:\n"
+"endif::[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:104
+msgid "[abstract] Abstract"
+msgstr "[abstract] Аннотация"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:106
+msgid "Abstract section"
+msgstr "Раздел аннотации"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:108
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:151
+msgid "'''"
+msgstr "'''"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:110
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:153
+msgid "toc::[]"
+msgstr "toc::[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:112
+msgid ":sectnums!:"
+msgstr ":sectnums!:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:114
+msgid "\\include::{chapters-path}preface/_index.adoc[leveloffset=+1]"
+msgstr "\\include::{chapters-path}preface/_index.adoc[leveloffset=+1]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:116
+msgid ":sectnums:"
+msgstr ":sectnums:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:118
+msgid "\\include::{chapters-path}parti.adoc[lines=7..18]"
+msgstr "\\include::{chapters-path}parti.adoc[lines=7..18]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:120
+msgid "\\include::{chapters-path}chapter-name/_index.adoc[leveloffset=+1]"
+msgstr "\\include::{chapters-path}chapter-name/_index.adoc[leveloffset=+1]"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:125
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:127
+#, no-wrap
+msgid "AsciiDoctor *article*"
+msgstr "*Статья* AsciiDoctor"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:138
+#, 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 ""
+"title: An Example Article\n"
+"authors:\n"
+" - author: Your name and surname\n"
+" email: foo@example.com\n"
+"trademarks: [\"general\"]\n"
+"---\n"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:140
+#, no-wrap
+msgid "An Example Article"
+msgstr "Пример статьи"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:149
+msgid ""
+":doctype: article :toc: macro :toclevels: 1 :icons: "
+"font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental:"
+msgstr ""
+":doctype: article\n"
+":toc: macro\n"
+":toclevels: 1\n"
+":icons: font\n"
+":sectnums:\n"
+":sectnumlevels: 6\n"
+":source-highlighter: rouge\n"
+":experimental:"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:154
+#, no-wrap
+msgid "My First Section"
+msgstr "Мой первый раздел"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:157
+msgid "This is the first section in my article."
+msgstr "Это первый раздел в моей статье."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:158
+#, no-wrap
+msgid "My First Sub-Section"
+msgstr "Мой первый подраздел"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:161
+msgid "This is the first sub-section in my article."
+msgstr "Это первый подраздел в моей статье."
diff --git a/documentation/content/ru/books/fdp-primer/manual-pages/_index.adoc b/documentation/content/ru/books/fdp-primer/manual-pages/_index.adoc
new file mode 100644
index 0000000000..806d04fc45
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/manual-pages/_index.adoc
@@ -0,0 +1,531 @@
+---
+description: 'Как работать со Cправочником FreeBSD'
+next: books/fdp-primer/writing-style
+params:
+ path: /books/fdp-primer/manual-pages/
+prev: books/fdp-primer/weblate
+showBookMenu: true
+tags: ["manual pages", "introduction", "guide", "reference"]
+title: 'Глава 11. Справочник'
+weight: 11
+---
+
+[[manual-pages]]
+= Справочник
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 11
+: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::[]
+
+[[manual-pages-introduction]]
+== Введение
+
+_Справочник_, часто сокращаемый до _man-страниц_, изначально задумывались как легкодоступные напоминания о синтаксисе команд, деталях драйверов устройств или форматах конфигурационных файлов. Со временем они стали крайне полезным справочным материалом для быстрого ознакомления прямо из командной строки для пользователей, системных администраторов и программистов.
+
+Хотя они предназначены скорее как справочные материалы, а не учебные руководства, разделы EXAMPLES в manual pages часто содержат подробные примеры использования.
+
+Страницы Справочника обычно отображаются интерактивно с помощью команды man:man[1]. Когда пользователь вводит `man ls`, выполняется поиск страницы Справочника, соответствующей `ls`. Первый найденный результат отображается.
+
+[[manual-pages-sections]]
+== Разделы
+
+Страницы справочника (man-страницы) сгруппированы по _разделам_. Каждый раздел содержит man-страницы для определённой категории документации:
+
+[.informaltable]
+[cols="1,8", options="header"]
+|===
+| Номер раздела
+| Категория
+
+
+|1
+|Общие команды
+
+|2
+|Системные вызовы
+
+|3
+|Функции библиотек
+
+|4
+|Интерфейсы ядра
+
+|5
+|Форматы файлов
+
+|6
+|Игры
+
+|7
+|Разное
+
+|8
+|Системный администратор
+
+|9
+|Разработчик ядра
+|===
+
+[[manual-pages-markup]]
+== Язык разметки
+
+Для man-страниц использовались различные формы разметки и программы отображения. FreeBSD использовала man:groff[7] и более новую man:mandoc[1]. Большинство существующих man-страниц FreeBSD, а также все новые, используют разметку в формате man:mdoc[7]. Это простая построчная разметка, обладающая достаточной выразительностью. В основном она семантическая: части текста помечаются по их назначению, а не по тому, как они должны выглядеть при отображении. Существует некоторая разметка, основанная на внешнем виде, которую обычно лучше избегать.
+
+Исходный код страницы справочника обычно интерпретируется и отображается на экране в интерактивном режиме. Исходные файлы могут быть обычными текстовыми файлами или сжатыми с помощью man:gzip[1] для экономии места.
+
+Страницы справочника также могут быть преобразованы в другие форматы, включая PostScript для печати или генерации PDF. См. man:man[1].
+
+[[manual-pages-markup-sections]]
+=== Разделы Справочника
+
+Страницы справочника состоят из нескольких стандартных разделов. Каждый раздел имеет заголовок в верхнем регистре, а разделы для определённого типа man-страниц следуют в строго определённом порядке. Для man-страниц категории 1 (Общие команды) разделы идут в следующем порядке:
+
+[.informaltable]
+[cols="2,4", options="header"]
+|===
+| Название Раздела
+| Описание
+
+
+|NAME (ИМЯ)
+|Название команды
+
+|SYNOPSIS (СИНТАКСИС)
+|Формат опций и аргументов
+
+|DESCRIPTION (ОПИСАНИЕ)
+|Описание назначения и использования
+
+|ENVIRONMENT (ОКРУЖЕНИЕ)
+|Настройки окружения, влияющие на работу
+
+|EXIT STATUS (СТАТУС ВЫХОДА)
+|Коды ошибок, возвращаемые при завершении
+
+|EXAMPLES (ПРИМЕРЫ)
+|Примеры использования
+
+|COMPATIBILITY (СОВМЕСТИМОСТЬ)
+|Совместимость с другими реализациями
+
+|SEE ALSO (СМ. ТАКЖЕ)
+|Перекрестная ссылка на связанные страницы руководства
+
+|STANDARDS (СТАНДАРТЫ)
+|Совместимость со стандартами, такими как POSIX
+
+|HISTORY (ИСТОРИЯ)
+|История реализации
+
+|BUGS (ИЗВЕСТНЫЕ ОШИБКИ)
+|Известные ошибки
+
+|AUTHORS (АВТОРЫ)
+|Люди, которые создали команду или написали справочную страницу.
+|===
+
+Некоторые разделы являются необязательными, и сочетание разделов для конкретного типа справочной страницы может различаться. Примеры наиболее распространённых типов приведены далее в этой главе.
+
+[[manual-pages-markup-macros]]
+=== Макросы
+
+Разметка man:mdoc[7] основана на _макросах_. Строки, начинающиеся с точки, содержат макрокоманды, каждая длиной в две или три буквы. Например, рассмотрим эту часть man-страницы man:ls[1]:
+
+[.programlisting]
+....
+.Dd December 1, 2015 <.>
+.Dt LS 1
+.Sh NAME <.>
+.Nm ls
+.Nd list directory contents
+.Sh SYNOPSIS <.>
+.Nm <.>
+.Op Fl -libxo <.>
+.Op Fl ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1, <.>
+.Op Fl D Ar format <.>
+.Op Ar <.>
+.Sh DESCRIPTION <.>
+For each operand that names a
+.Ar file
+of a type other than
+directory,
+.Nm
+displays its name as well as any requested,
+associated information.
+For each operand that names a
+.Ar file
+of type directory,
+.Nm
+displays the names of files contained
+within that directory, as well as any requested, associated
+information.
+....
+
+<.> Определены _Дата документа_ (.Dd) и _Название документа_ (.Dt).
+<.> Для раздела NAME определяется _Заголовок раздела_ (.Sh). Затем определяется _Имя_ (.Nm) команды и _Описание имени_ (.Nd) в одну строку.
+<.> Начинается раздел SYNOPSIS (.Sh). В этом разделе описываются параметры командной строки и аргументы, которые принимаются.
+<.> _Имя_ (`.Nm`) уже определено, и его повторение здесь просто отображает заданное значение в тексте.
+<.> Отображается _необязательный_ _флаг_ (.Op Fl) `-libxo`. Макрос `Fl` добавляет тире в начало флагов, поэтому в руководстве он отображается как `--libxo`.
+<.> Отображается длинный список необязательных флагов, состоящих из одного символа.
+<.> Определён необязательный флаг `-D`. Если указан флаг `-D`, за ним должен следовать _аргумент_. Аргумент представляет собой _формат_ — строку, которая указывает man:ls[1], что и как отображать. Подробности о строке формата приведены далее на странице руководства.
+<.> Определен последний необязательный аргумент. Поскольку для аргумента не указано имя, используется значение по умолчанию `file ...`.
+<.> _Заголовок раздела_ (.Sh) для раздела DESCRIPTION определен.
+
+При отображении с помощью команды `man ls` результат выводится на экран следующим образом:
+
+[.programlisting]
+....
+LS(1) FreeBSD General Commands Manual LS(1)
+
+NAME
+ ls - list directory contents
+
+SYNOPSIS
+ ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]
+ [file ...]
+
+DESCRIPTION
+ For each operand that names a file of a type other than directory, ls
+ displays its name as well as any requested, associated information. For
+ each operand that names a file of type directory, ls displays the names
+ of files contained within that directory, as well as any requested,
+ associated information.
+....
+
+Необязательные значения указаны в квадратных скобках.
+
+[[manual-pages-markup-guidelines]]
+=== Руководство по разметке
+
+Язык разметки man:mdoc[7] не является очень строгим. Для ясности и согласованности проект FreeBSD Documentation добавляет некоторые дополнительные рекомендации по стилю:
+
+Только первая буква макросов пишется с заглавной буквы::
+Всегда используйте заглавную букву для первого символа макроса и строчные буквы для остальных символов.
+
+Начинайте новые предложения с новых строк::
+Начинайте новое предложение с новой строки, не начинайте его на той же строке, что и существующее предложение.
+
+Обновите `.Dd` при внесении значительных изменений в справочную страницу::
+_Дата документа_ сообщает читателю, когда страница руководства была последний раз обновлена. Важно обновлять её при внесении значительных изменений в страницы руководства. Незначительные правки, такие как исправления орфографии или пунктуации, которые не влияют на использование, могут быть сделаны без обновления `.Dd`.
+
+Приведите примеры::
+Показывайте читателю примеры, когда это возможно. Даже простые примеры ценны, потому что то, что тривиально для автора, не обязательно тривиально для читателя. Хорошей целью являются три примера. Простой пример демонстрирует минимальные требования, серьезный пример показывает реальное использование, а углубленный пример демонстрирует неочевидную или нестандартную функциональность.
+
+Включить лицензию BSD::
+Включите лицензию BSD в новые руководства. Предпочтительная лицензия доступна в extref:{committers-guide}[Руководстве коммиттера].
+
+[[manual-pages-markup-tricks]]
+=== Приемы Разметки
+
+Добавьте пробел перед пунктуацией на строке с макросами. Пример:
+
+[.programlisting]
+....
+.Sh SEE ALSO
+.Xr geom 4 ,
+.Xr boot0cfg 8 ,
+.Xr geom 8 ,
+.Xr gptboot 8
+....
+
+Обратите внимание, как запятые в конце строк `.Xr` размещены после пробела. Макрос `.Xr` ожидает два параметра: имя внешней страницы руководства и номер раздела. Пробел отделяет пунктуацию от номера раздела. Без пробела внешние ссылки будут некорректно указывать на разделы `4,` или `8,`.
+
+[[manual-pages-markup-important-macros]]
+=== Важные макросы
+
+Здесь будут показаны некоторые очень распространённые макросы. Для большего количества примеров использования см. man:mdoc[7], man:groff_mdoc[7] или выполните поиск реальных примеров в каталогах [.filename]#/usr/share/man/man*#. Например, чтобы найти примеры макроса `.Bd` (_Begin display_):
+
+[source, shell]
+....
+% find /usr/share/man/man* | xargs zgrep '.Bd'
+....
+
+[[manual-pages-markup-important-macros-organizational]]
+==== Организационные Макросы
+
+Некоторые макросы используются для определения логических блоков страницы руководства.
+
+[.informaltable]
+[cols="1,8", options="header"]
+|===
+| Организационные Макро
+| Используйте
+
+
+|`.Sh`
+|Заголовок раздела.
+За ним следует название раздела, традиционно записанное в верхнем регистре.
+Можно рассматривать их как названия глав.
+
+|`.Ss`
+|Подзаголовок раздела.
+За ним следует название подраздела.
+Используется для разделения раздела `.Sh` на подразделы.
+
+|`.Bl`
+|Начало списка (Begin list). Начать перечень элементов.
+
+|`.El`
+|Конец списка (End List).
+
+|`.Bd`
+|Начало отображения (Begin display).
+Начать специальную область текста, например, область с отступом.
+
+|`.Ed`
+|Завершить отображение (End display).
+|===
+
+[[manual-pages-markup-important-macros-inline]]
+==== Встроенные макросы
+
+Многие макросы используются для разметки текста внутри строк.
+
+[.informaltable]
+[cols="1,8", options="header"]
+|===
+| Встроенный макрос
+| Используйте
+
+
+|`.Nm`
+|Имя (Name).
+При первом использовании вызывается с именем в качестве параметра, затем используется без параметра для отображения уже определенного имени.
+
+|`.Pa`
+|Путь к файлу (Path to a file).
+Используется для обозначения имен файлов и путей к каталогам.
+|===
+
+[[manual-pages-sample-structures]]
+== Пример структуры страницы руководства
+
+Этот раздел демонстрирует минимально желаемое содержание man-страниц для нескольких распространённых категорий руководств.
+
+[[manual-pages-sample-structures-section-1-8]]
+=== Раздел 1 или 8 — Команда
+
+Предпочтительная базовая структура для раздела 1 или 8 — Команда:
+
+[.programlisting]
+....
+.Dd August 25, 2017
+.Dt EXAMPLECMD 8
+.Os
+.Sh NAME
+.Nm examplecmd
+.Nd "command to demonstrate section 1 and 8 man pages"
+.Sh SYNOPSIS
+.Nm
+.Op Fl v
+.Sh DESCRIPTION
+The
+.Nm
+utility does nothing except demonstrate a trivial but complete
+manual page for a section 1 or 8 command.
+.Sh SEE ALSO
+.Xr exampleconf 5
+.Sh AUTHORS
+.An Firstname Lastname Aq Mt flastname@example.com
+....
+
+[[manual-pages-sample-structures-section-4]]
+=== Раздел 4 — Драйверы устройств
+
+Предпочтительная базовая структура для раздела 4 — драйверы устройств:
+
+[.programlisting]
+....
+.Dd August 25, 2017
+.Dt EXAMPLEDRIVER 4
+.Os
+.Sh NAME
+.Nm exampledriver
+.Nd "driver to demonstrate section 4 man pages"
+.Sh SYNOPSIS
+To compile this driver into the kernel, add this line to the
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device exampledriver"
+.Ed
+.Pp
+To load the driver as a module at boot, add this line to
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+exampledriver_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides an opportunity to show a skeleton or template
+file for section 4 manual pages.
+.Sh HARDWARE
+The
+.Nm
+driver supports these cards from the aptly-named Nonexistent
+Technologies:
+.Pp
+.Bl -bullet -compact
+.It
+NT X149.2 (single and dual port)
+.It
+NT X149.8 (single port)
+.El
+.Sh DIAGNOSTICS
+.Bl -diag
+.It "flashing green light"
+Something bad happened.
+.It "flashing red light"
+Something really bad happened.
+.It "solid black light"
+Power cord is unplugged.
+.El
+.Sh SEE ALSO
+.Xr example 8
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 49.2 .
+.Sh AUTHORS
+.An Firstname Lastname Aq Mt flastname@example.com
+....
+
+[[manual-pages-sample-structures-section-5]]
+=== Раздел 5 — Файл конфигурации
+
+Предпочтительная базовая структура для раздела 5 — файл конфигурации:
+
+[.programlisting]
+....
+.Dd August 25, 2017
+.Dt EXAMPLECONF 5
+.Os
+.Sh NAME
+.Nm example.conf
+.Nd "config file to demonstrate section 5 man pages"
+.Sh DESCRIPTION
+.Nm
+is an example configuration file.
+.Sh SEE ALSO
+.Xr example 8
+.Sh AUTHORS
+.An Firstname Lastname Aq Mt flastname@example.com
+....
+
+[[manual-pages-testing]]
+== Тестирование
+
+Проверка новой страницы руководства может быть непростой задачей. К счастью, существуют инструменты, которые могут помочь в этом. Некоторые из них, например man:man[1], не ищут в текущем каталоге. Хорошей практикой является добавление префикса `./` к имени файла, если новая страница руководства находится в текущем каталоге. Также можно использовать абсолютный путь.
+
+Используйте линтер man:mandoc[1] для проверки на ошибки парсинга:
+
+[source, shell]
+....
+% mandoc -T lint ./mynewmanpage.8
+....
+
+Используйте package:textproc/igor[] для проверки страниц Справочника:
+
+[source, shell]
+....
+% igor ./mynewmanpage.8
+....
+
+Еще один полезный инструмент — package:textproc/vale[]. Он не поддерживает синтаксис man:mdoc[7], но обработанную страницу руководства можно прочитать из стандартного ввода:
+
+[source, shell]
+....
+% man ls | vale
+....
+
+package:textproc/vale[] обладает высокой степенью настраиваемости. Рекомендуется ознакомиться с его документацией.
+
+Используйте man:man[1] для проверки конечного результата ваших изменений:
+
+[source, shell]
+....
+% man ./mynewmanpage.8
+....
+
+Вы можете использовать man:col[1] для фильтрации вывода man:man[1] и удаления backspace-символов перед загрузкой результата в ваш любимый редактор для проверки орфографии:
+
+[source, shell]
+....
+% man ./mynewmanpage.8 | col -b | vim -R -
+....
+
+Проверка орфографии с использованием полнофункциональных словарей рекомендуется и может быть выполнена с помощью package:textproc/hunspell[] или package:textproc/aspell[] в сочетании с package:textproc/en-hunspell[] или package:textproc/en-aspell[] соответственно. Например:
+
+[source, shell]
+....
+% aspell check --lang=en --mode=nroff ./mynewmanpage.8
+....
+
+[[manual-pages-examples-as-templates]]
+== Примеры страниц Справочника для использования в качестве шаблонов
+
+Некоторые страницы Справочника могут служить подробными примерами.
+
+[.informaltable]
+[cols="1,4", options="header"]
+|===
+| Страница Справочника
+| Путь к расположению исходного кода
+
+
+|man:cp[1]
+|[.filename]#/usr/src/bin/cp/cp.1#
+
+|man:vt[4]
+|[.filename]#/usr/src/share/man/man4/vt.4#
+
+|man:crontab[5]
+|[.filename]#/usr/src/usr.sbin/cron/crontab/crontab.5#
+
+|man:gpart[8]
+|[.filename]#/usr/src/sbin/geom/class/part/gpart.8#
+|===
+
+[[manual-pages-resources]]
+== Ресурсы
+
+Ресурсы для авторов справочных страниц:
+
+* man:man[1]
+* man:mandoc[1]
+* man:style.mdoc[5]
+* man:groff_mdoc[7]
+* http://manpages.bsd.lv/mdoc.html[Практические руководства UNIX: mdoc]
+* http://manpages.bsd.lv/history.html[История man-страниц UNIX]
diff --git a/documentation/content/ru/books/fdp-primer/manual-pages/_index.po b/documentation/content/ru/books/fdp-primer/manual-pages/_index.po
new file mode 100644
index 0000000000..cd9d2510ed
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/manual-pages/_index.po
@@ -0,0 +1,1454 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primermanual-pages_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
+#, no-wrap
+msgid "How to work with the FreeBSD Manual Pages"
+msgstr "Как работать со Cправочником FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Manual Pages"
+msgstr "Глава 11. Справочник"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:14
+#, no-wrap
+msgid "Manual Pages"
+msgstr "Справочник"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:56
+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 ""
+"_Справочник_, часто сокращаемый до _man-страниц_, изначально задумывались "
+"как легкодоступные напоминания о синтаксисе команд, деталях драйверов "
+"устройств или форматах конфигурационных файлов. Со временем они стали крайне "
+"полезным справочным материалом для быстрого ознакомления прямо из командной "
+"строки для пользователей, системных администраторов и программистов."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:58
+msgid ""
+"Although intended as reference material rather than tutorials, the EXAMPLES "
+"sections of manual pages often provide detailed use case."
+msgstr ""
+"Хотя они предназначены скорее как справочные материалы, а не учебные "
+"руководства, разделы EXAMPLES в manual pages часто содержат подробные "
+"примеры использования."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:62
+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 ""
+"Страницы Справочника обычно отображаются интерактивно с помощью команды "
+"man:man[1]. Когда пользователь вводит `man ls`, выполняется поиск страницы "
+"Справочника, соответствующей `ls`. Первый найденный результат отображается."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:64
+#, no-wrap
+msgid "Sections"
+msgstr "Разделы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:68
+msgid ""
+"Manual pages are grouped into _sections_. Each section contains manual "
+"pages for a specific category of documentation:"
+msgstr ""
+"Страницы справочника (man-страницы) сгруппированы по _разделам_. Каждый "
+"раздел содержит man-страницы для определённой категории документации:"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:73
+#, no-wrap
+msgid "Section Number"
+msgstr "Номер раздела"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:76
+#, no-wrap
+msgid "Category"
+msgstr "Категория"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:77
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:79
+#, no-wrap
+msgid "General Commands"
+msgstr "Общие команды"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:80
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:82
+#, no-wrap
+msgid "System Calls"
+msgstr "Системные вызовы"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:83
+#, no-wrap
+msgid "3"
+msgstr "3"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:85
+#, no-wrap
+msgid "Library Functions"
+msgstr "Функции библиотек"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:86
+#, no-wrap
+msgid "4"
+msgstr "4"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:88
+#, no-wrap
+msgid "Kernel Interfaces"
+msgstr "Интерфейсы ядра"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:89
+#, no-wrap
+msgid "5"
+msgstr "5"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:91
+#, no-wrap
+msgid "File Formats"
+msgstr "Форматы файлов"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:92
+#, no-wrap
+msgid "6"
+msgstr "6"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:94
+#, no-wrap
+msgid "Games"
+msgstr "Игры"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:95
+#, no-wrap
+msgid "7"
+msgstr "7"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:97
+#, no-wrap
+msgid "Miscellaneous"
+msgstr "Разное"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:98
+#, no-wrap
+msgid "8"
+msgstr "8"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:100
+#, no-wrap
+msgid "System Manager"
+msgstr "Системный администратор"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:101
+#, no-wrap
+msgid "9"
+msgstr "9"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:102
+#, no-wrap
+msgid "Kernel Developer"
+msgstr "Разработчик ядра"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:105
+#, no-wrap
+msgid "Markup"
+msgstr "Язык разметки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:113
+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 ""
+"Для man-страниц использовались различные формы разметки и программы "
+"отображения. FreeBSD использовала man:groff[7] и более новую "
+"man:mandoc[1]. Большинство существующих man-страниц FreeBSD, а также все "
+"новые, используют разметку в формате man:mdoc[7]. Это простая построчная "
+"разметка, обладающая достаточной выразительностью. В основном она "
+"семантическая: части текста помечаются по их назначению, а не по тому, как "
+"они должны выглядеть при отображении. Существует некоторая разметка, "
+"основанная на внешнем виде, которую обычно лучше избегать."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:116
+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 ""
+"Исходный код страницы справочника обычно интерпретируется и отображается на "
+"экране в интерактивном режиме. Исходные файлы могут быть обычными "
+"текстовыми файлами или сжатыми с помощью man:gzip[1] для экономии места."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:119
+msgid ""
+"Manual pages can also be rendered to other formats, including PostScript for "
+"printing or PDF generation. See man:man[1]."
+msgstr ""
+"Страницы справочника также могут быть преобразованы в другие форматы, "
+"включая PostScript для печати или генерации PDF. См. man:man[1]."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:121
+#, no-wrap
+msgid "Manual Page Sections"
+msgstr "Разделы Справочника"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:126
+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 ""
+"Страницы справочника состоят из нескольких стандартных разделов. Каждый "
+"раздел имеет заголовок в верхнем регистре, а разделы для определённого типа "
+"man-страниц следуют в строго определённом порядке. Для man-страниц "
+"категории 1 (Общие команды) разделы идут в следующем порядке:"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:131
+#, no-wrap
+msgid "Section Name"
+msgstr "Название Раздела"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:134
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:135
+#, no-wrap
+msgid "NAME"
+msgstr "NAME (ИМЯ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:137
+#, no-wrap
+msgid "Name of the command"
+msgstr "Название команды"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:138
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SYNOPSIS (СИНТАКСИС)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:140
+#, no-wrap
+msgid "Format of options and arguments"
+msgstr "Формат опций и аргументов"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:141
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIPTION (ОПИСАНИЕ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:143
+#, no-wrap
+msgid "Description of purpose and usage"
+msgstr "Описание назначения и использования"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:144
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ENVIRONMENT (ОКРУЖЕНИЕ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:146
+#, no-wrap
+msgid "Environment settings that affect operation"
+msgstr "Настройки окружения, влияющие на работу"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:147
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr "EXIT STATUS (СТАТУС ВЫХОДА)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:149
+#, no-wrap
+msgid "Error codes returned on exit"
+msgstr "Коды ошибок, возвращаемые при завершении"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:150
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXAMPLES (ПРИМЕРЫ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:152
+#, no-wrap
+msgid "Examples of usage"
+msgstr "Примеры использования"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:153
+#, no-wrap
+msgid "COMPATIBILITY"
+msgstr "COMPATIBILITY (СОВМЕСТИМОСТЬ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:155
+#, no-wrap
+msgid "Compatibility with other implementations"
+msgstr "Совместимость с другими реализациями"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:156
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "SEE ALSO (СМ. ТАКЖЕ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:158
+#, no-wrap
+msgid "Cross-reference to related manual pages"
+msgstr "Перекрестная ссылка на связанные страницы руководства"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:159
+#, no-wrap
+msgid "STANDARDS"
+msgstr "STANDARDS (СТАНДАРТЫ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:161
+#, no-wrap
+msgid "Compatibility with standards like POSIX"
+msgstr "Совместимость со стандартами, такими как POSIX"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:162
+#, no-wrap
+msgid "HISTORY"
+msgstr "HISTORY (ИСТОРИЯ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:164
+#, no-wrap
+msgid "History of implementation"
+msgstr "История реализации"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:165
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS (ИЗВЕСТНЫЕ ОШИБКИ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:167
+#, no-wrap
+msgid "Known bugs"
+msgstr "Известные ошибки"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:168
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTHORS (АВТОРЫ)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:169
+#, 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:173
+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:175
+#, no-wrap
+msgid "Macros"
+msgstr "Макросы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:180
+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 ""
+"Разметка man:mdoc[7] основана на _макросах_. Строки, начинающиеся с точки, "
+"содержат макрокоманды, каждая длиной в две или три буквы. Например, "
+"рассмотрим эту часть man-страницы man:ls[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:209
+#, 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 ""
+".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"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:212
+msgid "A _Document date_ and _Document title_ are defined."
+msgstr "Определены _Дата документа_ (.Dd) и _Название документа_ (.Dt)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:214
+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 ""
+"Для раздела NAME определяется _Заголовок раздела_ (.Sh). Затем определяется "
+"_Имя_ (.Nm) команды и _Описание имени_ (.Nd) в одну строку."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:216
+msgid ""
+"The SYNOPSIS section begins. This section describes the command-line "
+"options and arguments accepted."
+msgstr ""
+"Начинается раздел SYNOPSIS (.Sh). В этом разделе описываются параметры "
+"командной строки и аргументы, которые принимаются."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:217
+msgid ""
+"_Name_ (`.Nm`) has already been defined, and repeating it here just displays "
+"the defined value in the text."
+msgstr ""
+"_Имя_ (`.Nm`) уже определено, и его повторение здесь просто отображает "
+"заданное значение в тексте."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:219
+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 ""
+"Отображается _необязательный_ _флаг_ (.Op Fl) `-libxo`. Макрос `Fl` "
+"добавляет тире в начало флагов, поэтому в руководстве он отображается как `--"
+"libxo`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:220
+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:224
+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 ""
+"Определён необязательный флаг `-D`. Если указан флаг `-D`, за ним должен "
+"следовать _аргумент_. Аргумент представляет собой _формат_ — строку, "
+"которая указывает man:ls[1], что и как отображать. Подробности о строке "
+"формата приведены далее на странице руководства."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:226
+msgid ""
+"A final optional argument is defined. Since no name is specified for the "
+"argument, the default of `file ...` is used."
+msgstr ""
+"Определен последний необязательный аргумент. Поскольку для аргумента не "
+"указано имя, используется значение по умолчанию `file ...`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:227
+msgid "The _Section header_ for the DESCRIPTION section is defined."
+msgstr "_Заголовок раздела_ (.Sh) для раздела DESCRIPTION определен."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:229
+msgid ""
+"When rendered with the command `man ls`, the result displayed on the screen "
+"looks like this:"
+msgstr ""
+"При отображении с помощью команды `man ls` результат выводится на экран "
+"следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:233
+#, no-wrap
+msgid "LS(1) FreeBSD General Commands Manual LS(1)\n"
+msgstr "LS(1) FreeBSD General Commands Manual LS(1)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:236
+#, no-wrap
+msgid ""
+"NAME\n"
+" ls - list directory contents\n"
+msgstr ""
+"NAME\n"
+" ls - list directory contents\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:240
+#, no-wrap
+msgid ""
+"SYNOPSIS\n"
+" ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]\n"
+" [file ...]\n"
+msgstr ""
+"SYNOPSIS\n"
+" ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]\n"
+" [file ...]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:247
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:250
+msgid "Optional values are shown inside square brackets."
+msgstr "Необязательные значения указаны в квадратных скобках."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:252
+#, no-wrap
+msgid "Markup Guidelines"
+msgstr "Руководство по разметке"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:256
+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 ""
+"Язык разметки man:mdoc[7] не является очень строгим. Для ясности и "
+"согласованности проект FreeBSD Documentation добавляет некоторые "
+"дополнительные рекомендации по стилю:"
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:257
+#, 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:259
+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:260
+#, no-wrap
+msgid "Begin new sentences on new lines"
+msgstr "Начинайте новые предложения с новых строк"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:262
+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:263
+#, no-wrap
+msgid "Update `.Dd` when making non-trivial changes to a manual page"
+msgstr "Обновите `.Dd` при внесении значительных изменений в справочную страницу"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:267
+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 ""
+"_Дата документа_ сообщает читателю, когда страница руководства была "
+"последний раз обновлена. Важно обновлять её при внесении значительных "
+"изменений в страницы руководства. Незначительные правки, такие как "
+"исправления орфографии или пунктуации, которые не влияют на использование, "
+"могут быть сделаны без обновления `.Dd`."
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:268
+#, no-wrap
+msgid "Give examples"
+msgstr "Приведите примеры"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:273
+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:274
+#, no-wrap
+msgid "Include the BSD license"
+msgstr "Включить лицензию BSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:277
+msgid ""
+"Include the BSD license on new manual pages. The preferred license is "
+"available from the extref:{committers-guide}[Committer's Guide]."
+msgstr ""
+"Включите лицензию BSD в новые руководства. Предпочтительная лицензия "
+"доступна в extref:{committers-guide}[Руководстве коммиттера]."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:279
+#, no-wrap
+msgid "Markup Tricks"
+msgstr "Приемы Разметки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:282
+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:290
+#, no-wrap
+msgid ""
+".Sh SEE ALSO\n"
+".Xr geom 4 ,\n"
+".Xr boot0cfg 8 ,\n"
+".Xr geom 8 ,\n"
+".Xr gptboot 8\n"
+msgstr ""
+".Sh SEE ALSO\n"
+".Xr geom 4 ,\n"
+".Xr boot0cfg 8 ,\n"
+".Xr geom 8 ,\n"
+".Xr gptboot 8\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:296
+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 ""
+"Обратите внимание, как запятые в конце строк `.Xr` размещены после пробела. "
+"Макрос `.Xr` ожидает два параметра: имя внешней страницы руководства и номер "
+"раздела. Пробел отделяет пунктуацию от номера раздела. Без пробела внешние "
+"ссылки будут некорректно указывать на разделы `4,` или `8,`."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:298
+#, no-wrap
+msgid "Important Macros"
+msgstr "Важные макросы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:303
+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 ""
+"Здесь будут показаны некоторые очень распространённые макросы. Для большего "
+"количества примеров использования см. man:mdoc[7], man:groff_mdoc[7] или "
+"выполните поиск реальных примеров в каталогах [.filename]#/usr/share/man/"
+"man*#. Например, чтобы найти примеры макроса `.Bd` (_Begin display_):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:307
+#, no-wrap
+msgid "% find /usr/share/man/man* | xargs zgrep '.Bd'\n"
+msgstr "% find /usr/share/man/man* | xargs zgrep '.Bd'\n"
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:310
+#, no-wrap
+msgid "Organizational Macros"
+msgstr "Организационные Макросы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:313
+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:318
+#, no-wrap
+msgid "Organizational Macro"
+msgstr "Организационные Макро"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:321
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:357
+#, no-wrap
+msgid "Use"
+msgstr "Используйте"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:322
+#, no-wrap
+msgid "`.Sh`"
+msgstr "`.Sh`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:326
+#, 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 ""
+"Заголовок раздела.\n"
+"За ним следует название раздела, традиционно записанное в верхнем регистре.\n"
+"Можно рассматривать их как названия глав."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:327
+#, no-wrap
+msgid "`.Ss`"
+msgstr "`.Ss`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:331
+#, no-wrap
+msgid ""
+"Subsection header.\n"
+"Followed by the name of the subsection.\n"
+"Used to divide a `.Sh` section into subsections."
+msgstr ""
+"Подзаголовок раздела.\n"
+"За ним следует название подраздела.\n"
+"Используется для разделения раздела `.Sh` на подразделы."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:332
+#, no-wrap
+msgid "`.Bl`"
+msgstr "`.Bl`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:334
+#, no-wrap
+msgid "Begin list. Start a list of items."
+msgstr "Начало списка (Begin list). Начать перечень элементов."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:335
+#, no-wrap
+msgid "`.El`"
+msgstr "`.El`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:337
+#, no-wrap
+msgid "End a list."
+msgstr "Конец списка (End List)."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:338
+#, no-wrap
+msgid "`.Bd`"
+msgstr "`.Bd`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:341
+#, no-wrap
+msgid ""
+"Begin display.\n"
+"Begin a special area of text, like an indented area."
+msgstr ""
+"Начало отображения (Begin display).\n"
+"Начать специальную область текста, например, область с отступом."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:342
+#, no-wrap
+msgid "`.Ed`"
+msgstr "`.Ed`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:343
+#, no-wrap
+msgid "End display."
+msgstr "Завершить отображение (End display)."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:346
+#, no-wrap
+msgid "Inline Macros"
+msgstr "Встроенные макросы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:349
+msgid "Many macros are used to mark up inline text."
+msgstr "Многие макросы используются для разметки текста внутри строк."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:354
+#, no-wrap
+msgid "Inline Macro"
+msgstr "Встроенный макрос"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:358
+#, no-wrap
+msgid "`.Nm`"
+msgstr "`.Nm`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:361
+#, 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 ""
+"Имя (Name).\n"
+"При первом использовании вызывается с именем в качестве параметра, затем используется без параметра для отображения уже определенного имени."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:362
+#, no-wrap
+msgid "`.Pa`"
+msgstr "`.Pa`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:364
+#, no-wrap
+msgid ""
+"Path to a file.\n"
+"Used to mark up filenames and directory paths."
+msgstr ""
+"Путь к файлу (Path to a file).\n"
+"Используется для обозначения имен файлов и путей к каталогам."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:367
+#, no-wrap
+msgid "Sample Manual Page Structures"
+msgstr "Пример структуры страницы руководства"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:370
+msgid ""
+"This section shows minimal desired man page contents for several common "
+"categories of manual pages."
+msgstr ""
+"Этот раздел демонстрирует минимально желаемое содержание man-страниц для "
+"нескольких распространённых категорий руководств."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:372
+#, no-wrap
+msgid "Section 1 or 8 Command"
+msgstr "Раздел 1 или 8 — Команда"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:375
+msgid "The preferred basic structure for a section 1 or 8 command:"
+msgstr "Предпочтительная базовая структура для раздела 1 или 8 — Команда:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:396
+#, 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 ""
+".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"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:399
+#, no-wrap
+msgid "Section 4 Device Driver"
+msgstr "Раздел 4 — Драйверы устройств"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:402
+msgid "The preferred basic structure for a section 4 device driver:"
+msgstr "Предпочтительная базовая структура для раздела 4 — драйверы устройств:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:458
+#, 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 ""
+".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"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:461
+#, no-wrap
+msgid "Section 5 Configuration File"
+msgstr "Раздел 5 — Файл конфигурации"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:464
+msgid "The preferred basic structure for a section 5 configuration file:"
+msgstr "Предпочтительная базовая структура для раздела 5 — файл конфигурации:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:480
+#, 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 ""
+".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"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:483
+#, no-wrap
+msgid "Testing"
+msgstr "Тестирование"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:490
+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 ""
+"Проверка новой страницы руководства может быть непростой задачей. К "
+"счастью, существуют инструменты, которые могут помочь в этом. Некоторые из "
+"них, например man:man[1], не ищут в текущем каталоге. Хорошей практикой "
+"является добавление префикса `./` к имени файла, если новая страница "
+"руководства находится в текущем каталоге. Также можно использовать "
+"абсолютный путь."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:492
+msgid "Use man:mandoc[1]'s linter to check for parsing errors:"
+msgstr "Используйте линтер man:mandoc[1] для проверки на ошибки парсинга:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:496
+#, no-wrap
+msgid "% mandoc -T lint ./mynewmanpage.8\n"
+msgstr "% mandoc -T lint ./mynewmanpage.8\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:499
+msgid "Use package:textproc/igor[] to proofread the manual page:"
+msgstr "Используйте package:textproc/igor[] для проверки страниц Справочника:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:503
+#, no-wrap
+msgid "% igor ./mynewmanpage.8\n"
+msgstr "% igor ./mynewmanpage.8\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:508
+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 ""
+"Еще один полезный инструмент — package:textproc/vale[]. Он не поддерживает "
+"синтаксис man:mdoc[7], но обработанную страницу руководства можно прочитать "
+"из стандартного ввода:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:512
+#, 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:516
+msgid ""
+"package:textproc/vale[] is highly configurable. It is advised to read its "
+"documentation."
+msgstr ""
+"package:textproc/vale[] обладает высокой степенью настраиваемости. "
+"Рекомендуется ознакомиться с его документацией."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:518
+msgid "Use man:man[1] to check the final result of your changes:"
+msgstr ""
+"Используйте man:man[1] для проверки конечного результата ваших изменений:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:522
+#, 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:525
+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 ""
+"Вы можете использовать man:col[1] для фильтрации вывода man:man[1] и "
+"удаления backspace-символов перед загрузкой результата в ваш любимый "
+"редактор для проверки орфографии:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:529
+#, 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:534
+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 ""
+"Проверка орфографии с использованием полнофункциональных словарей "
+"рекомендуется и может быть выполнена с помощью package:textproc/hunspell[] "
+"или package:textproc/aspell[] в сочетании с package:textproc/en-hunspell[] "
+"или package:textproc/en-aspell[] соответственно. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:538
+#, 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:541
+#, no-wrap
+msgid "Example Manual Pages to Use as Templates"
+msgstr "Примеры страниц Справочника для использования в качестве шаблонов"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:544
+msgid "Some manual pages are suitable as in-depth examples."
+msgstr "Некоторые страницы Справочника могут служить подробными примерами."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:549
+#, no-wrap
+msgid "Manual Page"
+msgstr "Страница Справочника"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:552
+#, no-wrap
+msgid "Path to Source Location"
+msgstr "Путь к расположению исходного кода"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:553
+#, no-wrap
+msgid "man:cp[1]"
+msgstr "man:cp[1]"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:555
+#, 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:556
+#, no-wrap
+msgid "man:vt[4]"
+msgstr "man:vt[4]"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:558
+#, 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:559
+#, no-wrap
+msgid "man:crontab[5]"
+msgstr "man:crontab[5]"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:561
+#, 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:562
+#, no-wrap
+msgid "man:gpart[8]"
+msgstr "man:gpart[8]"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:563
+#, 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:566
+#, no-wrap
+msgid "Resources"
+msgstr "Ресурсы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:569
+msgid "Resources for manual page writers:"
+msgstr "Ресурсы для авторов справочных страниц:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:571
+msgid "man:man[1]"
+msgstr "man:man[1]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:572
+msgid "man:mandoc[1]"
+msgstr "man:mandoc[1]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:573
+msgid "man:style.mdoc[5]"
+msgstr "man:style.mdoc[5]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:574
+msgid "man:groff_mdoc[7]"
+msgstr "man:groff_mdoc[7]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:575
+msgid "http://manpages.bsd.lv/mdoc.html[Practical UNIX Manuals: mdoc]"
+msgstr "http://manpages.bsd.lv/mdoc.html[Практические руководства UNIX: mdoc]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:575
+msgid "http://manpages.bsd.lv/history.html[History of UNIX Manpages]"
+msgstr "http://manpages.bsd.lv/history.html[История man-страниц UNIX]"
diff --git a/documentation/content/ru/books/fdp-primer/overview/_index.adoc b/documentation/content/ru/books/fdp-primer/overview/_index.adoc
new file mode 100644
index 0000000000..040a5a239a
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/overview/_index.adoc
@@ -0,0 +1,321 @@
+---
+description: 'Обзор процесса создания документации FreeBSD'
+next: books/fdp-primer/tools
+params:
+ path: /books/fdp-primer/overview/
+prev: books/fdp-primer/preface
+showBookMenu: true
+tags: ["overview", "FreeBSD Documentation Project", "quick start"]
+title: 'Глава 1. Обзор'
+weight: 2
+---
+
+[[overview]]
+= Обзор
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 1
+: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::[]
+
+Добро пожаловать в Проект документации FreeBSD (FDP). Качественная документация крайне важна для успеха FreeBSD, и мы очень высоко ценим ваш вклад.
+
+Этот документ описывает организацию FDP, как писать и отправлять документацию, а также как эффективно использовать доступные инструменты.
+
+Все желающие могут внести свой вклад в FDP. Готовность помочь — единственное требование для участия.
+
+Это руководство показывает, как:
+
+* Понять роль документации и её место в экосистеме.
+* Определите, какие части FreeBSD поддерживаются FDP.
+* Установить необходимые инструменты и файлы документации.
+* Внести изменения в документацию.
+* Представить изменения для проверки и включения в документацию FreeBSD.
+
+[[overview-documentation-ecosystem]]
+== Документация в экосистеме FreeBSD
+
+Все документы создаются для пользы читателей, а не их авторов или сопровождающих. Они должны адаптироваться к читателю, а не ожидать, что читатель адаптируется к ним.
+
+Никогда не вините читателя за:
+
+* невозможность легко или вообще использовать документ
+* если документ показался ему непонятным
+* непонимание документа или того, как его применить
+* если он не нашел явный ответ или шаги, чтобы логически прийти к нему
+
+Вместо этого подтвердите, что документ:
+
+* недоступный
+* запутанный
+* трудно понимаемый или применимый
+* неполный
+
+Затем создайте документ:
+
+* более доступный
+* менее запутанный
+* более ясный
+* более полный
+
+Используйте следующие методы:
+
+* Примените link:https://webaim.org/intro/#principles[лучшие практики доступности], чтобы исправить выявленную проблему и любые подобные, которые обнаружите
+* переработайте или уточните запутанную структуру или язык
+* добавьте соответствующие примеры к части, которая трудна для понимания или применения
+* заполните пробелы или добавьте недостающие промежуточные этапы
+
+[[overview-quick-start]]
+== Быстрый старт
+
+Некоторые подготовительные шаги необходимо выполнить перед редактированием документации FreeBSD. Сначала подпишитесь на рассылку {freebsd-doc}. Некоторые участники команды также общаются в IRC-канале `#bsddocs` на http://www.efnet.org/[EFnet]. Эти люди могут помочь с вопросами или проблемами, связанными с документацией.
+
+[[freebsd-installation-process]]
+=== Процесс установки FreeBSD
+
+[.procedure]
+====
+. Установите эти пакеты. _Мета-порт_ `docproj` устанавливает все приложения, необходимые для работы с документацией FreeBSD.
++
+[source, shell]
+....
+# pkg install docproj
+....
++
+. Установите локальную рабочую копию документации из репозитория FreeBSD в [.filename]#~/doc# (см. crossref:working-copy[working-copy,Рабочая копия]).
++
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/doc.git ~/doc
+....
++
+. Отредактируйте файлы документации, которые требуют изменений. Если файлу нужны значительные изменения, обратитесь за советом в список рассылки.
++
+Просмотрите вывод и отредактируйте файл, чтобы исправить указанные проблемы, затем повторно запустите команду для поиска оставшихся проблем. Повторяйте, пока все ошибки не будут устранены.
++
+. *_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
+....
++
+Для сокращения времени компиляции может быть скомпилирован только один язык:
++
+[source, shell]
+....
+% make DOC_LANG=en
+....
++
+Результаты сборки сохраняются в [.filename]#~/doc/documentation/public/en/articles/# и [.filename]#~/doc/documentation/public/en/books/#.
++
+. Просмотрите вывод сборки и убедитесь, что правки не содержат опечаток, проблем с версткой или ошибок. Если в процессе сборки обнаружены ошибки, отредактируйте проблемные файлы, чтобы исправить все возникшие проблемы, затем снова запустите команду сборки, пока все ошибки не будут устранены.
++
+. Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с помощью `git diff`. Например:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение в вашей локальной ветке и создайте патч с помощью `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Патч, созданный с помощью `git format-patch`, будет содержать идентификатор автора и адреса электронной почты, что упрощает применение разработчиками (с помощью `git am`) и правильное указание авторства.
++
+[IMPORTANT]
+======
+Чтобы упростить применение патча коммиттерами в их рабочей копии дерева документации, пожалуйста, сгенерируйте файл [.filename]#.diff# из корня вашего дерева документации.
+======
++
+В приведенном выше примере были внесены изменения в раздел *bsdinstall* Руководства.
++
+. Отправьте патч или diff-файл с помощью веб-системы https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report]. При использовании веб-формы укажите в поле Summary _[patch] краткое описание проблемы_. Выберите Component `Documentation`. В поле Description введите краткое описание изменений и любые важные детали о них. Используйте кнопку btn:[Add an attachment], чтобы прикрепить патч или diff-файл. Наконец, нажмите кнопку btn:[Submit Bug], чтобы отправить ваш diff в систему отчетов об ошибках.
+====
+
+[[gnu-linux-installation-process]]
+=== Процесс установки GNU/Linux
+
+[.procedure]
+====
+. Установите эти пакеты в системах на основе apt, таких как Debian или Ubuntu. В других дистрибутивах GNU/Linux названия пакетов могут отличаться. В случае сомнений обратитесь к менеджеру пакетов вашего дистрибутива.
++
+[source, shell]
+....
+# apt install hugo ruby-asciidoctor ruby-asciidoctor-pdf ruby-rouge git bmake
+....
++
+. Установите локальную рабочую копию документации из репозитория FreeBSD в [.filename]#~/doc# (см. crossref:working-copy[working-copy,Рабочая копия]).
++
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/doc.git ~/doc
+....
++
+. Отредактируйте файлы документации, которые требуют изменений. Если файлу нужны значительные изменения, обратитесь за советом в список рассылки.
++
+Просмотрите вывод и отредактируйте файлы, чтобы исправить обнаруженные проблемы, затем снова запустите команду, чтобы найти оставшиеся проблемы. Повторяйте, пока все ошибки не будут устранены.
++
+. Всегда собирайте и тестируйте изменения перед их отправкой. Запуск `bmake` в подкаталогах `documentation` или `website` сгенерирует документацию в формате HTML.
++
+[source, shell]
+....
+% bmake run LOCALBASE=/usr
+....
++
+. Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с помощью `git diff`. Например:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение в вашей локальной ветке и создайте патч с помощью `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Патч, созданный с помощью `git format-patch`, будет содержать идентификатор автора и адреса электронной почты, что упрощает применение разработчиками (с помощью `git am`) и правильное указание авторства.
++
+[IMPORTANT]
+======
+Чтобы упростить применение патча коммиттерами в их рабочей копии дерева документации, пожалуйста, сгенерируйте файл [.filename]#.diff# из корня вашего дерева документации.
+======
++
+. Отправьте патч или diff-файл с помощью веб-системы https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report]. При использовании веб-формы укажите в поле _Summary_ краткое описание проблемы. Выберите компонент `Documentation`. В поле _Description_ введите краткое описание проблемы из поля _Summary_ и добавьте _patch_ в поле _Keywords_. Используйте кнопку btn:[Add an attachment], чтобы прикрепить патч или diff-файл. Наконец, нажмите кнопку btn:[Submit Bug], чтобы отправить ваш diff в систему отчетов об ошибках.
+====
+
+[[mac-os-installation-process]]
+=== Процесс установки macOS(R)
+
+[.procedure]
+====
+
+. Установите эти пакеты с помощью link:https://brew.sh/[Homebrew] и link:https://rubygems.org/[RubyGem].
++
+[source, shell]
+....
+$ brew install hugo ruby git bmake
+....
++
+. Добавьте Ruby в Path.
++
+[source, shell]
+....
+$ echo 'export PATH="$(brew --prefix ruby)/bin:$PATH"' >> ~/.zshrc
+$ echo 'export PATH="$(brew --prefix hugo)/bin:$PATH"' >> ~/.zshrc
+$ echo 'export GEM_PATH="$(gem environment gemdir)"' >> ~/.zshrc
+$ echo 'export PATH="${GEM_PATH}/bin:$PATH"' >> ~/.zshrc
+$ source ~/.zshrc
+....
+. Установите пакет rouge с помощью RubyGem.
++
+[source, shell]
+....
+$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3
+....
++
+. Установите локальную рабочую копию документации из репозитория FreeBSD в [.filename]#~/doc# (см. crossref:working-copy[working-copy,Рабочая копия]).
++
+[source, shell]
+....
+$ git clone https://git.FreeBSD.org/doc.git ~/doc
+....
++
+. Отредактируйте файлы документации, которые требуют изменений. Если файлу нужны значительные изменения, обратитесь за советом в список рассылки.
++
+Просмотрите вывод и отредактируйте файлы, чтобы исправить обнаруженные проблемы, затем снова запустите команду, чтобы найти оставшиеся проблемы. Повторяйте, пока все ошибки не будут устранены.
++
+. Всегда собирайте и тестируйте изменения перед их отправкой. Запуск `bmake` в подкаталогах `documentation` или `website` сгенерирует документацию в формате HTML.
++
+[source, shell]
+....
+$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby
+....
+. Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с помощью `git diff`. Например:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение в вашей локальной ветке и создайте патч с помощью `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Патч, созданный с помощью `git format-patch`, будет содержать идентификатор автора и адреса электронной почты, что упрощает применение разработчиками (с помощью `git am`) и правильное указание авторства.
++
+[IMPORTANT]
+======
+Чтобы упростить применение патча коммиттерами в их рабочей копии дерева документации, пожалуйста, сгенерируйте файл [.filename]#.diff# из корня вашего дерева документации.
+======
++
+. Отправьте патч или diff-файл с помощью веб-системы https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report]. При использовании веб-формы укажите в поле _Summary_ краткое описание проблемы. Выберите компонент `Documentation`. В поле _Description_ введите краткое описание проблемы из поля _Summary_ и добавьте _patch_ в поле _Keywords_. Используйте кнопку btn:[Add an attachment], чтобы прикрепить патч или diff-файл. Наконец, нажмите кнопку btn:[Submit Bug], чтобы отправить ваш diff в систему отчетов об ошибках.
+====
+
+[[overview-doc]]
+== Набор документации FreeBSD
+
+FDP отвечает за четыре категории документации FreeBSD.
+
+* _Руководство_: Руководство представляет собой всеобъемлющий онлайн-ресурс и справочник для пользователей FreeBSD.
+* _FAQ_: В разделе Часто задаваемых вопросов (FAQ) используется формат коротких вопросов и ответов для решения вопросов, часто задаваемых в различных почтовых рассылках и форумах, посвящённых FreeBSD. Такой формат не подразумевает длинных и развёрнутых ответов.
+* _Справочник_: Страницы Справочника (man-страницы) системы на английском языке обычно не создаются FDP, так как они являются частью базовой системы. Однако FDP может перефразировать части существующих руководств, чтобы сделать их понятнее или исправить неточности.
+* _Веб-сайт_: Это основное представительство FreeBSD в интернете, доступное по адресу https://www.freebsd.org/[https://www.FreeBSD.org/] и на множестве зеркал по всему миру. Веб-сайт обычно становится первым знакомством нового пользователя с FreeBSD.
+
+Команды переводчиков отвечают за перевод Руководства и веб-сайта на разные языки. На данный момент руководства (man-страницы) не переводятся.
+
+Исходные тексты документации для веб-сайта FreeBSD, Handbook и FAQ доступны в репозитории документации по адресу `https://cgit.freebsd.org/doc/`.
+
+Исходный код страниц справочника доступен в отдельном репозитории, расположенном по адресу `https://cgit.freebsd.org/src/`.
+
+Документация сообщений о фиксациях доступна с помощью `git log`. Сообщения о фиксациях также архивируются по ссылке:link:{dev-commits-doc-all}.
+
+Веб-интерфейсы для обоих репозиториев доступны по адресам https://cgit.freebsd.org/doc/[] и https://cgit.freebsd.org/src/[].
+
+Большое количество авторов участвовало в написании руководств или инструкций по FreeBSD. Некоторые из этих документов хранятся в рамках файлов FDP. В других случаях авторы предпочли лпубликовать документацию отдельно. FDP стремится предоставить ссылки на как можно большее количество такой внешней документации.
diff --git a/documentation/content/ru/books/fdp-primer/overview/_index.po b/documentation/content/ru/books/fdp-primer/overview/_index.po
new file mode 100644
index 0000000000..2779c0823d
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/overview/_index.po
@@ -0,0 +1,721 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primeroverview_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:1
+#, no-wrap
+msgid "Overview about the FreeBSD Documentation Process"
+msgstr "Обзор процесса создания документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Overview"
+msgstr "Глава 1. Обзор"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:14
+#, no-wrap
+msgid "Overview"
+msgstr "Обзор"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:53
+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 ""
+"Добро пожаловать в Проект документации FreeBSD (FDP). Качественная "
+"документация крайне важна для успеха FreeBSD, и мы очень высоко ценим ваш "
+"вклад."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:55
+msgid ""
+"This document describes how the FDP is organized, how to write and submit "
+"documentation, and how to effectively use the available tools."
+msgstr ""
+"Этот документ описывает организацию FDP, как писать и отправлять "
+"документацию, а также как эффективно использовать доступные инструменты."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:58
+msgid ""
+"Everyone is welcome to contribute to the FDP. Willingness to contribute is "
+"the only membership requirement."
+msgstr ""
+"Все желающие могут внести свой вклад в FDP. Готовность помочь — единственное "
+"требование для участия."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:60
+msgid "This primer shows how to:"
+msgstr "Это руководство показывает, как:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:62
+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:63
+msgid "Identify which parts of FreeBSD are maintained by the FDP."
+msgstr "Определите, какие части FreeBSD поддерживаются FDP."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:64
+msgid "Install the required documentation tools and files."
+msgstr "Установить необходимые инструменты и файлы документации."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:65
+msgid "Make changes to the documentation."
+msgstr "Внести изменения в документацию."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:66
+msgid ""
+"Submit changes back for review and inclusion in the FreeBSD documentation."
+msgstr "Представить изменения для проверки и включения в документацию FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:68
+#, no-wrap
+msgid "Documentation in the FreeBSD Ecosystem"
+msgstr "Документация в экосистеме FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:72
+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:74
+msgid "Never blame the reader for:"
+msgstr "Никогда не вините читателя за:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:76
+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:77
+msgid "finding a document confusing"
+msgstr "если документ показался ему непонятным"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:78
+msgid "not understanding a document or how to apply it"
+msgstr "непонимание документа или того, как его применить"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:79
+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:81
+msgid "Instead, acknowledge that the document is:"
+msgstr "Вместо этого подтвердите, что документ:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:83
+msgid "inaccessible"
+msgstr "недоступный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:84
+msgid "confusing"
+msgstr "запутанный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:85
+msgid "hard to understand or apply"
+msgstr "трудно понимаемый или применимый"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:86
+msgid "incomplete"
+msgstr "неполный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:88
+msgid "Then, make the document:"
+msgstr "Затем создайте документ:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:90
+msgid "more accessible"
+msgstr "более доступный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:91
+msgid "less confusing"
+msgstr "менее запутанный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:92
+msgid "clearer"
+msgstr "более ясный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:93
+msgid "more complete"
+msgstr "более полный"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:95
+msgid "Use the following methods:"
+msgstr "Используйте следующие методы:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:97
+msgid ""
+"apply link:https://webaim.org/intro/#principles[accessibility best "
+"practices] to correct the problem reported and any similar ones you find"
+msgstr ""
+"Примените link:https://webaim.org/intro/#principles[лучшие практики "
+"доступности], чтобы исправить выявленную проблему и любые подобные, которые "
+"обнаружите"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:98
+msgid "rework or clarify the confusing structure or language"
+msgstr "переработайте или уточните запутанную структуру или язык"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:99
+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:100
+msgid "fill in the gaps or add the missing stepping stones"
+msgstr "заполните пробелы или добавьте недостающие промежуточные этапы"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:102
+#, no-wrap
+msgid "Quick Start"
+msgstr "Быстрый старт"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:108
+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 ""
+"Некоторые подготовительные шаги необходимо выполнить перед редактированием "
+"документации FreeBSD. Сначала подпишитесь на рассылку {freebsd-doc}. "
+"Некоторые участники команды также общаются в IRC-канале `#bsddocs` на http://"
+"www.efnet.org/[EFnet]. Эти люди могут помочь с вопросами или проблемами, "
+"связанными с документацией."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:110
+#, no-wrap
+msgid "FreeBSD installation process"
+msgstr "Процесс установки FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:115
+msgid ""
+"Install these packages. The `docproj` _meta-port_ installs all the "
+"applications required to do useful work with the FreeBSD documentation."
+msgstr ""
+"Установите эти пакеты. _Мета-порт_ `docproj` устанавливает все приложения, "
+"необходимые для работы с документацией FreeBSD."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:119
+#, no-wrap
+msgid "# pkg install docproj\n"
+msgstr "# pkg install docproj\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:122
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:196
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:278
+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 ""
+"Установите локальную рабочую копию документации из репозитория FreeBSD в "
+"[.filename]#~/doc# (см. crossref:working-copy[working-copy,Рабочая копия])."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:126
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:200
+#, 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:129
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:203
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:285
+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:132
+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:134
+#, fuzzy
+#| 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"
+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."
+msgstr ""
+"*_Всегда_* собирайте и проверяйте изменения перед отправкой. Запуск команды "
+"`make` в подкаталогах `documentation` или `website` сгенерирует документацию "
+"в формате HTML.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:138
+#, no-wrap
+msgid "% make\n"
+msgstr "% make\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:141
+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:145
+#, 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:148
+msgid ""
+"The build output is stored in [.filename]#~/doc/documentation/public/en/"
+"articles/# and [.filename]#~/doc/documentation/public/en/books/#."
+msgstr ""
+"Результаты сборки сохраняются в [.filename]#~/doc/documentation/public/en/"
+"articles/# и [.filename]#~/doc/documentation/public/en/books/#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:150
+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:152
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:215
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:296
+msgid ""
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
+msgstr ""
+"Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с "
+"помощью `git diff`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:157
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:220
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:301
+#, 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:160
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:223
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:304
+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 ""
+"Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение "
+"в вашей локальной ветке и создайте патч с помощью `git format-patch`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:165
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:228
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:309
+#, 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:169
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:232
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:313
+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 ""
+"Патч, созданный с помощью `git format-patch`, будет содержать идентификатор "
+"автора и адреса электронной почты, что упрощает применение разработчиками (с "
+"помощью `git am`) и правильное указание авторства."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:174
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:237
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:318
+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 ""
+"Чтобы упростить применение патча коммиттерами в их рабочей копии дерева "
+"документации, пожалуйста, сгенерируйте файл [.filename]#.diff# из корня "
+"вашего дерева документации."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:177
+msgid ""
+"In the example above, changes have been made to the *bsdinstall* portion of "
+"the Handbook."
+msgstr ""
+"В приведенном выше примере были внесены изменения в раздел *bsdinstall* "
+"Руководства."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:179
+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 ""
+"Отправьте патч или diff-файл с помощью веб-системы https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report]. При "
+"использовании веб-формы укажите в поле Summary _[patch] краткое описание "
+"проблемы_. Выберите Component `Documentation`. В поле Description введите "
+"краткое описание изменений и любые важные детали о них. Используйте кнопку "
+"btn:[Add an attachment], чтобы прикрепить патч или diff-файл. Наконец, "
+"нажмите кнопку btn:[Submit Bug], чтобы отправить ваш diff в систему отчетов "
+"об ошибках."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:182
+#, no-wrap
+msgid "GNU/Linux installation process"
+msgstr "Процесс установки GNU/Linux"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:189
+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 ""
+"Установите эти пакеты в системах на основе apt, таких как Debian или "
+"Ubuntu. В других дистрибутивах GNU/Linux названия пакетов могут "
+"отличаться. В случае сомнений обратитесь к менеджеру пакетов вашего "
+"дистрибутива."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:193
+#, 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:206
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:288
+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:208
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:290
+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 ""
+"Всегда собирайте и тестируйте изменения перед их отправкой. Запуск `bmake` в "
+"подкаталогах `documentation` или `website` сгенерирует документацию в "
+"формате HTML."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:212
+#, 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:245
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:326
+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 ""
+"Отправьте патч или diff-файл с помощью веб-системы https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report]. При "
+"использовании веб-формы укажите в поле _Summary_ краткое описание проблемы. "
+"Выберите компонент `Documentation`. В поле _Description_ введите краткое "
+"описание проблемы из поля _Summary_ и добавьте _patch_ в поле _Keywords_. "
+"Используйте кнопку btn:[Add an attachment], чтобы прикрепить патч или diff-"
+"файл. Наконец, нажмите кнопку btn:[Submit Bug], чтобы отправить ваш diff в "
+"систему отчетов об ошибках."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:248
+#, no-wrap
+msgid "macOS(R) installation process"
+msgstr "Процесс установки macOS(R)"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:254
+msgid ""
+"Install these packages using link:https://brew.sh/[Homebrew] and "
+"link:https://rubygems.org/[RubyGem]."
+msgstr ""
+"Установите эти пакеты с помощью link:https://brew.sh/[Homebrew] и "
+"link:https://rubygems.org/[RubyGem]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:258
+#, 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:261
+msgid "Add Ruby to the Path."
+msgstr "Добавьте Ruby в Path."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:269
+#, no-wrap
+msgid ""
+"$ echo 'export PATH=\"$(brew --prefix ruby)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"$(brew --prefix hugo)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ echo 'export GEM_PATH=\"$(gem environment gemdir)\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"${GEM_PATH}/bin:$PATH\"' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+msgstr ""
+"$ echo 'export PATH=\"$(brew --prefix ruby)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"$(brew --prefix hugo)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ echo 'export GEM_PATH=\"$(gem environment gemdir)\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"${GEM_PATH}/bin:$PATH\"' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:271
+msgid "Install the rouge package using RubyGem."
+msgstr "Установите пакет rouge с помощью RubyGem."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:275
+#, 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:282
+#, 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:294
+#, 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:329
+#, no-wrap
+msgid "The FreeBSD Documentation Set"
+msgstr "Набор документации FreeBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:332
+msgid "The FDP is responsible for four categories of FreeBSD documentation."
+msgstr "FDP отвечает за четыре категории документации FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:334
+msgid ""
+"_Handbook_: The Handbook is the comprehensive online resource and reference "
+"for FreeBSD users."
+msgstr ""
+"_Руководство_: Руководство представляет собой всеобъемлющий онлайн-ресурс и "
+"справочник для пользователей FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:335
+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 ""
+"_FAQ_: В разделе Часто задаваемых вопросов (FAQ) используется формат "
+"коротких вопросов и ответов для решения вопросов, часто задаваемых в "
+"различных почтовых рассылках и форумах, посвящённых FreeBSD. Такой формат не "
+"подразумевает длинных и развёрнутых ответов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:336
+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 ""
+"_Справочник_: Страницы Справочника (man-страницы) системы на английском "
+"языке обычно не создаются FDP, так как они являются частью базовой системы. "
+"Однако FDP может перефразировать части существующих руководств, чтобы "
+"сделать их понятнее или исправить неточности."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:337
+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 ""
+"_Веб-сайт_: Это основное представительство FreeBSD в интернете, доступное по "
+"адресу https://www.freebsd.org/[https://www.FreeBSD.org/] и на множестве "
+"зеркал по всему миру. Веб-сайт обычно становится первым знакомством нового "
+"пользователя с FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:340
+msgid ""
+"Translation teams are responsible for translating the Handbook and web site "
+"into different languages. Manual pages are not translated at present."
+msgstr ""
+"Команды переводчиков отвечают за перевод Руководства и веб-сайта на разные "
+"языки. На данный момент руководства (man-страницы) не переводятся."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:342
+msgid ""
+"Documentation source for the FreeBSD web site, Handbook, and FAQ is "
+"available in the documentation repository at `https://cgit.freebsd.org/doc/`."
+msgstr ""
+"Исходные тексты документации для веб-сайта FreeBSD, Handbook и FAQ доступны "
+"в репозитории документации по адресу `https://cgit.freebsd.org/doc/`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:344
+msgid ""
+"Source for manual pages is available in a separate source repository located "
+"at `https://cgit.freebsd.org/src/`."
+msgstr ""
+"Исходный код страниц справочника доступен в отдельном репозитории, "
+"расположенном по адресу `https://cgit.freebsd.org/src/`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:347
+msgid ""
+"Documentation commit messages are visible with `git log`. Commit messages "
+"are also archived at link:{dev-commits-doc-all}."
+msgstr ""
+"Документация сообщений о фиксациях доступна с помощью `git log`. Сообщения "
+"о фиксациях также архивируются по ссылке:link:{dev-commits-doc-all}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:349
+msgid ""
+"Web frontends to both of these repositories are available at https://"
+"cgit.freebsd.org/doc/[] and https://cgit.freebsd.org/src/[]."
+msgstr ""
+"Веб-интерфейсы для обоих репозиториев доступны по адресам https://"
+"cgit.freebsd.org/doc/[] и https://cgit.freebsd.org/src/[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:353
+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 ""
+"Большое количество авторов участвовало в написании руководств или инструкций "
+"по FreeBSD. Некоторые из этих документов хранятся в рамках файлов FDP. В "
+"других случаях авторы предпочли лпубликовать документацию отдельно. FDP "
+"стремится предоставить ссылки на как можно большее количество такой внешней "
+"документации."
diff --git a/documentation/content/ru/books/fdp-primer/po-translations/_index.adoc b/documentation/content/ru/books/fdp-primer/po-translations/_index.adoc
new file mode 100644
index 0000000000..53cee084bf
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/po-translations/_index.adoc
@@ -0,0 +1,365 @@
+---
+description: 'Как работать с переводом PO в проекте документации FreeBSD'
+next: books/fdp-primer/weblate
+params:
+ path: /books/fdp-primer/po-translations/
+prev: books/fdp-primer/translations
+showBookMenu: true
+tags: ["po", "translations", "tutorial", "quick start"]
+title: 'Глава 9. Переводы PO'
+weight: 9
+---
+
+[[po-translations]]
+= Переводы PO
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 9
+: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::[]
+
+[[po-translations-introduction]]
+== Введение
+
+Система http://www.gnu.org/software/gettext/[GNU gettext] предоставляет переводчикам удобный способ создания и поддержки переводов документов. Переводимые строки извлекаются из исходного документа в файл PO (Portable Object). Переводы строк добавляются с помощью отдельного редактора. Эти строки могут использоваться напрямую или собираться в полную переведённую версию исходного документа.
+
+[[po-translations-quick-start]]
+== Быстрый старт
+
+Предполагается, что процедура, описанная в crossref:overview[overview-quick-start,Быстрый старт], уже выполнена. Опция `TRANSLATOR` необходима и уже включена по умолчанию в порте package:textproc/docproj[].
+
+Этот пример демонстрирует создание испанского перевода краткой статьи extref:{leap-seconds}[Високосные секунды].
+
+[[po-translations-quick-start-install-po-editor]]
+
+[.procedure]
+====
+.Процедура: Установка PO-редактора
+. Редактор PO необходим для редактирования файлов переводов. В этом примере используется package:editors/poedit[].
++
+[source, shell]
+....
+# pkg install poedit
+....
+====
+
+[[po-translations-quick-start-initial-setup]]
+[.procedure]
+====
+.Процедура: Начальная настройка
+
+Когда создаётся новый перевод, структура каталогов должна быть создана или скопирована из оригинальной английской версии:
+
+. Создайте каталог для нового перевода. Исходный текст статьи на английском находится в [.filename]#~/doc/documentation/content/en/articles/leap-seconds/#. Испанский перевод будет расположен в [.filename]#~/doc/documentation/content/es/articles/leap-seconds/#. Путь идентичен, за исключением названия языкового каталога. Исходный текст статьи на английском находится в [.filename]#~/doc/en/articles/leap-seconds/#. Испанский перевод будет расположен в [.filename]#~/doc/es/articles/leap-seconds/#. Путь идентичен, за исключением названия языкового каталога.
++
+[source, shell]
+....
+% mkdir ~/doc/documentation/content/es/articles/leap-seconds
+....
+
+. Скопируйте [.filename]#_index.po# из исходного документа в директорию перевода:
++
+[source, shell]
+....
+% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \
+ ~/doc/documentation/content/es/articles/leap-seconds/
+....
+
+Предположим, что документ или язык также переводится через Weblate. В таком случае рекомендуется взять файл `.po` оттуда и загрузить переведённый документ обратно в платформу, чтобы централизовать усилия по переводу через Weblate и избежать повторной работы.
+
+См. как загрузить файлы `.po` в главе crossref:weblate[weblate-translating-offline,Перевод офлайн в Weblate].
+====
+
+[[po-translations-quick-start-translation]]
+[.procedure]
+====
+.Процедура: Перевод
+
+Используйте PO-редактор для ввода переводов в PO-файл. Доступно несколько различных редакторов. Здесь показан [.filename]#poedit# из пакета:editors/poedit[].
+
+[source, shell]
+....
+% poedit documentation/content/es/articles/leap-seconds/_index.po
+....
+====
+
+[[po-translations-quick-generating-a-translated-document]]
+[.procedure]
+====
+.Процедура: Создание переведенного документа
+. Сгенерируйте переведенный документ:
++
+[source, shell]
+....
+% cd ~/doc
+% ./tools/translate.sh documentation es articles/leap-seconds
+....
++
+Имя сгенерированного документа соответствует имени оригинала на английском языке, обычно `[.filename]#_index.adoc#`.
++
+. Проверьте сгенерированный файл, преобразовав его в HTML и просмотрев в веб-браузере:
++
+[source, shell]
+....
+% cd ~/doc/documentation
+% make
+....
+====
+
+[[po-translations-creating]]
+== Создание новых переводов
+
+Первым шагом в создании нового переведённого документа является поиск или создание каталога для его размещения. FreeBSD размещает переведённые документы в подкаталоге с названием, соответствующим языку и региону, в формате [.filename]#lang#. Здесь _lang_ — это двухбуквенный код в нижнем регистре.
+
+[[po-translations-language-names]]
+.Названия языков
+[cols="1,1,1", frame="none", options="header"]
+|===
+| Язык
+| Регион
+| Имя каталога с переводами
+
+|Английский
+|Соединённые Штаты
+|[.filename]#en#
+
+|Бенгальский
+|Бангладеш
+|[.filename]#bn-bd#
+
+|Датский
+|Дания
+|[.filename]#da#
+
+|Немецкий
+|Германия
+|[.filename]#de#
+
+|Греческий
+|Греция
+|[.filename]#el#
+
+|Испанский
+|Испания
+|[.filename]#es#
+
+|Французский
+|Франция
+|[.filename]#fr#
+
+|Венгерский
+|Венгрия
+|[.filename]#hu#
+
+|Итальянский
+|Италия
+|[.filename]#it#
+
+|Японский
+|Япония
+|[.filename]#ja#
+
+|Корейский
+|Корея
+|[.filename]#ko#
+
+|Монгольский
+|Монголия
+|[.filename]#mn#
+
+|Голландский
+|Нидерланды
+|[.filename]#nl#
+
+|Польский
+|Польша
+|[.filename]#pl#
+
+|Португальский
+|Бразилия
+|[.filename]#pt-br#
+
+|Русский
+|Россия
+|[.filename]#ru#
+
+|Турецкий
+|Турция
+|[.filename]#tr#
+
+|Китайский
+|Китай
+|[.filename]#zh-cn#
+
+|Китайский
+|Тайвань
+|[.filename]#zh-tw#
+|===
+
+Переводы находятся в поддиректориях основной директории документации, которая в данном случае предполагается как [.filename]#~/doc/documentation/#, как показано в crossref:overview[overview-quick-start, Быстрый старт]. Например, немецкие переводы расположены в [.filename]#~/doc/documentation/content/de/#, а французские — в [.filename]#~/doc/documentation/content/fr/#.
+
+Каждый языковой каталог содержит отдельные подкаталоги с названиями по типу документов, обычно [.filename]#articles/# и [.filename]#books/#.
+
+Объединение этих имен каталогов дает полный путь к статье или книге. Например, французский перевод статьи NanoBSD находится в [.filename]#~/doc/documentation/content/fr/articles/nanobsd/#, а монгольский перевод Руководства — в [.filename]#~/doc/documentation/content/mn/books/handbook/#.
+
+При переводе документа на новый язык необходимо создать новый языковой каталог. Если языковой каталог уже существует, достаточно создать подкаталог в директории [.filename]#articles/# или [.filename]#books/#.
+
+[[po-translations-creating-example]]
+.Создание испанского перевода Руководства портировщика
+[example]
+====
+Создайте новый перевод на испанский язык extref:{porters-handbook}[Руководства портировщика]. Оригинал находится в книге [.filename]#~/doc/documentation/content/en/books/porters-handbook/#.
+
+[.procedure]
+======
+
+. Каталог для книг на испанском языке [.filename]#~/doc/documentation/content/es/books/# уже существует, поэтому требуется только создать подкаталог для Руководства портировщика:
++
+[source, shell]
+....
+% cd ~/doc/documentation/content/es/books
+% mkdir porters-handbook
+....
+
+. Скопируйте содержимое из переводимой книги:
++
+[source, shell]
+....
+% cd porters-handbook
+% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .
+....
++
+Теперь структура документа готова для начала перевода с помощью команды `po4a`.
+======
+====
+
+[[po-translations-translating]]
+== Перевод
+
+Система gettext значительно сокращает количество элементов, за которыми нужно следить переводчику. Строки, подлежащие переводу, извлекаются из исходного документа в файл PO. Затем с помощью редактора PO вводятся переведённые версии каждой строки.
+
+Система перевода FreeBSD PO не перезаписывает PO-файлы, поэтому этап извлечения можно выполнять в любое время для обновления PO-файла.
+
+Редактор PO используется для редактирования файла. В этих примерах показан package:editors/poedit[], так как он прост и имеет минимальные требования. Другие редакторы PO предоставляют функции, облегчающие процесс перевода. В Коллекции портов доступно несколько таких редакторов, включая package:devel/gtranslator[].
+
+Важно сохранить PO-файл. Он содержит всю работу, проделанную переводчиками.
+
+[IMPORTANT]
+====
+Перевод документов онлайн оказывается наиболее простым способом перевода документации в FreeBSD, так как позволяет нескольким пользователям совместно работать над одним файлом, эффективно распределяя нагрузку. Для получения дополнительной информации обратитесь к следующей главе: crossref:weblate[weblate-introduction,Переводы в Weblate].
+====
+
+[[po-translations-tips]]
+== Советы переводчикам
+
+[[po-translations-tips-xmltags]]
+=== Сохранение AsciiDoc макросов
+
+Сохраните макросы AsciiDoc, которые указаны на английском языке.
+
+.Сохранение AsciiDoc макросов
+[example]
+====
+Оригинал на английском:
+
+[.programlisting]
+....
+msgid ""
+"This example shows the creation of a Spanish translation of the short "
+"extref:{leap-seconds}[Leap Seconds] article."
+....
+
+Испанский перевод:
+
+[.programlisting]
+....
+msgid ""
+"Este ejemplo muestra la creación de un artículo con poco contenido como el artículo "
+"extref:{leap-seconds}[Leap Seconds]."
+....
+
+====
+
+[[po-translations-tips-spaces]]
+=== Сохранение пробелов
+
+Сохраняйте существующие пробелы в начале и конце строк, которые нужно перевести. В переведённой версии эти пробелы также должны присутствовать.
+
+[[po-translations-tips-verbatim]]
+=== Дословные теги
+
+Содержимое некоторых тегов должно быть скопировано дословно, без перевода:
+
+* `man:man[1]`
+* `package:package[]`
+* `link`
+* `image`
+* `include`
+* `Admonitions`
+* `id's`
+* `Heading tags`
+* `source`
+
+[[po-translations-building]]
+== Сборка переведенного документа
+
+Переведённую версию оригинального документа можно создать в любое время. При этом все непереведённые части документа будут включены в итоговый документ на английском языке. Большинство PO-редакторов имеют индикатор, показывающий, какая часть перевода завершена. Это позволяет переводчику легко увидеть, когда переведено достаточно строк, чтобы сборка итогового документа имела смысл.
+
+Глава о Weblate есть полный пример того, как crossref:weblate[weblate-building,Собрать переведённый документ].
+
+[[po-translations-submitting]]
+== Отправка новой переведённой версии
+
+Подготовьте новые файлы перевода для отправки. Это включает добавление файлов в систему контроля версий, установку дополнительных свойств для них, а затем создание diff-файла для отправки.
+
+Файлы различий, созданные в этих примерах, можно прикрепить к https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Documentation[отчету об ошибке в документации] или https://reviews.freebsd.org/[обзору кода].
+
+[[po-translations-submitting-spanish]]
+.Перевод статьи NanoBSD на испанский язык
+[example]
+====
+[.procedure]
+======
+
+. Создайте diff новых файлов из базового каталога [.filename]#~/doc/# так, чтобы полный путь отображался вместе с именами файлов. Это помогает коммиттерам определить целевой языковой каталог.
++
+[source, shell]
+....
+% cd ~/doc
+% git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff
+....
+======
+
+Глава о Weblate содержит полный пример того, как crossref:weblate[weblate-submitting-translations, отправить новый перевод].
+
+====
diff --git a/documentation/content/ru/books/fdp-primer/po-translations/_index.po b/documentation/content/ru/books/fdp-primer/po-translations/_index.po
new file mode 100644
index 0000000000..b9a59eea47
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/po-translations/_index.po
@@ -0,0 +1,1041 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-23 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerpo-translations_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Как работать с переводом PO в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. PO Translations"
+msgstr "Глава 9. Переводы PO"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:14
+#, no-wrap
+msgid "PO Translations"
+msgstr "Переводы PO"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:58
+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 ""
+"Система http://www.gnu.org/software/gettext/[GNU gettext] предоставляет "
+"переводчикам удобный способ создания и поддержки переводов документов. "
+"Переводимые строки извлекаются из исходного документа в файл PO (Portable "
+"Object). Переводы строк добавляются с помощью отдельного редактора. Эти "
+"строки могут использоваться напрямую или собираться в полную переведённую "
+"версию исходного документа."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:60
+#, no-wrap
+msgid "Quick Start"
+msgstr "Быстрый старт"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:64
+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 ""
+"Предполагается, что процедура, описанная в crossref:overview[overview-quick-"
+"start,Быстрый старт], уже выполнена. Опция `TRANSLATOR` необходима и уже "
+"включена по умолчанию в порте package:textproc/docproj[]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:66
+msgid ""
+"This example shows the creation of a Spanish translation of the short extref:"
+"{leap-seconds}[Leap Seconds] article."
+msgstr ""
+"Этот пример демонстрирует создание испанского перевода краткой статьи extref:"
+"{leap-seconds}[Високосные секунды]."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:71
+#, no-wrap
+msgid "Procedure: Install a PO Editor"
+msgstr "Процедура: Установка PO-редактора"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:73
+msgid ""
+"A PO editor is needed to edit translation files. This example uses "
+"package:editors/poedit[]."
+msgstr ""
+"Редактор PO необходим для редактирования файлов переводов. В этом примере "
+"используется package:editors/poedit[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:77
+#, no-wrap
+msgid "# pkg install poedit\n"
+msgstr "# pkg install poedit\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:83
+#, no-wrap
+msgid "Procedure: Initial Setup"
+msgstr "Процедура: Начальная настройка"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:86
+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:91
+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 ""
+"Создайте каталог для нового перевода. Исходный текст статьи на английском "
+"находится в [.filename]#~/doc/documentation/content/en/articles/leap-seconds/"
+"#. Испанский перевод будет расположен в [.filename]#~/doc/documentation/"
+"content/es/articles/leap-seconds/#. Путь идентичен, за исключением названия "
+"языкового каталога. Исходный текст статьи на английском находится в "
+"[.filename]#~/doc/en/articles/leap-seconds/#. Испанский перевод будет "
+"расположен в [.filename]#~/doc/es/articles/leap-seconds/#. Путь идентичен, "
+"за исключением названия языкового каталога."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:95
+#, no-wrap
+msgid "% mkdir ~/doc/documentation/content/es/articles/leap-seconds\n"
+msgstr "% mkdir ~/doc/documentation/content/es/articles/leap-seconds\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:98
+msgid ""
+"Copy the [.filename]#_index.po# from the original document into the "
+"translation directory:"
+msgstr ""
+"Скопируйте [.filename]#_index.po# из исходного документа в директорию "
+"перевода:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:103
+#, no-wrap
+msgid ""
+"% 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.po \\\n"
+" ~/doc/documentation/content/es/articles/leap-seconds/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:107
+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 ""
+"Предположим, что документ или язык также переводится через Weblate. В таком "
+"случае рекомендуется взять файл `.po` оттуда и загрузить переведённый "
+"документ обратно в платформу, чтобы централизовать усилия по переводу через "
+"Weblate и избежать повторной работы."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:109
+msgid ""
+"See how to download the `.po` files in the crossref:weblate[weblate-"
+"translating-offline,Translating Offline on Weblate] chapter."
+msgstr ""
+"См. как загрузить файлы `.po` в главе crossref:weblate[weblate-translating-"
+"offline,Перевод офлайн в Weblate]."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:114
+#, no-wrap
+msgid "Procedure: Translation"
+msgstr "Процедура: Перевод"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:118
+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 ""
+"Используйте PO-редактор для ввода переводов в PO-файл. Доступно несколько "
+"различных редакторов. Здесь показан [.filename]#poedit# из пакета:editors/"
+"poedit[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:122
+#, 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:128
+#, no-wrap
+msgid "Procedure: Generating a Translated Document"
+msgstr "Процедура: Создание переведенного документа"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:130
+msgid "Generate the translated document:"
+msgstr "Сгенерируйте переведенный документ:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:135
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% ./tools/translate.sh documentation es articles/leap-seconds\n"
+msgstr ""
+"% cd ~/doc\n"
+"% ./tools/translate.sh documentation es articles/leap-seconds\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:138
+msgid ""
+"The name of the generated document matches the name of the English original, "
+"usually [.filename]#_index.adoc#."
+msgstr ""
+"Имя сгенерированного документа соответствует имени оригинала на английском "
+"языке, обычно `[.filename]#_index.adoc#`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:140
+msgid ""
+"Check the generated file by rendering it to HTML and viewing it with a web "
+"browser:"
+msgstr ""
+"Проверьте сгенерированный файл, преобразовав его в HTML и просмотрев в веб-"
+"браузере:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:145
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:149
+#, no-wrap
+msgid "Creating New Translations"
+msgstr "Создание новых переводов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:154
+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 ""
+"Первым шагом в создании нового переведённого документа является поиск или "
+"создание каталога для его размещения. FreeBSD размещает переведённые "
+"документы в подкаталоге с названием, соответствующим языку и региону, в "
+"формате [.filename]#lang#. Здесь _lang_ — это двухбуквенный код в нижнем "
+"регистре."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:156
+#, no-wrap
+msgid "Language Names"
+msgstr "Названия языков"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:160
+#, no-wrap
+msgid "Language"
+msgstr "Язык"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:161
+#, no-wrap
+msgid "Region"
+msgstr "Регион"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:163
+#, no-wrap
+msgid "Translated Directory Name"
+msgstr "Имя каталога с переводами"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:164
+#, no-wrap
+msgid "English"
+msgstr "Английский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:165
+#, no-wrap
+msgid "United States"
+msgstr "Соединённые Штаты"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:167
+#, no-wrap
+msgid "[.filename]#en#"
+msgstr "[.filename]#en#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:168
+#, no-wrap
+msgid "Bengali"
+msgstr "Бенгальский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:169
+#, no-wrap
+msgid "Bangladesh"
+msgstr "Бангладеш"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:171
+#, no-wrap
+msgid "[.filename]#bn-bd#"
+msgstr "[.filename]#bn-bd#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:172
+#, no-wrap
+msgid "Danish"
+msgstr "Датский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:173
+#, no-wrap
+msgid "Denmark"
+msgstr "Дания"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:175
+#, no-wrap
+msgid "[.filename]#da#"
+msgstr "[.filename]#da#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:176
+#, no-wrap
+msgid "German"
+msgstr "Немецкий"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:177
+#, no-wrap
+msgid "Germany"
+msgstr "Германия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:179
+#, no-wrap
+msgid "[.filename]#de#"
+msgstr "[.filename]#de#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:180
+#, no-wrap
+msgid "Greek"
+msgstr "Греческий"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:181
+#, no-wrap
+msgid "Greece"
+msgstr "Греция"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:183
+#, no-wrap
+msgid "[.filename]#el#"
+msgstr "[.filename]#el#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:184
+#, no-wrap
+msgid "Spanish"
+msgstr "Испанский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:185
+#, no-wrap
+msgid "Spain"
+msgstr "Испания"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:187
+#, no-wrap
+msgid "[.filename]#es#"
+msgstr "[.filename]#es#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:188
+#, no-wrap
+msgid "French"
+msgstr "Французский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:189
+#, no-wrap
+msgid "France"
+msgstr "Франция"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:191
+#, no-wrap
+msgid "[.filename]#fr#"
+msgstr "[.filename]#fr#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:192
+#, no-wrap
+msgid "Hungarian"
+msgstr "Венгерский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:193
+#, no-wrap
+msgid "Hungary"
+msgstr "Венгрия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:195
+#, no-wrap
+msgid "[.filename]#hu#"
+msgstr "[.filename]#hu#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:196
+#, no-wrap
+msgid "Italian"
+msgstr "Итальянский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:197
+#, no-wrap
+msgid "Italy"
+msgstr "Италия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:199
+#, no-wrap
+msgid "[.filename]#it#"
+msgstr "[.filename]#it#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:200
+#, no-wrap
+msgid "Japanese"
+msgstr "Японский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:201
+#, no-wrap
+msgid "Japan"
+msgstr "Япония"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:203
+#, no-wrap
+msgid "[.filename]#ja#"
+msgstr "[.filename]#ja#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:204
+#, no-wrap
+msgid "Korean"
+msgstr "Корейский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:205
+#, no-wrap
+msgid "Korea"
+msgstr "Корея"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:207
+#, no-wrap
+msgid "[.filename]#ko#"
+msgstr "[.filename]#ko#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:208
+#, no-wrap
+msgid "Mongolian"
+msgstr "Монгольский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:209
+#, no-wrap
+msgid "Mongolia"
+msgstr "Монголия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:211
+#, no-wrap
+msgid "[.filename]#mn#"
+msgstr "[.filename]#mn#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:212
+#, no-wrap
+msgid "Dutch"
+msgstr "Голландский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:213
+#, no-wrap
+msgid "Netherlands"
+msgstr "Нидерланды"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:215
+#, no-wrap
+msgid "[.filename]#nl#"
+msgstr "[.filename]#nl#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:216
+#, no-wrap
+msgid "Polish"
+msgstr "Польский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:217
+#, no-wrap
+msgid "Poland"
+msgstr "Польша"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:219
+#, no-wrap
+msgid "[.filename]#pl#"
+msgstr "[.filename]#pl#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:220
+#, no-wrap
+msgid "Portuguese"
+msgstr "Португальский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:221
+#, no-wrap
+msgid "Brazil"
+msgstr "Бразилия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:223
+#, no-wrap
+msgid "[.filename]#pt-br#"
+msgstr "[.filename]#pt-br#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:224
+#, no-wrap
+msgid "Russian"
+msgstr "Русский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:225
+#, no-wrap
+msgid "Russia"
+msgstr "Россия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:227
+#, no-wrap
+msgid "[.filename]#ru#"
+msgstr "[.filename]#ru#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:228
+#, no-wrap
+msgid "Turkish"
+msgstr "Турецкий"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:229
+#, no-wrap
+msgid "Turkey"
+msgstr "Турция"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:231
+#, no-wrap
+msgid "[.filename]#tr#"
+msgstr "[.filename]#tr#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:232
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:236
+#, no-wrap
+msgid "Chinese"
+msgstr "Китайский"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:233
+#, no-wrap
+msgid "China"
+msgstr "Китай"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:235
+#, no-wrap
+msgid "[.filename]#zh-cn#"
+msgstr "[.filename]#zh-cn#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:237
+#, no-wrap
+msgid "Taiwan"
+msgstr "Тайвань"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:238
+#, no-wrap
+msgid "[.filename]#zh-tw#"
+msgstr "[.filename]#zh-tw#"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:244
+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 ""
+"Переводы находятся в поддиректориях основной директории документации, "
+"которая в данном случае предполагается как [.filename]#~/doc/documentation/"
+"#, как показано в crossref:overview[overview-quick-start, Быстрый старт]. "
+"Например, немецкие переводы расположены в [.filename]#~/doc/documentation/"
+"content/de/#, а французские — в [.filename]#~/doc/documentation/content/fr/#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:246
+msgid ""
+"Each language directory contains separate subdirectories named for the type "
+"of documents, usually [.filename]#articles/# and [.filename]#books/#."
+msgstr ""
+"Каждый языковой каталог содержит отдельные подкаталоги с названиями по типу "
+"документов, обычно [.filename]#articles/# и [.filename]#books/#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:250
+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 ""
+"Объединение этих имен каталогов дает полный путь к статье или книге. "
+"Например, французский перевод статьи NanoBSD находится в [.filename]#~/doc/"
+"documentation/content/fr/articles/nanobsd/#, а монгольский перевод "
+"Руководства — в [.filename]#~/doc/documentation/content/mn/books/handbook/#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:253
+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 ""
+"При переводе документа на новый язык необходимо создать новый языковой "
+"каталог. Если языковой каталог уже существует, достаточно создать подкаталог "
+"в директории [.filename]#articles/# или [.filename]#books/#."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:255
+#, 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:260
+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 ""
+"Создайте новый перевод на испанский язык extref:{porters-handbook}"
+"[Руководства портировщика]. Оригинал находится в книге [.filename]#~/doc/"
+"documentation/content/en/books/porters-handbook/#."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:265
+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 ""
+"Каталог для книг на испанском языке [.filename]#~/doc/documentation/content/"
+"es/books/# уже существует, поэтому требуется только создать подкаталог для "
+"Руководства портировщика:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:270
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation/content/es/books\n"
+"% mkdir porters-handbook\n"
+msgstr ""
+"% cd ~/doc/documentation/content/es/books\n"
+"% mkdir porters-handbook\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:273
+msgid "Copy the content from the original book:"
+msgstr "Скопируйте содержимое из переводимой книги:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:278
+#, no-wrap
+msgid ""
+"% cd porters-handbook\n"
+"% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .\n"
+msgstr ""
+"% cd porters-handbook\n"
+"% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:281
+msgid ""
+"Now the document structure is ready for the translator to begin translating "
+"with `po4a` command."
+msgstr ""
+"Теперь структура документа готова для начала перевода с помощью команды "
+"`po4a`."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:285
+#, no-wrap
+msgid "Translating"
+msgstr "Перевод"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:290
+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 ""
+"Система gettext значительно сокращает количество элементов, за которыми "
+"нужно следить переводчику. Строки, подлежащие переводу, извлекаются из "
+"исходного документа в файл PO. Затем с помощью редактора PO вводятся "
+"переведённые версии каждой строки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:292
+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 ""
+"Система перевода FreeBSD PO не перезаписывает PO-файлы, поэтому этап "
+"извлечения можно выполнять в любое время для обновления PO-файла."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:297
+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 ""
+"Редактор PO используется для редактирования файла. В этих примерах показан "
+"package:editors/poedit[], так как он прост и имеет минимальные требования. "
+"Другие редакторы PO предоставляют функции, облегчающие процесс перевода. В "
+"Коллекции портов доступно несколько таких редакторов, включая package:devel/"
+"gtranslator[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:300
+msgid ""
+"It is important to preserve the PO file. It contains all of the work that "
+"translators have done."
+msgstr ""
+"Важно сохранить PO-файл. Он содержит всю работу, проделанную переводчиками."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:305
+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 ""
+"Перевод документов онлайн оказывается наиболее простым способом перевода "
+"документации в FreeBSD, так как позволяет нескольким пользователям совместно "
+"работать над одним файлом, эффективно распределяя нагрузку. Для получения "
+"дополнительной информации обратитесь к следующей главе: "
+"crossref:weblate[weblate-introduction,Переводы в Weblate]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:308
+#, no-wrap
+msgid "Tips for Translators"
+msgstr "Советы переводчикам"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:311
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:315
+#, no-wrap
+msgid "Preserving AsciiDoc macros"
+msgstr "Сохранение AsciiDoc макросов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:314
+msgid "Preserve AsciiDoc macros that are shown in the English original."
+msgstr "Сохраните макросы AsciiDoc, которые указаны на английском языке."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:319
+msgid "English original:"
+msgstr "Оригинал на английском:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:325
+#, 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 ""
+"msgid \"\"\n"
+"\"This example shows the creation of a Spanish translation of the short \"\n"
+"\"extref:{leap-seconds}[Leap Seconds] article.\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:328
+msgid "Spanish translation:"
+msgstr "Испанский перевод:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:334
+#, 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 ""
+"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"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:339
+#, no-wrap
+msgid "Preserving Spaces"
+msgstr "Сохранение пробелов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:343
+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:345
+#, no-wrap
+msgid "Verbatim Tags"
+msgstr "Дословные теги"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:348
+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:350
+msgid "`man:man[1]`"
+msgstr "`man:man[1]`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:351
+msgid "`package:package[]`"
+msgstr "`package:package[]`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:352
+msgid "`link`"
+msgstr "`link`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:353
+msgid "`image`"
+msgstr "`image`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:354
+msgid "`include`"
+msgstr "`include`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:355
+msgid "`Admonitions`"
+msgstr "`Admonitions`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:356
+msgid "`id's`"
+msgstr "`id's`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:357
+msgid "`Heading tags`"
+msgstr "`Heading tags`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:358
+msgid "`source`"
+msgstr "`source`"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:360
+#, no-wrap
+msgid "Building a Translated Document"
+msgstr "Сборка переведенного документа"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:366
+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 ""
+"Переведённую версию оригинального документа можно создать в любое время. "
+"При этом все непереведённые части документа будут включены в итоговый "
+"документ на английском языке. Большинство PO-редакторов имеют индикатор, "
+"показывающий, какая часть перевода завершена. Это позволяет переводчику "
+"легко увидеть, когда переведено достаточно строк, чтобы сборка итогового "
+"документа имела смысл."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:368
+msgid ""
+"The Weblate chapter provides a complete example of how to "
+"crossref:weblate[weblate-building,Build the Translated Document]."
+msgstr ""
+"Глава о Weblate есть полный пример того, как crossref:weblate[weblate-"
+"building,Собрать переведённый документ]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:370
+#, no-wrap
+msgid "Submitting the New Translation"
+msgstr "Отправка новой переведённой версии"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:374
+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 ""
+"Подготовьте новые файлы перевода для отправки. Это включает добавление "
+"файлов в систему контроля версий, установку дополнительных свойств для них, "
+"а затем создание diff-файла для отправки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:376
+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 ""
+"Файлы различий, созданные в этих примерах, можно прикрепить к https://"
+"bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Documentation[отчету об "
+"ошибке в документации] или https://reviews.freebsd.org/[обзору кода]."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:378
+#, no-wrap
+msgid "Spanish Translation of the NanoBSD Article"
+msgstr "Перевод статьи NanoBSD на испанский язык"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:385
+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 ""
+"Создайте diff новых файлов из базового каталога [.filename]#~/doc/# так, "
+"чтобы полный путь отображался вместе с именами файлов. Это помогает "
+"коммиттерам определить целевой языковой каталог."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:390
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff\n"
+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:394
+msgid ""
+"The Weblate chapter provides a complete example of how to "
+"crossref:weblate[weblate-submitting-translations,Submit the New Translation]."
+msgstr ""
+"Глава о Weblate содержит полный пример того, как crossref:weblate[weblate-"
+"submitting-translations, отправить новый перевод]."
diff --git a/documentation/content/ru/books/fdp-primer/preface/_index.adoc b/documentation/content/ru/books/fdp-primer/preface/_index.adoc
new file mode 100644
index 0000000000..6cc88df8af
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/preface/_index.adoc
@@ -0,0 +1,155 @@
+---
+description: 'Предисловие о проекте документации FreeBSD'
+next: books/fdp-primer/overview
+params:
+ path: /books/fdp-primer/preface/
+prev: books/fdp-primer
+showBookMenu: true
+tags: ["preface", "prompts", "conventions"]
+title: Предисловие
+weight: 1
+---
+
+[preface]
+[[preface]]
+= Предисловие
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+: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::[]
+
+[[preface-prompts]]
+== Приглашения командной оболочки
+
+В этой таблице показаны приглашения системы по умолчанию и приглашение суперпользователя. В примерах используются эти приглашения, чтобы указать, от какого типа пользователя выполняется пример.
+
+[.informaltable]
+[cols="1,2", frame="none", options="header"]
+|===
+| Пользователь
+| Приглашение
+
+
+|Обычный пользователь
+|%
+
+|`root`
+|#
+|===
+
+[[preface-conventions]]
+== Типографические соглашения
+
+Эта таблица описывает типографские соглашения, используемые в этой книге.
+
+[.informaltable]
+[cols="1,2", frame="none", options="header"]
+|===
+| Значение
+| Примеры
+
+
+|Имена команд.
+|Используйте `ls -l` для вывода списка всех файлов.
+
+|Имена файлов.
+|Измените файл [.filename]#.login#.
+
+|Вывод компьютера на экран.
+a|
+
+[source,shell]
+....
+У вас есть почта.
+....
+
+
+|Что вводит пользователь, в отличие от выводимого компьютером на экран.
+a|
+
+[source,shell]
+....
+% date +"Время: %H:%M"
+Время: 09:18
+....
+
+|Ссылки на руководства.
+|Используйте man:su[1] для смены пользователя.
+
+|Имена пользователей и групп.
+|Только `root` может это сделать.
+
+|Выделение текста.
+|Пользователь _обязан_ сделать это.
+
+|Текст, который пользователь должен заменить на фактический текст.
+|Для поиска ключевого слова в руководствах введите `man -k _ключевое_слово_`
+
+|Переменные окружения.
+|`$HOME` устанавливается в домашний каталог пользователя.
+|===
+
+[[preface-notes]]
+== Примечания, Советы, Важная информация, Предупреждения и Примеры
+
+Заметки, предупреждения и примеры выделены в тексте.
+
+[NOTE]
+====
+Заметки представлены следующим образом и содержат информацию, на которую следует обратить внимание, так как она может повлиять на действия пользователя.
+====
+
+[TIP]
+====
+
+Советы представлены таким образом и содержат полезную для пользователя информацию, например, показывая более простой способ выполнения чего-либо.
+====
+
+[IMPORTANT]
+====
+Важная информация представлена таким образом. Обычно это дополнительные шаги, которые может потребоваться выполнить пользователю.
+====
+
+[WARNING]
+====
+
+Предупреждения выглядят так и содержат информацию о возможном ущербе, если инструкции не будут соблюдены. Этот ущерб может быть физическим — для оборудования или пользователя — или нефизическим, например, случайным удалением важных файлов.
+====
+
+.Пример примера
+[example]
+====
+Примеры представлены следующим образом и обычно содержат пошаговые инструкции или результаты выполнения определённых действий.
+====
+
+[[preface-acknowledgements]]
+== Благодарности
+
+Моя благодарность Сью Блейк, Патрику Дурусо, Джону Гамильтону, Питеру Флинну и Кристоферу Мэдену, которые нашли время прочитать ранние черновики этого документа и предоставили множество ценных замечаний и критики.
diff --git a/documentation/content/ru/books/fdp-primer/preface/_index.po b/documentation/content/ru/books/fdp-primer/preface/_index.po
new file mode 100644
index 0000000000..40f807197d
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/preface/_index.po
@@ -0,0 +1,319 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-01 06:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerpreface_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:1
+#, no-wrap
+msgid "Preface about the FreeBSD Documentation Project"
+msgstr "Предисловие о проекте документации FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:1
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:15
+#, no-wrap
+msgid "Preface"
+msgstr "Предисловие"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:49
+#, no-wrap
+msgid "Shell Prompts"
+msgstr "Приглашения командной оболочки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:53
+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:58
+#, no-wrap
+msgid "User"
+msgstr "Пользователь"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:61
+#, no-wrap
+msgid "Prompt"
+msgstr "Приглашение"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:62
+#, no-wrap
+msgid "Normal user"
+msgstr "Обычный пользователь"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:64
+#, no-wrap
+msgid "%"
+msgstr "%"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:65
+#, no-wrap
+msgid "`root`"
+msgstr "`root`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:66
+#, no-wrap
+msgid "#"
+msgstr "#"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:69
+#, no-wrap
+msgid "Typographic Conventions"
+msgstr "Типографические соглашения"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:72
+msgid "This table describes the typographic conventions used in this book."
+msgstr ""
+"Эта таблица описывает типографские соглашения, используемые в этой книге."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:77
+#, no-wrap
+msgid "Meaning"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:80
+#, no-wrap
+msgid "Examples"
+msgstr "Примеры"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:81
+#, no-wrap
+msgid "The names of commands."
+msgstr "Имена команд."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:83
+#, no-wrap
+msgid "Use `ls -l` to list all files."
+msgstr "Используйте `ls -l` для вывода списка всех файлов."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:84
+#, no-wrap
+msgid "The names of files."
+msgstr "Имена файлов."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:86
+#, no-wrap
+msgid "Edit [.filename]#.login#."
+msgstr "Измените файл [.filename]#.login#."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:87
+#, no-wrap
+msgid "On-screen computer output."
+msgstr "Вывод компьютера на экран."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:95
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"....\n"
+"You have mail.\n"
+"...."
+msgstr ""
+"[source,shell]\n"
+"....\n"
+"У вас есть почта.\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:96
+#, 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:104
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"....\n"
+"% date +\"The time is %H:%M\"\n"
+"The time is 09:18\n"
+"...."
+msgstr ""
+"[source,shell]\n"
+"....\n"
+"% date +\"Время: %H:%M\"\n"
+"Время: 09:18\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:105
+#, no-wrap
+msgid "Manual page references."
+msgstr "Ссылки на руководства."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:107
+#, no-wrap
+msgid "Use man:su[1] to change user identity."
+msgstr "Используйте man:su[1] для смены пользователя."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:108
+#, no-wrap
+msgid "User and group names."
+msgstr "Имена пользователей и групп."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:110
+#, no-wrap
+msgid "Only `root` can do this."
+msgstr "Только `root` может это сделать."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:111
+#, no-wrap
+msgid "Emphasis."
+msgstr "Выделение текста."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:113
+#, no-wrap
+msgid "The user _must_ do this."
+msgstr "Пользователь _обязан_ сделать это."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:114
+#, 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:116
+#, no-wrap
+msgid "To search for a keyword in the manual pages, type `man -k _keyword_`"
+msgstr "Для поиска ключевого слова в руководствах введите `man -k _ключевое_слово_`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:117
+#, no-wrap
+msgid "Environment variables."
+msgstr "Переменные окружения."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:118
+#, no-wrap
+msgid "`$HOME` is set to the user's home directory."
+msgstr "`$HOME` устанавливается в домашний каталог пользователя."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:121
+#, no-wrap
+msgid "Notes, Tips, Important Information, Warnings, and Examples"
+msgstr "Примечания, Советы, Важная информация, Предупреждения и Примеры"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:124
+msgid "Notes, warnings, and examples appear within the text."
+msgstr "Заметки, предупреждения и примеры выделены в тексте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:128
+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:134
+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:140
+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:147
+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:149
+#, no-wrap
+msgid "A Sample Example"
+msgstr "Пример примера"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:153
+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:156
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Благодарности"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:158
+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/ru/books/fdp-primer/rosetta/_index.adoc b/documentation/content/ru/books/fdp-primer/rosetta/_index.adoc
new file mode 100644
index 0000000000..624f885531
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/rosetta/_index.adoc
@@ -0,0 +1,321 @@
+---
+description: 'Розеттский камень с различиями между Docbook и AsciiDoc'
+next: books/fdp-primer/translations
+params:
+ path: /books/fdp-primer/rosetta/
+prev: books/fdp-primer/asciidoctor-primer
+showBookMenu: true
+tags: ["rosetta", "docbook", "asciidoc", "comparison"]
+title: 'Глава 7. Розеттский камень'
+weight: 8
+---
+
+[[rosetta]]
+= Розеттский камень
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 7
+: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::[]
+
+[[docbook-vs-asciidoc]]
+== Сравнение Docbook и AsciiDoc
+
+Эта шпаргалка пытается показать различия между Docbook и AsciiDoc.
+
+.Сравнение Docbook и AsciiDoc
+[cols="1,4,4"]
+|===
+|Языковая функция |Docbook | AsciiDoc
+
+|*Жирный*
+|<strong>жирный</strong>
+|\*жирный*
+
+|*Курсив*
+|<emphasis>Курсив</emphasis>
+|\_Курсив_
+
+|*Моноширинный*
+|<literal>Моноширинный</literal>
+|\`Моноширинный`
+
+|*Абзац*
+|<para>Это абзац</para>
+|Это абзац
+
+|*Клавиша*
+|<keycap>F11</keycap>
+|\kbd:[F11]
+
+|*Ссылки*
+a|
+[source,xml]
+----
+<link xlink:href="https://www.freebsd.org/where/">
+Загрузить FreeBSD</link>
+----
+a|
+[source]
+----
+link:https://www.freebsd.org/where/[Загрузить FreeBSD]
+----
+
+|*Разделы*
+a|
+[source,xml]
+----
+ <sect1 xml:id="id">
+ <title>Раздел 1</title>
+ </sect1>
+----
+a|
+[source]
+----
+ [[id]]
+ = Раздел 1
+----
+
+|*Неупорядоченный список*
+a|
+[source,xml]
+----
+<itemizedlist>
+ <listitem>
+ <para>Когда следует собирать собственное ядро.</para>
+ </listitem>
+
+ <listitem>
+ <para>Как выполнить инвентаризацию оборудования.</para>
+ </listitem>
+</itemizedlist>
+----
+a|
+[source]
+----
+* Когда необходимо собрать собственное ядро.
+* Как выполнить инвентаризацию оборудования.
+----
+
+|*Упорядоченный список*
+a|
+[source,xml]
+----
+<orderedlist>
+ <listitem>
+ <para>Один</para>
+ </listitem>
+ <listitem>
+ <para>Два</para>
+ </listitem>
+ <listitem>
+ <para>Три</para>
+ </listitem>
+ <listitem>
+ <para>Четыре</para>
+ </listitem>
+</orderedlist>
+----
+a|
+[source]
+----
+. Один
+. Два
+. Три
+. Четыре
+----
+
+|*Словарный список (Variable list)*
+a|
+[source,xml]
+----
+<variablelist>
+ <varlistentry>
+ <term>amd64</term>
+ <listitem>
+ <para>Это наиболее распространённая десктопная...</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+----
+a|
+[source]
+----
+amd64::
+Это наиболее распространённая десктопная...
+----
+
+|*Исходный код*
+a|
+[source,xml]
+----
+<screen>
+ &prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>
+</screen>
+----
+a|
+[source]
+....
+[source,shell]
+----
+# mkdir -p /var/spool/lpd/lp
+----
+....
+
+|*Неформатируемый блок*
+a|
+[source,xml]
+----
+<programlisting>
+include GENERIC
+ident MYKERNEL
+
+options IPFIREWALL
+options DUMMYNET
+options IPFIREWALL_DEFAULT_TO_ACCEPT
+options IPDIVERT
+</programlisting>
+----
+a|
+[source]
+----
+....
+include GENERIC
+ident MYKERNEL
+
+options IPFIREWALL
+options DUMMYNET
+options IPFIREWALL_DEFAULT_TO_ACCEPT
+options IPDIVERT
+....
+----
+
+|*Изображения*
+a|
+[source,xml]
+----
+<figure xml:id="bsdinstall-newboot-loader-menu">
+ <title>Меню загрузчика FreeBSD</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="bsdinstall/bsdinstall-newboot-loader-menu"/>
+ </imageobject>
+ <textobject>
+ </literallayout>
+ Поддержка ASCII-графики более не предоставляется.
+ </literallayout>
+ </textobject>
+ <textobject>
+ <phrase>Меню загрузчика FreeBSD с вариантами 1-6 для загрузки
+ в многопользовательском режиме, однопользовательском
+ режиме, перехода в командную строку загрузчика, перезагрузки,
+ выбора ядра для загрузки и параметров загрузки</phrase>
+ </textobject>
+ </mediaobject>
+</figure>
+----
+a|
+[source]
+----
+[[bsdinstall-newboot-loader-menu]]
+.Меню загрузчика FreeBSD
+image::bsdinstall/bsdinstall-newboot-loader-menu[Меню загрузчика FreeBSD с вариантами 1-6: загрузка многопользовательского режима, загрузка однопользовательского режима, переход в командную строку загрузчика, перезагрузка, выбор ядра для загрузки и параметров загрузки]
+----
+
+|*Включение файла*
+|не доступно
+a|
+[source]
+----
+\include::chapter.adoc[]
+----
+
+|*Таблицы*
+a|
+[source,xml]
+----
+<table xml:id="partition-schemes" frame="none" rowsep="1" pgwide="1">
+ <title>Схемы разделов</title>
+
+ <tgroup cols="2" align="left">
+ <thead>
+ <row>
+ <entry align="left">Сокращение</entry>
+ <entry align="left">Описание</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>APM</entry>
+ <entry>Карта разделов Apple, используется в PowerPC(R).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
+----
+a|
+[source]
+----
+[[partition-schemes]]
+.Схемы разделов
+[cols="1,1", frame="none", options="header"]
+\|===
+\| Сокращение
+\| Описание
+
+\|APM
+\|Apple Partition Map, используется на PowerPC(R).
+
+\|===
+----
+
+|*Блоки-уведомления*
+a|
+[source,xml]
+----
+<tip>
+ <para>Это подсказка</para>
+</tip>
+----
+a|
+[source]
+----
+[ПОДСКАЗКА]
+====
+Это подсказка
+====
+----
+
+|===
diff --git a/documentation/content/ru/books/fdp-primer/rosetta/_index.po b/documentation/content/ru/books/fdp-primer/rosetta/_index.po
new file mode 100644
index 0000000000..e454294a2c
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/rosetta/_index.po
@@ -0,0 +1,793 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-23 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerrosetta_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:1
+#, no-wrap
+msgid "Rosetta Stone with the differences between Docbook and AsciiDoc"
+msgstr "Розеттский камень с различиями между Docbook и AsciiDoc"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Rosetta Stone"
+msgstr "Глава 7. Розеттский камень"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:14
+#, no-wrap
+msgid "Rosetta Stone"
+msgstr "Розеттский камень"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:52
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:56
+#, no-wrap
+msgid "Comparison between Docbook and AsciiDoc"
+msgstr "Сравнение Docbook и AsciiDoc"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:55
+msgid ""
+"This rosetta stone tries to show the differences between Docbook and "
+"AsciiDoc."
+msgstr "Эта шпаргалка пытается показать различия между Docbook и AsciiDoc."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:59
+#, no-wrap
+msgid "Language Feature"
+msgstr "Языковая функция"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:59
+#, no-wrap
+msgid "Docbook"
+msgstr "Docbook"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:61
+#, no-wrap
+msgid "AsciiDoc"
+msgstr "AsciiDoc"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:62
+#, no-wrap
+msgid "*Bold*"
+msgstr "*Жирный*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:63
+#, no-wrap
+msgid "<strong>bold</strong>"
+msgstr "<strong>жирный</strong>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:65
+#, no-wrap
+msgid "\\*bold*"
+msgstr "\\*жирный*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:66
+#, no-wrap
+msgid "*Italic*"
+msgstr "*Курсив*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:67
+#, no-wrap
+msgid "<emphasis>Italic</emphasis>"
+msgstr "<emphasis>Курсив</emphasis>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:69
+#, no-wrap
+msgid "\\_Italic_"
+msgstr "\\_Курсив_"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:70
+#, no-wrap
+msgid "*Monospace*"
+msgstr "*Моноширинный*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:71
+#, no-wrap
+msgid "<literal>Monospace</literal>"
+msgstr "<literal>Моноширинный</literal>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:73
+#, no-wrap
+msgid "\\`Monospace`"
+msgstr "\\`Моноширинный`"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:74
+#, no-wrap
+msgid "*Paragraph*"
+msgstr "*Абзац*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:75
+#, no-wrap
+msgid "<para>This is a paragraph</para>"
+msgstr "<para>Это абзац</para>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:77
+#, no-wrap
+msgid "This is a paragraph"
+msgstr "Это абзац"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:78
+#, no-wrap
+msgid "*Keycap*"
+msgstr "*Клавиша*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:79
+#, no-wrap
+msgid "<keycap>F11</keycap>"
+msgstr "<keycap>F11</keycap>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:81
+#, no-wrap
+msgid "\\kbd:[F11]"
+msgstr "\\kbd:[F11]"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:82
+#, no-wrap
+msgid "*Links*"
+msgstr "*Ссылки*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:87
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<link xlink:href=\"https://www.freebsd.org/where/\">Download FreeBSD</link>\n"
+"----"
+msgstr ""
+"[source,xml]\n"
+"----\n"
+"<link xlink:href=\"https://www.freebsd.org/where/\">\n"
+"Загрузить FreeBSD</link>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:93
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"link:https://www.freebsd.org/where/[Download FreeBSD]\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+"link:https://www.freebsd.org/where/[Загрузить FreeBSD]\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:94
+#, no-wrap
+msgid "*Sections*"
+msgstr "*Разделы*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:101
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+" <sect1 xml:id=\"id\">\n"
+" <title>Section 1</title>\n"
+" </sect1>\n"
+"----"
+msgstr ""
+"[source,xml]\n"
+"----\n"
+" <sect1 xml:id=\"id\">\n"
+" <title>Раздел 1</title>\n"
+" </sect1>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:108
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+" [[id]]\n"
+" = Section 1\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+" [[id]]\n"
+" = Раздел 1\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:109
+#, no-wrap
+msgid "*Unordered list*"
+msgstr "*Неупорядоченный список*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:122
+#, 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 ""
+"[source,xml]\n"
+"----\n"
+"<itemizedlist>\n"
+" <listitem>\n"
+" <para>Когда следует собирать собственное ядро.</para>\n"
+" </listitem>\n"
+"\n"
+" <listitem>\n"
+" <para>Как выполнить инвентаризацию оборудования.</para>\n"
+" </listitem>\n"
+"</itemizedlist>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:129
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"* When to build a custom kernel.\n"
+"* How to take a hardware inventory.\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+"* Когда необходимо собрать собственное ядро.\n"
+"* Как выполнить инвентаризацию оборудования.\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:130
+#, no-wrap
+msgid "*Ordered list*"
+msgstr "*Упорядоченный список*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:148
+#, 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 ""
+"[source,xml]\n"
+"----\n"
+"<orderedlist>\n"
+" <listitem>\n"
+" <para>Один</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Два</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Три</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Четыре</para>\n"
+" </listitem>\n"
+"</orderedlist>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:157
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+". One\n"
+". Two\n"
+". Three\n"
+". Four\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+". Один\n"
+". Два\n"
+". Три\n"
+". Четыре\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:158
+#, no-wrap
+msgid "*Variable list*"
+msgstr "*Словарный список (Variable list)*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:170
+#, 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 ""
+"[source,xml]\n"
+"----\n"
+"<variablelist>\n"
+" <varlistentry>\n"
+" <term>amd64</term>\n"
+" <listitem>\n"
+" <para>Это наиболее распространённая десктопная...</para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"</variablelist>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:177
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"amd64::\n"
+"This is the most common desktop...\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+"amd64::\n"
+"Это наиболее распространённая десктопная...\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:178
+#, no-wrap
+msgid "*Source code*"
+msgstr "*Исходный код*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:185
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<screen>\n"
+" &prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>\n"
+"</screen>\n"
+"----"
+msgstr ""
+"[source,xml]\n"
+"----\n"
+"<screen>\n"
+" &prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>\n"
+"</screen>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:194
+#, no-wrap
+msgid ""
+"[source]\n"
+"....\n"
+"[source,shell]\n"
+"----\n"
+"# mkdir -p /var/spool/lpd/lp\n"
+"----\n"
+"...."
+msgstr ""
+"[source]\n"
+"....\n"
+"[source,shell]\n"
+"----\n"
+"# mkdir -p /var/spool/lpd/lp\n"
+"----\n"
+"...."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:195
+#, no-wrap
+msgid "*Literal block*"
+msgstr "*Неформатируемый блок*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:208
+#, 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 ""
+"[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"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:222
+#, 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 ""
+"[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"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:223
+#, no-wrap
+msgid "*Images*"
+msgstr "*Изображения*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:244
+#, 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 ""
+"[source,xml]\n"
+"----\n"
+"<figure xml:id=\"bsdinstall-newboot-loader-menu\">\n"
+" <title>Меню загрузчика FreeBSD</title>\n"
+"\n"
+" <mediaobject>\n"
+" <imageobject>\n"
+" <imagedata fileref=\"bsdinstall/bsdinstall-newboot-loader-menu\"/>\n"
+" </imageobject>\n"
+" <textobject>\n"
+" </literallayout>\n"
+" Поддержка ASCII-графики более не предоставляется.\n"
+" </literallayout>\n"
+" </textobject>\n"
+" <textobject>\n"
+" <phrase>Меню загрузчика FreeBSD с вариантами 1-6 для загрузки\n"
+" в многопользовательском режиме, однопользовательском\n"
+" режиме, перехода в командную строку загрузчика, перезагрузки,\n"
+" выбора ядра для загрузки и параметров загрузки</phrase>\n"
+" </textobject>\n"
+" </mediaobject>\n"
+"</figure>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:252
+#, 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 ""
+"[source]\n"
+"----\n"
+"[[bsdinstall-newboot-loader-menu]]\n"
+".Меню загрузчика FreeBSD\n"
+"image::bsdinstall/bsdinstall-newboot-loader-menu[Меню загрузчика FreeBSD с вариантами 1-6: загрузка многопользовательского режима, загрузка однопользовательского режима, переход в командную строку загрузчика, перезагрузка, выбор ядра для загрузки и параметров загрузки]\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:253
+#, no-wrap
+msgid "*Includes*"
+msgstr "*Включение файла*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:254
+#, no-wrap
+msgid "n/a"
+msgstr "не доступно"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:260
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"\\include::chapter.adoc[]\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+"\\include::chapter.adoc[]\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:261
+#, no-wrap
+msgid "*Tables*"
+msgstr "*Таблицы*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:284
+#, 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 ""
+"[source,xml]\n"
+"----\n"
+"<table xml:id=\"partition-schemes\" frame=\"none\" rowsep=\"1\" pgwide=\"1\">\n"
+" <title>Схемы разделов</title>\n"
+"\n"
+" <tgroup cols=\"2\" align=\"left\">\n"
+" <thead>\n"
+" <row>\n"
+" <entry align=\"left\">Сокращение</entry>\n"
+" <entry align=\"left\">Описание</entry>\n"
+" </row>\n"
+" </thead>\n"
+"\n"
+" <tbody>\n"
+" <row>\n"
+" <entry>APM</entry>\n"
+" <entry>Карта разделов Apple, используется в PowerPC(R).</entry>\n"
+" </row>\n"
+" </tbody>\n"
+" </tgroup>\n"
+"</table>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:290
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"[[partition-schemes]]\n"
+".Partitioning Schemes\n"
+"[cols=\"1,1\", frame=\"none\", options=\"header\"]\n"
+"\\"
+msgstr ""
+"[source]\n"
+"----\n"
+"[[partition-schemes]]\n"
+".Схемы разделов\n"
+"[cols=\"1,1\", frame=\"none\", options=\"header\"]\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:291
+#, no-wrap
+msgid ""
+"===\n"
+"\\"
+msgstr ""
+"===\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:292
+#, no-wrap
+msgid ""
+"Abbreviation\n"
+"\\"
+msgstr ""
+"Сокращение\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:294
+#, no-wrap
+msgid ""
+"Description\n"
+"\n"
+"\\"
+msgstr ""
+"Описание\n"
+"\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:295
+#, no-wrap
+msgid ""
+"APM\n"
+"\\"
+msgstr ""
+"APM\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:297
+#, no-wrap
+msgid ""
+"Apple Partition Map, used by PowerPC(R).\n"
+"\n"
+"\\"
+msgstr ""
+"Apple Partition Map, используется на PowerPC(R).\n"
+"\n"
+"\\"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:300
+#, no-wrap
+msgid ""
+"===\n"
+"----"
+msgstr ""
+"===\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:301
+#, no-wrap
+msgid "*Admonitions*"
+msgstr "*Блоки-уведомления*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:308
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<tip>\n"
+" <para>This is a tip</para>\n"
+"</tip>\n"
+"----"
+msgstr ""
+"[source,xml]\n"
+"----\n"
+"<tip>\n"
+" <para>Это подсказка</para>\n"
+"</tip>\n"
+"----"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:317
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"[TIP]\n"
+"====\n"
+"This is a tip\n"
+"====\n"
+"----"
+msgstr ""
+"[source]\n"
+"----\n"
+"[ПОДСКАЗКА]\n"
+"====\n"
+"Это подсказка\n"
+"====\n"
+"----"
diff --git a/documentation/content/ru/books/fdp-primer/see-also/_index.adoc b/documentation/content/ru/books/fdp-primer/see-also/_index.adoc
new file mode 100644
index 0000000000..b3a4f8dc1a
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/see-also/_index.adoc
@@ -0,0 +1,77 @@
+---
+description: 'Дополнительная информация о проекте документации FreeBSD'
+next: books/fdp-primer/examples
+params:
+ path: /books/fdp-primer/see-also/
+prev: books/fdp-primer/trademarks/
+showBookMenu: true
+tags: ["additional information", "AsciiDoctor", "HTML"]
+title: 'Глава 15. Смотрите также'
+weight: 15
+---
+
+[[see-also]]
+= Смотрите также
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 15
+: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::[]
+
+Этот документ намеренно не является исчерпывающим обсуждением AsciiDoc и проекта документации FreeBSD. Для получения дополнительной информации о них рекомендуется посетить следующие веб-сайты.
+
+[[see-also-fdp]]
+== Проект документации FreeBSD
+
+* link:https://www.FreeBSD.org/docproj/[Веб-страницы проекта документации FreeBSD]
+* extref:{handbook}[Руководство по FreeBSD]
+
+[[see-also-hugo]]
+== Hugo
+
+* link:https://gohugo.io/[Hugo]
+* link:https://gohugo.io/documentation/[Документация Hugo]
+
+[[see-also-asciidoc]]
+== AsciiDoctor
+
+* link:https://asciidoctor.org/[AsciiDoctor]
+* link:https://docs.asciidoctor.org/[Документационный портал AsciiDoctor]
+
+[[see-also-html]]
+== HTML
+
+* link:http://www.w3.org/[Консорциум Всемирной паутины]
+* link:https://dev.w3.org/html5/spec-LC/[Спецификация HTML 5]
+* link:https://www.w3.org/Style/CSS/specs.en.html[Спецификация CSS]
+* link:https://sass-lang.com/[Sass]
diff --git a/documentation/content/ru/books/fdp-primer/see-also/_index.po b/documentation/content/ru/books/fdp-primer/see-also/_index.po
new file mode 100644
index 0000000000..9e208201ad
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/see-also/_index.po
@@ -0,0 +1,127 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-01 18:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primersee-also_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
+#, no-wrap
+msgid "More information about the FreeBSD Documentation Project"
+msgstr "Дополнительная информация о проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. See Also"
+msgstr "Глава 15. Смотрите также"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:14
+#, no-wrap
+msgid "See Also"
+msgstr "Смотрите также"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:53
+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 ""
+"Этот документ намеренно не является исчерпывающим обсуждением AsciiDoc и "
+"проекта документации FreeBSD. Для получения дополнительной информации о них "
+"рекомендуется посетить следующие веб-сайты."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:55
+#, no-wrap
+msgid "The FreeBSD Documentation Project"
+msgstr "Проект документации FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:58
+msgid ""
+"link:https://www.FreeBSD.org/docproj/[The FreeBSD Documentation Project web "
+"pages]"
+msgstr ""
+"link:https://www.FreeBSD.org/docproj/[Веб-страницы проекта документации "
+"FreeBSD]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:59
+msgid "extref:{handbook}[The FreeBSD Handbook]"
+msgstr "extref:{handbook}[Руководство по FreeBSD]"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:61
+#, no-wrap
+msgid "Hugo"
+msgstr "Hugo"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:64
+msgid "link:https://gohugo.io/[Hugo]"
+msgstr "link:https://gohugo.io/[Hugo]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:65
+msgid "link:https://gohugo.io/documentation/[Hugo documentation]"
+msgstr "link:https://gohugo.io/documentation/[Документация Hugo]"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:67
+#, no-wrap
+msgid "AsciiDoctor"
+msgstr "AsciiDoctor"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:70
+msgid "link:https://asciidoctor.org/[AsciiDoctor]"
+msgstr "link:https://asciidoctor.org/[AsciiDoctor]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:71
+msgid "link:https://docs.asciidoctor.org/[AsciiDoctor Documentation Portal]"
+msgstr ""
+"link:https://docs.asciidoctor.org/[Документационный портал AsciiDoctor]"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:73
+#, no-wrap
+msgid "HTML"
+msgstr "HTML"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:76
+msgid "link:http://www.w3.org/[The World Wide Web Consortium]"
+msgstr "link:http://www.w3.org/[Консорциум Всемирной паутины]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:77
+msgid "link:https://dev.w3.org/html5/spec-LC/[The HTML 5 specification]"
+msgstr "link:https://dev.w3.org/html5/spec-LC/[Спецификация HTML 5]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:78
+msgid "link:https://www.w3.org/Style/CSS/specs.en.html[CSS specification]"
+msgstr "link:https://www.w3.org/Style/CSS/specs.en.html[Спецификация CSS]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:78
+msgid "link:https://sass-lang.com/[Sass]"
+msgstr "link:https://sass-lang.com/[Sass]"
diff --git a/documentation/content/ru/books/fdp-primer/structure/_index.adoc b/documentation/content/ru/books/fdp-primer/structure/_index.adoc
new file mode 100644
index 0000000000..a89d627650
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/structure/_index.adoc
@@ -0,0 +1,386 @@
+---
+description: 'Структура каталогов документации, используемая в проекте документации FreeBSD'
+next: books/fdp-primer/doc-build
+params:
+ path: /books/fdp-primer/structure/
+prev: books/fdp-primer/working-copy
+showBookMenu: true
+tags: ["directory structure", "organization"]
+title: 'Глава 4. Структура каталогов документации'
+weight: 5
+---
+
+[[structure]]
+= Структура каталогов документации
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 4
+: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::[]
+
+Файлы и каталоги в дереве *doc/* следуют структуре, преследующей цели:
+
+. Сделать удобным автоматическое преобразование документа в другие форматы.
+. Способствовать согласованности между различными организациями, занимающимися документацией, чтобы упростить переход между работой над разными документами.
+. Сделать удобным выбор места в дереве для размещения новой документации.
+
+В дополнение, дерево документации должно поддерживать документы на многих разных языках. Важно, чтобы структура дерева документации не навязывала каких-либо конкретных настроек по умолчанию или культурных предпочтений.
+
+[[structure-top]]
+== Верхний уровень, doc/
+
+В разделе *doc/* есть три подраздела, документация и веб-сайт имеют одинаковую структуру.
+
+[cols="20%,80%", frame="none", options="header"]
+|===
+| Каталог
+| Использование
+
+| *documentation*
+| Содержит все статьи и книги в формате AsciiDoc.
+Содержит подкаталоги для дальнейшей категоризации информации по языкам.
+
+| *tools*
+| Содержит набор инструментов для перевода документации и веб-сайта с использованием link:https://weblate.org/en/[Weblate].
+Экземпляр Weblate доступен link:https://translate-dev.freebsd.org[здесь].
+
+| *shared*
+| Содержит файлы, не относящиеся к различным переводам документации.
+Включает подкаталоги для дальнейшей категоризации информации по языкам, а также три файла для хранения данных об авторах, выпусках и зеркалах.
+Этот каталог является общим для `documentation` и `website`.
+
+| * website*
+| Содержит ссылку link:https://www.FreeBSD.org[FreeBSD website] в формате AsciiDoc.
+Содержит подкаталоги для дальнейшей категоризации информации по языкам.
+|===
+
+[[structure-locale]]
+== Каталоги
+
+Эти каталоги содержат документацию и веб-сайт. Документация организована в подкаталоги ниже этого уровня, следуя структуре каталогов link:https://gohugo.io/getting-started/directory-structure/[Hugo].
+
+[cols="20%,80%", frame="none", options="header"]
+|===
+| Каталог
+| Использование
+
+
+| * archetypes*
+| Содержит шаблоны для создания новых статей, книг и веб-страниц.
+Дополнительную информацию смотрите link:https://gohugo.io/content-management/archetypes/[здесь].
+
+| *config*
+| Содержат файлы конфигурации Hugo.
+Один основной файл и по одному файлу для каждого языка.
+Для получения дополнительной информации смотрите link:https://gohugo.io/getting-started/configuration/[здесь].
+
+| *content*
+| Содержат книги, статьи и веб-страницы.
+Для каждого доступного перевода документации существует отдельный каталог, например `en` и `zh-tw`.
+
+| *data*
+| Содержит пользовательские данные для сборки веб-сайта в формате link:https://en.wikipedia.org/wiki/TOML[TOML].
+Этот каталог используется для хранения событий, новостей, пресс-релизов и т.д.
+Для получения дополнительной информации ознакомьтесь link:https://gohugo.io/templates/data-templates/[здесь].
+
+| *static*
+| Содержат статические ресурсы.
+Изображения, бюллетени безопасности, pgpkeys и т.д.
+Подробнее смотрите link:https://gohugo.io/content-management/static-files/[здесь].
+
+| * themes*
+| Содержите шаблоны в виде файлов `.html`, которые определяют внешний вид веб-сайта.
+Для получения дополнительной информации посмотрите link:https://gohugo.io/templates/[здесь].
+
+| *tools*
+| Содержит инструменты, используемые для улучшения сборки документации.
+Например, для генерации оглавления книг и т.д.
+
+| *beastie.png*
+| Это изображение не нуждается в представлении ;)
+
+| *LICENSE*
+| Лицензия документации, общих материалов и веб-сайта. Лицензия BSD с 2 пунктами.
+
+| *Makefile*
+| Файл *Makefile* определяет процесс сборки документации и веб-сайта.
+|===
+
+[[structure-document]]
+== Информация, относящаяся к документу
+
+Этот раздел содержит особые примечания о конкретных документах, которыми управляет FDP.
+
+[[structure-document-books]]
+== Книги: books/
+
+Книги написаны в AsciiDoc.
+
+Для каждой книги FreeBSD тип документа AsciiDoc (также известный как doctype) — это `book` (книга). Книги содержат ``part`` (части), каждая из которых включает несколько ``chapter`` (глав).
+
+Когда документ преобразуется в HTML 5 (с использованием встроенного бэкенда `html5`):
+
+* Уровень раздела AsciiDoc 0 (`=`) в начале `главы` `книги` будет `<h1>`
+* Уровень секции AsciiDoc 1 (`==`) должен использоваться для первого логического раздела главы и будет преобразован в `<h2>`
+* Уровень раздела AsciiDoc 2 (`===`) должен использоваться для первого логического подраздела и будет преобразован в `<h3>`
+
+– и так далее. Ссылка: link:https://docs.asciidoctor.org/asciidoc/latest/sections/titles-and-levels/[Заголовки и уровни разделов | Документация Asciidoctor].
+
+[[structure-document-books-physical]]
+=== Физическая организация
+
+В каталоге books находится множество файлов и директорий, все с одинаковой структурой.
+
+[[structure-document-books-physical-index]]
+==== _index.adoc
+
+Файл *_index.adoc* определяет некоторые переменные AsciiDoc, которые влияют на преобразование исходного кода AsciiDoc в другие форматы, а также содержит оглавление, список примеров, список рисунков, список таблиц и раздел с аннотацией.
+
+[[structure-document-books-physical-book]]
+==== book.adoc
+
+Файл *book.adoc* определяет некоторые переменные AsciiDoc, которые влияют на преобразование исходного кода AsciiDoc в другие форматы, а также включает оглавление, список примеров, список рисунков, список таблиц, раздел с аннотацией и все главы. Этот файл используется для генерации PDF с помощью `asciidoctor-pdf` и для создания книги в виде одной страницы `html`.
+
+[[structure-document-books-physical-part]]
+==== part*.adoc
+Файлы **part*.adoc** содержат краткое введение к одной части книги.
+
+[[structure-document-handbook-physical-chapters]]
+==== directory/_index.adoc
+
+Каждая глава Руководства хранится в файле с именем *_index.adoc* в отдельном каталоге от других глав.
+
+Например, вот пример заголовка одной главы:
+
+[source.programlisting, asciidoc]
+....
+---
+title: Chapter 8. Configuring the FreeBSD Kernel
+part: Part II. Common Tasks
+prev: books/handbook/multimedia
+next: books/handbook/printing
+---
+
+[[kernelconfig]]
+= Настройка ядра FreeBSD
+...
+....
+
+При создании HTML5-версии Handbook это приведёт к формированию файла *kernelconfig/index.html*.
+
+Быстрый взгляд покажет, что существует множество каталогов с отдельными файлами *_index.adoc*, включая *basics/_index.adoc*, *introduction/_index.adoc* и *printing/_index.adoc*.
+
+[IMPORTANT]
+====
+Не называйте главы или каталоги в соответствии с их порядком в Руководстве. Этот порядок может измениться при реорганизации содержания Руководства. Реорганизация должна быть возможной без переименования файлов, за исключением случаев, когда целые главы перемещаются вверх или вниз по иерархии.
+====
+
+[[structure-document-articles]]
+== Статьи: articles/
+
+Статьи написаны в AsciiDoc.
+
+Статьи организованы как документ AsciiDoc `article`. Статьи разделены на разделы (`=`), подразделы (`==`, `===`) и так далее.
+
+[[structure-document-articles-physical]]
+=== Физическая организация
+
+На каждый статью приходится один файл *_index.adoc*.
+
+[[structure-document-articles-physical-index]]
+==== _index.adoc
+
+Файл *_index.adoc* содержит все переменные AsciiDoc и контент.
+
+Например, это образец одной статьи, структура довольно похожа на главу книги:
+
+[source.programlisting, asciidoc]
+....
+---
+title: Why you should use a BSD style license for your Open Source Project
+authors:
+ - author: Bruce Montague
+ email: brucem@alumni.cse.ucsc.edu
+trademarks: ["freebsd", "intel", "general"]
+---
+
+= Почему вы должны использовать лицензию в стиле BSD для вашего Open Source проекта
+:doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental:
+
+'''
+
+toc::[]
+
+[[intro]]
+== Введение
+....
+
+== Управление списками участников
+
+Проект FreeBSD отмечает вклад участников в нескольких различных списках в документации и печатных материалах. В этом разделе описано, как команда документации управляет изменениями в этих списках.
+
+=== Списки отношений наставника и нового коммиттера
+
+Начиная с FreeBSD 7.0, FreeBSD поддерживает link:https://cgit.freebsd.org/src/tree/share/misc[три списка отношений наставник/подопечный] — один для исходного кода, один для портов и один для документации. Эти файлы имеют формат *«.dot»* и предназначены для использования с популярным пакетом для построения графиков graphics/graphviz[], доступным как пакет или порт FreeBSD.
+
+[NOTE]
+====
+man:dot[1] устанавливается как часть пакета или порта: graphics/graphviz[]. Программа [.filename]#dot# читает файлы в формате *".dot"* и создает графическое изображение направленного графа.
+====
+
+Три файла часто служат учебным опытом для новых коммиттеров всех трёх команд, которым поручается добавить себя и своего наставника в соответствующий файл в качестве их первого коммита. Каждый файл содержит раздел «current» для новых коммиттеров, раздел «alumni» для случаев возврата прав на коммит и раздел «mentor / mentee», отображающий взаимоотношения. Формат каждой записи поясняется в начале файла.
+
+=== Общий список участников
+
+extref:{contributors}[Участники] проекта FreeBSD поддерживаются в формате статьи. Исходный файл для управления статьёй *Участники* находится по адресу:
+
+[subs=+quotes]
+----
+doc
+ /documentation
+ /content
+ /{language}
+ /articles
+ /contributors
+ [.filename]#_index.adoc# – Contains a list of include files that apply to each section.
+ [.filename]#_index.po# – Translation page
+ [.filename]#contrib-develinmemoriam.adoc# - content of “In Memoriam” section
+ [.filename]#contrib-develinmemoriam.po# – Translation page
+----
+
+Копии этого каталога contributors могут существовать в других каталогах с контентом на различных языках.
+
+Обратите внимание, что файл [.filename]#contrib-develinmemoriam.adoc# также находится в этом каталоге. Дополнительную информацию смотрите ниже.
+
+Файл [.filename]#contributors/_index.adoc# представляет собой набор включаемых файлов. Включаемые файлы перечислены в разделе, специфичном для Hugo, в исходном файле. Раздел разделён на несколько частей с помощью операторов "ifdef::". Существует подраздел для вывода на веб-сайт и подраздел для вывода вне веб-сайта (включая PDF).
+
+Текст каждого раздела страницы *Участники* содержит оператор "include::". Например, запись для "Экс-участники менеджера портов" выглядит как `include::{include-contrib-portmgralumni}[]`. Это подключает текст об экс-участниках менеджера портов в итоговый вывод.
+
+Чтобы внести изменения, отредактируйте соответствующий include-файл:
+
+[subs=+quotes]
+----
+include-contrib-committers: [.filename]#~/doc/shared/contrib-committers.adoc#
+include-contrib-corealumni: [.filename]#~/doc/shared/contrib-corealumni.adoc#
+include-contrib-develalumni: [.filename]#~/doc/shared/contrib-develalumni.adoc#
+include-contrib-portmgralumni: [.filename]#~/doc/shared/contrib-portmgralumni.adoc#
+include-contrib-additional: [.filename]#~/doc/shared/contrib-additional.adoc#
+include-contrib-386bsd: [.filename]#~/doc/shared/contrib-386bsd.adoc#
+
+Также отредактируйте файл [.filename]#authors.adoc#: [.filename]#~/doc/shared/authors.adoc#
+и все связанные с ним переводы.
+
+----
+
+В общем случае, если добавляется новый человек, требуется лишь одно изменение — его можно добавить в соответствующий включаемый файл. Если человек переводится из статуса «текущий» в «бывший», необходимо два изменения: одно для удаления и одно для добавления в соответствующие файлы. Порядок записей для всех файлов указан в таблице ниже.
+
+[cols="25%,25%,25%,25%", frame="none", options="header"]
+|===
+| Назначение | Якорь раздела | Файл в ~/doc/shared/ | Спецификация порядка
+| *Разработчики FreeBSD* | include-contrib-committers | [.filename]#contrib-committers.adoc# | упорядочено по алфавиту по фамилии
+| *Бывшие члены основной команды* | include-contrib-corealumni | [.filename]#contrib-corealumni.adoc# | приблизительно в обратном хронологическом порядке
+| *Бывшие члены команды разработчиков* | include-contrib-develalumni | [.filename]#contrib-develalumni.adoc# | приблизительно в обратном хронологическом порядке
+| *Бывшие члены команды управления портами* | include::contrib-portmgralumni | [.filename]#contrib-portmgralumni.adoc# | приблизительно в обратном хронологическом порядке
+| *Дополнительные участники проекта FreeBSD* | include-contrib-additional | [.filename]#contrib-additional.adoc# | упорядочено по алфавиту по имени
+| *Участники, предоставившие патчи для 386BSD Patch Kit* | include-contrib-386bsd | [.filename]#contrib-386bsd.adoc# | упорядочено по алфавиту по имени
+| *Участники проекта центрального сервера* | Файл include не используется | [.filename]#contributors/_index.adoc# | неупорядоченное
+| *Прямое финансирование* | Файл include не используется | [.filename]#contributors/_index.adoc# | неупорядоченное
+| *Участники, предоставившие оборудование* | Файл include не используется | [.filename]#contributors/_index.adoc# | неупорядоченное
+| *Особые участники* | Файл include не используется | [.filename]#contributors/_index.adoc# | неупорядоченное
+|===
+
+=== Раздел "Памяти"
+
+Когда уведомляют сообщество BSD о смерти члена сообщества, следует использовать следующую процедуру:
+
+. Используйте файл [.filename]#~/doc/shared/authors.adoc# для поиска имени человека и ссылки на атрибут, например `{foobsd}`.
+. Если они являются текущим членом одной или нескольких команд проекта FreeBSD в [.filename]#~/doc/website/content/en/administration.adoc#, удалите все упоминания их атрибута. Также выполните следующие правки:
++
+* [.filename]#~/doc/shared/contrib-committers.adoc# - Удалите ссылку на атрибут.
+* [.filename]#~/doc/shared/contrib-corealumni.adoc# - Если они являются _действующим_ членом основной команды, создайте запись с указанием дат начала и окончания.
+* [.filename]#~/doc/shared/contrib-develalumni.adoc# - Добавьте ссылку на атрибут и даты активности в качестве коммиттера.
+* [.filename]#~/doc/shared/contrib-portmgralumni.adoc# - Добавьте ссылку на атрибут при необходимости.
+* [.filename]#~/doc/shared/contrib-additional.adoc# — Удалите запись.
+* [.filename]#~/doc/shared/contrib-386bsd.adoc# - Это исключительно исторический документ. Изменения не требуются.
++
+. В файле [.filename]#~/doc/shared/authors.adoc# закомментируйте (используя одну обратную косую черту '\') адрес электронной почты, чтобы избежать создания ссылки "mailto:". См. пример для `itojun` ниже:
++
+[source.programlisting, asciidoc]
+....
+[shared/authors.adoc]
+
+[..]
+
+:itojun-name: Jun-ichiro Itoh
+:itojun-email: \itojun@FreeBSD.org
+:itojun: {itojun-name} <{itojun-email}>
+
+[..]
+....
++
+. Поскольку участник скончался (что следует перепроверить), добавьте его в файл [.filename]#contrib-develinmemoriam.adoc# "Памяти ушедших".
++
+Постарайтесь найти информацию, подкрепленную фактами, о его вкладе в FreeBSD за прошедшие годы и добавьте её к записи в файле. Для этого может потребоваться запрос в списках рассылки разработчиков, обращение к коллегам, связь с FreeBSD Foundation или поиск в журналах коммитов.
++
+Чтобы узнать дату их первого коммита, используйте:
++
+[source.programlisting, asciidoc]
+....
+% cd ~/src
+% git log --reverse --author=foobsd # search for first commit of foobsd
+....
++
+Это выведет их коммиты в обратном порядке. Дата первого коммита будет вверху.
++
+Убедитесь, что формат дат соответствует другим записям:
++
+[source.programlisting, asciidoc]
+....
+(год начала предоставления права коммита - год окончания предоставления права коммита; RIP год ухода)
+
+Например:
+
+* Foo BSD (2007 - 2010; RIP 2016)
+....
++
+Проверьте порядок записей в файле.
++
+[cols="25%,25%,25%,25%", frame="none", options="header"]
+|===
+| Назначение | Якорь раздела | Файл в ~/doc/documentation/content/{язык}/articles/contributors/ | Спецификация порядка
+| *Команда разработчиков: Памяти ушедших* | [.filename]#contrib-develinmemoriam.adoc# | [.filename]#contrib-develinmemoriam.adoc# | приблизительно в обратном хронологическом порядке
+|===
++
+Смотрите файл "In Memoriam" для похожих записей.
++
+. Наконец, если применимо, переместите запись участника с правами коммиттера из раздела «current» в раздел «alumni» соответствующего link:https://cgit.freebsd.org/src/tree/share/misc[списка отношений наставник / подопечный] с указанием соответствующей даты. Изменять отношения наставник / подопечный не требуется.
diff --git a/documentation/content/ru/books/fdp-primer/structure/_index.po b/documentation/content/ru/books/fdp-primer/structure/_index.po
new file mode 100644
index 0000000000..15fc73b69b
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/structure/_index.po
@@ -0,0 +1,1340 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerstructure_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Структура каталогов документации, используемая в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Documentation Directory Structure"
+msgstr "Глава 4. Структура каталогов документации"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:14
+#, no-wrap
+msgid "Documentation Directory Structure"
+msgstr "Структура каталогов документации"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:52
+msgid "Files and directories in the *doc/* tree follow a structure meant to:"
+msgstr "Файлы и каталоги в дереве *doc/* следуют структуре, преследующей цели:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:54
+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:55
+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:56
+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:59
+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:61
+#, no-wrap
+msgid "The Top Level, doc/"
+msgstr "Верхний уровень, doc/"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:64
+msgid ""
+"There are three sections under *doc/*, documentation and website share the "
+"same structure."
+msgstr ""
+"В разделе *doc/* есть три подраздела, документация и веб-сайт имеют "
+"одинаковую структуру."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:68
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:97
+#, no-wrap
+msgid "Directory"
+msgstr "Каталог"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:70
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:100
+#, no-wrap
+msgid "Usage"
+msgstr "Использование"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:71
+#, no-wrap
+msgid "*documentation*"
+msgstr "*documentation*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:74
+#, no-wrap
+msgid ""
+"Contains all the articles and books in AsciiDoc format.\n"
+"Contains subdirectories to further categorize the information by languages."
+msgstr ""
+"Содержит все статьи и книги в формате AsciiDoc.\n"
+"Содержит подкаталоги для дальнейшей категоризации информации по языкам."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:75
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:128
+#, no-wrap
+msgid "*tools*"
+msgstr "*tools*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:78
+#, 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 ""
+"Содержит набор инструментов для перевода документации и веб-сайта с использованием link:https://weblate.org/en/[Weblate].\n"
+"Экземпляр Weblate доступен link:https://translate-dev.freebsd.org[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:79
+#, no-wrap
+msgid "*shared*"
+msgstr "*shared*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:83
+#, 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 ""
+"Содержит файлы, не относящиеся к различным переводам документации.\n"
+"Включает подкаталоги для дальнейшей категоризации информации по языкам, а также три файла для хранения данных об авторах, выпусках и зеркалах.\n"
+"Этот каталог является общим для `documentation` и `website`."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:84
+#, no-wrap
+msgid "*website*"
+msgstr "* website*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:86
+#, 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 ""
+"Содержит ссылку link:https://www.FreeBSD.org[FreeBSD website] в формате AsciiDoc.\n"
+"Содержит подкаталоги для дальнейшей категоризации информации по языкам."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:89
+#, no-wrap
+msgid "The Directories"
+msgstr "Каталоги"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:93
+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 ""
+"Эти каталоги содержат документацию и веб-сайт. Документация организована в "
+"подкаталоги ниже этого уровня, следуя структуре каталогов link:https://"
+"gohugo.io/getting-started/directory-structure/[Hugo]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:101
+#, no-wrap
+msgid "*archetypes*"
+msgstr "* archetypes*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:104
+#, 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 ""
+"Содержит шаблоны для создания новых статей, книг и веб-страниц.\n"
+"Дополнительную информацию смотрите link:https://gohugo.io/content-management/archetypes/[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:105
+#, no-wrap
+msgid "*config*"
+msgstr "*config*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:109
+#, 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 ""
+"Содержат файлы конфигурации Hugo.\n"
+"Один основной файл и по одному файлу для каждого языка.\n"
+"Для получения дополнительной информации смотрите link:https://gohugo.io/getting-started/configuration/[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:110
+#, no-wrap
+msgid "*content*"
+msgstr "*content*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:113
+#, 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 ""
+"Содержат книги, статьи и веб-страницы.\n"
+"Для каждого доступного перевода документации существует отдельный каталог, например `en` и `zh-tw`."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:114
+#, no-wrap
+msgid "*data*"
+msgstr "*data*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:118
+#, 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 ""
+"Содержит пользовательские данные для сборки веб-сайта в формате link:https://en.wikipedia.org/wiki/TOML[TOML].\n"
+"Этот каталог используется для хранения событий, новостей, пресс-релизов и т.д.\n"
+"Для получения дополнительной информации ознакомьтесь link:https://gohugo.io/templates/data-templates/[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:119
+#, no-wrap
+msgid "*static*"
+msgstr "*static*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:123
+#, 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 ""
+"Содержат статические ресурсы.\n"
+"Изображения, бюллетени безопасности, pgpkeys и т.д.\n"
+"Подробнее смотрите link:https://gohugo.io/content-management/static-files/[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:124
+#, no-wrap
+msgid "*themes*"
+msgstr "* themes*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:127
+#, 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 ""
+"Содержите шаблоны в виде файлов `.html`, которые определяют внешний вид веб-сайта.\n"
+"Для получения дополнительной информации посмотрите link:https://gohugo.io/templates/[здесь]."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:131
+#, 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 ""
+"Содержит инструменты, используемые для улучшения сборки документации.\n"
+"Например, для генерации оглавления книг и т.д."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:132
+#, no-wrap
+msgid "*beastie.png*"
+msgstr "*beastie.png*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:134
+#, no-wrap
+msgid "This image does not need an introduction ;)"
+msgstr "Это изображение не нуждается в представлении ;)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:135
+#, no-wrap
+msgid "*LICENSE*"
+msgstr "*LICENSE*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:137
+#, no-wrap
+msgid "License of the documentation, shared and website. BSD 2-Clause License."
+msgstr "Лицензия документации, общих материалов и веб-сайта. Лицензия BSD с 2 пунктами."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:138
+#, no-wrap
+msgid "*Makefile*"
+msgstr "*Makefile*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:139
+#, no-wrap
+msgid "The *Makefile* defines the build process of the documentation and the website."
+msgstr "Файл *Makefile* определяет процесс сборки документации и веб-сайта."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:142
+#, no-wrap
+msgid "Document-Specific Information"
+msgstr "Информация, относящаяся к документу"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:145
+msgid ""
+"This section contains specific notes about particular documents managed by "
+"the FDP."
+msgstr ""
+"Этот раздел содержит особые примечания о конкретных документах, которыми "
+"управляет FDP."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:147
+#, no-wrap
+msgid "The Books: books/"
+msgstr "Книги: books/"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:150
+msgid "The books are written in AsciiDoc."
+msgstr "Книги написаны в AsciiDoc."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:153
+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 ""
+"Для каждой книги FreeBSD тип документа AsciiDoc (также известный как "
+"doctype) — это `book` (книга). Книги содержат ``part`` (части), каждая из "
+"которых включает несколько ``chapter`` (глав)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:155
+msgid ""
+"When the document is converted to HTML 5 (using the built-in `html5` "
+"backend):"
+msgstr ""
+"Когда документ преобразуется в HTML 5 (с использованием встроенного бэкенда "
+"`html5`):"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:157
+msgid ""
+"AsciiDoc section level 0 (`=`) at the beginning of a ``chapter`` of a `book` "
+"will be `<h1>`"
+msgstr "Уровень раздела AsciiDoc 0 (`=`) в начале `главы` `книги` будет `<h1>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:158
+msgid ""
+"AsciiDoc section level 1 (`==`) must be used for the first logical section "
+"of a chapter, and will be `<h2>`"
+msgstr ""
+"Уровень секции AsciiDoc 1 (`==`) должен использоваться для первого "
+"логического раздела главы и будет преобразован в `<h2>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:159
+msgid ""
+"AsciiDoc section level 2 (`===`) must be used for the first logical "
+"subsection, and will be `<h3>`"
+msgstr ""
+"Уровень раздела AsciiDoc 2 (`===`) должен использоваться для первого "
+"логического подраздела и будет преобразован в `<h3>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:161
+msgid ""
+"– and so on. Reference: link:https://docs.asciidoctor.org/asciidoc/latest/"
+"sections/titles-and-levels/[Section Titles and Levels | Asciidoctor Docs]."
+msgstr ""
+"– и так далее. Ссылка: link:https://docs.asciidoctor.org/asciidoc/latest/"
+"sections/titles-and-levels/[Заголовки и уровни разделов | Документация "
+"Asciidoctor]."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:163
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:223
+#, no-wrap
+msgid "Physical Organization"
+msgstr "Физическая организация"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:166
+msgid ""
+"There are a number of files and directories within the books directory, all "
+"with the same structure."
+msgstr ""
+"В каталоге books находится множество файлов и директорий, все с одинаковой "
+"структурой."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:168
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:228
+#, no-wrap
+msgid "_index.adoc"
+msgstr "_index.adoc"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:171
+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 ""
+"Файл *_index.adoc* определяет некоторые переменные AsciiDoc, которые влияют "
+"на преобразование исходного кода AsciiDoc в другие форматы, а также содержит "
+"оглавление, список примеров, список рисунков, список таблиц и раздел с "
+"аннотацией."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:173
+#, no-wrap
+msgid "book.adoc"
+msgstr "book.adoc"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:177
+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 ""
+"Файл *book.adoc* определяет некоторые переменные AsciiDoc, которые влияют на "
+"преобразование исходного кода AsciiDoc в другие форматы, а также включает "
+"оглавление, список примеров, список рисунков, список таблиц, раздел с "
+"аннотацией и все главы. Этот файл используется для генерации PDF с помощью "
+"`asciidoctor-pdf` и для создания книги в виде одной страницы `html`."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:179
+#, no-wrap
+msgid "part*.adoc"
+msgstr "part*.adoc"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:181
+msgid ""
+"The **part*.adoc** files store a brief introduction of one part of the book."
+msgstr "Файлы **part*.adoc** содержат краткое введение к одной части книги."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:183
+#, no-wrap
+msgid "directory/_index.adoc"
+msgstr "directory/_index.adoc"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:186
+msgid ""
+"Each chapter in the Handbook is stored in a file called *_index.adoc* in a "
+"separate directory from the other chapters."
+msgstr ""
+"Каждая глава Руководства хранится в файле с именем *_index.adoc* в отдельном "
+"каталоге от других глав."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:188
+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:191
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:236
+#, no-wrap
+msgid "---\n"
+msgstr "---\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:196
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:199
+msgid "[[kernelconfig]]"
+msgstr "[[kernelconfig]]"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:199
+#, no-wrap
+msgid "Configuring the FreeBSD Kernel"
+msgstr "Настройка ядра FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:201
+msgid "..."
+msgstr "..."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:204
+msgid ""
+"When the HTML5 version of the Handbook is produced, this will yield "
+"*kernelconfig/index.html*."
+msgstr ""
+"При создании HTML5-версии Handbook это приведёт к формированию файла "
+"*kernelconfig/index.html*."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:206
+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 ""
+"Быстрый взгляд покажет, что существует множество каталогов с отдельными "
+"файлами *_index.adoc*, включая *basics/_index.adoc*, *introduction/"
+"_index.adoc* и *printing/_index.adoc*."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:212
+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:215
+#, no-wrap
+msgid "The Articles: articles/"
+msgstr "Статьи: articles/"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:218
+msgid "The articles are written in AsciiDoc."
+msgstr "Статьи написаны в AsciiDoc."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:221
+msgid ""
+"The articles are organized as an AsciiDoc `article`. The articles are "
+"divided into sections (`=`) and subsections (`==`, `===`) and so on."
+msgstr ""
+"Статьи организованы как документ AsciiDoc `article`. Статьи разделены на "
+"разделы (`=`), подразделы (`==`, `===`) и так далее."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:226
+msgid "There is one *_index.adoc* file per article."
+msgstr "На каждый статью приходится один файл *_index.adoc*."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:231
+msgid ""
+"The *_index.adoc* file contains all the AsciiDoc variables and the content."
+msgstr "Файл *_index.adoc* содержит все переменные AsciiDoc и контент."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:233
+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:242
+#, 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 ""
+"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"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:244
+#, no-wrap
+msgid "Why you should use a BSD style license for your Open Source Project"
+msgstr "Почему вы должны использовать лицензию в стиле BSD для вашего Open Source проекта"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:253
+msgid ""
+":doctype: article :toc: macro :toclevels: 1 :icons: "
+"font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental:"
+msgstr ""
+":doctype: article\n"
+":toc: macro\n"
+":toclevels: 1\n"
+":icons: font\n"
+":sectnums:\n"
+":sectnumlevels: 6\n"
+":source-highlighter: rouge\n"
+":experimental:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:255
+msgid "'''"
+msgstr "'''"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:257
+msgid "toc::[]"
+msgstr "toc::[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:259
+msgid "[[intro]]"
+msgstr "[[intro]]"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:259
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:262
+#, no-wrap
+msgid "Managing Contributor Lists"
+msgstr "Управление списками участников"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:266
+msgid ""
+"The FreeBSD project recognizes contributors in several different lists in "
+"the documentation and in printed materials. This section describes how the "
+"documentation team manages changes to these lists."
+msgstr ""
+"Проект FreeBSD отмечает вклад участников в нескольких различных списках в "
+"документации и печатных материалах. В этом разделе описано, как команда "
+"документации управляет изменениями в этих списках."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:267
+#, no-wrap
+msgid "Mentor and New Committer Relationship Lists"
+msgstr "Списки отношений наставника и нового коммиттера"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:271
+msgid ""
+"Since FreeBSD 7.0, FreeBSD has maintained link:https://cgit.freebsd.org/src/"
+"tree/share/misc[three lists of contributor mentor / mentee relationships] - "
+"one for source code, one for ports and one for documentation. These files "
+"are in *\".dot\"* format, intended for use with the popular graphing toolkit "
+"package:graphics/graphviz[] available as a FreeBSD package or port."
+msgstr ""
+"Начиная с FreeBSD 7.0, FreeBSD поддерживает link:https://cgit.freebsd.org/"
+"src/tree/share/misc[три списка отношений наставник/подопечный] — один для "
+"исходного кода, один для портов и один для документации. Эти файлы имеют "
+"формат *«.dot»* и предназначены для использования с популярным пакетом для "
+"построения графиков graphics/graphviz[], доступным как пакет или порт "
+"FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:276
+msgid ""
+"man:dot[1] is installed as part of the package:graphics/graphviz[] package "
+"or port. The [.filename]#dot# program reads files in *\".dot\"* format and "
+"creates a graphical image of the directed graph."
+msgstr ""
+"man:dot[1] устанавливается как часть пакета или порта: graphics/graphviz[]. "
+"Программа [.filename]#dot# читает файлы в формате *\".dot\"* и создает "
+"графическое изображение направленного графа."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:281
+msgid ""
+"The three files often serve as a learning experience for new committers of "
+"all three teams who are instructed to add themselves, and their mentor, to "
+"the appropriate file as their first commit. Each file has a \"current\" "
+"section for new committers, an \"alumni\" section for when the commit bit is "
+"returned, and a \"mentor / mentee\" section showing the relationships. The "
+"format for each type of entry is explained at the top of the file."
+msgstr ""
+"Три файла часто служат учебным опытом для новых коммиттеров всех трёх "
+"команд, которым поручается добавить себя и своего наставника в "
+"соответствующий файл в качестве их первого коммита. Каждый файл содержит "
+"раздел «current» для новых коммиттеров, раздел «alumni» для случаев возврата "
+"прав на коммит и раздел «mentor / mentee», отображающий взаимоотношения. "
+"Формат каждой записи поясняется в начале файла."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:282
+#, no-wrap
+msgid "General Contributor Lists"
+msgstr "Общий список участников"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:286
+msgid ""
+"extref:{contributors}[Contributors] to FreeBSD are maintained in article "
+"format. The source file for managing the *Contributors* article file is "
+"located at:"
+msgstr ""
+"extref:{contributors}[Участники] проекта FreeBSD поддерживаются в формате "
+"статьи. Исходный файл для управления статьёй *Участники* находится по адресу:"
+
+#. type: delimited block - 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:299
+#, no-wrap
+msgid ""
+"doc\n"
+" /documentation\n"
+" /content\n"
+" /{language}\n"
+" /articles\n"
+" /contributors\n"
+" [.filename]#_index.adoc# – Contains a list of include files that apply to each section.\n"
+" [.filename]#_index.po# – Translation page\n"
+" [.filename]#contrib-develinmemoriam.adoc# - content of “In Memoriam” section\n"
+" [.filename]#contrib-develinmemoriam.po# – Translation page\n"
+msgstr ""
+"doc\n"
+" /documentation\n"
+" /content\n"
+" /{language}\n"
+" /articles\n"
+" /contributors\n"
+" [.filename]#_index.adoc# – Contains a list of include files that apply to each section.\n"
+" [.filename]#_index.po# – Translation page\n"
+" [.filename]#contrib-develinmemoriam.adoc# - content of “In Memoriam” section\n"
+" [.filename]#contrib-develinmemoriam.po# – Translation page\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:302
+msgid ""
+"Copies of this contributors directory may exist in other content language "
+"directories."
+msgstr ""
+"Копии этого каталога contributors могут существовать в других каталогах с "
+"контентом на различных языках."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:305
+msgid ""
+"Note that the file [.filename]#contrib-develinmemoriam.adoc# is also found "
+"in this directory. See below for additional information."
+msgstr ""
+"Обратите внимание, что файл [.filename]#contrib-develinmemoriam.adoc# также "
+"находится в этом каталоге. Дополнительную информацию смотрите ниже."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:310
+msgid ""
+"The [.filename]#contributors/_index.adoc# file is designed as a collection "
+"of include files. The include files are listed in the Hugo specific section "
+"of the source file. The section is divided into several parts with \"ifdef::"
+"\" statements. There is a sub-section for website output and one for non-"
+"website (including PDF) output."
+msgstr ""
+"Файл [.filename]#contributors/_index.adoc# представляет собой набор "
+"включаемых файлов. Включаемые файлы перечислены в разделе, специфичном для "
+"Hugo, в исходном файле. Раздел разделён на несколько частей с помощью "
+"операторов \"ifdef::\". Существует подраздел для вывода на веб-сайт и "
+"подраздел для вывода вне веб-сайта (включая PDF)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:314
+msgid ""
+"The text for each section of the *Contributors* page contains an \"include::"
+"\" statement. For example, the entry for \"Port Manager Alumni\" is "
+"`include::{include-contrib-portmgralumni}[]`. This pulls in the text for "
+"port manager alumni into the rendered output."
+msgstr ""
+"Текст каждого раздела страницы *Участники* содержит оператор \"include::\". "
+"Например, запись для \"Экс-участники менеджера портов\" выглядит как "
+"`include::{include-contrib-portmgralumni}[]`. Это подключает текст об экс-"
+"участниках менеджера портов в итоговый вывод."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:316
+msgid "To make a change, edit the appropriate include file:"
+msgstr "Чтобы внести изменения, отредактируйте соответствующий include-файл:"
+
+#. type: delimited block - 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:325
+#, no-wrap
+msgid ""
+"include-contrib-committers: [.filename]#~/doc/shared/contrib-committers.adoc#\n"
+"include-contrib-corealumni: [.filename]#~/doc/shared/contrib-corealumni.adoc#\n"
+"include-contrib-develalumni: [.filename]#~/doc/shared/contrib-develalumni.adoc#\n"
+"include-contrib-portmgralumni: [.filename]#~/doc/shared/contrib-portmgralumni.adoc#\n"
+"include-contrib-additional: [.filename]#~/doc/shared/contrib-additional.adoc#\n"
+"include-contrib-386bsd: [.filename]#~/doc/shared/contrib-386bsd.adoc#\n"
+msgstr ""
+"include-contrib-committers: [.filename]#~/doc/shared/contrib-committers.adoc#\n"
+"include-contrib-corealumni: [.filename]#~/doc/shared/contrib-corealumni.adoc#\n"
+"include-contrib-develalumni: [.filename]#~/doc/shared/contrib-develalumni.adoc#\n"
+"include-contrib-portmgralumni: [.filename]#~/doc/shared/contrib-portmgralumni.adoc#\n"
+"include-contrib-additional: [.filename]#~/doc/shared/contrib-additional.adoc#\n"
+"include-contrib-386bsd: [.filename]#~/doc/shared/contrib-386bsd.adoc#\n"
+
+#. type: delimited block - 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:328
+#, no-wrap
+msgid ""
+"Also, edit the [.filename]#authors.adoc# file: [.filename]#~/doc/shared/authors.adoc#\n"
+"and any related translations.\n"
+msgstr ""
+"Также отредактируйте файл [.filename]#authors.adoc#: [.filename]#~/doc/shared/authors.adoc#\n"
+"и все связанные с ним переводы.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:334
+msgid ""
+"In general, if a person is being added, there is only one edit necessary, "
+"and they can be added to the appropriate include file. If a person is being "
+"moved from \"current\" to \"alumni\" status, two edits are required - one to "
+"remove and one to insert for the appropriate files. The order of entries "
+"for all files is found in the table below."
+msgstr ""
+"В общем случае, если добавляется новый человек, требуется лишь одно "
+"изменение — его можно добавить в соответствующий включаемый файл. Если "
+"человек переводится из статуса «текущий» в «бывший», необходимо два "
+"изменения: одно для удаления и одно для добавления в соответствующие файлы. "
+"Порядок записей для всех файлов указан в таблице ниже."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:337
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:413
+#, no-wrap
+msgid "Purpose"
+msgstr "Назначение"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:337
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:413
+#, no-wrap
+msgid "Section Anchor"
+msgstr "Якорь раздела"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:337
+#, no-wrap
+msgid "File in ~/doc/shared/"
+msgstr "Файл в ~/doc/shared/"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:338
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:414
+#, no-wrap
+msgid "Order Specification"
+msgstr "Спецификация порядка"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:338
+#, no-wrap
+msgid "*FreeBSD Developers*"
+msgstr "*Разработчики FreeBSD*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:338
+#, no-wrap
+msgid "include-contrib-committers"
+msgstr "include-contrib-committers"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:338
+#, no-wrap
+msgid "[.filename]#contrib-committers.adoc#"
+msgstr "[.filename]#contrib-committers.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:339
+#, no-wrap
+msgid "alphabetical order by last name"
+msgstr "упорядочено по алфавиту по фамилии"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:339
+#, no-wrap
+msgid "*Core Team Alumni*"
+msgstr "*Бывшие члены основной команды*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:339
+#, no-wrap
+msgid "include-contrib-corealumni"
+msgstr "include-contrib-corealumni"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:339
+#, no-wrap
+msgid "[.filename]#contrib-corealumni.adoc#"
+msgstr "[.filename]#contrib-corealumni.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:340
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:341
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:342
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:415
+#, no-wrap
+msgid "rough reverse chronological order"
+msgstr "приблизительно в обратном хронологическом порядке"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:340
+#, no-wrap
+msgid "*Development Team Alumni*"
+msgstr "*Бывшие члены команды разработчиков*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:340
+#, no-wrap
+msgid "include-contrib-develalumni"
+msgstr "include-contrib-develalumni"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:340
+#, no-wrap
+msgid "[.filename]#contrib-develalumni.adoc#"
+msgstr "[.filename]#contrib-develalumni.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:341
+#, no-wrap
+msgid "*Ports Management Team Alumni*"
+msgstr "*Бывшие члены команды управления портами*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:341
+#, no-wrap
+msgid "include-contrib-portmgralumni"
+msgstr "include::contrib-portmgralumni"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:341
+#, no-wrap
+msgid "[.filename]#contrib-portmgralumni.adoc#"
+msgstr "[.filename]#contrib-portmgralumni.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:342
+#, no-wrap
+msgid "*Additional FreeBSD Contributors*"
+msgstr "*Дополнительные участники проекта FreeBSD*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:342
+#, no-wrap
+msgid "include-contrib-additional"
+msgstr "include-contrib-additional"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:342
+#, no-wrap
+msgid "[.filename]#contrib-additional.adoc#"
+msgstr "[.filename]#contrib-additional.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:343
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:344
+#, no-wrap
+msgid "alphabetical order by first name"
+msgstr "упорядочено по алфавиту по имени"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:343
+#, no-wrap
+msgid "*386BSD Patch Kit Patch Contributors*"
+msgstr "*Участники, предоставившие патчи для 386BSD Patch Kit*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:343
+#, no-wrap
+msgid "include-contrib-386bsd"
+msgstr "include-contrib-386bsd"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:343
+#, no-wrap
+msgid "[.filename]#contrib-386bsd.adoc#"
+msgstr "[.filename]#contrib-386bsd.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:344
+#, no-wrap
+msgid "*Contributors to the central server project*"
+msgstr "*Участники проекта центрального сервера*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:344
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:345
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:346
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:347
+#, no-wrap
+msgid "No include file used"
+msgstr "Файл include не используется"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:344
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:345
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:346
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:347
+#, no-wrap
+msgid "[.filename]#contributors/_index.adoc#"
+msgstr "[.filename]#contributors/_index.adoc#"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:345
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:346
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:347
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:348
+#, no-wrap
+msgid "unordered"
+msgstr "неупорядоченное"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:345
+#, no-wrap
+msgid "*Direct funding*"
+msgstr "*Прямое финансирование*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:346
+#, no-wrap
+msgid "*Hardware contributors*"
+msgstr "*Участники, предоставившие оборудование*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:347
+#, no-wrap
+msgid "*Special contributors*"
+msgstr "*Особые участники*"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:350
+#, no-wrap
+msgid "\"In Memoriam\" Section"
+msgstr "Раздел \"Памяти\""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:353
+msgid ""
+"When notifying the BSD community of the death of a community member, the "
+"following procedure should be used:"
+msgstr ""
+"Когда уведомляют сообщество BSD о смерти члена сообщества, следует "
+"использовать следующую процедуру:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:355
+msgid ""
+"Use the file [.filename]#~/doc/shared/authors.adoc# to look up the person's "
+"name and attribute reference, such as `{foobsd}`."
+msgstr ""
+"Используйте файл [.filename]#~/doc/shared/authors.adoc# для поиска имени "
+"человека и ссылки на атрибут, например `{foobsd}`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:357
+msgid ""
+"If they are a current member of one or more FreeBSD project teams in "
+"[.filename]#~/doc/website/content/en/administration.adoc#, remove all "
+"instances of their attribute reference. Also, complete the following edits:"
+msgstr ""
+"Если они являются текущим членом одной или нескольких команд проекта FreeBSD "
+"в [.filename]#~/doc/website/content/en/administration.adoc#, удалите все "
+"упоминания их атрибута. Также выполните следующие правки:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:359
+msgid ""
+"[.filename]#~/doc/shared/contrib-committers.adoc# - Remove the attribute "
+"reference."
+msgstr ""
+"[.filename]#~/doc/shared/contrib-committers.adoc# - Удалите ссылку на "
+"атрибут."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:360
+msgid ""
+"[.filename]#~/doc/shared/contrib-corealumni.adoc# - If they are a _current_ "
+"member of the core team, create an entry showing start and end dates."
+msgstr ""
+"[.filename]#~/doc/shared/contrib-corealumni.adoc# - Если они являются "
+"_действующим_ членом основной команды, создайте запись с указанием дат "
+"начала и окончания."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:361
+msgid ""
+"[.filename]#~/doc/shared/contrib-develalumni.adoc# - Add the attribute "
+"reference and dates of activity as a committer."
+msgstr ""
+"[.filename]#~/doc/shared/contrib-develalumni.adoc# - Добавьте ссылку на "
+"атрибут и даты активности в качестве коммиттера."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:362
+msgid ""
+"[.filename]#~/doc/shared/contrib-portmgralumni.adoc# - Add the attribute "
+"reference if necessary."
+msgstr ""
+"[.filename]#~/doc/shared/contrib-portmgralumni.adoc# - Добавьте ссылку на "
+"атрибут при необходимости."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:363
+msgid "[.filename]#~/doc/shared/contrib-additional.adoc# - Remove the entry."
+msgstr "[.filename]#~/doc/shared/contrib-additional.adoc# — Удалите запись."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:365
+msgid ""
+"[.filename]#~/doc/shared/contrib-386bsd.adoc# - This is a historical "
+"document only. No changes are needed."
+msgstr ""
+"[.filename]#~/doc/shared/contrib-386bsd.adoc# - Это исключительно "
+"исторический документ. Изменения не требуются."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:368
+msgid ""
+"In the [.filename]#~/doc/shared/authors.adoc# file, comment out (using one "
+"backslash '\\') the email address to avoid creating the email link \"mailto:"
+"\" See the example for `itojun` below:"
+msgstr ""
+"В файле [.filename]#~/doc/shared/authors.adoc# закомментируйте (используя "
+"одну обратную косую черту '\\') адрес электронной почты, чтобы избежать "
+"создания ссылки \"mailto:\". См. пример для `itojun` ниже:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:372
+#, no-wrap
+msgid "[shared/authors.adoc]\n"
+msgstr "[shared/authors.adoc]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:374
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:380
+#, no-wrap
+msgid "[..]\n"
+msgstr "[..]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:378
+#, no-wrap
+msgid ""
+":itojun-name: Jun-ichiro Itoh\n"
+":itojun-email: \\itojun@FreeBSD.org\n"
+":itojun: {itojun-name} <{itojun-email}>\n"
+msgstr ""
+":itojun-name: Jun-ichiro Itoh\n"
+":itojun-email: \\itojun@FreeBSD.org\n"
+":itojun: {itojun-name} <{itojun-email}>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:383
+msgid ""
+"Since the member is deceased (which should be double checked), add them to "
+"the \"In Memoriam\" file [.filename]#contrib-develinmemoriam.adoc#."
+msgstr ""
+"Поскольку участник скончался (что следует перепроверить), добавьте его в "
+"файл [.filename]#contrib-develinmemoriam.adoc# \"Памяти ушедших\"."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:386
+msgid ""
+"Try to find some factual information about their contributions to FreeBSD "
+"over the years and add it with their entry in the file. This may require "
+"asking in the development mailing lists, contacting colleagues, contacting "
+"the FreeBSD Foundation, or searching through the commit logs."
+msgstr ""
+"Постарайтесь найти информацию, подкрепленную фактами, о его вкладе в FreeBSD "
+"за прошедшие годы и добавьте её к записи в файле. Для этого может "
+"потребоваться запрос в списках рассылки разработчиков, обращение к коллегам, "
+"связь с FreeBSD Foundation или поиск в журналах коммитов."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:388
+msgid "To find the date of their first commit, use:"
+msgstr "Чтобы узнать дату их первого коммита, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:393
+#, no-wrap
+msgid ""
+"% cd ~/src\n"
+"% git log --reverse --author=foobsd # search for first commit of foobsd\n"
+msgstr ""
+"% cd ~/src\n"
+"% git log --reverse --author=foobsd # search for first commit of foobsd\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:397
+msgid ""
+"This will print out their commits in reverse order. The date of the first "
+"commit will be at the top."
+msgstr ""
+"Это выведет их коммиты в обратном порядке. Дата первого коммита будет вверху."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:399
+msgid "Ensure that the format of the dates match other entries:"
+msgstr "Убедитесь, что формат дат соответствует другим записям:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:403
+#, no-wrap
+msgid "(year of commit bit start - year of commit bit end; RIP year deceased)\n"
+msgstr "(год начала предоставления права коммита - год окончания предоставления права коммита; RIP год ухода)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:405
+#, no-wrap
+msgid "For example:\n"
+msgstr "Например:\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:407
+#, no-wrap
+msgid "* Foo BSD (2007 - 2010; RIP 2016)\n"
+msgstr "* Foo BSD (2007 - 2010; RIP 2016)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:410
+msgid "Check the ordering of the entries in the file."
+msgstr "Проверьте порядок записей в файле."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:413
+#, no-wrap
+msgid "File in ~/doc/documentation/content/{language}/articles/contributors/"
+msgstr "Файл в ~/doc/documentation/content/{язык}/articles/contributors/"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:414
+#, no-wrap
+msgid "*Development Team: In Memoriam*"
+msgstr "*Команда разработчиков: Памяти ушедших*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:414
+#, no-wrap
+msgid "[.filename]#contrib-develinmemoriam.adoc#"
+msgstr "[.filename]#contrib-develinmemoriam.adoc#"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:418
+msgid "See the \"In Memoriam\" file for similar entries."
+msgstr "Смотрите файл \"In Memoriam\" для похожих записей."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:420
+msgid ""
+"Finally, if applicable, move the committer member entry from the \"current\" "
+"section to the \"alumni\" section of the appropriate link:https://"
+"cgit.freebsd.org/src/tree/share/misc[list of contributor mentor / mentee "
+"relationships] along with an appropriate date. It is not necessary to "
+"change the mentor / mentee relationship."
+msgstr ""
+"Наконец, если применимо, переместите запись участника с правами коммиттера "
+"из раздела «current» в раздел «alumni» соответствующего link:https://"
+"cgit.freebsd.org/src/tree/share/misc[списка отношений наставник / "
+"подопечный] с указанием соответствующей даты. Изменять отношения наставник / "
+"подопечный не требуется."
+
+#, no-wrap
+#~ msgid "Finding the Correct Files"
+#~ msgstr "Поиск нужных файлов"
+
+#~ msgid ""
+#~ "Search the files above for the name, email address, and nickname (such as "
+#~ "`foobsd`)."
+#~ msgstr ""
+#~ "Поищите в указанных файлах имя, адрес электронной почты и псевдоним "
+#~ "(например, `foobsd`)."
+
+#~ msgid ""
+#~ "Where an email address is found with a name, remove the email address, "
+#~ "but leave the name."
+#~ msgstr ""
+#~ "Где встречается адрес электронной почты вместе с именем, удалите адрес "
+#~ "электронной почты, но оставьте имя."
diff --git a/documentation/content/ru/books/fdp-primer/tools/_index.adoc b/documentation/content/ru/books/fdp-primer/tools/_index.adoc
new file mode 100644
index 0000000000..10c5251367
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/tools/_index.adoc
@@ -0,0 +1,70 @@
+---
+description: 'Инструменты, используемые в проекте документации FreeBSD'
+next: books/fdp-primer/working-copy
+params:
+ path: /books/fdp-primer/tools/
+prev: books/fdp-primer/overview
+showBookMenu: true
+tags: ["tools", "required tools", "optional tools"]
+title: 'Глава 2. Инструменты'
+weight: 3
+---
+
+[[tools]]
+= Инструменты
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 2
+: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::[]
+
+Для управления документацией FreeBSD и её преобразования в различные выходные форматы используется несколько программных инструментов. Некоторые из них обязательны и должны быть установлены перед работой с примерами из следующих глав. Другие являются опциональными, расширяя возможности или упрощая процесс создания документации.
+
+[[tools-required]]
+== Необходимые инструменты
+
+Установите `docproj` _мета-порт_, как показано в crossref:overview[overview,обзорной главе] из Коллекции портов. Эти приложения необходимы для работы с документацией FreeBSD. Далее приведены дополнительные заметки об отдельных компонентах.
+
+[[tools-optional]]
+== Необязательные инструменты
+
+Эти приложения не обязательны, но могут упростить работу с документацией или расширить её возможности.
+
+[[tools-optional-software]]
+=== Программное обеспечение
+
+Vim (package:editors/vim[]) — популярный редактор для работы с Asciidoctor.
+
+Emacs (package:editors/emacs[]).
+
+Оба инструмента включают специальный режим, который сокращает количество необходимых нажатий клавиш и помогает снизить количество ошибок.
diff --git a/documentation/content/ru/books/fdp-primer/tools/_index.po b/documentation/content/ru/books/fdp-primer/tools/_index.po
new file mode 100644
index 0000000000..85365159eb
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/tools/_index.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-01 09:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primertools_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:1
+#, no-wrap
+msgid "Tools used in the FreeBSD Documentation Project"
+msgstr "Инструменты, используемые в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Tools"
+msgstr "Глава 2. Инструменты"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:14
+#, no-wrap
+msgid "Tools"
+msgstr "Инструменты"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:54
+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 ""
+"Для управления документацией FreeBSD и её преобразования в различные "
+"выходные форматы используется несколько программных инструментов. Некоторые "
+"из них обязательны и должны быть установлены перед работой с примерами из "
+"следующих глав. Другие являются опциональными, расширяя возможности или "
+"упрощая процесс создания документации."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:56
+#, no-wrap
+msgid "Required Tools"
+msgstr "Необходимые инструменты"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:61
+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 ""
+"Установите `docproj` _мета-порт_, как показано в "
+"crossref:overview[overview,обзорной главе] из Коллекции портов. Эти "
+"приложения необходимы для работы с документацией FreeBSD. Далее приведены "
+"дополнительные заметки об отдельных компонентах."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:63
+#, no-wrap
+msgid "Optional Tools"
+msgstr "Необязательные инструменты"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:66
+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:68
+#, no-wrap
+msgid "Software"
+msgstr "Программное обеспечение"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:71
+msgid ""
+"Vim (package:editors/vim[]) -- a popular editor for working with Asciidoctor."
+msgstr ""
+"Vim (package:editors/vim[]) — популярный редактор для работы с Asciidoctor."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:73
+msgid "Emacs (package:editors/emacs[])."
+msgstr "Emacs (package:editors/emacs[])."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:74
+msgid ""
+"Both tools include a special mode that reduces the amount of typing needed, "
+"and helps to reduce errors."
+msgstr ""
+"Оба инструмента включают специальный режим, который сокращает количество "
+"необходимых нажатий клавиш и помогает снизить количество ошибок."
diff --git a/documentation/content/ru/books/fdp-primer/trademarks/_index.adoc b/documentation/content/ru/books/fdp-primer/trademarks/_index.adoc
new file mode 100644
index 0000000000..756825928f
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/trademarks/_index.adoc
@@ -0,0 +1,95 @@
+---
+description: 'Руководство по использованию товарных знаков в Документационном проекте FreeBSD'
+next: books/fdp-primer/see-also
+params:
+ path: /books/fdp-primer/trademarks/
+prev: books/fdp-primer/editor-config/
+showBookMenu: true
+tags: ["trademarks", "AsciiDoctor", "HTML"]
+title: 'Глава 14. Товарные знаки'
+weight: 14
+---
+
+[[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::[]
+
+Для всех документов в рамках проекта FreeBSD Documentation Project необходимо указывать зарегистрированные товарные знаки, а также принято указывать другие товарные знаки, и это является требованием для каждого автора и участника.
+
+[[trademark-symbols]]
+== Символы товарных знаков
+
+Добавьте символ товарного знака ((TM), (R) или другой) к первому упоминанию зарегистрированного названия и всегда при использовании логотипов. Используйте extref:{fdp-primer}/writing-style/#writing-style-special-characters[эквивалентную ASCII-последовательность], которая будет отображаться как соответствующий символ Юникода. Также пишите зарегистрированное название в соответствии с его правилами использования товарного знака.
+
+Если сомневаетесь, изучите сайт владельца товарного знака, сайт продукта и/или сайт link:https://www.uspto.gov/trademarks[Ведомства по патентам и товарным знакам США для поиска товарных знаков].
+
+[[trademark-citing]]
+== Цитирование товарных знаков
+
+Проект документации FreeBSD предоставляет шаблон для указания товарных знаков, что также позволяет избежать их дублирования в документах.
+
+Сначала найдите товарный знак в разделе link:https://cgit.freebsd.org/doc/tree/documentation/themes/beastie/i18n/en.toml#n328[Copyright в шаблоне проекта], затем добавьте его в тег `trademarks` в разделе `Front Matter` документа, который расположен в начале каждого документа.
+
+Вот пример `Front Matter` из статьи extref:{contributing}[Вклад в 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"]
+---
+....
+
+Товарные знаки `freebsd`, `ieee` и `general` будут автоматически отображаться при сборке документа следующим образом:
+
+....
+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.
+....
+
+Если товарный знак отсутствует в шаблоне проекта, его необходимо предоставить. Любой разработчик или участник может обновлять товарные знаки.
+
+Теги товарных знаков `freebsd` и `general` обычно присутствуют во всех документах.
diff --git a/documentation/content/ru/books/fdp-primer/trademarks/_index.po b/documentation/content/ru/books/fdp-primer/trademarks/_index.po
new file mode 100644
index 0000000000..c581ca7f10
--- /dev/null
+++ b/documentation/content/ru/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: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-01 18:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primertrademarks_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Guidelines for trademarks in the FreeBSD Documentation Project"
+msgstr "Руководство по использованию товарных знаков в Документационном проекте FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. Trademarks"
+msgstr "Глава 14. Товарные знаки"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:14
+#, no-wrap
+msgid "Trademarks"
+msgstr "Товарные знаки"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:52
+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 ""
+"Для всех документов в рамках проекта FreeBSD Documentation Project "
+"необходимо указывать зарегистрированные товарные знаки, а также принято "
+"указывать другие товарные знаки, и это является требованием для каждого "
+"автора и участника."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:54
+#, no-wrap
+msgid "Trademark Symbols"
+msgstr "Символы товарных знаков"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:59
+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 ""
+"Добавьте символ товарного знака ((TM), (R) или другой) к первому упоминанию "
+"зарегистрированного названия и всегда при использовании логотипов. "
+"Используйте extref:{fdp-primer}/writing-style/#writing-style-special-"
+"characters[эквивалентную ASCII-последовательность], которая будет "
+"отображаться как соответствующий символ Юникода. Также пишите "
+"зарегистрированное название в соответствии с его правилами использования "
+"товарного знака."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:61
+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 ""
+"Если сомневаетесь, изучите сайт владельца товарного знака, сайт продукта и/"
+"или сайт link:https://www.uspto.gov/trademarks[Ведомства по патентам и "
+"товарным знакам США для поиска товарных знаков]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:63
+#, no-wrap
+msgid "Trademark Citing"
+msgstr "Цитирование товарных знаков"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:66
+msgid ""
+"The FreeBSD Documentation Project provides a template for citing trademarks, "
+"which also avoids duplicating trademarks in the documents."
+msgstr ""
+"Проект документации FreeBSD предоставляет шаблон для указания товарных "
+"знаков, что также позволяет избежать их дублирования в документах."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:68
+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 ""
+"Сначала найдите товарный знак в разделе link:https://cgit.freebsd.org/doc/"
+"tree/documentation/themes/beastie/i18n/en.toml#n328[Copyright в шаблоне "
+"проекта], затем добавьте его в тег `trademarks` в разделе `Front Matter` "
+"документа, который расположен в начале каждого документа."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:70
+msgid ""
+"The following is an example of the `Front Matter` of the extref:"
+"{contributing}[Contributing to FreeBSD] article:"
+msgstr ""
+"Вот пример `Front Matter` из статьи extref:{contributing}[Вклад в FreeBSD]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:72
+#, no-wrap
+msgid "---\n"
+msgstr "---\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:82
+#, 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:86
+msgid ""
+"The trademark tags `freebsd`, `ieee`, and `general` will be automatically "
+"rendered when building the document like this:"
+msgstr ""
+"Товарные знаки `freebsd`, `ieee` и `general` будут автоматически "
+"отображаться при сборке документа следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:89
+#, 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:91
+#, 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:93
+#, 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:97
+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:98
+msgid ""
+"The `freebsd` and `general` trademark tags are usually present in all "
+"documents."
+msgstr ""
+"Теги товарных знаков `freebsd` и `general` обычно присутствуют во всех "
+"документах."
diff --git a/documentation/content/ru/books/fdp-primer/translations/_index.adoc b/documentation/content/ru/books/fdp-primer/translations/_index.adoc
new file mode 100644
index 0000000000..d0e3e5ec88
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/translations/_index.adoc
@@ -0,0 +1,227 @@
+---
+description: 'Часто задаваемые вопросы о процессе перевода в проекте документации FreeBSD'
+next: books/fdp-primer/po-translations
+params:
+ path: /books/fdp-primer/translations/
+prev: books/fdp-primer/rosetta
+showBookMenu: true
+tags: ["FAQ", "i18n", "i10n", "translation"]
+title: 'Глава 8. Переводы'
+weight: 9
+---
+
+[[translations]]
+= Переводы
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 8
+: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::[]
+
+Это FAQ для людей, занимающихся переводом документации FreeBSD (FAQ, Руководство, учебные пособия, man-страницы и другие) на различные языки.
+
+Он _очень_ сильно основан на FAQ по переводу из Немецкого проекта документации FreeBSD, изначально написанном Франком Грюндером mailto:elwood@mc5sys.in-berlin.de[elwood@mc5sys.in-berlin.de] и переведённом обратно на английский Берндом Варкеном mailto:bwarken@mayn.de[bwarken@mayn.de].
+
+== Что означают i18n и l10n?
+
+i18n означает интернационализацию, а l10n — локализацию. Это просто удобные сокращения.
+
+i18n можно прочитать как «i», за которым следует 18 букв, а затем «n». Аналогично, l10n — это «l», за которым следует 10 букв, а затем «n».
+
+== Существует ли рассылка для переводчиков?
+
+Да. Различные группы переводчиков имеют свои собственные списки рассылки. В https://www.freebsd.org/docproj/translations[списке проектов перевода] есть дополнительная информация о списках рассылки и веб-сайтах, которые поддерживаются каждым проектом перевода. Кроме того, существует mailto:freebsd-translators@freebsd.org[freebsd-translators@freebsd.org] для общих обсуждений, связанных с переводом.
+
+== Нужны дополнительные переводчики?
+
+Да. Чем больше людей работает над переводом, тем быстрее он будет завершен, и тем быстрее изменения в англоязычной документации отразятся в переведенных документах.
+
+Вам не нужно быть профессиональным переводчиком, чтобы помочь.
+
+== Какие языки мне нужно знать?
+
+В идеале вы должны хорошо знать письменный английский и, разумеется, свободно владеть языком, на который переводите.
+
+Английский язык не является строго обязательным. Например, можно сделать венгерский перевод FAQ из испанского перевода.
+
+== Какой софт нужно знать?
+
+Настоятельно рекомендуется поддерживать локальную копию репозитория FreeBSD Git (по крайней мере, документации). Это можно сделать, выполнив:
+
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/doc.git ~/doc
+....
+
+https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный `git` сервер.
+
+[NOTE]
+====
+Для этого потребуется установка пакета package:git-lite[] package.
+====
+
+Вы должны уверенно пользоваться git. Это позволит вам видеть, какие изменения были внесены между разными версиями файлов, из которых состоит документация.
+
+Например, чтобы посмотреть различия между ревизиями `abff932fe8` и `2191c44469` файла [.filename]#documentation/content/en/articles/committers-guide/_index.adoc#, выполните:
+
+[source, shell]
+....
+% git diff abff932fe8 2191c44469 documentation/content/en/articles/committers-guide/_index.adoc
+....
+
+Пожалуйста, ознакомьтесь с полным объяснением использования Git в FreeBSD в extref:{handbook}mirrors[Руководстве FreeBSD, git].
+
+== Как узнать, кто ещё, может быть, переводит на тот же язык?
+
+https://www.FreeBSD.org/docproj/translations/[Страница переводов проекта документации] содержит список известных на данный момент переводческих инициатив. Если кто-то уже работает над переводом документации на ваш язык, пожалуйста, не дублируйте их усилия. Вместо этого свяжитесь с ними, чтобы узнать, как вы можете помочь.
+
+Если на этой странице не указан переводчик для вашего языка, отправьте сообщение в список рассылки {freebsd-doc}, возможно, кто-то уже планирует сделать перевод, но еще не объявил об этом.
+
+== Никто не переводит на мой язык. Что мне делать?
+
+Поздравляем, вы только что запустили "Проект перевода документации FreeBSD на ваш язык". Добро пожаловать на борт.
+
+Сначала решите, есть ли у вас свободное время. Поскольку сейчас вы единственный, кто работает над вашим языком, вам придется взять на себя ответственность за рекламу своей работы и координацию добровольцев, которые, возможно, захотят вам помочь.
+
+Напишите письмо в рассылку проекта документации, объявив о том, что вы собираетесь переводить документацию, чтобы страница переводов проекта документации могла быть актуальной.
+
+Если в вашей стране уже есть кто-то, предоставляющий услуги зеркалирования FreeBSD, вам следует связаться с ними и спросить, можете ли вы получить место для вашего проекта на их веб-сервере, а также, возможно, электронный адрес или услуги рассылки.
+
+Затем выберите документ и начните перевод. Лучше всего начать с чего-то относительно небольшого — например, с FAQ или одного из руководств.
+
+== Я перевел часть документации, куда мне ее отправить?
+
+Это зависит от обстоятельств. Если вы уже работаете с командой переводчиков (например, с японской или немецкой командой), то у них есть свои процедуры обработки представленной документации, которые описаны на их веб-страницах.
+
+Если вы единственный, кто работает над конкретным языком (или вы отвечаете за проект перевода и хотите отправить свои изменения обратно в проект FreeBSD), то вам следует отправить свой перевод в проект FreeBSD (см. следующий вопрос).
+
+== Я единственный, кто работает над переводом на этот язык, как мне отправить свой перевод?
+
+Во-первых, убедитесь, что ваш перевод правильно организован. Это означает, что он должен встраиваться в существующую структуру документации и сразу же собираться.
+
+Каталоги ниже этого уровня именуются в соответствии с языковыми кодами, на которых они написаны, как определено в ISO639 ([.filename]#/usr/share/misc/iso639# в версии FreeBSD новее 20 января 1999 года).
+
+[WARNING]
+====
+Hugo требует коды языков в нижнем регистре. Например, вместо `pt_BR` Hugo использует `pt-br`.
+====
+
+В настоящее время документация FreeBSD хранится в корневом каталоге с названием [.filename]#documentation/#. Каталоги ниже него именуются согласно языковым кодам, на которых они написаны, как определено в ISO639 ([.filename]#/usr/share/misc/iso639# в версии FreeBSD новее 20 января 1999 года).
+
+Если ваш язык может быть закодирован различными способами (например, китайский), то ниже должны находиться каталоги для каждого из предоставленных форматов кодировки.
+
+Наконец, у вас должны быть каталоги для каждого документа.
+
+Например, гипотетический перевод на шведский язык может выглядеть так:
+
+[.programlisting]
+....
+documentation/
+ content/
+ sv/
+ books/
+ faq/
+ _index.adoc
+....
+
+`sv` — это название перевода в форме [.filename]#lang#. Обратите внимание на два Makefile, которые будут использоваться для сборки документации.
+
+Используйте команду `git diff` для создания diff и отправьте его в систему link:https://reviews.freebsd.org/[рецензирования].
+
+[source, shell]
+....
+% git diff > sv-faq.diff
+....
+
+Вы должны использовать Bugzilla, чтобы link:https://bugs.freebsd.org/bugzilla/enter_bug.cgi[отправить отчёт], указав, что вы предоставили документацию. Было бы очень полезно, если бы другие люди проверили ваш перевод перед отправкой, так как маловероятно, что человек, который будет его применять, свободно владеет языком.
+
+Кто-то (скорее всего, руководитель проекта документации, в настоящее время {doceng}) проверит ваш перевод и убедится, что он собирается. В частности, будут проверены следующие моменты:
+
+. Работает ли `make` в директории [.filename]#root# корректно?
+
+Если возникнут проблемы, тот, кто будет рассматривать вашу заявку, свяжется с вами для их решения.
+
+Если проблем не возникнет, ваш перевод будет включён как можно скорее.
+
+== Можно ли включать в перевод текст, специфичный для языка или страны?
+
+Мы бы предпочли, чтобы вы этого не делали.
+
+Например, предположим, что вы переводите Handbook на корейский язык и хотите добавить раздел о розничных продавцах в Корее в ваш Handbook.
+
+Нет никаких реальных причин, по которым эта информация не должна быть в английской (или немецкой, или испанской, или японской, или...) версиях также. Вполне возможно, что англоговорящий человек в Корее попытается приобрести копию FreeBSD, находясь там. Это также помогает усилить воспринимаемое присутствие FreeBSD по всему миру, что не так уж и плохо.
+
+Если у вас есть информация, специфичная для вашей страны, пожалуйста, отправьте её в виде изменения в англоязычное Руководство (через Bugzilla), а затем переведите это изменение обратно на ваш язык в локализованной версии Руководства.
+
+Спасибо.
+
+=== Обращение к читателю
+
+В английских документах читатель обращается на «you», здесь нет различия между формальным и неформальным обращением, как в некоторых языках.
+
+Если вы переводите на язык, где такое различие существует, используйте ту форму, которая обычно применяется в другой технической документации на вашем языке. Если сомневаетесь, используйте умеренно вежливую форму.
+
+=== Нужно ли включать какую-либо дополнительную информацию в мои переводы?
+
+Да.
+
+Заголовок английской версии каждого документа будет выглядеть примерно так:
+
+[.programlisting]
+....
+ ---
+ title: Why you should use a BSD style license for your Open Source Project
+ releaseinfo: "$FreeBSD: head/en_US.ISO8859-1/articles/bsdl-gpl/article.xml 53942 2020-03-01 12:23:40Z carlavilla $"
+ trademarks: ["freebsd", "intel", "general"]
+ ---
+
+ = Why you should use a BSD style license for your Open Source Project
+....
+
+Точный шаблон может меняться, но он всегда будет включать строку `$FreeBSD$` и фразу `The FreeBSD Documentation Project`. Обратите внимание, что часть `$FreeBSD$` автоматически раскрывается Git, поэтому для новых файлов она должна быть пустой (просто `$FreeBSD$`).
+
+Документы, переведённые вами, должны включать собственную строку FreeBSD, а также изменять строку `FreeBSD Documentation Project` на `The FreeBSD_язык_Documentation Project`.
+
+В дополнение, вы должны добавить третью строку, указывающую, на какую версию английского текста опирается перевод.
+
+Итак, испанская версия этого файла может начинаться с:
+
+[.programlisting]
+....
+ ---
+ title: Soporte para segundos intercalares en FreeBSD
+ releaseinfo: "$FreeBSD: head/es_ES.ISO8859-1/articles/leap-seconds/article.xml 53090 2019-06-01 17:52:59Z carlavilla $"
+ ---
+
+ = Soporte para segundos intercalares en FreeBSD
+....
diff --git a/documentation/content/ru/books/fdp-primer/translations/_index.po b/documentation/content/ru/books/fdp-primer/translations/_index.po
new file mode 100644
index 0000000000..6e0bf59db9
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/translations/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-08-19 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primertranslations_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Часто задаваемые вопросы о процессе перевода в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Translations"
+msgstr "Глава 8. Переводы"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:14
+#, no-wrap
+msgid "Translations"
+msgstr "Переводы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:52
+msgid ""
+"This is the FAQ for people translating the FreeBSD documentation (FAQ, "
+"Handbook, tutorials, manual pages, and others) to different languages."
+msgstr ""
+"Это FAQ для людей, занимающихся переводом документации FreeBSD (FAQ, "
+"Руководство, учебные пособия, man-страницы и другие) на различные языки."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:56
+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 ""
+"Он _очень_ сильно основан на FAQ по переводу из Немецкого проекта "
+"документации FreeBSD, изначально написанном Франком Грюндером "
+"mailto:elwood@mc5sys.in-berlin.de[elwood@mc5sys.in-berlin.de] и переведённом "
+"обратно на английский Берндом Варкеном "
+"mailto:bwarken@mayn.de[bwarken@mayn.de]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:57
+#, no-wrap
+msgid "What do i18n and l10n mean?"
+msgstr "Что означают i18n и l10n?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:61
+msgid ""
+"i18n means internationalization and l10n means localization. They are just "
+"a convenient shorthand."
+msgstr ""
+"i18n означает интернационализацию, а l10n — локализацию. Это просто удобные "
+"сокращения."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:64
+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 ""
+"i18n можно прочитать как «i», за которым следует 18 букв, а затем «n». "
+"Аналогично, l10n — это «l», за которым следует 10 букв, а затем «n»."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:65
+#, no-wrap
+msgid "Is there a mailing list for translators?"
+msgstr "Существует ли рассылка для переводчиков?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:70
+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 ""
+"Да. Различные группы переводчиков имеют свои собственные списки рассылки. В "
+"https://www.freebsd.org/docproj/translations[списке проектов перевода] есть "
+"дополнительная информация о списках рассылки и веб-сайтах, которые "
+"поддерживаются каждым проектом перевода. Кроме того, существует "
+"mailto:freebsd-translators@freebsd.org[freebsd-translators@freebsd.org] для "
+"общих обсуждений, связанных с переводом."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:71
+#, no-wrap
+msgid "Are more translators needed?"
+msgstr "Нужны дополнительные переводчики?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:74
+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:76
+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:77
+#, no-wrap
+msgid "What languages do I need to know?"
+msgstr "Какие языки мне нужно знать?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:80
+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:83
+msgid ""
+"English is not strictly necessary. For example, you could do a Hungarian "
+"translation of the FAQ from the Spanish translation."
+msgstr ""
+"Английский язык не является строго обязательным. Например, можно сделать "
+"венгерский перевод FAQ из испанского перевода."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:84
+#, no-wrap
+msgid "What software do I need to know?"
+msgstr "Какой софт нужно знать?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:88
+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 ""
+"Настоятельно рекомендуется поддерживать локальную копию репозитория FreeBSD "
+"Git (по крайней мере, документации). Это можно сделать, выполнив:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:92
+#, 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/translations/_index.adoc:95
+msgid "https://git.FreeBSD.org/[git.FreeBSD.org] is a public `git` server."
+msgstr ""
+"https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный `git` сервер."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:99
+msgid "This will require the package:git-lite[] package to be installed."
+msgstr "Для этого потребуется установка пакета package:git-lite[] package."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:103
+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 ""
+"Вы должны уверенно пользоваться git. Это позволит вам видеть, какие "
+"изменения были внесены между разными версиями файлов, из которых состоит "
+"документация."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:105
+msgid ""
+"For example, to view the differences between revisions `abff932fe8` and "
+"`2191c44469` of [.filename]#documentation/content/en/articles/committers-"
+"guide/_index.adoc#, run:"
+msgstr ""
+"Например, чтобы посмотреть различия между ревизиями `abff932fe8` и "
+"`2191c44469` файла [.filename]#documentation/content/en/articles/committers-"
+"guide/_index.adoc#, выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:109
+#, no-wrap
+msgid "% git diff abff932fe8 2191c44469 documentation/content/en/articles/committers-guide/_index.adoc\n"
+msgstr "% git diff abff932fe8 2191c44469 documentation/content/en/articles/committers-guide/_index.adoc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:112
+msgid ""
+"Please see the complete explanation of using Git in FreeBSD in the extref:"
+"{handbook}mirrors[FreeBSD Handbook, git]."
+msgstr ""
+"Пожалуйста, ознакомьтесь с полным объяснением использования Git в FreeBSD в "
+"extref:{handbook}mirrors[Руководстве FreeBSD, git]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:113
+#, 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:118
+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 ""
+"https://www.FreeBSD.org/docproj/translations/[Страница переводов проекта "
+"документации] содержит список известных на данный момент переводческих "
+"инициатив. Если кто-то уже работает над переводом документации на ваш язык, "
+"пожалуйста, не дублируйте их усилия. Вместо этого свяжитесь с ними, чтобы "
+"узнать, как вы можете помочь."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:120
+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 ""
+"Если на этой странице не указан переводчик для вашего языка, отправьте "
+"сообщение в список рассылки {freebsd-doc}, возможно, кто-то уже планирует "
+"сделать перевод, но еще не объявил об этом."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:121
+#, 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:125
+msgid ""
+"Congratulations, you have just started the \"FreeBSD _your-language-here_ "
+"Documentation Translation Project\". Welcome aboard."
+msgstr ""
+"Поздравляем, вы только что запустили \"Проект перевода документации FreeBSD "
+"на ваш язык\". Добро пожаловать на борт."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:128
+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:130
+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:132
+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 ""
+"Если в вашей стране уже есть кто-то, предоставляющий услуги зеркалирования "
+"FreeBSD, вам следует связаться с ними и спросить, можете ли вы получить "
+"место для вашего проекта на их веб-сервере, а также, возможно, электронный "
+"адрес или услуги рассылки."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:135
+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 ""
+"Затем выберите документ и начните перевод. Лучше всего начать с чего-то "
+"относительно небольшого — например, с FAQ или одного из руководств."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:136
+#, 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:140
+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:142
+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 ""
+"Если вы единственный, кто работает над конкретным языком (или вы отвечаете "
+"за проект перевода и хотите отправить свои изменения обратно в проект "
+"FreeBSD), то вам следует отправить свой перевод в проект FreeBSD (см. "
+"следующий вопрос)."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:143
+#, 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:147
+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:150
+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 ""
+"Каталоги ниже этого уровня именуются в соответствии с языковыми кодами, на "
+"которых они написаны, как определено в ISO639 ([.filename]#/usr/share/misc/"
+"iso639# в версии FreeBSD новее 20 января 1999 года)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:155
+msgid ""
+"Hugo needs the language codes in lowercase. For example, instead of `pt_BR` "
+"Hugo uses `pt-br`."
+msgstr ""
+"Hugo требует коды языков в нижнем регистре. Например, вместо `pt_BR` Hugo "
+"использует `pt-br`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:159
+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 ""
+"В настоящее время документация FreeBSD хранится в корневом каталоге с "
+"названием [.filename]#documentation/#. Каталоги ниже него именуются согласно "
+"языковым кодам, на которых они написаны, как определено в ISO639 "
+"([.filename]#/usr/share/misc/iso639# в версии FreeBSD новее 20 января 1999 "
+"года)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:161
+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:163
+msgid "Finally, you should have directories for each document."
+msgstr "Наконец, у вас должны быть каталоги для каждого документа."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:165
+msgid "For example, a hypothetical Swedish translation might look like:"
+msgstr "Например, гипотетический перевод на шведский язык может выглядеть так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:174
+#, no-wrap
+msgid ""
+"documentation/\n"
+" content/\n"
+" sv/\n"
+" books/\n"
+" faq/\n"
+" _index.adoc\n"
+msgstr ""
+"documentation/\n"
+" content/\n"
+" sv/\n"
+" books/\n"
+" faq/\n"
+" _index.adoc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:178
+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 ""
+"`sv` — это название перевода в форме [.filename]#lang#. Обратите внимание "
+"на два Makefile, которые будут использоваться для сборки документации."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:180
+msgid ""
+"Use git diff command to generate a diff and send it to the link:https://"
+"reviews.freebsd.org/[reviews system]."
+msgstr ""
+"Используйте команду `git diff` для создания diff и отправьте его в систему "
+"link:https://reviews.freebsd.org/[рецензирования]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:184
+#, no-wrap
+msgid "% git diff > sv-faq.diff\n"
+msgstr "% git diff > sv-faq.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:188
+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 ""
+"Вы должны использовать Bugzilla, чтобы link:https://bugs.freebsd.org/"
+"bugzilla/enter_bug.cgi[отправить отчёт], указав, что вы предоставили "
+"документацию. Было бы очень полезно, если бы другие люди проверили ваш "
+"перевод перед отправкой, так как маловероятно, что человек, который будет "
+"его применять, свободно владеет языком."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:191
+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 ""
+"Кто-то (скорее всего, руководитель проекта документации, в настоящее время "
+"{doceng}) проверит ваш перевод и убедится, что он собирается. В частности, "
+"будут проверены следующие моменты:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:193
+msgid "Does `make` in the [.filename]#root# directory work correctly?"
+msgstr "Работает ли `make` в директории [.filename]#root# корректно?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:195
+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:197
+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:198
+#, 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:201
+msgid "We would prefer that you did not."
+msgstr "Мы бы предпочли, чтобы вы этого не делали."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:203
+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 ""
+"Например, предположим, что вы переводите Handbook на корейский язык и хотите "
+"добавить раздел о розничных продавцах в Корее в ваш Handbook."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:207
+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 ""
+"Нет никаких реальных причин, по которым эта информация не должна быть в "
+"английской (или немецкой, или испанской, или японской, или...) версиях "
+"также. Вполне возможно, что англоговорящий человек в Корее попытается "
+"приобрести копию FreeBSD, находясь там. Это также помогает усилить "
+"воспринимаемое присутствие FreeBSD по всему миру, что не так уж и плохо."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:209
+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 ""
+"Если у вас есть информация, специфичная для вашей страны, пожалуйста, "
+"отправьте её в виде изменения в англоязычное Руководство (через Bugzilla), а "
+"затем переведите это изменение обратно на ваш язык в локализованной версии "
+"Руководства."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:211
+msgid "Thanks."
+msgstr "Спасибо."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:212
+#, no-wrap
+msgid "Addressing the reader"
+msgstr "Обращение к читателю"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:215
+msgid ""
+"In the English documents, the reader is addressed as \"you\", there is no "
+"formal/informal distinction as there is in some languages."
+msgstr ""
+"В английских документах читатель обращается на «you», здесь нет различия "
+"между формальным и неформальным обращением, как в некоторых языках."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:218
+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:219
+#, 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:222
+msgid "Yes."
+msgstr "Да."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:224
+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:232
+#, 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 ""
+" ---\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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:234
+#, no-wrap
+msgid " = Why you should use a BSD style license for your Open Source Project\n"
+msgstr " = Why you should use a BSD style license for your Open Source Project\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:238
+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 ""
+"Точный шаблон может меняться, но он всегда будет включать строку `$FreeBSD$` "
+"и фразу `The FreeBSD Documentation Project`. Обратите внимание, что часть "
+"`$FreeBSD$` автоматически раскрывается Git, поэтому для новых файлов она "
+"должна быть пустой (просто `$FreeBSD$`)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:240
+msgid ""
+"Your translated documents should include their own FreeBSD line, and change "
+"the `FreeBSD Documentation Project` line to `The FreeBSD _language_ "
+"Documentation Project`."
+msgstr ""
+"Документы, переведённые вами, должны включать собственную строку FreeBSD, а "
+"также изменять строку `FreeBSD Documentation Project` на `The "
+"FreeBSD_язык_Documentation Project`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:242
+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:244
+msgid "So, the Spanish version of this file might start:"
+msgstr "Итак, испанская версия этого файла может начинаться с:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:251
+#, 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 ""
+" ---\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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:253
+#, no-wrap
+msgid " = Soporte para segundos intercalares en FreeBSD\n"
+msgstr " = Soporte para segundos intercalares en FreeBSD\n"
diff --git a/documentation/content/ru/books/fdp-primer/weblate/_index.adoc b/documentation/content/ru/books/fdp-primer/weblate/_index.adoc
new file mode 100644
index 0000000000..b3d2bc2392
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/weblate/_index.adoc
@@ -0,0 +1,456 @@
+---
+description: 'Как присоединиться к команде переводчиков FreeBSD и переводить онлайн в Weblate'
+next: books/fdp-primer/manual-pages
+params:
+ path: /books/fdp-primer/weblate/
+prev: books/fdp-primer/po-translations
+showBookMenu: true
+tags: ["weblate", "po", "translations", "tutorial", "quick start"]
+title: 'Глава 10. Переводы в Weblate'
+weight: 10
+---
+
+[[weblate-translations]]
+= Переводы в 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]]
+== Введение
+
+Эта глава описывает основные шаги для присоединения к команде переводчиков FreeBSD, перевода онлайн в Weblate или офлайн, а также содержит простые рекомендации по переводу, вычитке и тестированию. Основное внимание уделено части, связанной с переводом.
+
+Исходные документы (статьи и книги) находятся на {main-site}[портале документации].
+
+https://weblate.org/en/[Weblate] — это веб-ориентированное программное обеспечение с открытым исходным кодом, специализирующееся на локализации. Проект FreeBSD поддерживает собственный экземпляр.
+
+[[weblate-become-translator]]
+== Как стать переводчиком FreeBSD
+
+Вот простые шаги для начала перевода статей и книг проекта документации FreeBSD.
+
+. Создайте учетную запись на https://translate-dev.freebsd.org/[FreeBSD Weblate] с помощью электронной почты или вашего аккаунта GitHub.
+. Подписаться на список рассылки {freebsd-translators}.
+. Представьтесь и попросите присоединиться к языковой команде. Если языковая команда не существует, попросите создать её. Самопредставление обязательно. Оно увеличивает шансы на одобрение доступа на запись.
+. Войдите в https://translate-dev.freebsd.org/[Weblate] с новым аккаунтом.
+. Найдите языковую команду и выберите первый документ для перевода.
+. Создайте учетную запись в Bugzilla, чтобы отправлять переводы после завершения работы над документом. Проект документации также принимает Pull Requests на GitHub с переводами.
+
+[WARNING]
+====
+Все файлы переводов и документы должны соответствовать https://www.freebsd.org/copyright/freebsd-doc-license/[Лицензии документации FreeBSD]; если это неприемлемо, пожалуйста, не регистрируйтесь и не присылайте никаких исправлений или переводов.
+====
+
+[[weblate-introduce-yourself]]
+== Представьтесь
+
+Предоставьте краткое самопредставление в рассылке {freebsd-translators}, чтобы начать процесс предоставления доступа. Это позволит координатору языка или администратору выдать необходимые права новому пользователю Weblate для начала перевода.
+
+Ниже приведен пример того, как может выглядеть такое письмо.
+
+[.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]]
+== Вход в Weblate
+
+Откройте https://translate-dev.freebsd.org/[] и `Войдите` (Sign in).
+
+image::weblate-login.png["Логин в Webleate", 800]
+
+Используйте имя пользователя, адрес электронной почты или учетную запись GitHub для входа.
+
+Профиль пользователя содержит ваши предпочтения, имя и адрес электронной почты. Имя и адрес будут использоваться в коммитах; сохраняйте эту информацию актуальной.
+
+На экземпляре Weblate FreeBSD все переводы будут зафиксированы в https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (промежуточном репозитории на GitHub), а не напрямую в https://github.com/freebsd/freebsd-doc[freebsd-doc]. Переводчики должны брать файлы PO gettext (`.po`), преобразовывать их в `.adoc` и отправлять через https://bugs.freebsd.org/bugzilla/[Bugzilla] или https://github.com/freebsd/freebsd-doc/pulls[GitHub], чтобы переведённый документ был опубликован или обновлён в портале документации. Подробнее см. в следующих разделах.
+
+Weblate будет фиксировать изменения ежедневно, как минимум в `freebsd-doc-translate`, если есть новые переведённые строки.
+
+[[weblate-find-language-team]]
+== Найти команду локализации для участия
+
+Нажмите `Проекты`, выберите `Документация`, затем нажмите `Языки` и увидите все доступные языки.
+
+image::weblate-languages.png["Языки в Weblate", 500]
+
+Обратите внимание, что некоторые языки и переведённые документы уже доступны в портале документации и репозиториях.
+
+Если желаемый язык для перевода недоступен в Weblate, пожалуйста, свяжитесь с https://www.freebsd.org/docproj/translations/[координаторами по языкам], прежде чем запрашивать создание нового языка. Если ответа не последует, обратитесь по адресу: {doceng}.
+
+[[weblate-translating-online]]
+== Перевод онлайн на Weblate
+
+Перевод документов онлайн оказывается наиболее простым способом перевода документации в FreeBSD, так как позволяет пользователям совместно работать над одним файлом, распределяя нагрузку.
+
+После того как координатор или администратор предоставит пользователю доступ к определённому языку, кнопка сохранения станет активной, и пользователь сможет начать перевод.
+
+image::weblate-documents.png["Weblate Документы", 800]
+image::weblate-translate.png["Weblate Translate", 800]
+
+В Weblate есть набор ссылок, ведущих к непосредственному переводу. Перевод далее разделён на отдельные проверки, такие как `Не переведено` или `Требует проверки`. Если весь документ переведён без ошибок, ссылка `Все переводы` всё равно доступна на случай, если потребуется проверка. Также можно воспользоваться полем поиска, чтобы найти конкретную строку или термин.
+
+В https://docs.weblate.org/en/latest/user/translating.html#translation-projects[документации Weblate] содержится дополнительная информация о переводах, например, сочетания клавиш и другие советы по работе с инструментом перевода.
+
+[[weblate-translating-offline]]
+== Перевод в автономном режиме
+
+Weblate на FreeBSD использует файлы перевода PO gettext. Пользователи, знакомые с файлами PO gettext, которые хотят переводить офлайн, могут загружать и выгружать переводы на странице документа в Weblate, выбрав пункт в меню `Files`.
+
+image::weblate-offline.png["Weblate Offline", 800]
+
+[[weblate-automatic-suggestions]]
+== Перевод на основе автоматических предложений
+
+Языки, использующие Weblate до миграции на Hugo/Asciidoctor, могут использовать эту функцию в Weblate для экономии времени.
+
+Эта функция Weblate использует память переводов, созданную другими компонентами и проектами на том же сервере. Для этого прежние переводы Weblate сохранены на том же сервере в режиме только для чтения.
+
+Строки, совпадающие с `100/100` по степени схожести, могут быть скопированы и сохранены напрямую. Остальным строкам потребуется как минимум незначительная корректировка.
+
+Некоторые примеры:
+
+image::weblate_automatic_suggestion_01.png["Weblate Автоматические предложения 01", 800]
+
+С переходом на Hugo/Asciidoctor документы используют UTF-8. Некоторые HTML-сущности следует заменить. Некоторые строки, такие как ссылки, требуют изменений в разметке.
+
+image::weblate_automatic_suggestion_02.png["Weblate Автоматические предложения 02", 800]
+
+Ссылки:
+
+image::weblate_automatic_suggestion_03.png["Weblate Автоматические предложения 03", 800]
+
+[[weblate-proofreading-qa]]
+== Вычитка и проверка качества в Weblate
+
+Панель документа `Project/Language/Document` отображает статус перевода и состояние строк для этого документа. Эта страница удобна для вычитки и проверки качества.
+
+image::weblate-revision1.png["Weblate Ревизия 01", 800]
+
+В этом примере две строки пропустили точку; переход по этой ссылке покажет только те строки, которые нужно пересмотреть/перевести.
+
+image::weblate-revision2.png["Weblate Ревизия 02", 800]
+
+Переводчики и рецензенты часто ценят возможность видеть переведённые строки в контексте.
+
+[[weblate-building]]
+== Сборка переведенного документа
+
+Проект не использует непрерывную интеграцию и непрерывную поставку для сборки переводов. Ведутся исследования по внедрению этой возможности.
+
+[NOTE]
+====
+Следующий пример использует GitHub, так как Weblate также находится на GitHub . Обратите внимание, что этот репозиторий доступен только для чтения, но Pull Requests принимаются.
+====
+
+Для локальной сборки перевода выполните следующие шаги:
+
+[[weblate-clone-repositories]]
+
+[.procedure]
+====
+.Процедура: Клонирование необходимых репозиториев
+. Клонирование репозитория `freebsd-doc`:
++
+[source, console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc
+....
+
+. Клонирование репозитория `freebsd-doc-translate`:
++
+[source, console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate
+....
+====
+
+[[weblate-copy-translation]]
+
+[.procedure]
+====
+.Процедура: Копирование файла перевода в `freebsd-doc`
+
+Имея оба репозитория, скопируйте перевод из `freebsd-doc-translate` в `freebsd-doc`. Пример перевода статьи Руководства для коммиттеров на испанском языке.
+
+[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]
+====
+.Процедура: Преобразование файла перевода (`.po`) в `.adoc`
+
+Перейдите в корень `freebsd-doc`.
+
+[source, console?prompt=%]
+....
+% cd ~/freebsd-doc
+....
+
+Преобразовать файл `.po` в `.adoc`
+
+[source, console?prompt=%]
+....
+% ./tools/translate.sh documentation es articles/committers-guide
+....
+
+По умолчанию: только файлы с более чем восьмидесятью процентами переведённых строк будут преобразованы в `.adoc`.
+
+Чтобы игнорировать это ограничение:
+
+[source, console?prompt=%]
+....
+% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide
+....
+
+====
+
+Некоторые документы, такие как книги, содержат множество PO-файлов gettext. Всегда копируйте их все при переводе и сборке. Файлы, которые не были переведены, будут преобразованы с исходными (английскими) строками.
+
+[WARNING]
+====
+Структура каталогов является основополагающей. Всегда следуйте структуре каталогов английского документа.
+====
+
+[[weblate-build]]
+
+[.procedure]
+====
+.Процедура: Сборка переведенного документа
+
+Наконец, часть сборки.
+
+Перейдите в каталог документации, так как сборка веб-сайта FreeBSD не требуется.
+
+[source, console?prompt=%]
+....
+% cd documentation
+....
+
+И соберите документацию. Обратите внимание, что `en` всегда добавляется по умолчанию при сборке любого другого языка.
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make
+....
+
+Эта команда соберет только английскую и испанскую документацию портала FreeBSD. Результат будет сохранен в каталоге [.filename]#public#; откройте его в браузере. Обратите внимание, что некоторые индексные файлы могут перенаправлять браузер на онлайн-страницу.
+
+Еще один хороший вариант — собрать и предоставить контент с помощью встроенного веб-сервера Hugo:
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make run
+....
+
+По умолчанию веб-сервер прослушивает `localhost`; чтобы изменить это поведение, укажите нужный IP-адрес в значении параметра `BIND`.
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make run BIND=192.168.15.10
+....
+
+Это собирает и предоставляет содержимое с помощью встроенного веб-сервера Hugo, оставляя его открытым, и при любых изменениях файлов автоматически пересобирает их.
+====
+
+Чтобы внести необходимые изменения в перевод, выполните следующие шаги для повторной синхронизации всех компонентов:
+
+- Исправьте строку перевода на https://translate-dev.freebsd.org/[Weblate].
+- Заставьте Weblate зафиксировать изменения в разделе `Document/Manage/Commit`.
+- Синхронизируйте локальный репозиторий Weblate `freebsd-doc-translate` с помощью команды `git pull origin main`.
+- Скопируйте перевод снова в `freebsd-doc`.
+- Преобразуйте перевод в .adoc с помощью скрипта `./tools/translate.sh`.
+- Hugo пересоберет файл и не будет собирать весь набор, если использовалась команда `make run`, или повторно выполнит `make`.
+
+[IMPORTANT]
+====
+Повторяйте предыдущие шаги столько раз, сколько необходимо, пока документ не будет готов к публикации.
+====
+
+Глава crossref:doc-build[doc-build-rendering,Процесс сборки документации] содержит информацию о преобразовании в HTML и PDF.
+
+[[weblate-submitting-translations]]
+== Отправка переводов
+
+Пример отправки обновления для статьи на бразильском португальском Committer's Guide.
+
+
+[[weblate-git-repo-status]]
+
+[.procedure]
+====
+.Проверка репозитория
+
+После выполнения шагов из раздела crossref:weblate[weblate-building,Сборка переведенного документа], перейдите в корневую директорию `freebsd-doc` и просмотрите, что будет включено в коммит. Для просмотра списка изменяемых файлов и различий в их содержимом:
+
+[source, console?prompt=%]
+....
+% git status
+% git diff
+....
+
+Просмотрите вывод, и если какие-либо файлы, не связанные с обновлением перевода Руководства коммиттера, были изменены или добавлены, выполните соответствующее действие по их откату или удалению соответственно, прежде чем продолжить.
+
+Всегда включайте файл PO gettext (`.po`) и переведенный документ в Hugo/Asciidoctor (`.adoc`).
+====
+
+[[weblate-git-new-branch]]
+
+[.procedure]
+====
+.Создать новую ветку и зафиксировать изменения
+
+Создайте еще одну ветку для разделения работы, что поможет при будущих обновлениях в локальном репозитории.
+
+[source, console?prompt=%]
+....
+% git checkout -b committers-guide_pt-br
+....
+
+Зарегистрировать локальный коммит.
+
+[source, console?prompt=%]
+....
+% git add .
+% git commit
+....
+
+Пример сообщений коммитов для переводов:
+
+[.programlisting]
+....
+pt-br/committers-guide: Sync with en XXXXXXX
+....
+
+Где `XXXXXXX` — это ревизия man:git[1], хранящаяся в репозитории Weblate в файле [.filename]#~/freebsd-doc-translate/revision.txt#.
+
+Если это первый перевод статьи:
+
+[.programlisting]
+....
+Add Korean translation of Leap Seconds article
+....
+
+После выполнения коммита будет отображено сообщение, если man:git[1] ранее не был настроен. Следуйте инструкциям и укажите имя и адрес электронной почты, используемые в Weblate. Этот шаг важен для правильного учета вклада участников.
+
+Затем проверьте весь коммит, просмотрите изменения, а также имя автора и адрес электронной почты.
+
+[source, console?prompt=%]
+....
+% git show
+....
+====
+
+[[weblate-git-patch-submit]]
+
+[.procedure]
+====
+.Сгенерировать патч
+
+Далее создайте файл man:git-format-patch[1].
+
+[source, console?prompt=%]
+....
+% git format-patch main
+0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch
+....
+====
+
+Прикрепите патч [.filename]#0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch# к отчёту об ошибке в https://bugs.freebsd.org/bugzilla/[FreeBSD Bugzilla].
+
+Включите следующую информацию в отчёт:
+
+[[weblate-bugzilla-fields]]
+.Поля Bugzilla
+[cols="1,1", frame="none", options="header"]
+|===
+| Поле
+| Значение
+
+| *продукт (product)*
+| Documentation
+
+| *Компонент (Component)*
+| Books & Articles
+
+| *Сводка (Summary)*
+| Тот же текст, что и в локальном коммите
+
+| *Описание (Description)*
+| Укажите, что инструкции в этом руководстве были выполнены, включая вычитку и другие необходимые шаги.
+Включите сведения, которые могут помочь с анализом и продвижением отчёта.
+
+
+| *СС* (Необязательно)
+| Если в языке есть координаторы, укажите их адреса электронной почты в поле CC.
+|===
+
+Для тех, кто знаком с man:git[1] и GitHub: вместо отправки исправления через https://bugs.freebsd.org/bugzilla/[Bugzilla], можно использовать https://github.com/freebsd/freebsd-doc/pulls[запрос на включение изменений (pull request) в GitHub] (укажите имя и адрес, которые вы используете в Weblate).
+
+https://github.com/freebsd/freebsd-doc/ является вторичным зеркалом. Изменения в дереве `doc` могут вносить только люди, имеющие права на коммит (`doc commit bit`).
+
+Когда переводчики продолжают присылать качественные исправления, другие коммиттеры могут выдвинуть их для получения прав на запись (extref:{committers-guide}[бит коммита для документации, committer.types] для переводов), учётной записи FreeBSD и сопутствующих привилегий.
+
+Список extref:{contributors}[дополнительных участников FreeBSD, contrib-additional] включает некоммиттеров, чьи изменения были закоммичены в дерево `doc`.
+
+Если вы сомневаетесь в каком-либо действии, напишите в {freebsd-translators}.
+
+[[weblate-faq]]
+== FAQ (Часто задаваемые Вопросы)
+
+[[weblate-copyrights]]
+=== Нужно ли переводить все сообщения об авторских правах?
+
+Каждая языковая команда решает этот вопрос для своего языка; в команде `pt-br` (бразильский португальский) было решено не переводить эти сообщения.
diff --git a/documentation/content/ru/books/fdp-primer/weblate/_index.po b/documentation/content/ru/books/fdp-primer/weblate/_index.po
new file mode 100644
index 0000000000..89906a544e
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/weblate/_index.po
@@ -0,0 +1,1259 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerweblate_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Как присоединиться к команде переводчиков FreeBSD и переводить онлайн в Weblate"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Weblate Translations"
+msgstr "Глава 10. Переводы в Weblate"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:14
+#, no-wrap
+msgid "Weblate Translations"
+msgstr "Переводы в Weblate"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:56
+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 ""
+"Эта глава описывает основные шаги для присоединения к команде переводчиков "
+"FreeBSD, перевода онлайн в Weblate или офлайн, а также содержит простые "
+"рекомендации по переводу, вычитке и тестированию. Основное внимание уделено "
+"части, связанной с переводом."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:58
+msgid ""
+"The original documents (articles and books) are in the {main-site}"
+"[documentation portal]."
+msgstr ""
+"Исходные документы (статьи и книги) находятся на {main-site}[портале "
+"документации]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:60
+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] — это веб-ориентированное программное "
+"обеспечение с открытым исходным кодом, специализирующееся на локализации. "
+"Проект FreeBSD поддерживает собственный экземпляр."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:62
+#, no-wrap
+msgid "How to Become a FreeBSD Translator"
+msgstr "Как стать переводчиком FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:65
+msgid ""
+"Following are simple steps to start translating articles and books of the "
+"FreeBSD Documentation Project."
+msgstr ""
+"Вот простые шаги для начала перевода статей и книг проекта документации "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:67
+msgid ""
+"Create an account on the https://translate-dev.freebsd.org/[FreeBSD Weblate "
+"instance] with an email address or your GitHub account."
+msgstr ""
+"Создайте учетную запись на https://translate-dev.freebsd.org/[FreeBSD "
+"Weblate] с помощью электронной почты или вашего аккаунта GitHub."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:68
+msgid "Subscribe to the {freebsd-translators}."
+msgstr "Подписаться на список рассылки {freebsd-translators}."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:72
+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:73
+msgid ""
+"Login to https://translate-dev.freebsd.org/[Weblate] with the new account."
+msgstr ""
+"Войдите в https://translate-dev.freebsd.org/[Weblate] с новым аккаунтом."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:74
+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:76
+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 ""
+"Создайте учетную запись в Bugzilla, чтобы отправлять переводы после "
+"завершения работы над документом. Проект документации также принимает Pull "
+"Requests на GitHub с переводами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:80
+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 ""
+"Все файлы переводов и документы должны соответствовать https://"
+"www.freebsd.org/copyright/freebsd-doc-license/[Лицензии документации "
+"FreeBSD]; если это неприемлемо, пожалуйста, не регистрируйтесь и не "
+"присылайте никаких исправлений или переводов."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:83
+#, no-wrap
+msgid "Introduce Yourself"
+msgstr "Представьтесь"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:87
+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 ""
+"Предоставьте краткое самопредставление в рассылке {freebsd-translators}, "
+"чтобы начать процесс предоставления доступа. Это позволит координатору "
+"языка или администратору выдать необходимые права новому пользователю "
+"Weblate для начала перевода."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:89
+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:93
+#, 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:105
+#, 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 (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"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:108
+#, no-wrap
+msgid "Login to Weblate"
+msgstr "Вход в Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:111
+msgid "Open https://translate-dev.freebsd.org/[] and `Sign in`."
+msgstr "Откройте https://translate-dev.freebsd.org/[] и `Войдите` (Sign in)."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:112
+#, no-wrap
+msgid "Weblate Login"
+msgstr "Логин в Webleate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:112
+#, no-wrap
+msgid "weblate-login.png"
+msgstr "weblate-login.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:115
+msgid "Use a username, email address, or GitHub account to log in."
+msgstr ""
+"Используйте имя пользователя, адрес электронной почты или учетную запись "
+"GitHub для входа."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:118
+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:122
+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 ""
+"На экземпляре Weblate FreeBSD все переводы будут зафиксированы в https://"
+"github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] "
+"(промежуточном репозитории на GitHub), а не напрямую в https://github.com/"
+"freebsd/freebsd-doc[freebsd-doc]. Переводчики должны брать файлы PO gettext "
+"(`.po`), преобразовывать их в `.adoc` и отправлять через https://"
+"bugs.freebsd.org/bugzilla/[Bugzilla] или https://github.com/freebsd/freebsd-"
+"doc/pulls[GitHub], чтобы переведённый документ был опубликован или обновлён "
+"в портале документации. Подробнее см. в следующих разделах."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:124
+msgid ""
+"Weblate will commit daily, at least to `freebsd-doc-translate`, if any new "
+"strings are translated."
+msgstr ""
+"Weblate будет фиксировать изменения ежедневно, как минимум в `freebsd-doc-"
+"translate`, если есть новые переведённые строки."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:126
+#, no-wrap
+msgid "Find a Language Team to Join In"
+msgstr "Найти команду локализации для участия"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:129
+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:130
+#, no-wrap
+msgid "Weblate Languages"
+msgstr "Языки в Weblate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:130
+#, no-wrap
+msgid "weblate-languages.png"
+msgstr "weblate-languages.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:133
+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:136
+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 ""
+"Если желаемый язык для перевода недоступен в Weblate, пожалуйста, свяжитесь "
+"с https://www.freebsd.org/docproj/translations/[координаторами по языкам], "
+"прежде чем запрашивать создание нового языка. Если ответа не последует, "
+"обратитесь по адресу: {doceng}."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:138
+#, no-wrap
+msgid "Translating Online on Weblate"
+msgstr "Перевод онлайн на Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:141
+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 ""
+"Перевод документов онлайн оказывается наиболее простым способом перевода "
+"документации в FreeBSD, так как позволяет пользователям совместно работать "
+"над одним файлом, распределяя нагрузку."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:143
+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:144
+#, no-wrap
+msgid "Weblate Documents"
+msgstr "Weblate Документы"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:144
+#, 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:145
+#, no-wrap
+msgid "Weblate Translate"
+msgstr "Weblate Translate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:145
+#, no-wrap
+msgid "weblate-translate.png"
+msgstr "weblate-translate.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:151
+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 ""
+"В Weblate есть набор ссылок, ведущих к непосредственному переводу. Перевод "
+"далее разделён на отдельные проверки, такие как `Не переведено` или `Требует "
+"проверки`. Если весь документ переведён без ошибок, ссылка `Все переводы` "
+"всё равно доступна на случай, если потребуется проверка. Также можно "
+"воспользоваться полем поиска, чтобы найти конкретную строку или термин."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:153
+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 ""
+"В https://docs.weblate.org/en/latest/user/translating.html#translation-"
+"projects[документации Weblate] содержится дополнительная информация о "
+"переводах, например, сочетания клавиш и другие советы по работе с "
+"инструментом перевода."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:155
+#, no-wrap
+msgid "Translating Offline"
+msgstr "Перевод в автономном режиме"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:159
+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 ""
+"Weblate на FreeBSD использует файлы перевода PO gettext. Пользователи, "
+"знакомые с файлами PO gettext, которые хотят переводить офлайн, могут "
+"загружать и выгружать переводы на странице документа в Weblate, выбрав пункт "
+"в меню `Files`."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:160
+#, no-wrap
+msgid "Weblate Offline"
+msgstr "Weblate Offline"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:160
+#, no-wrap
+msgid "weblate-offline.png"
+msgstr "weblate-offline.png"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:163
+#, no-wrap
+msgid "Translation based on Automatic Suggestions"
+msgstr "Перевод на основе автоматических предложений"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:166
+msgid ""
+"Languages using Weblate before the migration to Hugo/Asciidoctor can use "
+"this feature from Weblate to save time."
+msgstr ""
+"Языки, использующие Weblate до миграции на Hugo/Asciidoctor, могут "
+"использовать эту функцию в Weblate для экономии времени."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:169
+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 ""
+"Эта функция Weblate использует память переводов, созданную другими "
+"компонентами и проектами на том же сервере. Для этого прежние переводы "
+"Weblate сохранены на том же сервере в режиме только для чтения."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:172
+msgid ""
+"Strings that match `100/100` in similarity can be copied and saved "
+"directly. Other strings will need at least minor adjustment."
+msgstr ""
+"Строки, совпадающие с `100/100` по степени схожести, могут быть скопированы "
+"и сохранены напрямую. Остальным строкам потребуется как минимум "
+"незначительная корректировка."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:174
+msgid "Some examples:"
+msgstr "Некоторые примеры:"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:175
+#, no-wrap
+msgid "Weblate Automatic Suggestions 01"
+msgstr "Weblate Автоматические предложения 01"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:175
+#, 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:180
+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 ""
+"С переходом на Hugo/Asciidoctor документы используют UTF-8. Некоторые HTML-"
+"сущности следует заменить. Некоторые строки, такие как ссылки, требуют "
+"изменений в разметке."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:181
+#, no-wrap
+msgid "Weblate Automatic Suggestions 02"
+msgstr "Weblate Автоматические предложения 02"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:181
+#, 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:184
+msgid "Links:"
+msgstr "Ссылки:"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:185
+#, no-wrap
+msgid "Weblate Automatic Suggestions 03"
+msgstr "Weblate Автоматические предложения 03"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:185
+#, 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:188
+#, no-wrap
+msgid "Proofreading and Weblate Quality Checks"
+msgstr "Вычитка и проверка качества в Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:192
+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 ""
+"Панель документа `Project/Language/Document` отображает статус перевода и "
+"состояние строк для этого документа. Эта страница удобна для вычитки и "
+"проверки качества."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:193
+#, no-wrap
+msgid "Weblate Revision 01"
+msgstr "Weblate Ревизия 01"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:193
+#, no-wrap
+msgid "weblate-revision1.png"
+msgstr "weblate-revision1.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:196
+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:197
+#, no-wrap
+msgid "Weblate Revision 02"
+msgstr "Weblate Ревизия 02"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:197
+#, no-wrap
+msgid "weblate-revision2.png"
+msgstr "weblate-revision2.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:200
+msgid ""
+"Translators and reviewers often value observing translated strings in "
+"context."
+msgstr ""
+"Переводчики и рецензенты часто ценят возможность видеть переведённые строки "
+"в контексте."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:202
+#, no-wrap
+msgid "Building the Translated Document"
+msgstr "Сборка переведенного документа"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:206
+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:211
+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 ""
+"Следующий пример использует GitHub, так как Weblate также находится на "
+"GitHub . Обратите внимание, что этот репозиторий доступен только для чтения, "
+"но Pull Requests принимаются."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:214
+msgid "To build the translation locally, follow these steps:"
+msgstr "Для локальной сборки перевода выполните следующие шаги:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:219
+#, no-wrap
+msgid "Procedure: Clone the necessary repositories"
+msgstr "Процедура: Клонирование необходимых репозиториев"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:221
+msgid "Clone the `freebsd-doc` repository:"
+msgstr "Клонирование репозитория `freebsd-doc`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:225
+#, 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:228
+msgid "Clone the `freebsd-doc-translate` repository:"
+msgstr "Клонирование репозитория `freebsd-doc-translate`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:232
+#, 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:239
+#, no-wrap
+msgid "Procedure: Copy a translation file to `freebsd-doc`"
+msgstr "Процедура: Копирование файла перевода в `freebsd-doc`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:243
+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 ""
+"Имея оба репозитория, скопируйте перевод из `freebsd-doc-translate` в "
+"`freebsd-doc`. Пример перевода статьи Руководства для коммиттеров на "
+"испанском языке."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:248
+#, 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:255
+#, no-wrap
+msgid "Procedure: Convert a translation file (`.po`) to `.adoc`"
+msgstr "Процедура: Преобразование файла перевода (`.po`) в `.adoc`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:258
+msgid "Go to the root of `freebsd-doc`."
+msgstr "Перейдите в корень `freebsd-doc`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:262
+#, no-wrap
+msgid "% cd ~/freebsd-doc\n"
+msgstr "% cd ~/freebsd-doc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:265
+msgid "Translate (convert) the `.po` file to `.adoc`"
+msgstr "Преобразовать файл `.po` в `.adoc`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:269
+#, 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:272
+msgid ""
+"By default: only files with more than eighty percent of strings translated "
+"will be converted to `.adoc`."
+msgstr ""
+"По умолчанию: только файлы с более чем восьмидесятью процентами переведённых "
+"строк будут преобразованы в `.adoc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:274
+msgid "To ignore that limit:"
+msgstr "Чтобы игнорировать это ограничение:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:278
+#, 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:285
+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 ""
+"Некоторые документы, такие как книги, содержат множество PO-файлов gettext. "
+"Всегда копируйте их все при переводе и сборке. Файлы, которые не были "
+"переведены, будут преобразованы с исходными (английскими) строками."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:290
+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:296
+#, no-wrap
+msgid "Procedure: Build the translated document"
+msgstr "Процедура: Сборка переведенного документа"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:299
+msgid "Last, the building part."
+msgstr "Наконец, часть сборки."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:301
+msgid ""
+"Enter the documentation directory because there is no need to build the "
+"FreeBSD website."
+msgstr ""
+"Перейдите в каталог документации, так как сборка веб-сайта FreeBSD не "
+"требуется."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:305
+#, no-wrap
+msgid "% cd documentation\n"
+msgstr "% cd documentation\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:309
+msgid ""
+"And build the documentation. Note that `en` is always added by default when "
+"building any other language."
+msgstr ""
+"И соберите документацию. Обратите внимание, что `en` всегда добавляется по "
+"умолчанию при сборке любого другого языка."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:313
+#, 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:318
+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 ""
+"Эта команда соберет только английскую и испанскую документацию портала "
+"FreeBSD. Результат будет сохранен в каталоге [.filename]#public#; откройте "
+"его в браузере. Обратите внимание, что некоторые индексные файлы могут "
+"перенаправлять браузер на онлайн-страницу."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:320
+msgid ""
+"Another good option is to build and serve the content with Hugo's internal "
+"webserver:"
+msgstr ""
+"Еще один хороший вариант — собрать и предоставить контент с помощью "
+"встроенного веб-сервера Hugo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:324
+#, 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:327
+msgid ""
+"By default, the webserver listens on `localhost`; To override this behavior, "
+"specify the desired IP address in the `BIND` parameter value."
+msgstr ""
+"По умолчанию веб-сервер прослушивает `localhost`; чтобы изменить это "
+"поведение, укажите нужный IP-адрес в значении параметра `BIND`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:331
+#, 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:334
+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 ""
+"Это собирает и предоставляет содержимое с помощью встроенного веб-сервера "
+"Hugo, оставляя его открытым, и при любых изменениях файлов автоматически "
+"пересобирает их."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:337
+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:339
+msgid ""
+"Fix the translation string on https://translate-dev.freebsd.org/[Weblate]."
+msgstr ""
+"Исправьте строку перевода на https://translate-dev.freebsd.org/[Weblate]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:340
+msgid ""
+"Force Weblate to commit the changes on `Document/Manage/Commit` section."
+msgstr ""
+"Заставьте Weblate зафиксировать изменения в разделе `Document/Manage/Commit`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:341
+msgid ""
+"Sync the local Weblate repository `freebsd-doc-translate` with a `git pull "
+"origin main` command."
+msgstr ""
+"Синхронизируйте локальный репозиторий Weblate `freebsd-doc-translate` с "
+"помощью команды `git pull origin main`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:342
+msgid "Copy the translation again to `freebsd-doc`."
+msgstr "Скопируйте перевод снова в `freebsd-doc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:343
+msgid ""
+"Convert the translation to .adoc with the `./tools/translate.sh` script."
+msgstr "Преобразуйте перевод в .adoc с помощью скрипта `./tools/translate.sh`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:344
+msgid ""
+"Hugo will rebuild the file and not build the entire set if `make run` was "
+"used; or re-execute `make`."
+msgstr ""
+"Hugo пересоберет файл и не будет собирать весь набор, если использовалась "
+"команда `make run`, или повторно выполнит `make`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:348
+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:351
+msgid ""
+"The crossref:doc-build[doc-build-rendering,Documentation Build Process] "
+"chapter includes information about rendering to HTML and PDF."
+msgstr ""
+"Глава crossref:doc-build[doc-build-rendering,Процесс сборки документации] "
+"содержит информацию о преобразовании в HTML и PDF."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:353
+#, no-wrap
+msgid "Submitting Translations"
+msgstr "Отправка переводов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:356
+msgid ""
+"Example of submitting an update to the Brazilian Portuguese article "
+"Committer's Guide."
+msgstr ""
+"Пример отправки обновления для статьи на бразильском португальском "
+"Committer's Guide."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:362
+#, no-wrap
+msgid "Check the repository"
+msgstr "Проверка репозитория"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:366
+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 ""
+"После выполнения шагов из раздела crossref:weblate[weblate-building,Сборка "
+"переведенного документа], перейдите в корневую директорию `freebsd-doc` и "
+"просмотрите, что будет включено в коммит. Для просмотра списка изменяемых "
+"файлов и различий в их содержимом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:371
+#, 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:374
+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:376
+msgid ""
+"Always include the PO gettext file (`.po`) and the translated document in "
+"Hugo/Asciidoctor (`.adoc`)."
+msgstr ""
+"Всегда включайте файл PO gettext (`.po`) и переведенный документ в Hugo/"
+"Asciidoctor (`.adoc`)."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:382
+#, no-wrap
+msgid "Create a new branch and commit"
+msgstr "Создать новую ветку и зафиксировать изменения"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:385
+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:389
+#, 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:392
+msgid "Register the local commit."
+msgstr "Зарегистрировать локальный коммит."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:397
+#, 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:400
+msgid "Example of commit messages for translations:"
+msgstr "Пример сообщений коммитов для переводов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:404
+#, no-wrap
+msgid "pt-br/committers-guide: Sync with en XXXXXXX\n"
+msgstr "pt-br/committers-guide: Sync with en XXXXXXX\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:407
+msgid ""
+"Where `XXXXXXX` is the man:git[1] revision stored in the Weblate repository "
+"[.filename]#~/freebsd-doc-translate/revision.txt#."
+msgstr ""
+"Где `XXXXXXX` — это ревизия man:git[1], хранящаяся в репозитории Weblate в "
+"файле [.filename]#~/freebsd-doc-translate/revision.txt#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:409
+msgid "If it is the first translation of an article:"
+msgstr "Если это первый перевод статьи:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:413
+#, no-wrap
+msgid "Add Korean translation of Leap Seconds article\n"
+msgstr "Add Korean translation of Leap Seconds article\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:418
+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 ""
+"После выполнения коммита будет отображено сообщение, если man:git[1] ранее "
+"не был настроен. Следуйте инструкциям и укажите имя и адрес электронной "
+"почты, используемые в Weblate. Этот шаг важен для правильного учета вклада "
+"участников."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:420
+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:424
+#, no-wrap
+msgid "% git show\n"
+msgstr "% git show\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:431
+#, no-wrap
+msgid "Generate a patch"
+msgstr "Сгенерировать патч"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:434
+msgid "Next, generate a man:git-format-patch[1] file."
+msgstr "Далее создайте файл man:git-format-patch[1]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:439
+#, 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:443
+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 ""
+"Прикрепите патч [.filename]#0001-pt-br-committers-guide-Sync-with-en-"
+"XXXXXXX.patch# к отчёту об ошибке в https://bugs.freebsd.org/bugzilla/"
+"[FreeBSD Bugzilla]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:445
+msgid "Include the following information in the report:"
+msgstr "Включите следующую информацию в отчёт:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:447
+#, no-wrap
+msgid "Bugzilla Fields"
+msgstr "Поля Bugzilla"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:451
+#, no-wrap
+msgid "Field"
+msgstr "Поле"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:453
+#, no-wrap
+msgid "Value"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:454
+#, no-wrap
+msgid "*product*"
+msgstr "*продукт (product)*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:456
+#, no-wrap
+msgid "Documentation"
+msgstr "Documentation"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:457
+#, no-wrap
+msgid "*Component*"
+msgstr "*Компонент (Component)*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:459
+#, no-wrap
+msgid "Books & Articles"
+msgstr "Books & Articles"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:460
+#, no-wrap
+msgid "*Summary*"
+msgstr "*Сводка (Summary)*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:462
+#, no-wrap
+msgid "Same as the local commit"
+msgstr "Тот же текст, что и в локальном коммите"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:463
+#, no-wrap
+msgid "*Description*"
+msgstr "*Описание (Description)*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:467
+#, 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 ""
+"Укажите, что инструкции в этом руководстве были выполнены, включая вычитку и другие необходимые шаги.\n"
+"Включите сведения, которые могут помочь с анализом и продвижением отчёта."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:468
+#, no-wrap
+msgid "*CC* (Optional)"
+msgstr "*СС* (Необязательно)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:469
+#, no-wrap
+msgid "If the language has coordinators, include their email addresses in the CC field."
+msgstr "Если в языке есть координаторы, укажите их адреса электронной почты в поле CC."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:472
+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 ""
+"Для тех, кто знаком с man:git[1] и GitHub: вместо отправки исправления через "
+"https://bugs.freebsd.org/bugzilla/[Bugzilla], можно использовать https://"
+"github.com/freebsd/freebsd-doc/pulls[запрос на включение изменений (pull "
+"request) в GitHub] (укажите имя и адрес, которые вы используете в Weblate)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:475
+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/ является вторичным зеркалом. "
+"Изменения в дереве `doc` могут вносить только люди, имеющие права на коммит "
+"(`doc commit bit`)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:477
+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 ""
+"Когда переводчики продолжают присылать качественные исправления, другие "
+"коммиттеры могут выдвинуть их для получения прав на запись (extref:"
+"{committers-guide}[бит коммита для документации, committer.types] для "
+"переводов), учётной записи FreeBSD и сопутствующих привилегий."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:479
+msgid ""
+"The list of extref:{contributors}[Additional FreeBSD Contributors, contrib-"
+"additional] includes non-committers whose contributions are committed to the "
+"`doc` tree."
+msgstr ""
+"Список extref:{contributors}[дополнительных участников FreeBSD, contrib-"
+"additional] включает некоммиттеров, чьи изменения были закоммичены в дерево "
+"`doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:481
+msgid "If in doubt about any procedure, write to the {freebsd-translators}."
+msgstr ""
+"Если вы сомневаетесь в каком-либо действии, напишите в {freebsd-translators}."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:483
+#, no-wrap
+msgid "FAQ (Frequently Asked Questions)"
+msgstr "FAQ (Часто задаваемые Вопросы)"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:486
+#, 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:488
+msgid ""
+"Every language team decides this for their language; in `pt-br` (Brazilian "
+"Portuguese) team, it was decided not to translate those messages."
+msgstr ""
+"Каждая языковая команда решает этот вопрос для своего языка; в команде `pt-"
+"br` (бразильский португальский) было решено не переводить эти сообщения."
diff --git a/documentation/content/ru/books/fdp-primer/working-copy/_index.adoc b/documentation/content/ru/books/fdp-primer/working-copy/_index.adoc
new file mode 100644
index 0000000000..cd3c04e167
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/working-copy/_index.adoc
@@ -0,0 +1,140 @@
+---
+description: 'Как получить рабочую копию проекта документации FreeBSD'
+next: books/fdp-primer/structure
+params:
+ path: /books/fdp-primer/working-copy/
+prev: books/fdp-primer/tools
+showBookMenu: true
+tags: ["working copy", "documentation", "manual pages", "git"]
+title: 'Глава 3. Рабочая копия'
+weight: 4
+---
+
+[[working-copy]]
+= Рабочая копия
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 3
+: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::[]
+
+_Рабочая копия_ — это копия дерева документации репозитория FreeBSD, загруженная на локальный компьютер. Изменения вносятся в локальную рабочую копию, тестируются, а затем отправляются в виде патчей для включения в основной репозиторий.
+
+Полная копия дерева документации может занимать 550 мегабайт дискового пространства. Рекомендуется выделить не менее гигабайта, чтобы было место для временных файлов и тестовых версий в различных выходных форматах.
+
+link:https://git-scm.com/[Git] используется для управления файлами документации FreeBSD. Он устанавливается через package:devel/git[], который также имеет облегчённую версию под названием git-lite:
+
+[source, shell]
+....
+# pkg install git-lite
+....
+
+[[working-copy-doc-and-src]]
+== Документация и Справочник
+
+Документация FreeBSD — это не только книги и статьи. Справочник (man) для всех команд и конфигурационных файлов также являются частью документации и входят в сферу ответственности FDP. Используются два репозитория: `doc` для книг и статей и `src` для операционной системы и справочника. Для редактирования справочника необходимо отдельно получить репозиторий `src`.
+
+Репозитории могут содержать несколько версий документации и исходного кода. Новые изменения почти всегда вносятся только в последнюю версию, называемую `main`.
+
+[[working-copy-choosing-directory]]
+== Выбор каталога
+
+Документация FreeBSD традиционно хранится в [.filename]#/usr/doc/#, а исходный код системы с руководствами — в [.filename]#/usr/src/#. Эти деревья каталогов могут быть перемещены, и пользователи могут разместить рабочие копии в других местах, чтобы избежать конфликтов с существующей информацией в основных каталогах. В следующих примерах используются [.filename]#~/doc# и [.filename]#~/src# — подкаталоги домашнего каталога пользователя.
+
+[[working-copy-checking-out]]
+== Извлечение копии
+
+Загрузка рабочей копии из репозитория называется _клоном_ и выполняется командой `git clone`. В этом примере клонируется последняя версия (`main`) основного дерева документации:
+
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/doc.git ~/doc
+....
+
+Получение исходного кода для работы со справочником (man) выполняется аналогично:
+
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/src.git ~/src
+....
+
+[[working-copy-updating]]
+== Обновление рабочей копии
+
+Документы и файлы в репозитории FreeBSD изменяются ежедневно. Пользователи вносят изменения в файлы и фиксируют их довольно часто. Даже спустя короткое время после первоначального получения копии репозитория, между локальной рабочей копией и основным репозиторием FreeBSD уже могут появиться различия. Чтобы обновить локальную версию с учетом изменений, внесённых в основной репозиторий, используйте команду `git pull` в каталоге с локальной рабочей копией:
+
+[source, shell]
+....
+% cd ~/doc
+% git pull --ff-only
+....
+
+Приучите себя к полезной привычке использовать `git pull` перед редактированием файлов документации. Кто-то другой мог недавно изменить этот файл, и ваша локальная рабочая копия не будет содержать последних изменений, пока вы не обновите её. Редактировать самую свежую версию файла гораздо проще, чем пытаться объединить более старую, отредактированную локальную версию с новой версией из репозитория.
+
+[[working-copy-revert]]
+== Отмена изменений
+
+Иногда оказывается, что изменения были не нужны, или автор просто хочет начать заново. Файлы можно «сбросить» к их исходному состоянию с помощью `git restore`. Например, чтобы отменить правки, сделанные в [.filename]#_index.adoc#, и вернуть его в исходное состояние:
+
+[source, shell]
+....
+% git restore _index.adoc
+....
+
+[[working-copy-making-diff]]
+== Создание Diff
+
+После завершения редактирования файла или группы файлов, различия между локальной рабочей копией и версией в репозитории FreeBSD должны быть собраны в один файл для отправки. Эти _diff_-файлы создаются путём перенаправления вывода команды `git diff` в файл:
+
+[source, shell]
+....
+% cd ~/doc
+% git diff > doc-fix-spelling.diff
+....
+
+Присвойте файлу осмысленное имя, отражающее его содержимое. В приведенном примере указаны исправления орфографии для всего дерева документации.
+
+Если файл с различиями должен быть отправлен через веб-интерфейс "link:https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi[Сообщить о проблеме в FreeBSD]", добавьте расширение [.filename]#.txt#, чтобы дать простой и прямолинейной веб-форме понять, что содержимое представляет собой обычный текст.
+
+Будьте осторожны: `git diff` включает все изменения в текущем каталоге и его подкаталогах. Если в рабочей копии есть файлы с правками, которые ещё не готовы к отправке, укажите список только тех файлов, которые нужно включить:
+
+[source, shell]
+....
+% cd ~/doc
+% git diff disks/_index.adoc printers/_index.adoc > disks-printers.diff
+....
+
+[[working-copy-git-references]]
+== Ссылки Git
+
+Эти примеры демонстрируют базовое использование Git. Более подробная информация доступна в https://git-scm.com/book/en/v2[Книге по Git] и https://git-scm.com/doc[документации Git].
diff --git a/documentation/content/ru/books/fdp-primer/working-copy/_index.po b/documentation/content/ru/books/fdp-primer/working-copy/_index.po
new file mode 100644
index 0000000000..378a61e4c0
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/working-copy/_index.po
@@ -0,0 +1,336 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-06-01 10:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerworking-copy_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Как получить рабочую копию проекта документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. The Working Copy"
+msgstr "Глава 3. Рабочая копия"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:14
+#, no-wrap
+msgid "The Working Copy"
+msgstr "Рабочая копия"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:53
+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 ""
+"_Рабочая копия_ — это копия дерева документации репозитория FreeBSD, "
+"загруженная на локальный компьютер. Изменения вносятся в локальную рабочую "
+"копию, тестируются, а затем отправляются в виде патчей для включения в "
+"основной репозиторий."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:56
+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 ""
+"Полная копия дерева документации может занимать 550 мегабайт дискового "
+"пространства. Рекомендуется выделить не менее гигабайта, чтобы было место "
+"для временных файлов и тестовых версий в различных выходных форматах."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:59
+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 ""
+"link:https://git-scm.com/[Git] используется для управления файлами "
+"документации FreeBSD. Он устанавливается через package:devel/git[], который "
+"также имеет облегчённую версию под названием git-lite:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:63
+#, no-wrap
+msgid "# pkg install git-lite\n"
+msgstr "# pkg install git-lite\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:66
+#, no-wrap
+msgid "Documentation and Manual Pages"
+msgstr "Документация и Справочник"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:72
+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 ""
+"Документация FreeBSD — это не только книги и статьи. Справочник (man) для "
+"всех команд и конфигурационных файлов также являются частью документации и "
+"входят в сферу ответственности FDP. Используются два репозитория: `doc` для "
+"книг и статей и `src` для операционной системы и справочника. Для "
+"редактирования справочника необходимо отдельно получить репозиторий `src`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:75
+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 ""
+"Репозитории могут содержать несколько версий документации и исходного кода. "
+"Новые изменения почти всегда вносятся только в последнюю версию, называемую "
+"`main`."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:77
+#, no-wrap
+msgid "Choosing a Directory"
+msgstr "Выбор каталога"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:82
+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 ""
+"Документация FreeBSD традиционно хранится в [.filename]#/usr/doc/#, а "
+"исходный код системы с руководствами — в [.filename]#/usr/src/#. Эти "
+"деревья каталогов могут быть перемещены, и пользователи могут разместить "
+"рабочие копии в других местах, чтобы избежать конфликтов с существующей "
+"информацией в основных каталогах. В следующих примерах используются "
+"[.filename]#~/doc# и [.filename]#~/src# — подкаталоги домашнего каталога "
+"пользователя."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:84
+#, no-wrap
+msgid "Checking Out a Copy"
+msgstr "Извлечение копии"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:88
+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 ""
+"Загрузка рабочей копии из репозитория называется _клоном_ и выполняется "
+"командой `git clone`. В этом примере клонируется последняя версия (`main`) "
+"основного дерева документации:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:92
+#, 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/working-copy/_index.adoc:95
+msgid "A checkout of the source code to work on manual pages is very similar:"
+msgstr ""
+"Получение исходного кода для работы со справочником (man) выполняется "
+"аналогично:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:99
+#, no-wrap
+msgid "% git clone https://git.FreeBSD.org/src.git ~/src\n"
+msgstr "% git clone https://git.FreeBSD.org/src.git ~/src\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:102
+#, no-wrap
+msgid "Updating a Working Copy"
+msgstr "Обновление рабочей копии"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:108
+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 ""
+"Документы и файлы в репозитории FreeBSD изменяются ежедневно. Пользователи "
+"вносят изменения в файлы и фиксируют их довольно часто. Даже спустя короткое "
+"время после первоначального получения копии репозитория, между локальной "
+"рабочей копией и основным репозиторием FreeBSD уже могут появиться "
+"различия. Чтобы обновить локальную версию с учетом изменений, внесённых в "
+"основной репозиторий, используйте команду `git pull` в каталоге с локальной "
+"рабочей копией:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:113
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git pull --ff-only\n"
+msgstr ""
+"% cd ~/doc\n"
+"% git pull --ff-only\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:118
+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 ""
+"Приучите себя к полезной привычке использовать `git pull` перед "
+"редактированием файлов документации. Кто-то другой мог недавно изменить этот "
+"файл, и ваша локальная рабочая копия не будет содержать последних изменений, "
+"пока вы не обновите её. Редактировать самую свежую версию файла гораздо "
+"проще, чем пытаться объединить более старую, отредактированную локальную "
+"версию с новой версией из репозитория."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:120
+#, no-wrap
+msgid "Reverting Changes"
+msgstr "Отмена изменений"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:125
+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 ""
+"Иногда оказывается, что изменения были не нужны, или автор просто хочет "
+"начать заново. Файлы можно «сбросить» к их исходному состоянию с помощью "
+"`git restore`. Например, чтобы отменить правки, сделанные в "
+"[.filename]#_index.adoc#, и вернуть его в исходное состояние:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:129
+#, no-wrap
+msgid "% git restore _index.adoc\n"
+msgstr "% git restore _index.adoc\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:132
+#, no-wrap
+msgid "Making a Diff"
+msgstr "Создание Diff"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:136
+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 ""
+"После завершения редактирования файла или группы файлов, различия между "
+"локальной рабочей копией и версией в репозитории FreeBSD должны быть собраны "
+"в один файл для отправки. Эти _diff_-файлы создаются путём перенаправления "
+"вывода команды `git diff` в файл:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:141
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff > doc-fix-spelling.diff\n"
+msgstr ""
+"% cd ~/doc\n"
+"% git diff > doc-fix-spelling.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:145
+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:147
+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 ""
+"Если файл с различиями должен быть отправлен через веб-интерфейс "
+"\"link:https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi[Сообщить о проблеме в "
+"FreeBSD]\", добавьте расширение [.filename]#.txt#, чтобы дать простой и "
+"прямолинейной веб-форме понять, что содержимое представляет собой обычный "
+"текст."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:150
+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 ""
+"Будьте осторожны: `git diff` включает все изменения в текущем каталоге и его "
+"подкаталогах. Если в рабочей копии есть файлы с правками, которые ещё не "
+"готовы к отправке, укажите список только тех файлов, которые нужно включить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:155
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff disks/_index.adoc printers/_index.adoc > disks-printers.diff\n"
+msgstr ""
+"% cd ~/doc\n"
+"% git diff disks/_index.adoc printers/_index.adoc > disks-printers.diff\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:158
+#, no-wrap
+msgid "Git References"
+msgstr "Ссылки Git"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:161
+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 ""
+"Эти примеры демонстрируют базовое использование Git. Более подробная "
+"информация доступна в https://git-scm.com/book/en/v2[Книге по Git] и https://"
+"git-scm.com/doc[документации Git]."
diff --git a/documentation/content/ru/books/fdp-primer/writing-style/_index.adoc b/documentation/content/ru/books/fdp-primer/writing-style/_index.adoc
new file mode 100644
index 0000000000..51cc579684
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/writing-style/_index.adoc
@@ -0,0 +1,326 @@
+---
+description: 'Стиль написания и некоторые соглашения, используемые в проекте документации FreeBSD'
+next: books/fdp-primer/editor-config
+params:
+ path: /books/fdp-primer/writing-style/
+prev: books/fdp-primer/manual-pages
+showBookMenu: true
+tags: ["writing", "style", "typos", "one sentence per line"]
+title: 'Глава 12. Стиль написания'
+weight: 12
+---
+
+[[writing-style]]
+= Стиль написания
+:doctype: book
+:toc: macro
+:toclevels: 2
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 12
+: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::[]
+
+[[writing-style-tips]]
+== Советы
+
+Техническая документация может быть улучшена за счёт последовательного применения нескольких принципов. Большинство из них можно разделить на три цели: _быть понятным_, _быть полным_ и _быть кратким_. Эти цели могут противоречить друг другу. Хорошее изложение заключается в нахождении баланса между ними.
+
+[[writing-style-be-clear]]
+=== Будьте понятны
+
+Ясность чрезвычайно важна. Читатель может быть новичком или изучать документ на неродном языке. Стремитесь к простому, понятному тексту, который чётко объясняет концепции.
+
+Избегайте витиеватой или украшенной речи, шуток или разговорных выражений. Пишите как можно проще и яснее. Простой текст легче понять и перевести.
+
+Делайте объяснения как можно короче, проще и понятнее. Избегайте пустых фраз вроде "для того чтобы", которые обычно можно заменить на "чтобы". Не используйте снисходительные слова вроде "по сути". Избегайте латинских терминов, таких как "i.e." или "cf.", которые могут быть непонятны за пределами академических или научных кругов.
+
+Следует писать в формальном стиле. Необходимо избегать прямого обращения к читателю. Например, следует использовать формулировку "скопировать файл в [.filename]#/tmp#", а не "вы можете скопировать файл в [.filename]#/tmp#".
+
+Приводите понятные, корректные и _проверенные_ примеры. Простой пример лучше, чем отсутствие примера. Хороший пример ещё лучше. Не приводите плохих примеров, которые можно распознать по извинениям или фразам вроде «но на самом деле так делать не стоит». Плохие примеры хуже, чем их отсутствие. Приводите хорошие примеры, потому что _даже если предупредить читателя, чтобы он не использовал пример в таком виде_, он всё равно, скорее всего, воспользуется им как есть.
+
+Избегайте _неопределённых выражений_, таких как «должен», «может», «попытаться» или «смог бы». Эти слова создают впечатление, что автор не уверен в фактах, и вызывают сомнения у читателя.
+
+Аналогично, давайте инструкции в виде повелительных команд: не "вам следует сделать это", а просто "сделайте это".
+
+[[writing-style-be-complete]]
+=== Будьте полными
+
+Не делайте предположений о способностях или уровне навыков читателя. Сообщите им то, что им необходимо знать. Давайте ссылки на другие документы, чтобы предоставить справочную информацию без необходимости её повторного изложения. Поставьте себя на место читателя, предугадайте вопросы, которые у него возникнут, и ответьте на них.
+
+[[writing-style-be-concise]]
+=== Будьте краткими
+
+Хотя функции должны быть описаны полностью, иногда информации так много, что читателю сложно найти нужную деталь. Баланс между полнотой и лаконичностью — это непростая задача. Один из подходов — включить введение, затем раздел «быстрый старт» с описанием наиболее распространённого сценария, а после него — подробный справочный раздел.
+
+[[writing-style-guidelines]]
+== Рекомендации
+
+Для обеспечения единообразия среди множества авторов документации FreeBSD были разработаны рекомендации, которым следует придерживаться при написании.
+
+Используйте американское написание английских слов::
+Существует несколько вариантов английского языка с разным написанием одних и тех же слов. Если варианты написания отличаются, используйте американский английский. Например, «color», а не «colour», «rationalize», а не «rationalise», и так далее.
++
+[NOTE]
+====
+Использование британского варианта английского языка может быть допустимо в случае предоставленной статьи, однако орфография должна быть единообразной во всем документе. Остальные документы, такие как книги, веб-сайты, справочные страницы и т. д., должны использовать американский вариант английского языка.
+====
+
+Не используйте сокращения::
+Не используйте сокращения. Всегда пишите фразу полностью. "Don't use contractions" является неправильным вариантом.
++
+Избегание сокращений способствует более формальному тону, повышает точность и немного облегчает работу переводчиков.
+
+Используйте серийную запятую::
+В списке элементов внутри абзаца разделяйте каждый элемент запятой. Последний элемент отделяйте от остальных запятой и словом "and".
++
+Например:
++
+This is a list of one, two and three items (Вот список из одного, двух и трёх элементов).
++
+Это список из трех элементов: "one", "two" и "three" или список из двух элементов: "one" и "two and three"?
++
+Лучше быть точным и включать серийную запятую:
++
+This is a list of one, two, and three items (Вот список из одного, двух и трёх элементов).
+Избегайте избыточных фраз::
+Избегайте избыточных фраз. В частности, "команда", "файл" и "man команда" часто избыточны.
++
+Например, команды:
++
+Неверно: Используйте команду `git` для обновления исходного кода.
++
+Правильно: Используйте `git` для обновления исходников.
++
+Имена файлов:
++
+Неверно: ... в имени файла [.filename]#/etc/rc.local#...
++
+Правильно: ... в [.filename]#/etc/rc.local#...
++
+Ссылки на страницы Справочника (во втором примере используется `man:[]` с сущностью man:csh[1]):
++
+Неправильно: Дополнительную информацию смотрите в `man csh`.
++
+Правильно: См. man:csh[1].
+
+Для получения дополнительной информации о стиле написания текстов см. http://www.bartleby.com/141/[«Элементы стиля»] Уильяма Странка.
+
+[[writing-style-guide]]
+== Руководство по стилю
+
+Чтобы сохранить единообразие исходного кода документации при редактировании множеством разных людей, пожалуйста, следуйте этим стилевым соглашениям.
+
+[[one-sentence-per-line]]
+=== Одно предложение на строку
+
+Используйте семантические разрывы строк в документации, метод, называемый "одно предложение на строку". Идея этого метода заключается в том, чтобы помочь пользователям писать и читать документацию. Для получения дополнительной информации об этом методе прочитайте страницу https://sembr.org/[Semantic Line Breaks].
+
+Это пример, который не использует "одно предложение на строку".
+
+....
+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.
+....
+
+И вот пример, использующий этот метод.
+
+....
+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.
+....
+
+[[writing-style-acronyms]]
+=== Аббревиатуры
+
+Акроним должен быть определён при первом упоминании в документе, например: «Network Time Protocol (NTP)». После того как акроним определён, используйте только акроним, если контекст не требует полного термина. Обычно акроним определяется один раз в главе или документе.
+
+Все аббревиатуры должны быть заключены в символ `.
+
+[[writing-style-special-characters]]
+== Список специальных символов
+
+Этот список специальных символов показывает правильный синтаксис и результат их использования в документации FreeBSD. Если нужного символа нет в списке, задайте вопрос на {freebsd-doc}.
+
+[.informaltable]
+[cols="1,1,1", frame="none", options="header"]
+|===
+| Имя
+| Синтаксис
+| Выводится
+
+
+| Авторское право (copyright)
+| +(C)+
+| (С)
+
+| Зарегистрировано
+| +(R)+
+| (R)
+
+| Товарный знак
+| +(TM)+
+| (TM)
+
+| Тире
+| +--+
+| --
+
+| Многоточия
+| +...+
+| ...
+
+| Одиночная стрелка вправо
+| +->+
+| ->
+
+| Двойная правая стрелка
+| +=>+
+| =>
+
+| Одиночная стрелка влево
+| +<-+
+| <-
+
+| Двойная левая стрелка
+| +<=+
+| <=
+
+|===
+
+[[writing-style-linting-vale]]
+== Проверка стиля с помощью Vale
+
+Для обеспечения ясности и единообразия во всей документации и на страницах веб-сайта в дерево документации были добавлены стили link:https://vale.sh[Vale]. link:https://vale.sh[Vale] — это мощный линтер для создания пользовательских правил написания текста, который можно использовать в различных сценариях. В настоящее время link:https://vale.sh[Vale] можно применять как инструмент командной строки, в CI/CD-процессах и интегрировать в предпочитаемый редактор.
+
+Следующая таблица описывает текущие названия правил и их соответствующую степень серьёзности.
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Имя
+| Степень серьезности
+
+| FreeBSD.BrandTerms
+| ошибка
+
+| FreeBSD.ConsciousLanguage
+| warning
+
+| FreeBSD.Contractions
+| предложение
+
+| FreeBSD.EOLSpacing
+| warning
+
+| FreeBSD.Hang
+| warning
+
+| FreeBSD.Hyphens
+| warning
+
+| FreeBSD.Spacing
+| ошибка
+
+| FreeBSD.SuperfluousOptArgInLinks
+| предложение
+
+| Vale.Avoid
+| ошибка
+
+| Vale.Repetition
+| ошибка
+
+| Vale.Spelling
+| ошибка
+
+| Vale.Terms
+| ошибка
+
+|===
+
+[[writing-style-linting-vale-rules]]
+=== Текущие правила Vale
+
+. FreeBSD.BrandTerms: В соответствии с правилами авторского права The FreeBSD Foundation, *freebsd* следует писать как *FreeBSD*. Аналогично, у каждого крупного поставщика и компании есть свои правила написания их торговых марок и брендов. Следует проявлять уважение к брендам других и уделять время правильному написанию PostgreSQL, Node.js, Let's Encrypt и т. д. Отсутствующие названия брендов следует добавлять в файл [.filename]#.vale/styles/FreeBSD/BrandTerms.yml# в репозитории `doc`.
+
+. FreeBSD.ConsciousLanguage: Это правило предлагает использовать осознанный язык, чтобы по возможности избегать чувствительных слов, указывающих на цвет кожи, возраст, расу или сексуальную ориентацию людей.
+
+. FreeBSD.Сокращения: Не следует использовать сокращенные слова. Это правило исключает все сокращения и рекомендует использовать полные слова.
+
+. FreeBSD.EOLSpacing: В большинстве документов присутствуют пробелы в конце строк, что не является желательной ситуацией.
+
+. FreeBSD.Hang: Термин `Hang` часто используется для обозначения ситуации, когда приложение перестает отвечать. Это правило предлагает более подходящую формулировку.
+
+. FreeBSD.Дефисы: Часто наречия, оканчивающиеся на 'ly', добавляются с дефисом, что является ошибкой.
+
+. FreeBSD.Расстояние: Часто двойные пробелы трудно заметить невооруженным глазом, и здесь это решается.
+
+. FreeBSD.SuperfluousOptArgInLinks: Рекомендуется оставлять квадратные скобки пустыми в макросах `link:`, если отображаемый текст совпадает с URL.
+
+. Vale.Avoid: Запрещает использование терминов из списка *НЕ ИСПОЛЬЗОВАТЬ* в документации The FreeBSD Project. Если обнаружено слово, которое не должно присутствовать в документации, его следует добавить в файл [.filename]#.vale/styles/Vocab/Terms/reject.txt# в репозитории `doc`. На данный момент список пуст.
+
+. Vale.Repetition: Одни и те же слова часто набираются дважды при отходе от клавиатуры и возвращении к работе. Это правило находит повторяющиеся слова и предупреждает пользователей.
+
+. Vale.Spelling: В настоящее время в документации и на веб-сайте используется смесь написания en_US и en_GB. Vale поставляется со встроенным словарем, который использует строго en_US и не принимает варианты написания en_GB для любых слов.
+
+. Vale.Terms: Обеспечивает соблюдение *ПРЕДПОЧТИТЕЛЬНЫХ* терминов для проекта FreeBSD. В настоящее время список терминов пуст, и специфичные для FreeBSD термины будут добавляться постепенно. Если какое-либо слово считается правильным, но отсутствует в словаре, его следует добавить в файл [.filename]#.vale/styles/Vocab/Terms/accept.txt# в репозитории `doc`.
+
+Дополнительные правила будут введены в будущем по мере необходимости.
+
+[[writing-style-using-vale]]
+=== Использование Vale
+
+link:https://vale.sh[Vale] можно использовать из командной строки, а также из редактора или IDE. Установить package:textproc/vale[] можно следующим образом:
+
+[source, shell]
+....
+$ pkg install vale
+....
+
+[[writing-style-using-vale-commandline]]
+==== Использование Vale в командной строке
+
+Предполагая, что репозиторий `doc` был склонирован в [.filename]#~/doc#, для запуска потребуются следующие команды:
+
+[source, shell]
+....
+% cd ~/doc
+% vale .
+....
+
+[NOTE]
+======
+link:https://vale.sh[Vale] — это программа с высокой нагрузкой на процессор и память из-за специфики приложения, и она может долго не выводить результаты на экран. Лучше запускать её для конкретных папок или файлов, а не для всего репозитория `doc`, так как это уже выполняется в CI-пайплайне.
+======
+
+[[writing-style-using-vale-editors]]
+==== Использование Vale в редакторах
+
+link:https://vale.sh[Vale] работает с основными популярными редакторами, такими как package:editors/vim[], package:editors/emacs[], package:editors/vscode[]. В настоящее время необходимая конфигурация для package:editors/vim[] описана в crossref:editor-config[editor-config-vim, Vim]. Конфигурация для package:editors/emacs[] находится в разработке.
diff --git a/documentation/content/ru/books/fdp-primer/writing-style/_index.po b/documentation/content/ru/books/fdp-primer/writing-style/_index.po
new file mode 100644
index 0000000000..2f20da91ff
--- /dev/null
+++ b/documentation/content/ru/books/fdp-primer/writing-style/_index.po
@@ -0,0 +1,1035 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-20 14:02+0300\n"
+"PO-Revision-Date: 2025-09-09 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksfdp-primerwriting-style_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Стиль написания и некоторые соглашения, используемые в проекте документации FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Writing Style"
+msgstr "Глава 12. Стиль написания"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:14
+#, no-wrap
+msgid "Writing Style"
+msgstr "Стиль написания"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:52
+#, no-wrap
+msgid "Tips"
+msgstr "Советы"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:58
+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:60
+#, no-wrap
+msgid "Be Clear"
+msgstr "Будьте понятны"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:65
+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:69
+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:74
+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 ""
+"Делайте объяснения как можно короче, проще и понятнее. Избегайте пустых "
+"фраз вроде \"для того чтобы\", которые обычно можно заменить на \"чтобы\". "
+"Не используйте снисходительные слова вроде \"по сути\". Избегайте латинских "
+"терминов, таких как \"i.e.\" или \"cf.\", которые могут быть непонятны за "
+"пределами академических или научных кругов."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:78
+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 ""
+"Следует писать в формальном стиле. Необходимо избегать прямого обращения к "
+"читателю. Например, следует использовать формулировку \"скопировать файл в "
+"[.filename]#/tmp#\", а не \"вы можете скопировать файл в [.filename]#/tmp#\"."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:85
+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:88
+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:90
+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:92
+#, no-wrap
+msgid "Be Complete"
+msgstr "Будьте полными"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:98
+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:100
+#, no-wrap
+msgid "Be Concise"
+msgstr "Будьте краткими"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:105
+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:107
+#, no-wrap
+msgid "Guidelines"
+msgstr "Рекомендации"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:110
+msgid ""
+"To promote consistency between the myriad authors of the FreeBSD "
+"documentation, some guidelines have been drawn up for authors to follow."
+msgstr ""
+"Для обеспечения единообразия среди множества авторов документации FreeBSD "
+"были разработаны рекомендации, которым следует придерживаться при написании."
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:111
+#, no-wrap
+msgid "Use American English Spelling"
+msgstr "Используйте американское написание английских слов"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:115
+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 ""
+"Существует несколько вариантов английского языка с разным написанием одних и "
+"тех же слов. Если варианты написания отличаются, используйте американский "
+"английский. Например, «color», а не «colour», «rationalize», а не "
+"«rationalise», и так далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:120
+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:122
+#, no-wrap
+msgid "Do not use contractions"
+msgstr "Не используйте сокращения"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:126
+msgid ""
+"Do not use contractions. Always spell the phrase out in full. \"Don't use "
+"contractions\" is wrong."
+msgstr ""
+"Не используйте сокращения. Всегда пишите фразу полностью. \"Don't use "
+"contractions\" является неправильным вариантом."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:128
+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:129
+#, no-wrap
+msgid "Use the serial comma"
+msgstr "Используйте серийную запятую"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:132
+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 ""
+"В списке элементов внутри абзаца разделяйте каждый элемент запятой. "
+"Последний элемент отделяйте от остальных запятой и словом \"and\"."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:134
+msgid "For example:"
+msgstr "Например:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:136
+msgid "This is a list of one, two and three items."
+msgstr ""
+"This is a list of one, two and three items (Вот список из одного, двух и "
+"трёх элементов)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:138
+msgid ""
+"Is this a list of three items, \"one\", \"two\", and \"three\", or a list of "
+"two items, \"one\" and \"two and three\"?"
+msgstr ""
+"Это список из трех элементов: \"one\", \"two\" и \"three\" или список из "
+"двух элементов: \"one\" и \"two and three\"?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:140
+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:142
+msgid "This is a list of one, two, and three items."
+msgstr ""
+"This is a list of one, two, and three items (Вот список из одного, двух и "
+"трёх элементов)."
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:142
+#, no-wrap
+msgid "Avoid redundant phrases"
+msgstr "Избегайте избыточных фраз"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:145
+msgid ""
+"Do not use redundant phrases. In particular, \"the command\", \"the file\", "
+"and \"man command\" are often redundant."
+msgstr ""
+"Избегайте избыточных фраз. В частности, \"команда\", \"файл\" и \"man "
+"команда\" часто избыточны."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:147
+msgid "For example, commands:"
+msgstr "Например, команды:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:149
+msgid "Wrong: Use the `git` command to update sources."
+msgstr "Неверно: Используйте команду `git` для обновления исходного кода."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:151
+msgid "Right: Use `git` to update sources."
+msgstr "Правильно: Используйте `git` для обновления исходников."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:153
+msgid "Filenames:"
+msgstr "Имена файлов:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:155
+msgid "Wrong: ... in the filename [.filename]#/etc/rc.local#..."
+msgstr "Неверно: ... в имени файла [.filename]#/etc/rc.local#..."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:157
+msgid "Right: ... in [.filename]#/etc/rc.local#..."
+msgstr "Правильно: ... в [.filename]#/etc/rc.local#..."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:159
+msgid ""
+"Manual page references (the second example uses `man:[]` with the man:csh[1] "
+"entity):"
+msgstr ""
+"Ссылки на страницы Справочника (во втором примере используется `man:[]` с "
+"сущностью man:csh[1]):"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:161
+msgid "Wrong: See `man csh` for more information."
+msgstr "Неправильно: Дополнительную информацию смотрите в `man csh`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:163
+msgid "Right: See man:csh[1]."
+msgstr "Правильно: См. man:csh[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:165
+msgid ""
+"For more information about writing style, see http://www.bartleby.com/141/"
+"[Elements of Style] by William Strunk."
+msgstr ""
+"Для получения дополнительной информации о стиле написания текстов см. http://"
+"www.bartleby.com/141/[«Элементы стиля»] Уильяма Странка."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:167
+#, no-wrap
+msgid "Style Guide"
+msgstr "Руководство по стилю"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:170
+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:172
+#, no-wrap
+msgid "One sentence per line"
+msgstr "Одно предложение на строку"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:177
+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 ""
+"Используйте семантические разрывы строк в документации, метод, называемый "
+"\"одно предложение на строку\". Идея этого метода заключается в том, "
+"чтобы помочь пользователям писать и читать документацию. Для получения "
+"дополнительной информации об этом методе прочитайте страницу https://"
+"sembr.org/[Semantic Line Breaks]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:179
+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:182
+#, 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:185
+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:189
+#, 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 ""
+"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:192
+#, no-wrap
+msgid "Acronyms"
+msgstr "Аббревиатуры"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:197
+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 ""
+"Акроним должен быть определён при первом упоминании в документе, например: "
+"«Network Time Protocol (NTP)». После того как акроним определён, используйте "
+"только акроним, если контекст не требует полного термина. Обычно акроним "
+"определяется один раз в главе или документе."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:199
+msgid "All acronyms should be enclosed using the ` character."
+msgstr "Все аббревиатуры должны быть заключены в символ `."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:201
+#, no-wrap
+msgid "Special Character List"
+msgstr "Список специальных символов"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:205
+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 ""
+"Этот список специальных символов показывает правильный синтаксис и результат "
+"их использования в документации FreeBSD. Если нужного символа нет в списке, "
+"задайте вопрос на {freebsd-doc}."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:210
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:265
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:211
+#, no-wrap
+msgid "Syntax"
+msgstr "Синтаксис"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:214
+#, no-wrap
+msgid "Rendered"
+msgstr "Выводится"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:215
+#, no-wrap
+msgid "Copyright"
+msgstr "Авторское право (copyright)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:216
+#, no-wrap
+msgid "+(C)+"
+msgstr "+(C)+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:218
+#, no-wrap
+msgid "(C)"
+msgstr "(С)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:219
+#, no-wrap
+msgid "Registered"
+msgstr "Зарегистрировано"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:220
+#, no-wrap
+msgid "+(R)+"
+msgstr "+(R)+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:222
+#, no-wrap
+msgid "(R)"
+msgstr "(R)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:223
+#, no-wrap
+msgid "Trademark"
+msgstr "Товарный знак"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:224
+#, no-wrap
+msgid "+(TM)+"
+msgstr "+(TM)+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:226
+#, no-wrap
+msgid "(TM)"
+msgstr "(TM)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:227
+#, no-wrap
+msgid "Em dash"
+msgstr "Тире"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:228
+#, no-wrap
+msgid "+--+"
+msgstr "+--+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:230
+#, no-wrap
+msgid "--"
+msgstr "--"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:231
+#, no-wrap
+msgid "Ellipses"
+msgstr "Многоточия"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:232
+#, no-wrap
+msgid "+...+"
+msgstr "+...+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:234
+#, no-wrap
+msgid "..."
+msgstr "..."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:235
+#, no-wrap
+msgid "Single right arrow"
+msgstr "Одиночная стрелка вправо"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:236
+#, no-wrap
+msgid "+->+"
+msgstr "+->+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:238
+#, no-wrap
+msgid "->"
+msgstr "->"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:239
+#, no-wrap
+msgid "Double right arrow"
+msgstr "Двойная правая стрелка"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:240
+#, no-wrap
+msgid "+=>+"
+msgstr "+=>+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:242
+#, no-wrap
+msgid "=>"
+msgstr "=>"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:243
+#, no-wrap
+msgid "Single left arrow"
+msgstr "Одиночная стрелка влево"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:244
+#, no-wrap
+msgid "+<-+"
+msgstr "+<-+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:246
+#, no-wrap
+msgid "<-"
+msgstr "<-"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:247
+#, no-wrap
+msgid "Double left arrow"
+msgstr "Двойная левая стрелка"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:248
+#, no-wrap
+msgid "+<=+"
+msgstr "+<=+"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:250
+#, no-wrap
+msgid "<="
+msgstr "<="
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:253
+#, no-wrap
+msgid "Linting with Vale"
+msgstr "Проверка стиля с помощью Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:258
+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 ""
+"Для обеспечения ясности и единообразия во всей документации и на страницах "
+"веб-сайта в дерево документации были добавлены стили link:https://"
+"vale.sh[Vale]. link:https://vale.sh[Vale] — это мощный линтер для создания "
+"пользовательских правил написания текста, который можно использовать в "
+"различных сценариях. В настоящее время link:https://vale.sh[Vale] можно "
+"применять как инструмент командной строки, в CI/CD-процессах и интегрировать "
+"в предпочитаемый редактор."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:260
+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:267
+#, no-wrap
+msgid "Severity"
+msgstr "Степень серьезности"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:268
+#, no-wrap
+msgid "FreeBSD.BrandTerms"
+msgstr "FreeBSD.BrandTerms"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:270
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:288
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:294
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:297
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:300
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:303
+#, no-wrap
+msgid "error"
+msgstr "ошибка"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:271
+#, no-wrap
+msgid "FreeBSD.ConsciousLanguage"
+msgstr "FreeBSD.ConsciousLanguage"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:273
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:279
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:282
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:285
+#, no-wrap
+msgid "warning"
+msgstr "warning"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:274
+#, no-wrap
+msgid "FreeBSD.Contractions"
+msgstr "FreeBSD.Contractions"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:276
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:291
+#, no-wrap
+msgid "suggestion"
+msgstr "предложение"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:277
+#, no-wrap
+msgid "FreeBSD.EOLSpacing"
+msgstr "FreeBSD.EOLSpacing"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:280
+#, no-wrap
+msgid "FreeBSD.Hang"
+msgstr "FreeBSD.Hang"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:283
+#, no-wrap
+msgid "FreeBSD.Hyphens"
+msgstr "FreeBSD.Hyphens"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:286
+#, no-wrap
+msgid "FreeBSD.Spacing"
+msgstr "FreeBSD.Spacing"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:289
+#, no-wrap
+msgid "FreeBSD.SuperfluousOptArgInLinks"
+msgstr "FreeBSD.SuperfluousOptArgInLinks"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:292
+#, no-wrap
+msgid "Vale.Avoid"
+msgstr "Vale.Avoid"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:295
+#, no-wrap
+msgid "Vale.Repetition"
+msgstr "Vale.Repetition"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:298
+#, no-wrap
+msgid "Vale.Spelling"
+msgstr "Vale.Spelling"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:301
+#, no-wrap
+msgid "Vale.Terms"
+msgstr "Vale.Terms"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:306
+#, no-wrap
+msgid "Current Vale Rules"
+msgstr "Текущие правила Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:312
+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: В соответствии с правилами авторского права The FreeBSD "
+"Foundation, *freebsd* следует писать как *FreeBSD*. Аналогично, у каждого "
+"крупного поставщика и компании есть свои правила написания их торговых марок "
+"и брендов. Следует проявлять уважение к брендам других и уделять время "
+"правильному написанию PostgreSQL, Node.js, Let's Encrypt и т. д. "
+"Отсутствующие названия брендов следует добавлять в файл [.filename]#.vale/"
+"styles/FreeBSD/BrandTerms.yml# в репозитории `doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:314
+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: Это правило предлагает использовать осознанный "
+"язык, чтобы по возможности избегать чувствительных слов, указывающих на цвет "
+"кожи, возраст, расу или сексуальную ориентацию людей."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:317
+msgid ""
+"FreeBSD.Contractions: Contracted words should not be used. This rule avoids "
+"all contractions and suggests full words."
+msgstr ""
+"FreeBSD.Сокращения: Не следует использовать сокращенные слова. Это правило "
+"исключает все сокращения и рекомендует использовать полные слова."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:319
+msgid ""
+"FreeBSD.EOLSpacing: In most of the documents EOL spacing is present which is "
+"not the desirable situation."
+msgstr ""
+"FreeBSD.EOLSpacing: В большинстве документов присутствуют пробелы в конце "
+"строк, что не является желательной ситуацией."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:322
+msgid ""
+"FreeBSD.Hang: `Hang` is often used to mean that the application has stopped "
+"responding. This rule proposes better wording."
+msgstr ""
+"FreeBSD.Hang: Термин `Hang` часто используется для обозначения ситуации, "
+"когда приложение перестает отвечать. Это правило предлагает более "
+"подходящую формулировку."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:324
+msgid ""
+"FreeBSD.Hyphens: Often adverbs ending with 'ly' are added with a hyphen "
+"which is wrong."
+msgstr ""
+"FreeBSD.Дефисы: Часто наречия, оканчивающиеся на 'ly', добавляются с "
+"дефисом, что является ошибкой."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:326
+msgid ""
+"FreeBSD.Spacing: Often double spaces are hard to catch with the naked eye "
+"and this is addressed here."
+msgstr ""
+"FreeBSD.Расстояние: Часто двойные пробелы трудно заметить невооруженным "
+"глазом, и здесь это решается."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:328
+msgid ""
+"FreeBSD.SuperfluousOptArgInLinks: Suggest to empty square brackets in "
+"`link:` macros when the displayed text coincides with the URL."
+msgstr ""
+"FreeBSD.SuperfluousOptArgInLinks: Рекомендуется оставлять квадратные скобки "
+"пустыми в макросах `link:`, если отображаемый текст совпадает с URL."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:332
+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: Запрещает использование терминов из списка *НЕ ИСПОЛЬЗОВАТЬ* в "
+"документации The FreeBSD Project. Если обнаружено слово, которое не должно "
+"присутствовать в документации, его следует добавить в файл [.filename]#.vale/"
+"styles/Vocab/Terms/reject.txt# в репозитории `doc`. На данный момент список "
+"пуст."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:335
+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: Одни и те же слова часто набираются дважды при отходе от "
+"клавиатуры и возвращении к работе. Это правило находит повторяющиеся слова и "
+"предупреждает пользователей."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:338
+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: В настоящее время в документации и на веб-сайте используется "
+"смесь написания en_US и en_GB. Vale поставляется со встроенным словарем, "
+"который использует строго en_US и не принимает варианты написания en_GB для "
+"любых слов."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:342
+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: Обеспечивает соблюдение *ПРЕДПОЧТИТЕЛЬНЫХ* терминов для проекта "
+"FreeBSD. В настоящее время список терминов пуст, и специфичные для FreeBSD "
+"термины будут добавляться постепенно. Если какое-либо слово считается "
+"правильным, но отсутствует в словаре, его следует добавить в файл "
+"[.filename]#.vale/styles/Vocab/Terms/accept.txt# в репозитории `doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:344
+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:346
+#, no-wrap
+msgid "Using Vale"
+msgstr "Использование Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:350
+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 ""
+"link:https://vale.sh[Vale] можно использовать из командной строки, а также "
+"из редактора или IDE. Установить package:textproc/vale[] можно следующим "
+"образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:354
+#, no-wrap
+msgid "$ pkg install vale\n"
+msgstr "$ pkg install vale\n"
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:357
+#, no-wrap
+msgid "Using Vale on the command line"
+msgstr "Использование Vale в командной строке"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:360
+msgid ""
+"Assuming that the `doc` repository was cloned into [.filename]#~/doc# the "
+"following commands are required to run:"
+msgstr ""
+"Предполагая, что репозиторий `doc` был склонирован в [.filename]#~/doc#, для "
+"запуска потребуются следующие команды:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:365
+#, 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:371
+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 ""
+"link:https://vale.sh[Vale] — это программа с высокой нагрузкой на процессор "
+"и память из-за специфики приложения, и она может долго не выводить "
+"результаты на экран. Лучше запускать её для конкретных папок или файлов, а "
+"не для всего репозитория `doc`, так как это уже выполняется в CI-пайплайне."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:374
+#, no-wrap
+msgid "Using Vale in editors"
+msgstr "Использование Vale в редакторах"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:378
+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 ""
+"link:https://vale.sh[Vale] работает с основными популярными редакторами, "
+"такими как package:editors/vim[], package:editors/emacs[], package:editors/"
+"vscode[]. В настоящее время необходимая конфигурация для package:editors/"
+"vim[] описана в crossref:editor-config[editor-config-vim, Vim]. Конфигурация "
+"для package:editors/emacs[] находится в разработке."
diff --git a/documentation/content/ru/books/porters-handbook/_index.adoc b/documentation/content/ru/books/porters-handbook/_index.adoc
index 5b066cb5b0..0446d79b28 100644
--- a/documentation/content/ru/books/porters-handbook/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/_index.adoc
@@ -1,15 +1,19 @@
---
-title: Руководство FreeBSD по созданию портов
-authors:
- - author: The FreeBSD Documentation Project
-copyright: 2000-2020 The FreeBSD Documentation Project
-trademarks: ["freebsd", "sun", "unix", "general"]
-next: books/porters-handbook/porting-why
add_single_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+bookOrder: 15
+copyright: '2000-2023 The FreeBSD Documentation Project'
+description: 'Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение'
+next: books/porters-handbook/porting-why
+params:
+ path: /books/porters-handbook/
showBookMenu: true
+tags: "[\"FreeBSD Porter's Handbook\", \"Porting\", \"FreeBSD Ports Collection\"]"
+title: 'Руководство FreeBSD по созданию портов'
+trademarks: ["freebsd", "sun", "unix", "general"]
weight: 0
-params:
- path: "/books/porters-handbook/"
---
= Руководство FreeBSD по созданию портов
diff --git a/documentation/content/ru/books/porters-handbook/_index.po b/documentation/content/ru/books/porters-handbook/_index.po
new file mode 100644
index 0000000000..1aa07698c1
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/_index.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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbook_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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:18
+#, no-wrap
+msgid "FreeBSD Porter's Handbook"
+msgstr "Руководство FreeBSD по созданию портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/_index.adoc:49
+msgid "'''"
+msgstr "'''"
diff --git a/documentation/content/ru/books/porters-handbook/book.adoc b/documentation/content/ru/books/porters-handbook/book.adoc
index 73c6b67672..84bedca43a 100644
--- a/documentation/content/ru/books/porters-handbook/book.adoc
+++ b/documentation/content/ru/books/porters-handbook/book.adoc
@@ -1,13 +1,16 @@
---
-title: Руководство FreeBSD по созданию портов
-authors:
- - author: The FreeBSD Documentation Project
-copyright: 2000-2020 The FreeBSD Documentation Project
-trademarks: ["freebsd", "sun", "unix", "general"]
add_split_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2000-2023 The FreeBSD Documentation Project'
+description: 'Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение'
+tags: "[\"FreeBSD Porter's Handbook\", \"Porting\", \"FreeBSD Ports Collection\"]"
+title: 'Руководство FreeBSD по созданию портов'
+trademarks: ["freebsd", "sun", "unix", "general"]
---
-= FreeBSD Porter's Handbook
+= Руководство FreeBSD по созданию портов
:doctype: book
:toc: macro
:toclevels: 2
@@ -52,6 +55,7 @@ include::{chapters-path}quick-porting/_index.adoc[leveloffset=+1]
include::{chapters-path}slow-porting/_index.adoc[leveloffset=+1]
include::{chapters-path}makefiles/_index.adoc[leveloffset=+1]
include::{chapters-path}special/_index.adoc[leveloffset=+1]
+include::{chapters-path}flavors/_index.adoc[leveloffset=+1]
include::{chapters-path}plist/_index.adoc[leveloffset=+1]
include::{chapters-path}pkg-files/_index.adoc[leveloffset=+1]
include::{chapters-path}testing/_index.adoc[leveloffset=+1]
@@ -59,6 +63,7 @@ include::{chapters-path}upgrading/_index.adoc[leveloffset=+1]
include::{chapters-path}security/_index.adoc[leveloffset=+1]
include::{chapters-path}porting-dads/_index.adoc[leveloffset=+1]
include::{chapters-path}porting-samplem/_index.adoc[leveloffset=+1]
+include::{chapters-path}order/_index.adoc[leveloffset=+1]
include::{chapters-path}keeping-up/_index.adoc[leveloffset=+1]
include::{chapters-path}uses/_index.adoc[leveloffset=+1]
include::{chapters-path}versions/_index.adoc[leveloffset=+1]
diff --git a/documentation/content/ru/books/porters-handbook/book.po b/documentation/content/ru/books/porters-handbook/book.po
new file mode 100644
index 0000000000..2994c7daaa
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/book.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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookbook/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Руководство FreeBSD по созданию портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/book.adoc:48
+msgid "'''"
+msgstr "'''"
diff --git a/documentation/content/ru/books/porters-handbook/flavors/_index.adoc b/documentation/content/ru/books/porters-handbook/flavors/_index.adoc
new file mode 100644
index 0000000000..f69bf3938d
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/flavors/_index.adoc
@@ -0,0 +1,359 @@
+---
+description: 'Флейворы — это способ создания нескольких вариаций порта'
+next: books/porters-handbook/plist
+params:
+ path: /books/porters-handbook/flavors/
+prev: books/porters-handbook/special
+showBookMenu: true
+tags: ["Ports", "Flavors", "introduction", "how-to", "guide"]
+title: 'Глава 7. Флейворы'
+weight: 7
+---
+
+[[flavors]]
+= Флейворы
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 7
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/porters-handbook/
+
+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::[]
+
+[[flavors-intro]]
+== Введение в флейворы (Flavors)
+
+Флейворы (Flavors) — это способ создания нескольких вариаций порта. Порт собирается несколько раз с различными вариациями.
+
+Например, порт может иметь обычную версию с множеством функций и значительным количеством зависимостей, а также облегчённую "lite"-версию только с базовыми функциями и минимальными зависимостями.
+
+Еще одним примером может быть порт с вариантом GTK и вариантом QT, в зависимости от используемого набора инструментов.
+
+[[flavors-using]]
+== Использование FLAVORS
+
+Чтобы объявить порт с несколькими флейворами, добавьте `FLAVORS` в его [.filename]#Makefile#. Первый вариант в `FLAVORS` является вариантом по умолчанию.
+
+[TIP]
+====
+Это может помочь упростить логику [.filename]#Makefile#, также определив `FLAVOR` как:
+
+[.programlisting]
+....
+FLAVOR?= ${FLAVORS:[1]}
+....
+====
+
+[IMPORTANT]
+====
+Чтобы отличать флейворы от опций, которые всегда обозначаются заглавными буквами, названия флейворов могут содержать _только_ строчные буквы, цифры и символ подчёркивания `_`.
+====
+
+[[flavors-using-ex1]]
+.Основы использования флейворов
+[example]
+====
+Если порт имеет "облегченный" подчиненный порт (lite slave port), подчиненный порт можно удалить, а порт преобразовать во флейворы с помощью:
+
+[.programlisting]
+....
+FLAVORS= default lite
+lite_PKGNAMESUFFIX= -lite
+[...]
+.if ${FLAVOR:U} != lite
+[enable non lite features]
+.endif
+....
+
+====
+
+[[flavors-using-ex2]]
+.Еще один пример базового использования флейворов
+[example]
+====
+Если порт имеет подчиненный порт `-nox11`, подчиненный порт можно удалить, а порт преобразовать в флейворы с помощью:
+
+[.programlisting]
+....
+FLAVORS= x11 nox11
+FLAVOR?= ${FLAVORS:[1]}
+nox11_PKGNAMESUFFIX= -nox11
+[...]
+.if ${FLAVOR} == x11
+[enable x11 features]
+.endif
+....
+
+====
+
+[[flavors-using-ex3]]
+.Использование флейворов в более сложных примерах
+[example]
+====
+Вот слегка отредактированный отрывок из того, что присутствует в пакете package:devel/libpeas[], порте, который использует crossref:flavors[flavors-auto-python,флейворы Python]. При стандартных версиях Python 2 и 3, а именно 2.7 и 3.6, он автоматически получит `FLAVORS=py27 py36`
+
+[.programlisting]
+....
+USES= gnome python
+USE_PYTHON= flavors
+
+.if ${FLAVOR:Upy27:Mpy2*}
+USE_GNOME= pygobject3
+
+CONFIGURE_ARGS+= --enable-python2 --disable-python3
+
+BUILD_WRKSRC= ${WRKSRC}/loaders/python
+INSTALL_WRKSRC= ${WRKSRC}/loaders/python
+.else # py3*
+USE_GNOME+= py3gobject3
+
+CONFIGURE_ARGS+= --disable-python2 --enable-python3 \
+ ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config
+
+BUILD_WRKSRC= ${WRKSRC}/loaders/python3
+INSTALL_WRKSRC= ${WRKSRC}/loaders/python3
+.endif
+
+py34_PLIST= ${.CURDIR}/pkg-plist-py3
+py35_PLIST= ${.CURDIR}/pkg-plist-py3
+py36_PLIST= ${.CURDIR}/pkg-plist-py3
+....
+
+Этот порт не использует `USE_PYTHON=distutils`, но всё равно требует флейворы Python. Чтобы избежать ошибки в man:make[1] из-за пустого значения `FLAVOR`, используйте `${FLAVOR:U}` в сравнениях строк вместо `${FLAVOR}`. Привязки Gnome Python gobject3 имеют два разных названия: pygobject3 для Python 2 и py3gobject3 для Python 3. Скрипт `configure` должен выполняться в [.filename]#${WRKSRC}#, но нас интересует только сборка и установка частей программного обеспечения для Python 2 или Python 3, поэтому установите базовые каталоги сборки и установки соответствующим образом. Подсказка о правильном пути к конфигурационному скрипту Python 3. Список упаковки отличается при сборке с Python 3. Поскольку есть три возможные версии Python 3, установите `PLIST` для всех трёх с помощью crossref:flavors[flavors-using-helpers, вспомогательные инструменты флейворов].
+====
+
+[[flavors-using-helpers]]
+=== Вспомогательные инструменты для флейворов (Flavors Helpers)
+
+Чтобы упростить написание [.filename]#Makefile#, существуют несколько вспомогательных инструментов (помощников) флейворов.
+
+Этот список помощников установит их переменную:
+
+* `__flavor___PKGNAMEPREFIX`
+* `__flavor___PKGNAMESUFFIX`
+* `__flavor___PLIST`
+* `__flavor___DESCR`
+
+Этот список помощников будет добавлен к их переменной:
+
+* `__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]]
+.Специфичный для флейвора `PKGNAME`
+[example]
+====
+Поскольку все пакеты должны иметь уникальные имена, флейворы должны изменять их, используя `__flavor___PKGNAMEPREFIX` и `__flavor___PKGNAMESUFFIX`, что упрощает задачу:
+
+[.programlisting]
+....
+FLAVORS= normal lite
+lite_PKGNAMESUFFIX= -lite
+....
+
+====
+
+[[flavors-auto-php]]
+== `USES=php` и флейворы
+
+При использовании crossref:uses[uses-php,`php`] с одним из этих аргументов: `phpize`, `ext`, `zend` или `pecl`, порт автоматически получит заполненный параметр `FLAVORS` с версиями PHP, которые он поддерживает.
+
+[[flavors-auto-php-ex1]]
+.Простое расширение `USES=php`
+[example]
+====
+Это создаст пакет для всех поддерживаемых версий:
+
+[.programlisting]
+....
+PORTNAME= some-ext
+PORTVERSION= 0.0.1
+PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX}
+
+USES= php:ext
+....
+
+Это создаст пакет для всех поддерживаемых версий, кроме 7.2:
+
+[.programlisting]
+....
+PORTNAME= some-ext
+PORTVERSION= 0.0.1
+PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX}
+
+USES= php:ext
+IGNORE_WITH_PHP= 72
+....
+
+====
+
+[[flavors-auto-php-app]]
+=== Версии PHP с приложениями PHP
+
+Приложения PHP также могут быть созданы с использованием флейворов.
+
+Это позволяет создавать пакеты для всех версий PHP, чтобы пользователи могли использовать их с любой необходимой версией на своих серверах.
+
+[IMPORTANT]
+====
+Приложения PHP, которые используют флейворы, _обязаны_ добавлять `PHP_PKGNAMESUFFIX` к именам своих пакетов.
+====
+
+[[flavors-auto-php-app-ex1]]
+.Добавление флейворов в PHP-приложения
+[example]
+====
+Добавление поддержки флейворов в PHP-приложение просто:
+
+[.programlisting]
+....
+PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX}
+
+USES= php:flavors
+....
+
+====
+
+[TIP]
+====
+При добавлении зависимости к порту с вариантом PHP используйте `@${PHP_FLAVOR}`. _Никогда_ не используйте `FLAVOR` напрямую.
+====
+
+[[flavors-auto-python]]
+== `USES=python` и флейворы
+
+При использовании crossref:uses[uses-python,`python`] и `USE_PYTHON=distutils` порт автоматически получит заполненные `FLAVORS` с версиями Python, которые он поддерживает.
+
+[[flavors-auto-python-ex1]]
+.Простой `USES=python`
+[example]
+====
+Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами:
+
+[.programlisting]
+....
+USES= python
+USE_PYTHON= distutils
+....
+
+получит следующие флейворы: `py27` и `py36`.
+
+[.programlisting]
+....
+USES= python
+USE_PYTHON= distutils allflavors
+....
+
+получит следующие флейворы: `py27`, `py34`, `py35` и `py36`.
+====
+
+[[flavors-auto-python-ex2]]
+.`USES=python` с требованиями к версии
+[example]
+====
+Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами:
+
+[.programlisting]
+....
+USES= python:-3.5
+USE_PYTHON= distutils
+....
+
+получит следующие флейвор: `py27`.
+
+[.programlisting]
+....
+USES= python:-3.5
+USE_PYTHON= distutils allflavors
+....
+
+получит следующие флейворы: `py27`, `py34` и `py35`.
+
+[.programlisting]
+....
+USES= python:3.4+
+USE_PYTHON= distutils
+....
+
+получит следующий флейвор: `py36`.
+
+[.programlisting]
+....
+USES= python:3.4+
+USE_PYTHON= distutils allflavors
+....
+
+получит следующие флейворы: `py34`, `py35` и `py36`.
+====
+
+`PY_FLAVOR` доступен для указания правильной версии модулей Python. Все зависимости от вариантов портов Python должны использовать `PY_FLAVOR`, а не `FLAVOR` напрямую.
+
+[[flavors-auto-python-ex3]]
+.Для порта, не использующего `distutils`
+[example]
+====
+Если версия Python 3 по умолчанию — 3.6, следующая команда установит `PY_FLAVOR` в значение `py36`:
+
+[.programlisting]
+....
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}
+
+USES= python:3.5+
+....
+
+====
+
+[[flavors-auto-lua]]
+== `USES=lua` и флейворы
+
+При использовании crossref:uses[uses-lua,`lua:module`] или crossref:uses[uses-lua,`lua:flavors`] порт автоматически получит заполненный параметр `FLAVORS` с версиями Lua, которые он поддерживает. Однако предполагается, что обычные приложения (а не модули Lua) не должны использовать эту возможность; большинству приложений, которые встраивают или иным образом используют Lua, следует просто указывать `USES=lua`.
+
+`LUA_FLAVOR` доступен (и должен использоваться) для зависимости от правильной версии зависимостей, независимо от того, использовал ли порт параметры `flavors` или `module`.
+
+См. crossref:special[using-lua,Использование Lua] для получения дополнительной информации.
+
+[[flavors-auto-guile]]
+== `USES=guile` и флейворы
+
+При использовании crossref:uses[uses-guile,`guile:flavors`] порт автоматически получит заполненное поле `FLAVORS` с версиями Guile, которые он поддерживает. Однако не предполагается, что обычные приложения должны использовать эту возможность; она в первую очередь предназначена для библиотек и расширений, таких как `guile-lib` или `guile-cairo`.
+
+`GUILE_FLAVOR` доступен (и должен использоваться) для зависимости от правильной версии зависимостей с флейворами, независимо от того, использовал ли порт параметр `flavors` или нет.
+
+См. crossref:special[using-guile,Использование Guile] для получения дополнительной информации.
diff --git a/documentation/content/ru/books/porters-handbook/flavors/_index.po b/documentation/content/ru/books/porters-handbook/flavors/_index.po
new file mode 100644
index 0000000000..9e9ed2fcb6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/flavors/_index.po
@@ -0,0 +1,801 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-13 19:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookflavors_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 Hash Value: title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Flavors"
+msgstr "Глава 7. Флейворы"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:14
+#, no-wrap
+msgid "Flavors"
+msgstr "Флейворы"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to Flavors"
+msgstr "Введение в флейворы (Flavors)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:56
+msgid ""
+"Flavors are a way to have multiple variations of a port. The port is built "
+"multiple times, with variations."
+msgstr ""
+"Флейворы (Flavors) — это способ создания нескольких вариаций порта. Порт "
+"собирается несколько раз с различными вариациями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:58
+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 ""
+"Например, порт может иметь обычную версию с множеством функций и "
+"значительным количеством зависимостей, а также облегчённую \"lite\"-версию "
+"только с базовыми функциями и минимальными зависимостями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:60
+msgid ""
+"Another example could be, a port can have a GTK flavor and a QT flavor, "
+"depending on which toolkit it uses."
+msgstr ""
+"Еще одним примером может быть порт с вариантом GTK и вариантом QT, в "
+"зависимости от используемого набора инструментов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:62
+#, no-wrap
+msgid "Using FLAVORS"
+msgstr "Использование FLAVORS"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:66
+msgid ""
+"To declare a port having multiple flavors, add `FLAVORS` to its "
+"[.filename]#Makefile#. The first flavor in `FLAVORS` is the default flavor."
+msgstr ""
+"Чтобы объявить порт с несколькими флейворами, добавьте `FLAVORS` в его "
+"[.filename]#Makefile#. Первый вариант в `FLAVORS` является вариантом по "
+"умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:70
+msgid ""
+"It can help simplify the logic of the [.filename]#Makefile# to also define "
+"`FLAVOR` as:"
+msgstr ""
+"Это может помочь упростить логику [.filename]#Makefile#, также определив "
+"`FLAVOR` как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:74
+#, no-wrap
+msgid "FLAVOR?=\t${FLAVORS:[1]}\n"
+msgstr "FLAVOR?=\t${FLAVORS:[1]}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:80
+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:83
+#, no-wrap
+msgid "Basic Flavors Usage"
+msgstr "Основы использования флейворов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:87
+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 ""
+"Если порт имеет \"облегченный\" подчиненный порт (lite slave port), "
+"подчиненный порт можно удалить, а порт преобразовать во флейворы с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:96
+#, 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 ""
+"FLAVORS=\tdefault lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+"[...]\n"
+".if ${FLAVOR:U} != lite\n"
+"[enable non lite features]\n"
+".endif\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:101
+#, no-wrap
+msgid "Another Basic Flavors Usage"
+msgstr "Еще один пример базового использования флейворов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:105
+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 ""
+"Если порт имеет подчиненный порт `-nox11`, подчиненный порт можно удалить, а "
+"порт преобразовать в флейворы с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:115
+#, 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 ""
+"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"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:120
+#, no-wrap
+msgid "More Complex Flavors Usage"
+msgstr "Использование флейворов в более сложных примерах"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:126
+msgid ""
+"Here is a slightly edited excerpt of what is present in package:devel/"
+"libpeas[], a port that uses the crossref:flavors[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 ""
+"Вот слегка отредактированный отрывок из того, что присутствует в пакете "
+"package:devel/libpeas[], порте, который использует crossref:flavors[flavors-"
+"auto-python,флейворы Python]. При стандартных версиях Python 2 и 3, а именно "
+"2.7 и 3.6, он автоматически получит `FLAVORS=py27 py36`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:131
+#, no-wrap
+msgid ""
+"USES=\t\tgnome python\n"
+"USE_PYTHON=\tflavors \n"
+msgstr ""
+"USES=\t\tgnome python\n"
+"USE_PYTHON=\tflavors \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:134
+#, no-wrap
+msgid ""
+".if ${FLAVOR:Upy27:Mpy2*} \n"
+"USE_GNOME=\tpygobject3 \n"
+msgstr ""
+".if ${FLAVOR:Upy27:Mpy2*} \n"
+"USE_GNOME=\tpygobject3 \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:136
+#, no-wrap
+msgid "CONFIGURE_ARGS+=\t--enable-python2 --disable-python3\n"
+msgstr "CONFIGURE_ARGS+=\t--enable-python2 --disable-python3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:141
+#, 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 ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python \n"
+".else # py3*\n"
+"USE_GNOME+=\tpy3gobject3 \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:144
+#, 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 ""
+"CONFIGURE_ARGS+=\t--disable-python2 --enable-python3 \\\n"
+"\t\t\tac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:148
+#, no-wrap
+msgid ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+".endif\n"
+msgstr ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:152
+#, 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 ""
+"py34_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py35_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py36_PLIST=\t${.CURDIR}/pkg-plist-py3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:162
+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 crossref:flavors[flavors-using-"
+"helpers,helper]."
+msgstr ""
+"Этот порт не использует `USE_PYTHON=distutils`, но всё равно требует "
+"флейворы Python. Чтобы избежать ошибки в man:make[1] из-за пустого значения "
+"`FLAVOR`, используйте `${FLAVOR:U}` в сравнениях строк вместо `${FLAVOR}`. "
+"Привязки Gnome Python gobject3 имеют два разных названия: pygobject3 для "
+"Python 2 и py3gobject3 для Python 3. Скрипт `configure` должен выполняться в "
+"[.filename]#${WRKSRC}#, но нас интересует только сборка и установка частей "
+"программного обеспечения для Python 2 или Python 3, поэтому установите "
+"базовые каталоги сборки и установки соответствующим образом. Подсказка о "
+"правильном пути к конфигурационному скрипту Python 3. Список упаковки "
+"отличается при сборке с Python 3. Поскольку есть три возможные версии Python "
+"3, установите `PLIST` для всех трёх с помощью crossref:flavors[flavors-using-"
+"helpers, вспомогательные инструменты флейворов]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:165
+#, no-wrap
+msgid "Flavors Helpers"
+msgstr "Вспомогательные инструменты для флейворов (Flavors Helpers)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:168
+msgid ""
+"To make the [.filename]#Makefile# easier to write, a few flavors helpers "
+"exist."
+msgstr ""
+"Чтобы упростить написание [.filename]#Makefile#, существуют несколько "
+"вспомогательных инструментов (помощников) флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:170
+msgid "This list of helpers will set their variable:"
+msgstr "Этот список помощников установит их переменную:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:172
+msgid "`__flavor___PKGNAMEPREFIX`"
+msgstr "`__flavor___PKGNAMEPREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:173
+msgid "`__flavor___PKGNAMESUFFIX`"
+msgstr "`__flavor___PKGNAMESUFFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:174
+msgid "`__flavor___PLIST`"
+msgstr "`__flavor___PLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:175
+msgid "`__flavor___DESCR`"
+msgstr "`__flavor___DESCR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:177
+msgid "This list of helpers will append to their variable:"
+msgstr "Этот список помощников будет добавлен к их переменной:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:179
+msgid "`__flavor___CONFLICTS`"
+msgstr "`__flavor___CONFLICTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:180
+msgid "`__flavor___CONFLICTS_BUILD`"
+msgstr "`__flavor___CONFLICTS_BUILD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:181
+msgid "`__flavor___CONFLICTS_INSTALL`"
+msgstr "`__flavor___CONFLICTS_INSTALL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:182
+msgid "`__flavor___PKG_DEPENDS`"
+msgstr "`__flavor___PKG_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:183
+msgid "`__flavor___EXTRACT_DEPENDS`"
+msgstr "`__flavor___EXTRACT_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:184
+msgid "`__flavor___PATCH_DEPENDS`"
+msgstr "`__flavor___PATCH_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:185
+msgid "`__flavor___FETCH_DEPENDS`"
+msgstr "`__flavor___FETCH_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:186
+msgid "`__flavor___BUILD_DEPENDS`"
+msgstr "`__flavor___BUILD_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:187
+msgid "`__flavor___LIB_DEPENDS`"
+msgstr "`__flavor___LIB_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:188
+msgid "`__flavor___RUN_DEPENDS`"
+msgstr "`__flavor___RUN_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:189
+msgid "`__flavor___TEST_DEPENDS`"
+msgstr "`__flavor___TEST_DEPENDS`"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:191
+#, no-wrap
+msgid "Flavor Specific `PKGNAME`"
+msgstr "Специфичный для флейвора `PKGNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:195
+msgid ""
+"As all packages must have a different package name, flavors must change "
+"theirs, using `__flavor___PKGNAMEPREFIX` and `__flavor___PKGNAMESUFFIX` "
+"makes this easy:"
+msgstr ""
+"Поскольку все пакеты должны иметь уникальные имена, флейворы должны изменять "
+"их, используя `__flavor___PKGNAMEPREFIX` и `__flavor___PKGNAMESUFFIX`, что "
+"упрощает задачу:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:200
+#, no-wrap
+msgid ""
+"FLAVORS=\tnormal lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+msgstr ""
+"FLAVORS=\tnormal lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:205
+#, no-wrap
+msgid "`USES=php` and Flavors"
+msgstr "`USES=php` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:209
+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 ""
+"При использовании crossref:uses[uses-php,`php`] с одним из этих аргументов: "
+"`phpize`, `ext`, `zend` или `pecl`, порт автоматически получит заполненный "
+"параметр `FLAVORS` с версиями PHP, которые он поддерживает."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:211
+#, no-wrap
+msgid "Simple `USES=php` Extension"
+msgstr "Простое расширение `USES=php`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:215
+msgid "This will generate package for all the supported versions:"
+msgstr "Это создаст пакет для всех поддерживаемых версий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:221
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:232
+#, no-wrap
+msgid ""
+"PORTNAME=\tsome-ext\n"
+"PORTVERSION=\t0.0.1\n"
+"PKGNAMEPREFIX=\t${PHP_PKGNAMEPREFIX}\n"
+msgstr ""
+"PORTNAME=\tsome-ext\n"
+"PORTVERSION=\t0.0.1\n"
+"PKGNAMEPREFIX=\t${PHP_PKGNAMEPREFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:223
+#, no-wrap
+msgid "USES=\t\tphp:ext\n"
+msgstr "USES=\t\tphp:ext\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:226
+msgid "This will generate package for all the supported versions but 7.2:"
+msgstr "Это создаст пакет для всех поддерживаемых версий, кроме 7.2:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:235
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"IGNORE_WITH_PHP=\t72\n"
+msgstr ""
+"USES=\t\tphp:ext\n"
+"IGNORE_WITH_PHP=\t72\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:240
+#, no-wrap
+msgid "PHP Flavors with PHP Applications"
+msgstr "Версии PHP с приложениями PHP"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:243
+msgid "PHP applications can also be flavorized."
+msgstr "Приложения PHP также могут быть созданы с использованием флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:245
+msgid ""
+"This allows generating packages for all PHP versions, so that users can use "
+"them with whatever version they need on their servers."
+msgstr ""
+"Это позволяет создавать пакеты для всех версий PHP, чтобы пользователи могли "
+"использовать их с любой необходимой версией на своих серверах."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:249
+msgid ""
+"PHP applications that are flavorized _must_ append `PHP_PKGNAMESUFFIX` to "
+"their package names."
+msgstr ""
+"Приложения PHP, которые используют флейворы, _обязаны_ добавлять "
+"`PHP_PKGNAMESUFFIX` к именам своих пакетов."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:252
+#, no-wrap
+msgid "Flavorizing a PHP Application"
+msgstr "Добавление флейворов в PHP-приложения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:256
+msgid "Adding Flavors support to a PHP application is straightforward:"
+msgstr "Добавление поддержки флейворов в PHP-приложение просто:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:260
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t${PHP_PKGNAMESUFFIX}\n"
+msgstr "PKGNAMESUFFIX=\t${PHP_PKGNAMESUFFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:262
+#, no-wrap
+msgid "USES=\tphp:flavors\n"
+msgstr "USES=\tphp:flavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:270
+msgid ""
+"When adding a dependency on a PHP flavored port, use `@${PHP_FLAVOR}`. "
+"_Never_ use `FLAVOR` directly."
+msgstr ""
+"При добавлении зависимости к порту с вариантом PHP используйте `@$"
+"{PHP_FLAVOR}`. _Никогда_ не используйте `FLAVOR` напрямую."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:273
+#, no-wrap
+msgid "`USES=python` and Flavors"
+msgstr "`USES=python` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:277
+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 ""
+"При использовании crossref:uses[uses-python,`python`] и "
+"`USE_PYTHON=distutils` порт автоматически получит заполненные `FLAVORS` с "
+"версиями Python, которые он поддерживает."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:279
+#, no-wrap
+msgid "Simple `USES=python`"
+msgstr "Простой `USES=python`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:283
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:306
+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 ""
+"Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а "
+"версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:288
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:291
+msgid "Will get these flavors: `py27`, and `py36`."
+msgstr "получит следующие флейворы: `py27` и `py36`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:296
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:299
+msgid "Will get these flavors: `py27`, `py34`, `py35` and `py36`."
+msgstr "получит следующие флейворы: `py27`, `py34`, `py35` и `py36`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:302
+#, no-wrap
+msgid "`USES=python` with Version Requirements"
+msgstr "`USES=python` с требованиями к версии"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:311
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:314
+msgid "Will get this flavor: `py27`."
+msgstr "получит следующие флейвор: `py27`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:319
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:322
+msgid "Will get these flavors: `py27`, `py34`, and `py35`."
+msgstr "получит следующие флейворы: `py27`, `py34` и `py35`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:327
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:330
+msgid "Will get this flavor: `py36`."
+msgstr "получит следующий флейвор: `py36`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:335
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:338
+msgid "Will get these flavors: `py34`, `py35`, and `py36`."
+msgstr "получит следующие флейворы: `py34`, `py35` и `py36`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:342
+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 ""
+"`PY_FLAVOR` доступен для указания правильной версии модулей Python. Все "
+"зависимости от вариантов портов Python должны использовать `PY_FLAVOR`, а не "
+"`FLAVOR` напрямую."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:344
+#, no-wrap
+msgid "For a Port Not Using `distutils`"
+msgstr "Для порта, не использующего `distutils`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:348
+msgid ""
+"If the default Python 3 version is 3.6, the following will set `PY_FLAVOR` "
+"to `py36`:"
+msgstr ""
+"Если версия Python 3 по умолчанию — 3.6, следующая команда установит "
+"`PY_FLAVOR` в значение `py36`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:352
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:354
+#, no-wrap
+msgid "USES=\tpython:3.5+\n"
+msgstr "USES=\tpython:3.5+\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:359
+#, no-wrap
+msgid "`USES=lua` and Flavors"
+msgstr "`USES=lua` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:365
+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 ""
+"При использовании crossref:uses[uses-lua,`lua:module`] или "
+"crossref:uses[uses-lua,`lua:flavors`] порт автоматически получит заполненный "
+"параметр `FLAVORS` с версиями Lua, которые он поддерживает. Однако "
+"предполагается, что обычные приложения (а не модули Lua) не должны "
+"использовать эту возможность; большинству приложений, которые встраивают или "
+"иным образом используют Lua, следует просто указывать `USES=lua`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:367
+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 ""
+"`LUA_FLAVOR` доступен (и должен использоваться) для зависимости от "
+"правильной версии зависимостей, независимо от того, использовал ли порт "
+"параметры `flavors` или `module`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:369
+msgid "See crossref:special[using-lua,Using Lua] for further information."
+msgstr ""
+"См. crossref:special[using-lua,Использование Lua] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:371
+#, no-wrap
+msgid "`USES=guile` and Flavors"
+msgstr "`USES=guile` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:378
+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 ""
+"При использовании crossref:uses[uses-guile,`guile:flavors`] порт "
+"автоматически получит заполненное поле `FLAVORS` с версиями Guile, которые "
+"он поддерживает. Однако не предполагается, что обычные приложения должны "
+"использовать эту возможность; она в первую очередь предназначена для "
+"библиотек и расширений, таких как `guile-lib` или `guile-cairo`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:380
+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 ""
+"`GUILE_FLAVOR` доступен (и должен использоваться) для зависимости от "
+"правильной версии зависимостей с флейворами, независимо от того, использовал "
+"ли порт параметр `flavors` или нет."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:381
+msgid "See crossref:special[using-guile,Using Guile] for further information."
+msgstr ""
+"См. crossref:special[using-guile,Использование Guile] для получения "
+"дополнительной информации."
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 af916f13c6..fcce8ff89b 100644
--- a/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 14. Актуализация
-prev: books/porters-handbook/porting-samplem
+description: 'Как поддерживать актуальность коллекции портов FreeBSD'
next: books/porters-handbook/uses
-showBookMenu: true
-weight: 14
params:
- path: "/books/porters-handbook/keeping-up/"
+ path: /books/porters-handbook/keeping-up/
+prev: books/porters-handbook/order
+showBookMenu: true
+tags: ["keeping up", "ports", "updating", "FreshPorts"]
+title: 'Глава 16. Актуализация'
+weight: 16
---
[[keeping-up]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 14
+:sectnumoffset: 16
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,23 +53,23 @@ endif::[]
[[freshports]]
== FreshPorts
-Самым простым способом отслеживать уже произошедшие обновления является подписка на http://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы можете выбрать несколько портов. Мейнтейнерам настоятельно рекомендуется подписаться здесь, потому что они будут получать уведомления не только о собственных изменениях, но и об изменениях, сделанных любым другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с изменениями на более низком технологическом уровне-хотя более корректным было бы получение предупреждений от тех, кто вносит подобные изменения, иногда этот этап пропускается или он просто непрактичен. Кроме того, в некоторых случаях изменения по своей природе весьма незначительны. Мы полагаем, что любой разработчик в таких ситуациях будет руководствоваться здравым смыслом).
+Самым простым способом отслеживать уже произошедшие обновления является подписка на https://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы можете выбрать несколько портов. Сопровождающим порта настоятельно рекомендуется подписаться здесь, потому что они будут получать уведомления не только о собственных изменениях, но и об изменениях, сделанных любым другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с изменениями на более низком технологическом уровне, хотя более корректным было бы получение предупреждений от тех, кто вносит подобные изменения, иногда этот этап пропускается или он просто непрактичен. Кроме того, в некоторых случаях изменения по своей природе весьма незначительны. Мы полагаем, что любой разработчик в таких ситуациях будет руководствоваться здравым смыслом).
Если вы хотите использовать FreshPorts, то вам нужна только учётная запись. Если регистрационный адрес вашей электронной почты будет иметь вид `@FreeBSD.org`, то справа на Web-страницах вы увидите дополнительную ссылку. Для тех из вас, кто уже получил учётную запись FreshPorts, но не использовал собственный адрес электронной почты `@FreeBSD.org`, достаточно сменить адрес на `@FreeBSD.org`, подписаться, а затем сменить его обратно.
Во FreshPorts имеется также функция проверки правильности, которая автоматически проверяет каждое изменение, внесённое в дерево портов FreeBSD. Если вы подпишетесь на эту услугу, то будете оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке внесённых вами изменений.
-[[svnweb]]
+[[cgit]]
== Web-интерфейс к хранилищу исходных текстов
-Файлы в хранилище исходных текстов можно просматривать при помощи Web-интерфейса. Изменения, которые касаются в целом всей системы портов, теперь документируются в файле http://svnweb.FreeBSD.org/ports/head/CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь в файле http://svnweb.FreeBSD.org/ports/head/UPDATING[UPDATING]. Однако однозначный ответ на любой вопрос можно найти, только прочитав исходных код http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk[bsd.port.mk] и связанных с ним файлов.
+Файлы в хранилище исходных текстов можно просматривать при помощи Web-интерфейса. Изменения, которые касаются в целом всей системы портов, теперь документируются в файле https://cgit.FreeBSD.org/ports/tree/CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь в файле https://cgit.FreeBSD.org/ports/tree/UPDATING[UPDATING]. Однако однозначный ответ на любой вопрос можно найти, только прочитав исходных код https://cgit.FreeBSD.org/ports/tree/Mk/bsd.port.mk[bsd.port.mk] и связанных с ним файлов.
[[ports-mailing-list]]
== Список рассылки FreeBSD, посвящённый портам
Если вы поддерживаете порты, то должны следить за {freebsd-ports}. О важных изменениях, отражающихся на работе портов, будет сообщаться здесь, а затем они переносятся в [.filename]#CHANGES#.
-Если данный список рассылки слишком загружен сообщениями, вы можете отслеживать link:{freebsd-ports-announce-url}[freebsd-ports-announce], который модерируется и не является местом для дискуссий.
+Если данный список рассылки слишком загружен сообщениями, вы можете отслеживать {freebsd-ports-announce}, который модерируется и не является местом для дискуссий.
[[build-cluster]]
== Кластер построения портов FreeBSD
@@ -79,19 +81,12 @@ endif::[]
[[distfile-survey]]
== Portscout: сканер дистрибутивных файлов портов FreeBSD
-Кластер построения выделен для выполнения самого последнего релиза каждого из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. http://portscout.FreeBSD.org[Portscout], средство сканирования дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных для сгрузки каждого из портов, для определения того, доступны ли ещё дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать электронные письма об имеющихся обновлениях для портов тем, кто это запрашивает. Мейнтейнеры периодически запрашивают наличие изменений, либо вручную, либо используя ленту RSS.
-
-Главная страница Portscout отображает email мейнтейнера порта, количество портов, за которые ответственен мейнтейнер, количество портов с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска выполняет поиск мейнтейнера по адресу электронной почты и позволяет выбирать между всеми портами или только устаревшими.
-
-При щелчке по адресу электронной почты мейнтейнера отображается список всех его портов, разделённых по категориям, вместе с текущим номером версии, информацией о наличии новой версии, временем последнего обновления порта и временем его последней проверки. Функция поиска на этой странице позволяет пользователю выполнять поиск конкретного порта.
-
-По щелчку на название порта в списке отображается информация о порте http://freshports.org[FreshPorts].
+Кластер построения выделен для выполнения самого последнего релиза каждого из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. https://portscout.FreeBSD.org[Portscout], средство сканирования дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных для сгрузки каждого из портов, для определения того, доступны ли ещё дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать электронные письма об имеющихся обновлениях для портов тем, кто это запрашивает. Сопровождающие периодически запрашивают наличие изменений либо вручную, либо используя ленту RSS.
-[[portsmon]]
-== Система мониторинга портов FreeBSD
+Главная страница Portscout отображает email сопровождающего порта, количество портов, за которые ответственен сопровождающий, количество портов с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска выполняет поиск сопровождающего по адресу электронной почты и позволяет выбирать между всеми портами или только устаревшими.
-Другим полезным ресурсом является http://portsmon.FreeBSD.org[Система мониторинга портов FreeBSD] (известная также как `portsmon`). Система представляет собой базу данных, обрабатывающую информацию из нескольких источников и позволяющую просматривать их при помощи Web-интерфейса. На данный момент задействованы база сообщений об ошибках (PR), протоколы ошибок кластера построения и отдельные файлы из коллекции портов. В будущем в этот список будет добавлена система проверки дистрибутивных файлов и другие ресурсы.
+При щелчке по адресу электронной почты сопровождающего отображается список всех его портов, разделённых по категориям, вместе с текущим номером версии, информацией о наличии новой версии, временем последнего обновления порта и временем его последней проверки. Функция поиска на этой странице позволяет пользователю выполнять поиск конкретного порта.
-Для начала вы можете просмотреть всю информацию о некотором порте при помощи средства http://portsmon.FreeBSD.org/portoverview.py[Обзор отдельного порта].
+По щелчку на название порта в списке отображается информация о порте https://freshports.org[FreshPorts].
-На момент написания это единственный доступный ресурс, который для имени порта ставит в соответствие записи PR GNATS. (Отправители PR не всегда добавляют в название имя порта, хотя мы предпочитаем, чтобы они это делали.) Таким образом, `portsmon` это хорошее место для начала, если вы хотите найти присланные PR и/или ошибки построения для существующего порта; либо поискать, был ли уже прислан новый порт, который вы подумывали создать сами.
+Другим полезным ресурсом является https://github.com/freebsd/portscout/[репозиторий Portscout].
diff --git a/documentation/content/ru/books/porters-handbook/keeping-up/_index.po b/documentation/content/ru/books/porters-handbook/keeping-up/_index.po
new file mode 100644
index 0000000000..b5bd194cf5
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/keeping-up/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookkeeping-up_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "How to keep up the FreeBSD Ports Collection"
+msgstr "Как поддерживать актуальность коллекции портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "Chapter 16. Keeping Up"
+msgstr "Глава 16. Актуализация"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:14
+#, no-wrap
+msgid "Keeping Up"
+msgstr "Актуализация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:53
+msgid ""
+"The FreeBSD Ports Collection is constantly changing. Here is some "
+"information on how to keep up."
+msgstr ""
+"Коллекция Портов FreeBSD постоянно изменяется. Здесь находится некоторая "
+"информация о том, как поддерживать её в актуальном состоянии."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:55
+#, no-wrap
+msgid "FreshPorts"
+msgstr "FreshPorts"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:63
+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 ""
+"Самым простым способом отслеживать уже произошедшие обновления является "
+"подписка на https://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы "
+"можете выбрать несколько портов. Сопровождающим порта настоятельно "
+"рекомендуется подписаться здесь, потому что они будут получать уведомления "
+"не только о собственных изменениях, но и об изменениях, сделанных любым "
+"другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с "
+"изменениями на более низком технологическом уровне, хотя более корректным "
+"было бы получение предупреждений от тех, кто вносит подобные изменения, "
+"иногда этот этап пропускается или он просто непрактичен. Кроме того, в "
+"некоторых случаях изменения по своей природе весьма незначительны. Мы "
+"полагаем, что любой разработчик в таких ситуациях будет руководствоваться "
+"здравым смыслом)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:67
+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 ""
+"Если вы хотите использовать FreshPorts, то вам нужна только учётная запись. "
+"Если регистрационный адрес вашей электронной почты будет иметь вид "
+"`@FreeBSD.org`, то справа на Web-страницах вы увидите дополнительную ссылку. "
+"Для тех из вас, кто уже получил учётную запись FreshPorts, но не использовал "
+"собственный адрес электронной почты `@FreeBSD.org`, достаточно сменить адрес "
+"на `@FreeBSD.org`, подписаться, а затем сменить его обратно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:70
+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 ""
+"Во FreshPorts имеется также функция проверки правильности, которая "
+"автоматически проверяет каждое изменение, внесённое в дерево портов FreeBSD. "
+"Если вы подпишетесь на эту услугу, то будете оповещаться обо всех ошибках, "
+"обнаруженных FreshPorts при проверке внесённых вами изменений."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:72
+#, no-wrap
+msgid "The Web Interface to the Source Repository"
+msgstr "Web-интерфейс к хранилищу исходных текстов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:78
+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 ""
+"Файлы в хранилище исходных текстов можно просматривать при помощи Web-"
+"интерфейса. Изменения, которые касаются в целом всей системы портов, теперь "
+"документируются в файле https://cgit.FreeBSD.org/ports/tree/"
+"CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь "
+"в файле https://cgit.FreeBSD.org/ports/tree/UPDATING[UPDATING]. Однако "
+"однозначный ответ на любой вопрос можно найти, только прочитав исходных код "
+"https://cgit.FreeBSD.org/ports/tree/Mk/bsd.port.mk[bsd.port.mk] и связанных "
+"с ним файлов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:80
+#, no-wrap
+msgid "The FreeBSD Ports Mailing List"
+msgstr "Список рассылки FreeBSD, посвящённый портам"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:84
+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 ""
+"Если вы поддерживаете порты, то должны следить за {freebsd-ports}. О важных "
+"изменениях, отражающихся на работе портов, будет сообщаться здесь, а затем "
+"они переносятся в [.filename]#CHANGES#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:86
+msgid ""
+"If the volume of messages on this mailing list is too high, consider "
+"following {freebsd-ports-announce} which contains only announcements."
+msgstr ""
+"Если данный список рассылки слишком загружен сообщениями, вы можете "
+"отслеживать {freebsd-ports-announce}, который модерируется и не является "
+"местом для дискуссий."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:88
+#, no-wrap
+msgid "The FreeBSD Port Building Cluster"
+msgstr "Кластер построения портов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:91
+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 ""
+"Одной из наименее известных сильных сторон FreeBSD является тот факт, что "
+"для непрерывного построения Коллекции Портов для каждого из основных релизов "
+"ОС для каждой архитектуры уровня поддержки Tier-1 выделен целый кластер "
+"машин."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:95
+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 ""
+"Отдельные порты собираются, если они специально не помечены как `IGNORE`. "
+"Для портов, помеченных как `BROKEN`, попытки будут продолжены для того, "
+"чтобы увидеть, если основная проблема была решена. (Это сделано через "
+"использование переменной `TRYBROKEN` для [.filename]#Makefile# порта.)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:97
+#, no-wrap
+msgid "Portscout: the FreeBSD Ports Distfile Scanner"
+msgstr "Portscout: сканер дистрибутивных файлов портов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:104
+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 ""
+"Кластер построения выделен для выполнения самого последнего релиза каждого "
+"из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за "
+"постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. "
+"https://portscout.FreeBSD.org[Portscout], средство сканирования "
+"дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных "
+"для сгрузки каждого из портов, для определения того, доступны ли ещё "
+"дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать "
+"электронные письма об имеющихся обновлениях для портов тем, кто это "
+"запрашивает. Сопровождающие периодически запрашивают наличие изменений либо "
+"вручную, либо используя ленту RSS."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:107
+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 ""
+"Главная страница Portscout отображает email сопровождающего порта, "
+"количество портов, за которые ответственен сопровождающий, количество портов "
+"с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска "
+"выполняет поиск сопровождающего по адресу электронной почты и позволяет "
+"выбирать между всеми портами или только устаревшими."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:110
+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:112
+msgid ""
+"Clicking on a port name in the list displays the https://freshports.org/"
+"[FreshPorts] port information."
+msgstr ""
+"По щелчку на название порта в списке отображается информация о порте https://"
+"freshports.org[FreshPorts]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:113
+msgid ""
+"Additional documentation is available in the https://github.com/freebsd/"
+"portscout/[Portscout repository]."
+msgstr ""
+"Другим полезным ресурсом является https://github.com/freebsd/portscout/"
+"[репозиторий Portscout]."
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
index f831873e56..51a032507e 100644
--- a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
@@ -1,15 +1,17 @@
---
-title: Глава 5. Настройка файла Makefile
-prev: books/porters-handbook/slow-porting
+description: 'Настройка Makefile для портов FreeBSD'
next: books/porters-handbook/special
+params:
+ path: /books/porters-handbook/makefiles/
+prev: books/porters-handbook/slow-porting
showBookMenu: true
+tags: ["makefiles", "configuring", "naming", "versions"]
+title: 'Глава 5. Настройка Makefile'
weight: 5
-params:
- path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
-= Настройка файла Makefile
+= Настройка Makefile
:doctype: book
:toc: macro
:toclevels: 1
@@ -20,7 +22,7 @@ params:
:partnums:
:source-highlighter: rouge
:experimental:
-:gcc-plus-plus: g++
+:g-plus-plus: g++
:images-path: books/porters-handbook/
ifdef::env-beastie[]
@@ -47,118 +49,325 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Настройка файла [.filename]#Makefile# достаточно проста, и мы снова предполагаем, что перед тем, как начать, вы посмотрите на существующие примеры. К тому же в этом руководстве имеется <<porting-samplem,примерный Makefile>>, так что взгляните на него и, пожалуйста, следуйте порядку переменных и разделов в этом образце, чтобы облегчить чтение вашего порта другими людьми.
+Настройка [.filename]#Makefile# довольно проста, и мы снова рекомендуем изучить существующие примеры перед началом. Также в этом руководстве есть crossref:porting-samplem[porting-samplem,пример Makefile], поэтому ознакомьтесь с ним и, пожалуйста, соблюдайте порядок переменных и разделов в этом шаблоне, чтобы порт был удобнее для чтения другими.
-Итак, расположим решаемые задачи в порядке их возникновения при создании вашего нового файла [.filename]#Makefile#:
+Рассмотрите эти проблемы последовательно при разработке нового [.filename]#Makefile#:
[[makefile-source]]
-== Оригинальные исходный код
+== Оригинальный исходный код
-Находится ли он в каталоге `DISTDIR` в виде стандартного упакованного архиватором `gzip` tar-архива с именем типа [.filename]#foozolix-1.2.tar.gz#? Если это так, можно перейти к следующему шагу. Если нет, то вы должны попытаться переопределить некоторые из переменных `DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` или `DISTFILES` в зависимости от того, насколько необычен формат дистрибутивного файла.
+Находится ли он в `DISTDIR` в виде стандартного архива ``gzip`` с именем вроде [.filename]#foozolix-1.2.tar.gz#? Если да, переходите к следующему шагу. Если нет, возможно, для формата имени файла дистрибутива потребуется переопределить одну или несколько переменных: `DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` или `DISTFILES`.
-В худшем случае вы можете просто определить свою собственную цель `do-extract` для переопределения действий по умолчанию, хотя к этому нужно будет прибегать в очень редких случаях, если вообще придётся.
+В худшем случае создайте пользовательскую цель `do-extract`, чтобы переопределить стандартную. Это редко, если вообще когда-либо, необходимо.
[[makefile-naming]]
== Именование
-В первой части [.filename]#Makefile# порта ему даётся название, указывается его номер версии и принадлежность к правильной категории.
+Первая часть [.filename]#Makefile# порта указывает его название, описывает номер версии и помещает его в соответствующую категорию.
+
+[[makefile-portname]]
+=== `PORTNAME`
+
+Установите `PORTNAME` как базовое имя программы. Оно используется в качестве основы для пакета FreeBSD и для crossref:makefiles[makefile-distname,`DISTNAME`].
+
+[IMPORTANT]
+====
+Название пакета должно быть уникальным во всём дереве портов. Убедитесь, что `PORTNAME` ещё не используется существующим портом и что никакой другой порт уже не имеет такой же `PKGBASE`. Если имя уже занято, добавьте либо crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`, либо `PKGNAMESUFFIX`].
+====
+
+[[makefile-versions]]
+=== Версии, `DISTVERSION` _или_ `PORTVERSION`
-=== `PORTNAME` и `PORTVERSION`
+Установите `DISTVERSION` в номер версии программы.
+
+`PORTVERSION` — это версия, используемая для пакета FreeBSD. Она будет автоматически вычислена из `DISTVERSION` в соответствии со схемой версионирования пакетов FreeBSD. Если версия содержит _буквы_, может потребоваться задать `PORTVERSION` вместо `DISTVERSION`.
+
+[IMPORTANT]
+====
+Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть установлена одновременно.
+====
+
+Время от времени некоторые программы используют схему версионирования, которая несовместима с тем, как `DISTVERSION` преобразуется в `PORTVERSION`.
+
+[TIP]
+====
+При обновлении порта можно использовать аргумент `-t` утилиты man:pkg-version[8], чтобы проверить, является ли новая версия больше или меньше предыдущей. Смотрите ниже, как использовать man:pkg-version[8] для сравнения версий.
+====
-В переменной `PORTNAME` вы должны указать основную часть имени вашего порта, а в переменной `PORTVERSION` - номер версии.
+[[makefile-versions-ex-pkg-version]]
+.Использование man:pkg-version[8] для сравнения версий
+[example]
+====
+`pkg version -t` принимает две версии в качестве аргументов и возвращает `<`, `=` или `>`, если первая версия меньше, равна или больше второй версии соответственно.
+
+[source, shell]
+....
+% pkg version -t 1.2 1.3
+< <.>
+% pkg version -t 1.2 1.2
+= <.>
+% pkg version -t 1.2 1.2.0
+= <.>
+% pkg version -t 1.2 1.2.p1
+> <.>
+% pkg version -t 1.2.a1 1.2.b1
+< <.>
+% pkg version -t 1.2 1.2p1
+< <.>
+....
+
+<.> `1.2` идёт перед `1.3`.
+<.> `1.2` и `1.2` равны, так как имеют одинаковую версию.
+<.> `1.2` и `1.2.0` равны, так как ноль ничего не значит.
+<.> `1.2` идёт после `1.2.p1`, так как `.p1` означает «pre-release 1» (предрелизная версия 1).
+<.> `1.2.a1` предшествует `1.2.b1`, представьте "alpha" и "beta", где `a` идёт перед `b`.
+<.> `1.2` находится перед `1.2p1`, так же как `2p1` (читается как "2, уровень исправления 1") — это версия, следующая после любой `2.X`, но перед `3`.
+
+[NOTE]
+****
+Здесь `a`, `b` и `p` используются так, как если бы они означали "альфа", "бета" или "пре-релиз" и "уровень патча", но на самом деле это просто буквы, которые сортируются в алфавитном порядке, поэтому можно использовать любую букву, и они будут отсортированы соответствующим образом.
+****
+
+====
+
+.Примеры `DISTVERSION` и производной `PORTVERSION`
+[cols="10%,90%", frame="none", options="header"]
+|===
+| DISTVERSION
+| .PORTVERSION
+
+|0.7.1d
+|0.7.1.d
+
+|10Alpha3
+|10.a3
+
+|3Beta7-pre2
+|3.b7.p2
+
+|8:f_17
+|8f.17
+|===
+
+[[makefile-versions-ex1]]
+.Использование `DISTVERSION`
+[example]
+====
+Если версия содержит только числа, разделённые точками, тире или подчёркиваниями, используйте `DISTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-4
+....
+
+Это сгенерирует `PORTVERSION` равный `1.2.4`.
+====
+
+[[makefile-versions-ex2]]
+.Использование `DISTVERSION` когда версия начинается с буквы или префикса
+[example]
+====
+Когда версия начинается или заканчивается буквой, или префиксом, или суффиксом, которые не являются частью версии, используйте `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`.
+
+Если версия `v1.2-4`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= v
+DISTVERSION= 1_2_4
+....
+
+Некоторые проекты, использующие GitHub, могут включать своё название в версии. Например, версия может выглядеть как `nekoto-1.2-4`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= nekoto-
+DISTVERSION= 1.2_4
+....
+
+Эти проекты также иногда используют строку в конце версии, например, `1.2-4_RELEASE`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-4
+DISTVERSIONSUFFIX= _RELEASE
+....
+
+Или они делают и то, и другое, например, `nekoto-1.2-4_RELEASE`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= nekoto-
+DISTVERSION= 1.2-4
+DISTVERSIONSUFFIX= _RELEASE
+....
+
+`DISTVERSIONPREFIX` и `DISTVERSIONSUFFIX` не будут использоваться при формировании `PORTVERSION`, а только в `DISTNAME`.
+
+Все сгенерируют `PORTVERSION` равный `1.2.4`.
+====
+
+[[makefile-versions-ex3]]
+.Использование `DISTVERSION`, когда версия содержит буквы, означающие "alpha", "beta" или "pre-release"
+[example]
+====
+Если версия содержит числа, разделённые точками, тире или подчёркиваниями, а буквы используются для обозначения "альфа", "бета" или "предварительной версии" (то есть до версии без букв), используйте `DISTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-pre4
+....
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2p4
+....
+
+Оба варианта создадут `PORTVERSION` равную `1.2.p4`, что предшествует версии 1.2. Для проверки этого факта можно использовать man:pkg-version[8]:
+
+[source, shell]
+....
+% pkg version -t 1.2.p4 1.2
+<
+....
+
+====
+
+[[makefile-versions-ex4]]
+.Не использовать `DISTVERSION`, если версия содержит буквы, означающие "уровень патча"
+[example]
+====
+Если версия содержит буквы, которые не означают "alpha", "beta" или "pre", а скорее указывают на "уровень исправления" и следуют после версии без букв, используйте `PORTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+PORTVERSION= 1.2p4
+....
+
+В данном случае использование `DISTVERSION` невозможно, так как это приведёт к генерации версии `1.2.p4`, которая будет считаться более ранней, чем `1.2`, а не более поздней. man:pkg-version[8] подтвердит это:
+
+[source, shell]
+....
+% pkg version -t 1.2 1.2.p4
+> <.>
+% pkg version -t 1.2 1.2p4
+< <.>
+....
+
+<.> `1.2` идёт после `1.2.p4`, что в данном случае _неверно_.
+<.> `1.2` находится перед `1.2p4`, что и требовалось.
+====
+
+Для более сложных примеров настройки `PORTVERSION`, когда версия программного обеспечения действительно несовместима с FreeBSD, или `DISTNAME`, когда файл дистрибутива не содержит саму версию, см. crossref:makefiles[makefile-distname, `DISTNAME`].
[[makefile-naming-revepoch]]
=== `PORTREVISION` и `PORTEPOCH`
+[[makefile-portrevision]]
==== `PORTREVISION`
-Переменная `PORTREVISION` представляет собой монотонно увеличивающееся число, которое обнуляется при каждом увеличении значения переменной `PORTVERSION` (то есть каждый раз, когда создателями выпускается новый официальный релиз), и добавляется к имени пакета, если оно не равно нулю. Изменения в `PORTREVISION` используются автоматизированными инструментами (например, `pkg version`, см. man:pkg-version[8]) для определения факта появления нового пакета.
+`PORTREVISION` — это монотонно возрастающее значение, которое сбрасывается в 0 при каждом увеличении `DISTVERSION`, обычно при каждом новом официальном выпуске от поставщика. Если `PORTREVISION` не равен нулю, его значение добавляется к имени пакета. Изменения `PORTREVISION` используются автоматизированными инструментами, такими как man:pkg-version[8], для определения доступности нового пакета.
-Значение `PORTREVISION` должно увеличиваться каждый раз, когда в порте FreeBSD делаются изменения, которые как-либо меняют получаемый пакет. Сюда относятся только изменения, затрагивающие построение пакета с <<makefile-options,параметрами>> по умолчанию.
+`PORTREVISION` должен быть увеличен каждый раз, когда в порт вносятся изменения, которые так или иначе влияют на сгенерированный пакет. Это включает изменения, затрагивающие только пакеты, собранные с нестандартными crossref:makefiles[makefile-options,опциями].
-Примеры случаев, когда значение `PORTREVISION` должно быть увеличено:
+Примеры случаев, когда необходимо увеличить `PORTREVISION`:
-* Добавление патчей для исправления уязвимостей, ошибок, или добавления новой функциональности в порт.
-* Изменения в файле [.filename]#Makefile# порта для включения и выключения параметров, определяемых при компиляции пакета.
-* Изменения в списке упаковки или в поведении пакета во время его установки (например, изменение скрипта, генерирующего начальные данные для пакета, такие, как ssh-ключи для хоста).
-* Увеличение версии динамической библиотеки, от которой зависит порт (в этом случае тот, кто попытается установить старый пакет после установки более новой версии библиотеки, не сможет этого сделать, потому что при этом будет делаться поиск старой библиотеки libfoo.x, а не libfoo.(x+1)).
-* Большие функциональные изменения в дистрибутивном файле порта, происходящие без объявлений, и приводящие к большим изменениям, то есть изменения в дистрибутиве требуют корректировки файла [.filename]#distinfo# без соответствующего изменения `PORTVERSION`, когда как команда `diff -ru` между новой и старой версиями показывает нетривиальные изменения в коде.
+* Добавление исправлений для устранения уязвимостей безопасности, ошибок или для добавления новой функциональности в порт.
+* Изменения в [.filename]#Makefile# порта для включения или отключения параметров сборки в пакете.
+* Изменения в списке файлов пакета или в поведении во время установки. Например, изменение скрипта, который генерирует начальные данные для пакета, такие как ключи хоста man:ssh[1].
+* Увеличение версии зависимости порта от общей библиотеки (в данном случае, попытка установить старый пакет после установки более новой версии зависимости завершится неудачей, так как будет искаться старая версия libfoo.x вместо libfoo.(x+1)).
+* Тихие изменения в дистрибутивном файле порта, которые имеют значительные функциональные отличия. Например, изменения в дистрибутивном файле, требующие корректировки файла [.filename]#distinfo# без соответствующего изменения `DISTVERSION`, когда сравнение `diff -ru` старой и новой версий показывает нетривиальные изменения в коде.
+* Изменения в `MAINTAINER`.
-Примеры изменений, которые не требуют увеличения переменной `PORTREVISION`:
+Примеры изменений, которые не требуют увеличения `PORTREVISION`:
-* Изменения стиля в скелете порта без функциональных изменений в пакете.
-* Изменения в переменной `MASTER_SITES` или другие функциональные изменения порта, которые не затрагивают получающегося пакета.
-* Тривиальные патчи к дистрибутивному файлу, такие, как исправления опечаток, которые не так уж важны, что пользователи пакета должны озаботиться обновлением.
-* Исправления, касающиеся этапа построения, которые делают возможным построение пакета, если ранее это было невозможно сделать (пока изменения не приводят к изменению работы на любых других платформах, на которых порт ранее строился). Так как `PORTREVISION` отражает содержимое пакета, то, если ранее пакет не строился, то нет нужды увеличивать `PORTREVISION` для отметки изменения.
+* Стилевые изменения в каркасе портов без функциональных изменений в итоговом пакете.
+* Изменения в `MASTER_SITES` или другие функциональные изменения порта, которые не влияют на итоговый пакет.
+* Тривиальные исправления в дистрибутивном файле, такие как исправление опечаток, которые не настолько важны, чтобы пользователи пакета были вынуждены тратить время на обновление.
+* Исправления сборки, которые позволяют пакету компилироваться там, где ранее это не удавалось. При условии, что изменения не вносят функциональных изменений на других платформах, где порт ранее собирался. Поскольку `PORTREVISION` отражает содержимое пакета, если пакет ранее не мог быть собран, то нет необходимости увеличивать `PORTREVISION` для обозначения изменений.
-Правило, которому нужно приблизительно следовать, заключается в том, что нужно спрашивать себя, является ли вносимое в порт изменение таким, что от него выиграют все (в виде усовершенствования, исправления или благодаря тому, что новый пакет будет вообще работоспособным), и примите во внимание тот факт, что при этом все, кто регулярно обновляют своё дерево портов, будут обязаны это сделать. Если это так, то переменная `PORTREVISION` должна быть увеличена.
+Эмпирическое правило заключается в том, чтобы решить, является ли изменение, внесённое в порт, чем-то, что принесёт пользу _некоторым_ пользователям. Будь то улучшение, исправление или просто факт, что новый пакет вообще будет работать. Затем необходимо сопоставить это с тем, что всем, кто регулярно обновляет своё дерево портов, придётся выполнить обновление. Если ответ положительный, необходимо увеличить `PORTREVISION`.
+
+[NOTE]
+====
+Пользователи бинарных пакетов _никогда_ не увидят обновления, если `PORTREVISION` не увеличен. Без увеличения `PORTREVISION` сборщики пакетов не могут обнаружить изменение и, следовательно, не пересоберут пакет.
+====
+[[makefile-portepoch]]
==== `PORTEPOCH`
-Время от времени разработчик программного обеспечения или создатель порта FreeBSD делают что-то не так и выпускают версию программы, номер которой меньше предыдущей версии. Примером этого является порт, название которого меняется с foo-20000801 на foo-1.0 (изначально это не считалось бы более новой версией, так как 20000801 численно больше, чем 1).
+Время от времени разработчики программного обеспечения или сопровождающие портов FreeBSD совершают ошибку и выпускают версию своего ПО, которая фактически имеет меньший номер по сравнению с предыдущей. Примером может служить переход с foo-20000801 на foo-1.0 (первая версия будет ошибочно считаться более новой, поскольку число 20000801 больше, чем 1.0).
[TIP]
====
+Результаты сравнения номеров версий не всегда очевидны. Команда `pkg version` (см. man:pkg-version[8]) может быть использована для проверки сравнения двух строк с номерами версий. Например:
-Результат сравнения номера версии не всегда очевиден. Для выполнения сравнения двух строк с номером версии можно использовать `pkg version` (см. man:pkg-version[8]). Например:
-
-[source,shell]
+[source, shell]
....
% pkg version -t 0.031 0.29
>
....
-Строка `>` в выводе команды означает, что версия 0.031 считается выше, чем версия 0.29, что может быть не очевидно для того, кто выполняет портирование.
+Символ `>` в выводе указывает, что версия 0.031 считается больше, чем версия 0.29, что могло быть неочевидно для сопровождающего.
====
-В ситуациях, подобных этой, должно быть увеличено значение `PORTEPOCH`. Если значение `PORTEPOCH` не равно нулю, то оно добавляется к имени пакета, как описано в разделе выше. Значение `PORTEPOCH` никогда не должно уменьшаться или сбрасываться в ноль, потому что это приведёт к ошибке сравнения с пакетом с меньшим номером эпохи (то есть то, что пакет устарел, обнаружено не будет): номер новой версии (например, `1.0,1` в примере выше) останется меньше, чем номер предыдущей версии (20000801), однако суффикс `,1` интерпретируется различными автоматизированными утилитами особым образом, и окажется больше, чем предполагаемый суффикс `,0` более раннего пакета).
+В таких ситуациях необходимо увеличить `PORTEPOCH`. Если `PORTEPOCH` не равен нулю, он добавляется к имени пакета, как описано в разделе 0 выше. `PORTEPOCH` никогда не должен уменьшаться или сбрасываться до нуля, потому что это приведёт к ошибке при сравнении с пакетом из более ранней эпохи. Например, пакет не будет обнаружен как устаревший. Новый номер версии, `1.0,1` в приведённом выше примере, всё ещё численно меньше предыдущей версии, 20000801, но суффикс `,1` обрабатывается автоматизированными инструментами особым образом и считается большим, чем подразумеваемый суффикс `,0` у предыдущего пакета.
-Некорректное уменьшение или сброс `PORTEPOCH` приводит к печальным последствиям; если вы не поняли, о чём шла речь ранее, пожалуйста, всё же разберитесь с этим, либо спросите в списках рассылки.
+Неправильное удаление или сброс `PORTEPOCH` приводит к бесконечным проблемам. Если приведённое выше объяснение недостаточно ясно, обратитесь к {freebsd-ports}.
-Предполагается, что в большинстве портов переменная `PORTEPOCH` использоваться не будет, но при корректном использовании `PORTVERSION` может появиться необходимость её иметь, если в будущих релизах программное обеспечение должно изменить структуру номера версии. Однако создателям портов для FreeBSD нужно быть внимательными, когда разработчик выпускает релиз без официального номера версии - эдакие "промежуточные" релизы. Имеется соблазн пометить релиз датой его выхода, что может вызвать проблемы, как и в примере выше, когда будет выпущен новый "официальный" релиз.
+Ожидается, что `PORTEPOCH` не будет использоваться для большинства портов, и что разумное использование `DISTVERSION` или аккуратное применение `PORTVERSION` часто может предотвратить необходимость его использования, если будущий выпуск программного обеспечения изменит структуру версий. Однако разработчикам портов FreeBSD следует быть осторожными, когда вендор выпускает релиз без официального номера версии — например, релиз в виде "снимка" кода. Возникает соблазн обозначить такой релиз датой выпуска, что вызовет проблемы, как в примере выше, когда будет сделан новый "официальный" релиз.
-Например, если промежуточный релиз помечен датой 20000917, а предыдущая версия программного обеспечения имела номер 1.2, то промежуточному релизу должно быть поставлено в соответствие значение `PORTVERSION`, равное 1.2.20000917 или что-то похожее, но не 20000917, так как последующий релиз, скажем, 1.3, должен иметь численно большее значение.
+Например, если снимок выпущен на дату `20000917`, а предыдущая версия программного обеспечения была `1.2`, не следует использовать `20000917` для `DISTVERSION`. Правильным будет указать `DISTVERSION` как `1.2.20000917` или подобное, чтобы следующая версия, например `1.3`, оставалась численно большей.
-==== Пример использования переменных `PORTREVISION` и `PORTEPOCH`
+[[makefile-portrevision-example]]
+==== Пример использования `PORTREVISION` и `PORTEPOCH`
-Выполнен коммит порта `gtkmumble`, версии `0.10`, в коллекцию портов.
+Порт `gtkmumble` версии `0.10` добавлен в коллекцию портов:
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.10
+DISTVERSION= 0.10
....
-Значение `PKGNAME` станет равным `gtkmumble-0.10`.
+`PKGNAME` становится `gtkmumble-0.10`.
-Обнаружена брешь в безопасности, исправление которой потребовало создания локального патча для FreeBSD. Соответственно было увеличено значение переменной `PORTREVISION`.
+Обнаружена уязвимость в безопасности, требующая локального исправления FreeBSD. `PORTREVISION` соответствующим образом увеличивается.
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.10
+DISTVERSION= 0.10
PORTREVISION= 1
....
`PKGNAME` принимает значение `gtkmumble-0.10_1`
-Разработчиком выпущена новая версия с номером `0.2` (оказалось, что под номером `0.10` автор имел в виду `0.1.0`, а не "то, что будет выпущено после версии 0.9" - извините, теперь уже поздно). Так как новый младший номер версии `2` по значению меньше, чем номер предыдущей версии `10`, то должно быть увеличено значение `PORTEPOCH` для того, чтобы заставить распознавать вновь создаваемый пакет как "более новый". Так как это новый релиз программы, то `PORTREVISION` обнуляется (или удаляется из файла [.filename]#Makefile#).
+Выпущена новая версия от поставщика под номером `0.2` (оказывается, автор изначально подразумевал, что `0.10` на самом деле означает `0.1.0`, а не "то, что идет после 0.9" — увы, теперь уже поздно). Поскольку новая минорная версия `2` численно меньше предыдущей версии `10`, необходимо увеличить `PORTEPOCH`, чтобы вручную заставить систему распознавать новый пакет как "более новый". Так как это новый релиз кода от поставщика, `PORTREVISION` сбрасывается до 0 (или удаляется из [.filename]#Makefile#).
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.2
+DISTVERSION= 0.2
PORTEPOCH= 1
....
-`PKGNAME` принимает значение `gtkmumble-0.2,1`
+`PKGNAME` становится `gtkmumble-0.2,1`
-Следующий релиз имеет номер версии 0.3. Так как значение переменной `PORTEPOCH` никогда не уменьшается, что переменные, определяющие версии, теперь выглядят так:
+Следующий выпуск — 0.3. Поскольку `PORTEPOCH` никогда не уменьшается, переменные версий теперь выглядят так:
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.3
+DISTVERSION= 0.3
PORTEPOCH= 1
....
@@ -166,152 +375,196 @@ PORTEPOCH= 1
[NOTE]
====
-Если значение `PORTEPOCH` этим обновлением было бы сброшено в `0`, то кто-нибудь, имеющий установленный пакет `gtkmumble-0.10_1`, не смог бы опознать пакет `gtkmumble-0.3` как более новый, так как `3` было бы меньше, чем `10`. Помните, что в первую очередь это касается `PORTEPOCH`.
+Если бы `PORTEPOCH` был сброшен в `0` при этом обновлении, пользователь, установивший пакет `gtkmumble-0.10_1`, не увидел бы пакет `gtkmumble-0.3` как более новый, поскольку `3` всё ещё численно меньше, чем `10`. Помните, в этом и заключается вся суть `PORTEPOCH` изначально.
====
-=== Переменные `PKGNAMEPREFIX` и `PKGNAMESUFFIX`
+[[porting-pkgnameprefix-suffix]]
+=== `PKGNAMEPREFIX` и `PKGNAMESUFFIX`
-Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, объединяются со значениями `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в форме `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Добейтесь того, чтобы это соответствовало нашим <<porting-pkgname,рекомендациям по правильному выбору названий для пакетов>>. В частности, в переменной `PORTVERSION` _не разрешается_ использование дефиса (`-`). Кроме того, если в имени пакета присутствует часть _language-_ или _-compiled.specifics_ (смотрите ниже), то используйте переменные `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, соответственно. Не делайте их частью значения переменной `PORTNAME`.
+Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, объединяются с `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в виде `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что это соответствует нашим crossref:makefiles[porting-pkgname,рекомендациям по именованию пакетов]. В частности, использование дефиса (`-`) в `PORTVERSION` _не_ допускается. Кроме того, если имя пакета содержит часть _language-_ или _-compiled.specifics_ (см. ниже), используйте `PKGNAMEPREFIX` и `PKGNAMESUFFIX` соответственно. Не включайте их в `PORTNAME`.
[[porting-pkgname]]
-=== Соглашения по именованию пакетов
+=== Соглашения о наименовании пакетов
-Далее описаны некоторые соглашения, которым вы должны следовать в именовании ваших пакетов. Они были разработаны для облегчения просмотра каталога, так как имеется уже тысячи пакетов, а пользователи отвернутся от нас, если список не понравится их взору!
+Вот соглашения, которым следует придерживаться при наименовании пакетов. Это сделано для того, чтобы каталог пакетов было легко просматривать, поскольку там уже тысячи пакетов, и пользователи могут отказаться от их использования, если это будет напрягать их глаза!
-Имя пакета должно иметь вид [.filename]#language_region-name-compiled.specifics-version.numbers#.
+Имена пакетов имеют формат [.filename]#language_region-name-compiled.specifics-version.numbers#.
-Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Вы должны задавать значения переменных в соответствии с этим форматом.
+Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что переменные заданы в соответствии с этим форматом.
+
+[[porting-pkgname-language]]
+[.filename]#language_region-#::
+FreeBSD стремится поддерживать родной язык своих пользователей. Часть _language-_ представляет собой двухбуквенное сокращение естественного языка, определённое стандартом ISO-639, когда порт относится к определённому языку. Примерами являются `ja` для японского, `ru` для русского, `vi` для вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого.
++
+Если порт относится к определённому региону в языковой зоне, добавьте также двухбуквенный код страны. Например, `en_US` для американского английского и `fr_CH` для швейцарского французского.
++
+Часть _language-_ задается в `PKGNAMEPREFIX`.
-. FreeBSD пытается поддерживать языки, на которых разговаривают её пользователи. Часть _language-_ должна быть двухсимвольным сокращением от названия языка по стандарту ISO-639, если порт специфичен для конкретного языка. Примерами являются `ja` для японского, `ru` для русского, `vi` для вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого языков.
-+
-Если ваш порт специфичен для конкретного региона внутри области использования языка, добавьте также двухсимвольный код страны. Примерами являются `en_US` для US English и `fr_CH` для Swiss French.
-+
-Часть _language-_ должна задаваться в переменной `PKGNAMEPREFIX`.
-. Первая буква части [.filename]#name# должна быть в нижнем регистре. (Оставшаяся часть названия может содержать буквы в верхнем регистре, так что принимайте решение сами, когда преобразуете имя программного пакета, содержащего в имени некоторое количество заглавных букв.) Существует традиция именовать модули для `Perl 5`, добавляя впереди `p5-` и преобразуя пару двоеточий в дефис; например, модуль `Data::Dumper` будет именоваться `p5-Data-Dumper`.
-. Убедитесь, что имя порта и версия четко отделены и размещаются в переменных `PORTNAME` и `PORTVERSION`. Единственная причина, по которой `PORTNAME` содержит версионную часть, это если полученный дистрибутив сам назван таким образом, как это сделано для портов [.filename]#textproc/libxml2# или [.filename]#japanese/kinput2-freewnn#. В противном случае `PORTNAME` не должен содержать никакой информации, указывающей на версию. То, что некоторые порты имеют одинаковый `PORTNAME`, является вполне нормальным, как для портов [.filename]#www/apache*#; в этом случае различные версии (и различные записи в индексе) отличаются по значениям `PKGNAMEPREFIX` и `PKGNAMESUFFIX`.
-. Если порт может быть построен с различными <<makefile-masterdir,статически заданными значениями по умолчанию>> (обычно это часть имени каталога в семействе портов), то часть _-compiled.specifics_ должна определять вкомпилированные значения по умолчанию (дефис не обязателен). Примерами являются размеры бумаги и шрифтов.
-+
-Часть _-compiled.specifics_ должна задаваться в переменной `PKGNAMESUFFIX`.
-. Строка с номером версии должна следовать за дефисом (`-`) и являться списком разделенных двоеточием чисел и букв в нижнем регистре. В частности, не разрешается иметь еще один дефис внутри строки с обозначением номера версии. Единственным исключением является строчка `pl` (означающая "patchlevel"), которая может использоваться _только_ тогда, когда у программного обеспечения нет старшего и младшего номера версии. Если в номер версии программного обеспечения включена строчка типа "alpha", "beta", "rc" или "pre", возьмите из неё первую букву и поставьте её непосредственно после точки. Если после таких строк номер версии ещё продолжается, то после буквы должно следовать число без дополнительной разделяющей точки.
-+
-Смысл такого формата заключается в удобстве сортировки портов по номеру версии. В частности, следите за тем, чтобы компоненты номера версии разделялись точкой, и если там присутствует дата, то используйте формат `0.0.yyyy.mm.dd`, но не `dd.mm.yyyy` или не совместимый с проблемой Y2K `yy.mm.dd`. Добавление к версии префикса `0.0.` является важным, в случае если выпущен релиз с присвоением настоящей версии, которая в числовом представлении, конечно же, будет ниже, чем `yyyy`.
+[[porting-pkgname-name]]
+[.filename]#name#::
+Убедитесь, что название порта и его версия четко разделены и указаны в `PORTNAME` и `DISTVERSION`. Единственная причина, по которой `PORTNAME` может содержать часть версии, — это если вышестоящее распространяемое ПО действительно так названо, как в портах package:textproc/libxml2[] или package:japanese/kinput2-freewnn[]. В противном случае `PORTNAME` не может содержать информацию о версии. Довольно нормально, когда несколько портов имеют одинаковый `PORTNAME`, как это делают порты package:www/apache*[]; в таком случае разные версии (и разные записи в индексе) различаются значениями `PKGNAMEPREFIX` и `PKGNAMESUFFIX`.
++
+Существует традиция называть модули `Perl 5`, добавляя префикс `p5-` и заменя разделитель в виде двойного двоеточия на дефис. Например, модуль `Data::Dumper` становится `p5-Data-Dumper`.
+[[porting-pkgname-compiled-specifics]]
+[.filename]#-compiled.specifics#::
+Если порт может быть собран с различными crossref:makefiles[makefile-masterdir,жестко заданными значениями по умолчанию] (обычно это часть имени каталога в семействе портов), часть _-compiled.specifics_ указывает скомпилированные значения по умолчанию. Дефис является необязательным. Примерами могут служить размер бумаги и единицы измерения шрифтов.
++
+Часть _-compiled.specifics_ задаётся в `PKGNAMESUFFIX`.
-Вот несколько (реальных) примеров того, как преобразовать имя из оригинального, придуманного авторами, к подходящему для имени пакета:
+[[porting-pkgname-version-numbers]]
+[.filename]#-version.numbers#::
+Строка версии следует после тире (`-`) и представляет собой разделённый точками список целых чисел и строчных букв латинского алфавита. В частности, не допускается использование дополнительных тире внутри строки версии. Единственное исключение — строка `pl` (означающая "уровень исправления"), которую можно использовать _только_ в случае отсутствия у программного обеспечения номеров основной и дополнительной версий. Если в версии программного обеспечения встречаются строки типа "alpha", "beta", "rc" или "pre", следует взять первую букву и поместить её сразу после точки. Если после таких названий строка версии продолжается, числа следуют за буквой без дополнительной точки между ними (например, `1.0b2`).
++
+Идея заключается в упрощении сортировки портов за счёт анализа строки версии. В частности, необходимо убедиться, что компоненты номера версии всегда разделены точкой, а если дата является частью строки, использовать формат `d__yyyy.mm.dd__`, а не `_dd.mm.yyyy_` или не соответствующий стандарту Y2K формат `_yy.mm.dd_`. Важно добавлять перед версией букву, в данном случае `d` (от слова "дата"), на случай, если будет выпущена версия с фактическим номером, который численно окажется меньше `_yyyy_`.
-[.informaltable]
-[cols="1,1,1,1,1,1", frame="none", options="header"]
+[IMPORTANT]
+====
+Название пакета должно быть уникальным среди всех портов в дереве. Убедитесь, что порт с таким же `PORTNAME` ещё не существует, и если он есть, добавьте один из crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` или `PKGNAMESUFFIX`].
+====
+
+Вот несколько (реальных) примеров преобразования названия, указанного авторами программного обеспечения, в подходящее имя пакета. В каждой строке указана только одна из переменных `DISTVERSION` или `PORTVERSION`, в зависимости от того, какая используется в [.filename]#Makefile# порта:
+
+.Примеры наименования пакетов
+[cols="1,1,1,1,1,1,1", frame="none", options="header"]
|===
| Имя дистрибутива
| PKGNAMEPREFIX
| PORTNAME
| PKGNAMESUFFIX
-| PORTVERSION
-| Обоснование
+| DISTVERSION
+| .PORTVERSION
+| Причина или комментарий
|mule-2.2.2
|(пусто)
|mule
|(пусто)
|2.2.2
-|Изменений не потребовалось
+|
+|Никаких изменений не требуется
+
+|mule-1.0.1
+|(пусто)
+|mule
+|1
+|1.0.1
+|
+|Это версия 1 mule, а версия 2 уже существует
|EmiClock-1.0.2
|(пусто)
|emiclock
|(пусто)
|1.0.2
-|Для отдельных программ имена с заглавными буквами запрещены
+|
+|Нет имен в верхнем регистре для отдельных программ
|rdist-1.3alpha
|(пусто)
|rdist
|(пусто)
-|1.3.a
-|Строчки типа `alpha` запрещены
+|1.3alpha
+|
+|Версия будет `1.3.a`
|es-0.9-beta1
|(пусто)
|es
|(пусто)
-|0.9.b1
-|Строчки типа `beta` запрещены
+|0.9-beta1
+|
+|Версия будет `0.9.b1`
|mailman-2.0rc3
|(пусто)
|mailman
|(пусто)
-|2.0.r3
-|Строчки типа `rc` запрещены
+|2.0rc3
+|
+|Версия будет `2.0.r3`
|v3.3beta021.src
|(пусто)
|tiff
|(пусто)
+|
|3.3
-|Что это такое было вообще?
+|Что это вообще было?
|tvtwm
|(пусто)
|tvtwm
|(пусто)
-|pl11
-|Всегда требуется указание номера версии
+|
+|p11
+|Нет версии в имени файла, используйте то, что указано в исходном коде
|piewm
|(пусто)
|piewm
|(пусто)
|1.0
-|Всегда требуется указание номера версии
+|
+|Нет версии в имени файла, используйте то, что указано в исходном коде
|xvgr-2.10pl1
|(пусто)
|xvgr
|(пусто)
-|2.10.1
-|`pl` разрешено только при отсутствии старшего/младшего номера версии
+|
+|2.10.pl1
+|В таком случае, `pl1` означает уровень патча, поэтому использование DISTVERSION невозможно.
|gawk-2.15.6
|ja-
|gawk
|(пусто)
|2.15.6
-|Версия на японском языке
+|
+|Японская языковая версия
|psutils-1.13
|(пусто)
|psutils
|-letter
|1.13
-|Размер бумаги задается статически во время построения пакета
+|
+|Размер бумаги жестко задан во время сборки пакета
|pkfonts
|(пусто)
|pkfonts
|300
|1.0
-|пакет для шрифтов 300dpi
+|
+|Пакет для шрифтов с разрешением 300dpi
|===
-Если в исходном коде абсолютно нет информации о номере версии и не похоже, что автор собирается выпускать другую версию, то в качестве номера версии задайте просто `1.0` (как в примере с `piewm` выше). В противном случае спросите автора программы или используйте дату (`0.0.yyyy.mm.dd`) в качестве номера версии.
+Если в исходном источнике полностью отсутствует информация о версии и маловероятно, что автор когда-либо выпустит новую версию, просто укажите строку версии как `1.0` (как в примере с `piewm` выше). В противном случае, спросите автора или используйте дату выпуска исходного файла в формате `d__yyyy.mm.dd__` или `d__yyyymmdd__` в качестве версии.
+
+[TIP]
+====
+Используйте любую букву. Здесь `d` означает дату, если источник — это репозиторий Git, часто используется `g` с последующей датой коммита, также распространено использование `s` для снимка.
+====
[[makefile-categories]]
-== Разделение по категориям
+== Категоризация
+[[makefile-categories-definition]]
=== `CATEGORIES`
-В процессе создания пакета он помещается в каталог [.filename]#/usr/ports/packages/All#, а в одном или более подкаталогов из [.filename]#/usr/ports/packages# создаются на него ссылки. Имена этих подкаталогов определяются переменной `CATEGORIES`. Такая схема нужна для облегчения жизни пользователя, когда он сталкивается с массой пакетов на FTP-сервере или компакт-диске. Пожалуйста, посмотрите на <<porting-categories,текущий список категорий>> и выберите те из них, которые более всего подходят к вашему порту.
+При создании пакета он помещается в [.filename]#/usr/ports/packages/All#, и ссылки на него создаются в одной или нескольких поддиректориях [.filename]#/usr/ports/packages#. Имена этих поддиректорий задаются переменной `CATEGORIES`. Это предназначено для облегчения поиска пакетов пользователем при просмотре большого количества пакетов на FTP-сайте или CDROM. Пожалуйста, ознакомьтесь с crossref:makefiles[porting-categories,текущим списком категорий] и выберите подходящие для данного порта.
-Этот список также определяет, куда в дереве портов будет помещен порт. Если вы укажете здесь более одной категории, то предполагается, что файлы порта будут помещены в подкаталог с именем первой категории. Посмотрите <<choosing-categories,ниже>> для получения подробной информации о том, как правильно выбрать категории.
+Этот список также определяет, где в дереве портов будет размещён порт. Если здесь указано несколько категорий, файлы порта должны быть помещены в подкаталог с названием первой категории. Дополнительные сведения о выборе подходящих категорий см. в crossref:makefiles[choosing-categories,ниже].
[[porting-categories]]
=== Текущий список категорий
-Вот текущий список категорий. Те, которые отмечены звёздочкой (`*`), являются _виртуальными_ категориями-они не имеют собственного подкаталога в дереве портов. Они используются только в качестве вторичных категорий, и только для поиска.
+Вот текущий список категорий портов. Категории, помеченные звёздочкой (`*`), являются _виртуальными_ — они не имеют соответствующего подкаталога в дереве портов. Они используются только как вторичные категории и исключительно для целей поиска.
[NOTE]
====
-Для невиртуальных категорий имеется однострочное описание в `COMMENT` в [.filename]#Makefile# соответствующего подкаталога.
+Для невиртуальных категорий в `COMMENT` в [.filename]#Makefile# соответствующего подкаталога содержится однострочное описание.
====
[.informaltable]
@@ -319,462 +572,596 @@ PORTEPOCH= 1
|===
| Категория
| Описание
-| Примечания
+| Заметки
|[.filename]#accessibility#
|Порты для помощи пользователям с ограниченными возможностями.
-|
+|
-|[.filename]#afterstep*#
-|Порты, поддерживающие менеджер окон http://www.afterstep.org[AfterStep].
-|
+|[.filename]#afterstep#`*`
+|Порты для поддержки оконного менеджера http://www.afterstep.org/[AfterStep].
+|
|[.filename]#arabic#
|Поддержка арабского языка.
-|
+|
|[.filename]#archivers#
-|Инструменты для работы с архивами.
-|
+|Инструменты для архивирования.
+|
|[.filename]#astro#
-|Приложения, связанные с астрономией.
-|
+|Астрономические порты.
+|
|[.filename]#audio#
-|Поддержка работы со звуком.
-|
+|Поддержка звука.
+|
|[.filename]#benchmarks#
-|Утилиты для измерения производительности системы.
-|
+|Утилиты для тестирования производительности.
+|
|[.filename]#biology#
|Программное обеспечение, связанное с биологией.
-|
+|
|[.filename]#cad#
-|Инструменты Систем Автоматизированного Проектирования.
-|
+|Компьютерные средства автоматизированного проектирования.
+|
|[.filename]#chinese#
|Поддержка китайского языка.
-|
+|
|[.filename]#comms#
-|Коммуникационное программное обеспечение.
-|В основном программы для работы с последовательным портом.
+|Программное обеспечение для связи.
+|В основном программное обеспечение для работы с последовательным портом.
|[.filename]#converters#
-|Утилиты для преобразования символьных форматов.
-|
+|Преобразователи символьных кодировок.
+|
|[.filename]#databases#
|Базы данных.
-|
+|
|[.filename]#deskutils#
-|То, что было на столе до изобретения компьютеров.
-|
+|Вещи, которые раньше находились на рабочем столе до изобретения компьютеров.
+|
|[.filename]#devel#
-|Утилиты для разработки программного обеспечения.
-|Не помещайте сюда библиотеки просто потому, что это библиотеки-если они подпадают под какую-то другую категорию, то их быть здесь не должно.
+|Средства разработки.
+|Не размещайте библиотеки здесь только потому, что они являются библиотеками. Они _не_ должны быть в этой категории, если только они действительно не подходят никуда больше.
|[.filename]#dns#
-|Программное обеспечение для работы DNS.
-|
+|Программное обеспечение, связанное с DNS.
+|
-|[.filename]#docs*#
+|[.filename]#docs#`*`
|Мета-порты для документации FreeBSD.
-|
+|
|[.filename]#editors#
-|Редакторы общего назначения.
-|Специализированные редакторы относят к разделу для соответствующих инструментов (например, редактор математических формул попадает в категорию [.filename]#math#).
+|Общие редакторы.
+|Специализированные редакторы помещаются в раздел соответствующих инструментов. Например, редактор математических формул будет помещён в [.filename]#math#, а [.filename]#editors# будет для него второй категорией.
-|[.filename]#elisp*#
-|Порты для Emacs lisp.
-|
+|[.filename]#education#`*`
+|Программное обеспечение для образования.
+|Это включает приложения, утилиты или игры, разработанные в первую очередь или в значительной степени для помощи пользователю в изучении конкретной темы или обучении в целом. Также сюда входят приложения для создания курсов, приложения для предоставления курсов и приложения для управления классом или школой
+
+|[.filename]#elisp#`*`
+|Порты Emacs-lisp.
+|
|[.filename]#emulators#
|Эмуляторы других операционных систем.
-|Эмуляторы терминалов сюда _не_ относятся-те, которые разработаны для X, должны быть в категории [.filename]#x11#, а текстовые в [.filename]#comms# или [.filename]#misc#, в зависимости от конкретного их предназначения.
+|Терминальные эмуляторы _не_ относятся сюда. Основанные на X идут в [.filename]#x11#, а текстовые — либо в [.filename]#comms#, либо в [.filename]#misc#, в зависимости от конкретной функциональности.
+
+|[.filename]#enlightenment#`*`
+|Порты, связанные с оконным менеджером Enlightenment.
+|
+
+|[.filename]#filesystems#
+|Файловые системы и связанные утилиты.
+|
|[.filename]#finance#
-|Приложения для работы с деньгами, финансами и всем, что с этим связано.
-|
+|Монетарные, финансовые и связанные с ними приложения.
+|
|[.filename]#french#
|Поддержка французского языка.
-|
+|
|[.filename]#ftp#
-|Клиенты и серверы FTP.
-|Если ваш порт понимает как FTP, так и HTTP, поместите его в категорию [.filename]#ftp# и укажите вторичную категорию [.filename]#www#.
+|Клиентские и серверные утилиты FTP.
+|Если порт поддерживает как FTP, так и HTTP, поместите его в [.filename]#ftp# с дополнительной категорией [.filename]#www#.
|[.filename]#games#
|Игры.
-|
+|
-|[.filename]#geography*#
+|[.filename]#география#`*`
|Программное обеспечение, связанное с географией.
-|
+|
|[.filename]#german#
|Поддержка немецкого языка.
-|
+|
-|[.filename]#gnome*#
-|Порты Проекта http://www.gnome.org[GNOME].
-|
+|[.filename]#gnome#`*`
+|Порты из проекта https://www.gnome.org/[GNOME].
+|
-|[.filename]#gnustep*#
-|Программное обеспечение для окружения рабочего стола GNUstep.
-|
+|[.filename]#gnustep#`*`
+|Программное обеспечение, связанное со средой рабочего стола GNUstep.
+|
|[.filename]#graphics#
|Графические утилиты.
-|
+|
-|[.filename]#hamradio*#
-|Программное обеспечение для любительского радио
-|
+|[.filename]#hamradio#`*`
+|Программное обеспечение для радиолюбителей.
+|
-|[.filename]#haskell*#
+|[.filename]#haskell#`*`
|Программное обеспечение, связанное с языком Haskell.
-|
+|
|[.filename]#hebrew#
|Поддержка иврита.
-|
+|
|[.filename]#hungarian#
-|Поддержка венгерского языка.
-|
-
-|[.filename]#ipv6*#
-|Программное обеспечение, связанное с IPv6.
-|
+|Венгерская языковая поддержка.
+|
|[.filename]#irc#
-|Утилиты для Internet Relay Chat.
-|
+|Утилиты Internet Relay Chat.
+|
|[.filename]#japanese#
|Поддержка японского языка.
-|
+|
|[.filename]#java#
|Программное обеспечение, связанное с языком Java(TM).
-|Категория [.filename]#java# ни в коем случае не должна быть единственной для порта. Оставьте для портов, непосредственно имеющих отношение к языку Java, портерам также рекомендуется не использовать [.filename]#java# как основную категорию порта.
+|Категория [.filename]#java# не должна быть единственной для порта. За исключением портов, непосредственно связанных с языком Java, разработчикам также рекомендуется не использовать [.filename]#java# в качестве основной категории для порта.
+
+|[.filename]#kde#`*`
+|Порты проекта https://www.kde.org/[KDE] (общие).
+|
+
+|[.filename]#kde-приложения#`*`
+|Приложения от проекта https://www.kde.org/[KDE].
+|
+
+|[.filename]#kde-frameworks#`*`
+|Дополнительные библиотеки от проекта https://www.kde.org/[KDE] для программирования с использованием Qt.
+|
-|[.filename]#kde*#
-|Порты проекта http://www.kde.org[KDE].
-|
+|[.filename]#kde-plasma#`*`
+|Рабочий стол от проекта https://www.kde.org/[KDE].
+|
-|[.filename]#kld*#
+|[.filename]#kld#`*`
|Загружаемые модули ядра.
-|
+|
|[.filename]#korean#
|Поддержка корейского языка.
-|
+|
|[.filename]#lang#
|Языки программирования.
-|
+|
-|[.filename]#linux*#
-|Linux приложения и утилиты.
-|
+|[.filename]#linux#`*`
+|Приложения и вспомогательные утилиты Linux.
+|
-|[.filename]#lisp*#
+|[.filename]#lisp#`*`
|Программное обеспечение, связанное с языком Lisp.
-|
+|
|[.filename]#mail#
-|Программы для работы с почтой.
-|
+|Почтовое программное обеспечение.
+|
+
+|[.filename]#mate#`*`
+|Порты, связанные с окружением рабочего стола MATE, форком GNOME 2.
+|
|[.filename]#math#
-|Программное обеспечение для численных вычислений и другие утилиты, связанные с математикой.
-|
+|Численные расчеты и другие математические утилиты.
+|
-|[.filename]#mbone*#
-|Приложения для MBone.
-|
+|[.filename]#mbone#`*`
+|Приложения MBone.
+|
|[.filename]#misc#
|Различные утилиты
-|В общем, то, что не попадает в другие категории. Если это возможно, попробуйте найти более подходящую, чем `misc`, категорию для вашего порта, так как здесь порты теряются.
+|Вещи, которые не подходят никуда больше. По возможности, попытайтесь найти для порта категорию лучше, чем `misc`, так как порты здесь часто остаются без внимания.
|[.filename]#multimedia#
-|Программное обеспечение для работы с мультимедиа.
-|
+|Мультимедийное программное обеспечение.
+|
|[.filename]#net#
|Различное сетевое программное обеспечение.
-|
+|
|[.filename]#net-im#
-|Программы мгновенного обмена сообщениями.
-|
+|Программное обеспечение для обмена мгновенными сообщениями.
+|
|[.filename]#net-mgmt#
-|Программное обеспечение для сетевого управления.
-|
+|Программное обеспечение для управления сетями.
+|
|[.filename]#net-p2p#
-|Приложения для пиринговых сетей.
-|
+|Одноранговые сетевые приложения.
+|
-|[.filename]#news#
-|Программное обеспечение для работы с конференциями USENET.
-|
+|[.filename]#сеть-vpn#`*`
+|Виртуальные частные сети.
+|
-|[.filename]#palm#
-|Программная поддержка http://www.palm.com/[Palm(TM)].
-|
+|[.filename]#news#
+|Программное обеспечение для USENET-новостей.
+|
-|[.filename]#parallel*#
-|Приложения, связанные с параллельными вычислениями.
-|
+|[.filename]#parallel#`*`
+|Приложения, работающие с параллелизмом в вычислениях.
+|
-|[.filename]#pear*#
-|Порты, относящиеся к технологии Pear PHP.
-|
+|[.filename]#pear#`*`
+|Порты, связанные с PHP-фреймворком Pear.
+|
-|[.filename]#perl5*#
-|Порты, которым для работы требуется Perl версии 5.
-|
+|[.filename]#perl5#`*`
+|Порты, требующие Perl версии 5 для работы.
+|
-|[.filename]#plan9*#
-|Различные программы из http://www.cs.bell-labs.com/plan9dist/[Plan9].
-|
+|[.filename]#plan9#`*`
+|Различные программы с https://9p.io/wiki/plan9/Download/index.html[Plan9].
+|
|[.filename]#polish#
|Поддержка польского языка.
-|
+|
|[.filename]#ports-mgmt#
|Порты для управления, установки и разработки портов и пакетов FreeBSD.
-|
+|
|[.filename]#portuguese#
|Поддержка португальского языка.
-|
+|
|[.filename]#print#
|Программное обеспечение для печати.
-|Инструменты для вёрстки (просмотрщики и тому подобное) тоже относятся сюда.
+|Инструменты для настольных издательских систем (превьюеры и т. д.) также относятся сюда.
-|[.filename]#python*#
-|Программное обеспечение, связанное с языком http://www.python.org/[Python].
-|
+|[.filename]#python#`*`
+|Программное обеспечение, связанное с языком https://www.python.org/[Python].
+|
-|[.filename]#ruby*#
-|Программное обеспечение, связанное с языком http://www.ruby-lang.org/[Ruby].
-|
+|[.filename]#ruby#`*`
+|Программное обеспечение, связанное с языком https://www.ruby-lang.org/[Ruby].
+|
-|[.filename]#rubygems*#
-|Порты для пакетов http://www.rubygems.org/[RubyGems].
-|
+|[.filename]#rubygems#`*`
+|Порты пакетов https://www.rubygems.org/[RubyGems].
+|
|[.filename]#russian#
|Поддержка русского языка.
-|
+|
-|[.filename]#scheme*#
+|[.filename]#scheme#`*`
|Программное обеспечение, связанное с языком Scheme.
-|
+|
|[.filename]#science#
-|Научные программы, которые не подпадают под другие категории, скажем, [.filename]#astro#, [.filename]#biology# или [.filename]#math#.
-|
+|Научные порты, которые не входят в другие категории, такие как [.filename]#astro#, [.filename]#biology# и [.filename]#math#.
+|
|[.filename]#security#
-|Программы, обеспечивающие безопасность системы.
-|
+|Средства обеспечения безопасности.
+|
|[.filename]#shells#
-|Различные командные процессоры.
-|
+|Командные оболочки.
+|
+
+|[.filename]#spanish#`*`
+|Поддержка испанского языка.
+|
|[.filename]#sysutils#
|Системные утилиты.
-|
+|
-|[.filename]#spanish*#
-|Поддержка испанского языка.
-|
-
-|[.filename]#tcl*#
-|Порты, для работы которых нужен Tcl.
-|
+|[.filename]#tcl#`*`
+|Порты, использующие Tcl для запуска.
+|
|[.filename]#textproc#
-|Утилиты для обработки текстов.
-|Инструменты для вёрстки помещаются в категорию [.filename]#print#, а не сюда.
+|Средства обработки текста.
+|Он не включает инструменты для настольных издательских систем, которые помещаются в [.filename]#print#.
-|[.filename]#tk*#
-|Порты, для работы которых нужен Tk.
-|
+|[.filename]#tk#`*`
+|Порты, использующие Tk для работы.
+|
|[.filename]#ukrainian#
|Поддержка украинского языка.
-|
+|
|[.filename]#vietnamese#
|Поддержка вьетнамского языка.
-|
+|
+
+|[.filename]#wayland#`*`
+|Порты для поддержки сервера дисплея Wayland.
+|
-|[.filename]#windowmaker*#
-|Порты для поддержки менеджера окон WindowMaker.
-|
+|[.filename]#windowmaker#`*`
+|Порты для поддержки оконного менеджера Window Maker.
+|
|[.filename]#www#
-|Программное обеспечение, связанное со всемирной паутиной.
-|Поддержка языка HTML относится сюда же.
+|Программное обеспечение, связанное с Всемирной паутиной.
+|Поддержка языка HTML также относится сюда.
|[.filename]#x11#
-|X Window System и иже с ними.
-|Эта категория предназначена только для программного обеспечения, которое поддерживает саму оконную систему. Не помещайте сюда обычные приложения для X: большинство из них должны быть перенесены в другие категории [.filename]#x11-*# (смотрите ниже).
+|Система X Window и связанные компоненты.
+|Эта категория предназначена только для программного обеспечения, которое напрямую поддерживает оконную систему. Не помещайте сюда обычные X-приложения. Большинство из них относятся к другим категориям [.filename]#x11-*# (см. ниже).
|[.filename]#x11-clocks#
-|Часы для X11.
-|
+|Часы X11.
+|
|[.filename]#x11-drivers#
|Драйверы X11.
-|
+|
|[.filename]#x11-fm#
-|Менеджеры файлов для X11.
-|
+|Менеджеры файлов X11.
+|
|[.filename]#x11-fonts#
-|Шрифты для X11 и утилиты для работы с ними.
-|
+|Шрифты и утилиты для работы со шрифтами в X11.
+|
|[.filename]#x11-servers#
-|Серверы для X11.
-|
+|Серверы X11.
+|
|[.filename]#x11-themes#
-|Темы для X11.
-|
+|Темы X11.
+|
|[.filename]#x11-toolkits#
-|Пакеты разработчика для X11.
-|
+|Инструментарии X11.
+|
|[.filename]#x11-wm#
-|Оконные менеджеры для X11.
-|
+|Оконные менеджеры X11.
+|
-|[.filename]#xfce*#
-|Порты, связанные с окружением рабочего стола http://www.xfce.org/[Xfce].
-|
+|[.filename]#xfce#`*`
+|Порты, связанные с окружением рабочего стола https://www.xfce.org/[Xfce].
+|
-|[.filename]#zope*#
-|Поддержка http://www.zope.org/[Zope].
-|
+|[.filename]#zope#`*`
+|https://www.zope.org/[Zope] поддержка.
+|
|===
[[choosing-categories]]
-=== Выбор правильной категории
+=== Выбор подходящей категории
-Так как многие категории перекрываются, вам часто необходимо будет выбирать, какая их них должна быть основной для вашего порта. Есть несколько правил, по которым можно решить этот вопрос. Вот список приоритетов, в уменьшающейся степени предпочтения:
+Поскольку многие категории пересекаются, выбор основной категории для порта может быть утомительным. Существует несколько правил, регулирующих этот вопрос. Вот список приоритетов в порядке убывания важности:
-* Первая категория должна быть физической категорий (смотрите <<porting-categories,выше>>). Это необходимо для создания пакетов. После этого виртуальные и физические категории могут смешиваться.
-* Сначала всегда идут категории, специфичные для языков. Например, если ваш порт устанавливает японские шрифты для X11, то строчка `CATEGORIES` должна иметь вид [.filename]#japanese x11-fonts#.
-* Более конкретные категории идут первыми перед более общими. В частности, редактор HTML должен быть описан как [.filename]#www editors#, а не наоборот. Кроме того, вы не должны указывать категорию [.filename]#net#, если порт относится к одной из категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, [.filename]#security# или [.filename]#www#, так как [.filename]#net# включается автоматически.
-* [.filename]#x11# используется как вторичная категория только в случае, если в качестве основной категории указан естественный язык. В частности, вам не нужно указывать [.filename]#x11# в качестве категории для приложений X.
-* Режимы для редактора Emacs должны помещаться в ту же категорию, что и приложение, которое поддерживается этим режимом, а не в [.filename]#editors#. Например, режим Emacs для редактирования исходного кода некоторого языка программирования должен быть помещен в категорию [.filename]#lang#.
-* Порты, устанавливающие загружаемые модули ядра, должны содержать виртуальную категорию [.filename]#kld# в строке `CATEGORIES`. Это одно из действий, выполняемых автоматически с добавлением `kmod` в строке `USES`.
-* [.filename]#misc# не должна указываться вместе с любой другой невиртуальной категорией. Если вы указываете `misc` вместе с чем-то ещё в строке `CATEGORIES`, это значит, что вы можете спокойно удалить `misc` и просто поместить порт в этот другой подкаталог!
-* Если ваш порт решительным образом не подпадает ни под какую категорию, поместите его в [.filename]#misc#.
+* Первая категория должна быть физической (см. crossref:makefiles[porting-categories,выше]). Это необходимо для работы упаковки. Виртуальные категории и физические категории могут чередоваться после этого.
+* Языковые категории всегда указываются первыми. Например, если порт устанавливает японские шрифты для X11, то строка `CATEGORIES` будет выглядеть так: [.filename]#japanese x11-fonts#.
+* Конкретные категории перечислены перед менее специфичными. Например, HTML-редактор указывается как [.filename]#www editors#, а не наоборот. Также не следует указывать [.filename]#net#, если порт принадлежит к любой из категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, [.filename]#security# или [.filename]#www#, так как [.filename]#net# подразумевается автоматически.
+* [.filename]#x11# используется как вторичная категория только в случае, когда основной категорией указан естественный язык. В частности, не указывайте [.filename]#x11# в строке категории для X-приложений.
+* Режимы Emacs размещаются в той же категории портов, что и приложение, поддерживаемое данным режимом, а не в [.filename]#editors#. Например, режим Emacs для редактирования исходных файлов какого-либо языка программирования попадает в [.filename]#lang#.
+* Порты, устанавливающие загружаемые модули ядра, также имеют виртуальную категорию [.filename]#kld# в строке `CATEGORIES`. Это одна из вещей, автоматически обрабатываемых при добавлении `USES=kmod`.
+* [.filename]#misc# не встречается вместе с другими невиртуальными категориями. Если `misc` указан вместе с чем-то еще в `CATEGORIES`, это означает, что `misc` можно безопасно удалить, а порт разместить только в другом подкаталоге.
+* Если порт действительно не подходит никуда больше, поместите его в [.filename]#misc#.
-Если вы не уверены в правильности выбора категории, пожалуйста, отметьте это в вашем сообщении man:send-pr[1], чтобы мы могли обсудить это до того, как включить порт в Коллекцию. Если вы являетесь коммиттером, пошлите замечание на адрес {freebsd-ports}, чтобы мы могли обсудить это. Зачастую новые порты помещаются не в ту категорию только для того, чтобы их оттуда сразу же удалили. Это приводит к излишнему и ненужному росту основного хранилища исходных текстов.
+Если категория не определена четко, пожалуйста, укажите это в комментарии при https://bugs.freebsd.org/submit/[отправке порта] в баг-трекере, чтобы мы могли обсудить её перед импортом. Как коммиттер, отправьте сообщение в рассылку {freebsd-ports}, чтобы мы сначала обсудили это. Слишком часто новые порты импортируются в неправильную категорию, после чего их сразу же приходится перемещать.
[[proposing-categories]]
=== Предложение новой категории
-Поскольку со временем Коллекция Портов увеличилась, то в связи с этим были добавлены различные новые категории. Новые категории могут быть или _виртуальными_ категориями-которые не имеют соответствующего подкаталога в дереве портов-или _физическими_ категориями-у которых он есть. Следующий текст содержит обсуждение вопросов, возникающих при создании новой физической категории, чтобы вы могли понимать их, когда предложите новую категорию.
+По мере роста Коллекции портов со временем были введены различные новые категории. Новые категории могут быть _виртуальными_ — те, у которых нет соответствующего подкаталога в дереве портов, или _физическими_ — те, у которых он есть. В этом разделе обсуждаются вопросы, связанные с созданием новой физической категории. Внимательно ознакомьтесь с ним, прежде чем предлагать новую.
-В соответствие с существующей практикой мы избегаем создания новой физической категории, пока достаточно большое число портов логически ей не принадлежит или же порты, которые могли бы ей принадлежать, не являются логически обособленной группой, представляющей для всех ограниченный интерес (в частности, категории, относящиеся к естественным языкам); предпочтительно выполнение обоих условий.
+Наша текущая практика заключается в том, чтобы избегать создания новой физической категории, если только либо большое количество портов логически принадлежит к ней, либо порты, которые к ней относятся, представляют собой логически обособленную группу, представляющую ограниченный общий интерес (например, категории, связанные с разговорными человеческими языками), или, желательно, оба условия одновременно.
-Основной причиной для этого является то, что такое изменение создает extref:{committers-guide}[изрядное количество работы, ports] и для коммиттеров, и для всех тех пользователей, которые отслеживают изменения в Коллекции Портов. В дополнение, предложенная категория создает естественное разногласие. (Пожалуй, потому что не существует четкого соглашения, является ли категория "слишком большой", или должны ли категории предоставлять себя для просмотра (и, таким образом, какое количество категорий было бы идеальным значением), и так далее.)
+Обоснование этого заключается в том, что такое изменение создает extref:{committers-guide}[значительный объем работы, ports] как для коммиттеров, так и для всех пользователей, которые отслеживают изменения в Коллекции портов. Кроме того, предлагаемые изменения категорий, как правило, вызывают споры. (Возможно, это связано с отсутствием четкого консенсуса относительно того, когда категория становится «слишком большой», а также относительно того, должны ли категории способствовать удобству просмотра (и, следовательно, какое количество категорий было бы идеальным), и так далее.)
-Процедура:
+Вот процедура:
[.procedure]
-====
-. Предложите новую категорию на {freebsd-ports}. Вам следует включить для новой категории детальное обоснование, в том числе почему вы считаете, что существующие категории не являются достаточными, и список существующих портов, предложенных для перемещения. (Если есть новые порты, ожидающие в GNATS и попадающие в эту категорию, то укажите их тоже.) Если вы являетесь сопровождающим и/или отправителем, то укажите это соответственно, так как это может помочь вам в вашем деле.
-. Принимайте участие в обсуждении.
-. Если кажется, что для вашей идеи появилась поддержка, отправьте PR, который будет включать обоснование и список существующих портов, которые надо переместить. В идеале этот PR должен также включать патчи для следующего:
+. Предложите новую категорию на {freebsd-ports}. Включите подробное обоснование для новой категории, объясните, почему существующие категории недостаточны, и укажите список существующих портов, предлагаемых к перемещению. (Если в Bugzilla есть ожидающие рассмотрения новые порты, которые подходят под эту категорию, также перечислите их.) Если вы являетесь сопровождающим и/или подающим предложение, укажите это, так как это может помочь в рассмотрении.
+. Участвуйте в обсуждении.
+. Если кажется, что идея находит поддержку, оформите PR, включающий как обоснование, так и список существующих портов, которые необходимо переместить. В идеале, этот PR также должен содержать следующие исправления:
-** [.filename]#Makefile#'ы для новых портов в результате репозиторного копирования
-** [.filename]#Makefile# для категорий старых портов
-** [.filename]#Makefile#'ы для портов, зависящих от старых портов
-** (в дополнение, вы можете включить другие файлы, требующие изменений, согласно процедуре из Руководства Коммиттера.)
+** [.filename]##Makefile## для новых портов после копирования их репозитория
+** [.filename]#Makefile# для новой категории
+** [.filename]#Makefile# для старых категорий портов
+** [.filename]##Makefile## для портов, зависящих от старых портов
+** (для дополнительной оценки включите другие файлы, которые необходимо изменить, в соответствии с процедурой, описанной в Руководстве коммиттера.)
-. Поскольку это затрагивает инфраструктуру портов и охватывает не только выполнение репозиторного копирования, но также, возможно, и выполнение регрессивных тестов на кластере построения, то PR должна назначать себе {portmgr}.
-. Если этот PR одобрен, то коммиттеру нужно продолжить остальную часть процедуры, которая extref:{committers-guide}[изложена в Руководстве Коммиттера, ports].
-====
+. Поскольку это затрагивает инфраструктуру портов и включает перемещение и исправление многих портов, а также, возможно, проведение регрессионных тестов на сборочном кластере, назначьте PR для {portmgr}.
+. Если этот PR будет одобрен, коммиттер должен будет выполнить оставшуюся часть процедуры, extref:{committers-guide}[описанной в Руководстве коммиттера,ports].
-Предложение новой виртуальной категории должно быть схожим с вышеизложенным, но при этом затрагивать намного меньше, поскольку ни один из портов не будет перемещен в действительности. В этом случае единственными патчами, включенными в PR, будут те, что добавляют новую категорию в `CATEGORIES` каждого из затрагиваемых портов.
+Предложение новой виртуальной категории аналогично описанному выше, но гораздо менее трудоёмко, так как фактически не потребуется перемещать порты. В этом случае единственные патчи, которые нужно включить в PR, — это добавление новой категории в `CATEGORIES` затронутых портов.
[[proposing-reorg]]
-=== Предложение реорганизации всех категорий
+=== Предложение о реорганизации всех категорий
-Время от времени кто-нибудь предлагает произвести реорганизацию категорий либо до двухуровневой, либо другого типа на основе ключевых слов. На данный момент из этих предложений ничего не получилось, потому что, хотя они просты в реализации, но предполагаемая переделка всей коллекции портов по меньшей мере приводит в уныние. Пожалуйста, прочтите историю этих предложений в архивах рассылок перед тем, как присылать свои соображения; более того, вы должны быть готовы представить работающий прототип.
+Изредка кто-то предлагает реорганизовать категории, используя либо двухуровневую структуру, либо какую-либо другую структуру ключевых слов. На сегодняшний день ни одно из этих предложений не было реализовано, потому что, хотя их очень легко выдвинуть, усилия, необходимые для переработки всей существующей коллекции портов в рамках любой реорганизации, пугают, мягко говоря. Пожалуйста, ознакомьтесь с историей этих предложений в архивах списка рассылки, прежде чем публиковать эту идею. Более того, будьте готовы к тому, что вас попросят предоставить рабочий прототип.
[[makefile-distfiles]]
-== Дистрибутивные файлы
+== Файлы дистрибутива
-Во второй части [.filename]#Makefile# задаётся, какие файлы и откуда должны быть сгружены для того, чтобы построить порт.
+Вторая часть [.filename]#Makefile# описывает файлы, которые необходимо загрузить для сборки порта, и места, откуда их можно скачать.
-=== `DISTVERSION/DISTNAME`
+[[makefile-distname]]
+=== `DISTNAME`
-В переменной `DISTNAME` указывается имя порта так, как назвали его создатели программного обеспечения. Значение `DISTNAME` по умолчанию совпадает с `${PORTNAME}-${PORTVERSION}`, так что переопределяете её значение только в случае необходимости. `DISTNAME` используется только в двух местах. Во-первых, список дистрибутивных файлов (`DISTFILES`) по умолчанию состоит из `${DISTNAME}${EXTRACT_SUFX}`. И во-вторых, предполагается, что дистрибутивный файл будет распакован в подкаталог с именем `WRKSRC`, значение которого по умолчанию есть не что иное, как [.filename]#work/${DISTNAME}#.
+`DISTNAME` — это имя порта, используемое авторами программного обеспечения. По умолчанию `DISTNAME` имеет значение `${PORTNAME}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`, а если не задано, `DISTVERSION` по умолчанию принимает значение `${PORTVERSION}`, поэтому переопределяйте `DISTNAME` только при необходимости. `DISTNAME` используется только в двух случаях. Во-первых, список файлов дистрибутива (`DISTFILES`) по умолчанию имеет значение `${DISTNAME}${EXTRACT_SUFX}`. Во-вторых, ожидается, что файл дистрибутива распакуется в подкаталог с именем `WRKSRC`, который по умолчанию равен [.filename]#work/${DISTNAME}#.
-Названия некоторых дистрибутивов, которые не укладываются в `${PORTNAME}-${PORTVERSION}`-схему, могут быть автоматически обработаны посредством установки переменной `DISTVERSION`. `PORTVERSION` и `DISTNAME` будут унаследованы автоматически, но конечно же могут быть переопределены. Следующая таблица демонстрирует некоторые примеры:
+Некоторые названия дистрибутивов от поставщиков, которые не соответствуют схеме `${PORTNAME}-${PORTVERSION}`, могут обрабатываться автоматически путем установки `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`. `PORTVERSION` будет автоматически вычисляться из `DISTVERSION`.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| DISTVERSION
-| PORTVERSION
+[IMPORTANT]
+====
+Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть установлена одновременно. Если `DISTVERSION` не определяет корректную `PORTVERSION`, не используйте `DISTVERSION`.
+====
-|0.7.1d
-|0.7.1.d
+Если схема версий исходного проекта может быть преобразована в схему, совместимую с портами, установите некоторую переменную в версию исходного проекта, _не используйте_ имя переменной `DISTVERSION`. Установите `PORTVERSION` в вычисленную версию на основе созданной вами переменной и задайте `DISTNAME` соответствующим образом.
-|10Alpha3
-|10.a3
+Если схема версионирования вышестоящего проекта не может быть легко преобразована в значение, совместимое с портами, установите `PORTVERSION` в разумное значение и задайте `DISTNAME` как `PORTNAME` с дословной версией вышестоящего проекта.
-|3Beta7-pre2
-|3.b7.p2
+[[makefile-distname-ex1]]
+.Получение `PORTVERSION` вручную
+[example]
+====
+BIND9 использует схему версионирования, несовместимую с версиями портов (в версиях используется `-`), и её нельзя получить с помощью `DISTVERSION`, так как после выпуска 9.9.9 выходят «уровни исправлений» в формате `9.9.9-P1`. `DISTVERSION` преобразует это в `9.9.9.p1`, что в схеме версионирования портов означает 9.9.9 pre-release 1, то есть версию, предшествующую 9.9.9, а не следующую за ней. Поэтому `PORTVERSION` вручную формируется из переменной `ISCVERSION`, чтобы получить `9.9.9p1`.
-|8:f_17
-|8f.17
-|===
+Порядок, в котором система портов и pkg будут сортировать версии, проверяется с помощью аргумента `-t` из man:pkg-version[8]:
+
+[source, shell]
+....
+% pkg version -t 9.9.9 9.9.9.p1
+> <.>
+% pkg version -t 9.9.9 9.9.9p1
+< <.>
+....
+
+<.> Знак `>` означает, что первый аргумент, переданный в `-t`, больше второго аргумента. `9.9.9` находится после `9.9.9.p1`.
+<.> Знак `<` означает, что первый аргумент, переданный в `-t`, меньше второго аргумента. `9.9.9` находится перед `9.9.9p1`.
+
+В файле [.filename]#Makefile# порта, например package:dns/bind99[], это достигается с помощью:
+
+[.programlisting]
+....
+PORTNAME= bind
+PORTVERSION= ${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}
+CATEGORIES= dns net
+MASTER_SITES= ISC/bind9/${ISCVERSION}
+PKGNAMESUFFIX= 99
+DISTNAME= ${PORTNAME}-${ISCVERSION}
+
+MAINTAINER= mat@FreeBSD.org
+COMMENT= BIND DNS suite with updated DNSSEC and DNS64
+WWW= https://www.isc.org/bind/
+
+LICENSE= ISCL
+
+# ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like
+ISCVERSION= 9.9.9-P6
+....
+
+Определите версию вышестоящего пакета в `ISCVERSION`, с комментарием, объясняющим, _почему_ это необходимо. Используйте `ISCVERSION` для получения совместимого с портами `PORTVERSION`. Используйте `ISCVERSION` напрямую для получения правильного URL для загрузки файла дистрибутива. Используйте `ISCVERSION` напрямую для именования дистрибутивного файла.
+====
+
+[[makefile-distname-ex2]]
+.Получить `DISTNAME` из `PORTVERSION`
+[example]
+====
+Время от времени имя файла дистрибутива имеет мало отношения или вообще никакого отношения к версии программного обеспечения.
+
+В пакете package:comms/kermit[], в файле дистрибутива присутствует только последний элемент версии:
+
+[.programlisting]
+....
+PORTNAME= kermit
+PORTVERSION= 9.0.304
+CATEGORIES= comms ftp net
+MASTER_SITES= ftp://ftp.kermitproject.org/kermit/test/tar/
+DISTNAME= cku${PORTVERSION:E}-dev20
+....
+
+Модификатор `:E` man:make[1] возвращает суффикс переменной, в данном случае `304`. Файл дистрибутива корректно создаётся как `cku304-dev20.tar.gz`.
+====
+
+[[makefile-distname-ex3]]
+.Экзотический случай 1
+[example]
+====
+Иногда нет связи между названием программы, её версией и файлом дистрибутива, в котором она распространяется.
+
+Из пакета package:audio/libworkman[]:
+
+[.programlisting]
+....
+PORTNAME= libworkman
+PORTVERSION= 1.4
+CATEGORIES= audio
+MASTER_SITES= LOCAL/jim
+DISTNAME= ${PORTNAME}-1999-06-20
+....
+
+====
+
+[[makefile-distname-ex4]]
+.Экзотический случай 2
+[example]
+====
+В пакете package:comms/librs232[] файл дистрибутива не имеет версии, поэтому необходимо использовать crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]:
+
+[.programlisting]
+....
+PORTNAME= librs232
+PORTVERSION= 20160710
+CATEGORIES= comms
+MASTER_SITES= http://www.teuniz.net/RS-232/
+DISTNAME= RS-232
+DIST_SUBDIR= ${PORTNAME}-${PORTVERSION}
+....
+
+====
[NOTE]
====
-Значения переменных `PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на значение `DISTNAME`. Заметьте также, что если значение `WRKSRC` равно [.filename]#work/${PORTNAME}-${PORTVERSION}#, и в случае, когда оригинальный архив называется по имени, отличном от `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}`, скорее всего, вы должны оставить `DISTNAME` как есть- лучше переопределить `DISTFILES`, чем задавать значения как `DISTNAME`, так и `WRKSRC` (и, возможно, ещё и `EXTRACT_SUFX`).
+`PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на `DISTNAME`. Также обратите внимание, что если `WRKSRC` равно [.filename]#${WRKDIR}/${DISTNAME}#, а исходный архив с исходным кодом называется иначе, чем `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}`, оставьте `DISTNAME` без изменений — определение только `DISTFILES` проще, чем определение и `DISTNAME`, и `WRKSRC` (а возможно, и `EXTRACT_SUFX`).
====
+[[makefile-master_sites]]
=== `MASTER_SITES`
-Содержит часть с каталогом FTP/HTTP-URL, которая указывает на оригинальный архив на сервере `MASTER_SITES`. Не забудьте лидирующий слэш ([.filename]#/#)!
+Запишите именем каталога из FTP/HTTP-URL, указывающего на исходный tarball, в `MASTER_SITES`. Не забудьте завершающий слэш ([.filename]#/#)!
+
+Макросы `make` будут пытаться использовать эту спецификацию для загрузки файла дистрибутива с помощью `FETCH`, если не смогут найти его уже в системе.
+
+Рекомендуется включать в этот список несколько сайтов, желательно с разных континентов. Это обеспечит защиту от проблем в глобальной сети.
+
+[IMPORTANT]
+====
+`MASTER_SITES` не должен быть пустым. Он должен указывать на реальный сайт, где размещены файлы дистрибутива. Он не может указывать на веб-архивы или кэшированные сайты с файлами дистрибутива FreeBSD. Единственное исключение из этого правила — порты, у которых нет файлов дистрибутива. Например, мета-порты не имеют файлов дистрибутива, поэтому `MASTER_SITES` не нужно задавать.
+====
+
+[[makefile-master_sites-shorthand]]
+==== Использование переменных `MASTER_SITE_*`
-Макрос команды `make` будет пытаться воспользоваться этой переменной для получения дистрибутивного файла с помощью программы `FETCH`, если он не будет найден в системе.
+Для популярных архивов, таких как SourceForge (`SOURCEFORGE`), GNU (`GNU`) или Perl CPAN (`PERL_CPAN`), доступны сокращённые обозначения. `MASTER_SITES` может использовать их напрямую:
-Рекомендуется помещать в список много сайтов, предпочтительно с разных континентов. Это поможет при наличии проблем с мировой сетью. Мы даже планируем добавить поддержку автоматического определения ближайшего сайта и сгрузки файлов оттуда; наличие нескольких сайтов будет способствовать этому начинанию.
+[.programlisting]
+....
+MASTER_SITES= GNU/make
+....
-Если оригинальный архив находится на одном из таких популярных серверов, как SourceForge, GNU или Perl CPAN, то указывайте эти сайты в простой форме при помощи `MASTER_SITE_*` (к примеру, `MASTER_SITE_SOURCEFORGE`, `MASTER_SITE_GNU` или `MASTER_SITE_PERL_CPAN`. Просто укажите в переменной `MASTER_SITES` одно из этих значений, а в переменной `MASTER_SITE_SUBDIR` задайте путь к архиву. Вот пример:
+Старый расширенный формат по-прежнему работает, но все порты были преобразованы в компактный формат. Расширенный формат выглядит следующим образом:
[.programlisting]
....
@@ -782,30 +1169,78 @@ MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= make
....
-Или можно использовать сокращенный формат:
+Эти значения и переменные определены в https://cgit.freebsd.org/ports/tree/Mk/bsd.sites.mk[Mk/bsd.sites.mk]. Новые записи добавляются часто, поэтому обязательно проверяйте последнюю версию этого файла перед отправкой порта.
+
+[TIP]
+====
+Для любой переменной `MASTER_SITE_FOO` можно использовать сокращение `_FOO_`. Например, используйте:
[.programlisting]
....
-MASTER_SITES= GNU/make
+MASTER_SITES= FOO
+....
+
+Если требуется `MASTER_SITE_SUBDIR`, используйте следующее:
+
+[.programlisting]
....
+MASTER_SITES= FOO/bar
+....
+
+====
+
+[NOTE]
+====
+Некоторые имена `MASTER_SITE_*` довольно длинные, и для удобства использования были определены сокращения:
+
+[[makefile-master_sites-shortcut]]
+.Сокращения для макросов `MASTER_SITE_*`
+[cols="1,1", frame="none", options="header"]
+|===
+| Макрос
+| Сокращение
-Эти переменные определены в файле [.filename]#/usr/ports/Mk/bsd.sites.mk#. Всё время добавляются новые записи, так что обращайтесь к последней версии этого файла перед тем, как послать нам свой порт.
+|`PERL_CPAN`
+|`CPAN`
+
+|`GITHUB`
+|`GH`
+
+|`GITHUB_CLOUD`
+|`GHC`
+
+|`LIBREOFFICE_DEV`
+|`LODEV`
+
+|`NETLIB`
+|`NL`
+
+|`RUBYGEMS`
+|`RG`
+
+|`SOURCEFORGE`
+|`SF`
+|===
+====
-Для популярных сайтов существует несколько _магических_ макросов с заранее известной структурой каталогов. Используйте для них сокращения, и система попытается угадать для вас правильный подкаталог.
+[[makefile-master_sites-magic]]
+==== Волшебные макросы MASTER_SITES
+
+Существует несколько "волшебных" макросов для популярных сайтов с предсказуемой структурой каталогов. Для них достаточно использовать сокращение, и система автоматически выберет подкаталог. Например, для порта с именем `Stardict`, версии `1.2.3`, размещенного на SourceForge, добавьте следующую строку:
[.programlisting]
....
MASTER_SITES= SF
....
-Если попытка угадать не удалась, то это может быть переписано следующим образом.
+подразумевает подкаталог с именем `/project/stardict/stardict/1.2.3`. Если подразумеваемый каталог указан неверно, его можно переопределить:
[.programlisting]
....
MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}
....
-Что также можно записать в таком виде:
+Это также можно записать как
[.programlisting]
....
@@ -813,87 +1248,697 @@ MASTER_SITES= SF
MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}
....
-.Популярные магические макросы для `MASTER_SITES`
+[[makefile-master_sites-popular]]
+.Волшебные макросы `MASTER_SITES`
[cols="1,1", frame="none", options="header"]
|===
| Макрос
-| Предполагаемый подкаталог
+| Предполагаемая поддиректория
+
+|`APACHE_COMMONS_BINARIES`
+|`${PORTNAME:S,commons-,,}`
+
+|`APACHE_COMMONS_SOURCE`
+|`${PORTNAME:S,commons-,,}`
|`APACHE_JAKARTA`
-|`/dist/jakarta/${PORTNAME:S,-,,/,}/source`
+|`${PORTNAME:S,-,/,}/source`
|`BERLIOS`
-|`/${PORTNAME:L}`
+|`${PORTNAME:tl}.berlios`
|`CHEESESHOP`
-|`/packages/source/source/${DISTNAME:C/(.).\*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}`
+|`source/${DISTNAME:C/(.).\*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}`
+
+|`CPAN`
+|`${PORTNAME:C/-.*//}`
|`DEBIAN`
-|`/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}`
+|`pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}`
+
+|`FARSIGHT`
+|`${PORTNAME}`
+
+|`FESTIVAL`
+|`${PORTREVISION}`
|`GCC`
-|`/pub/gcc/releases/${DISTNAME}`
+|`releases/${DISTNAME}`
+
+|`GENTOO`
+|`distfiles`
+
+|`GIMP`
+|`${PORTNAME}/${PORTVERSION:R}/`
+
+|`GH`
+|`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`
+
+|`GHC`
+|`${GH_ACCOUNT}/${GH_PROJECT}/`
|`GNOME`
-|`/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
+|`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
|`GNU`
-|`/gnu/${PORTNAME}`
+|`${PORTNAME}`
+
+|`GNUPG`
+|`${PORTNAME}`
+
+|`GNU_ALPHA`
+|`${PORTNAME}`
+
+|`HORDE`
+|`${PORTNAME}`
+
+|`LODEV`
+|`${PORTNAME}`
+
+|`MATE`
+|`${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
|`MOZDEV`
-|`/pub/mozdev/${PORTNAME:L}`
+|`${PORTNAME:tl}`
-|`PERL_CPAN`
-|`/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}`
+|`NL`
+|`${PORTNAME}`
-|`PYTHON`
-|`/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}`
+|`QT`
+|`archive/qt/${PORTVERSION:R}`
-|`RUBYFORGE`
-|`/${PORTNAME:L}`
+|`SAMBA`
+|`${PORTNAME}`
|`SAVANNAH`
-|`/${PORTNAME:L}`
+|`${PORTNAME:tl}`
|`SF`
-|`/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}`
+|`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`
+|===
+
+[[makefile-master_sites-github]]
+=== `USE_GITHUB`
+
+Если файл дистрибутива получен из определённого коммита или тега на https://github.com/[GitHub], для которого нет официально выпущенного файла, существует простой способ автоматически установить правильные значения `DISTNAME` и `MASTER_SITES`.
+
+[WARNING]
+====
+По состоянию на 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-future-stability-of-source-code-archives-and-hashes/[GitHub] объявили, что загрузки исходного кода будут стабильными в течение года. Пожалуйста, переключитесь на ресурсы выпусков (release assets), а если они недоступны, запросите их создание у вышестоящих разработчиков.
+====
+
+Доступны следующие переменные:
+
+[[makefile-master_sites-github-description]]
+.`USE_GITHUB` Описание
+[cols="1,1,1", options="header"]
+|===
+| Переменная
+| Описание
+| По умолчанию
+
+|`GH_ACCOUNT`
+|Имя учётной записи пользователя GitHub, который размещает проект
+|`${PORTNAME}`
+
+|`GH_PROJECT`
+|Название проекта на GitHub
+|`${PORTNAME}`
+
+|`GH_TAGNAME`
+|Имя тега для загрузки (2.0.1, хэш, ...) Использование имени ветки здесь некорректно. Также можно использовать хэш идентификатора коммита для создания снимка состояния.
+|`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`
+
+|`GH_SUBDIR`
+|Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в
+`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в
+crossref:makefiles[makefile-master_sites-github-multiple, Загрузка нескольких файлов из GitHub] для получения дополнительной информации.
+|(отсутствует)
+
+|`GH_TUPLE`
+|`GH_TUPLE` позволяет объединить `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME` и `GH_SUBDIR` в одну переменную. Формат следующий: _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. Часть `/`_subdir_ является необязательной. Это полезно, когда требуется получить несколько проектов с GitHub.
+|
+|===
+
+[IMPORTANT]
+====
+Не используйте `GH_TUPLE` для файла дистрибутива по умолчанию, так как у него нет значения по умолчанию.
+====
+
+[[makefile-master_sites-github-ex1]]
+.Простое использование `USE_GITHUB`
+[example]
+====
+
+При попытке создать порт для версии `1.2.7` pkg от пользователя FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл [.filename]#Makefile# в итоге будет выглядеть следующим образом (незначительно сокращено для примера):
+
+[.programlisting]
+....
+PORTNAME= pkg
+DISTVERSION= 1.2.7
+
+USE_GITHUB= yes
+GH_ACCOUNT= freebsd
+....
+
+Он автоматически получит `MASTER_SITES` установленным в `GH` и `WRKSRC` в `${WRKDIR}/pkg-1.2.7`.
+====
+
+[[makefile-master_sites-github-ex2]]
+.Более полное использование `USE_GITHUB`
+[example]
+====
+При попытке создать порт для самой последней версии pkg от пользователя FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл [.filename]#Makefile# в итоге выглядит следующим образом (незначительно сокращено для примера):
+
+[.programlisting]
+....
+PORTNAME= pkg-devel
+DISTVERSION= 1.3.0.a.20140411
+
+USE_GITHUB= yes
+GH_ACCOUNT= freebsd
+GH_PROJECT= pkg
+GH_TAGNAME= 6dbb17b
+....
+
+Он автоматически получит `MASTER_SITES` со значением `GH` и `WRKSRC` со значением `${WRKDIR}/pkg-6dbb17b`.
+
+[TIP]
+****
+`20140411` — это дата коммита, указанного в `GH_TAGNAME`, а не дата редактирования файла [.filename]#Makefile# или дата создания коммита.
+****
+
+====
+
+[[makefile-master_sites-github-ex3]]
+.Использование `USE_GITHUB` с `DISTVERSIONPREFIX`
+[example]
+====
+Время от времени `GH_TAGNAME` немного отличается от `DISTVERSION`. Например, если версия `1.0.2`, то тег будет `v1.0.2`. В таких случаях можно использовать `DISTVERSIONPREFIX` или `DISTVERSIONSUFFIX`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+....
+
+Он автоматически установит `GH_TAGNAME` в `v1.0.2`, в то время как `WRKSRC` останется `${WRKDIR}/foo-1.0.2`.
+====
+
+[[makefile-master_sites-github-ex4]]
+.Использование `USE_GITHUB` при отсутствии версий у исходного проекта
+[example]
+====
+Если никогда не было версии вышестоящего репозитория, не изобретайте её, например `0.1` или `1.0`. Создайте порт с `DISTVERSION` в формате `g__YYYYMMDD__`, где `g` означает Git, а `_YYYYMMDD_` представляет дату коммита, указанного в `GH_TAGNAME`.
+
+[.programlisting]
+....
+PORTNAME= bar
+DISTVERSION= g20140411
+
+USE_GITHUB= yes
+GH_TAGNAME= c472d66b
+....
+
+Это создаёт схему версионирования, которая увеличивается со временем и всё ещё находится до версии `0`. Подробности об использовании man:pkg-version[8] для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой секции]:
+
+[source, shell]
+....
+% pkg version -t g20140411 0
+<
+....
+
+Что означает, что использование `PORTEPOCH` не потребуется, если вышестоящий проект решит сократить версии в будущем.
+====
+
+[[makefile-master_sites-github-ex5]]
+.Использование `USE_GITHUB` для доступа к коммиту между двумя версиями
+[example]
+====
+Если текущая версия программного обеспечения использует тег Git, и порт необходимо обновить до более новой промежуточной версии без тега, используйте man:git-describe[1], чтобы определить версию для использования:
+
+[source, shell]
+....
+% git describe --tags f0038b1
+v0.7.3-14-gf0038b1
+....
+
+`v0.7.3-14-gf0038b1` можно разделить на три части:
+
+`v0.7.3`::
+Это последний тег Git, который появляется в истории коммитов перед запрошенным коммитом.
+
+`-14`::
+Это означает, что запрошенный коммит `f0038b1` является 14-м коммитом после тега `v0.7.3`.
+
+`-gf0038b1`::
+`-g` означает "Git", а `f0038b1` — это хеш коммита, на который указывает данная ссылка.
+
+[.programlisting]
+....
+PORTNAME= bar
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.7.3-14
+DISTVERSIONSUFFIX= -gf0038b1
+
+USE_GITHUB= yes
+....
+
+Это создаёт схему версионирования, которая увеличивается со временем (точнее, с коммитами) и не конфликтует с созданием версии `0.7.4`. Подробности об использовании man:pkg-version[8] для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой секции] :
+
+[source, shell]
+....
+% pkg version -t 0.7.3 0.7.3.14
+<
+% pkg version -t 0.7.3.14 0.7.4
+<
+....
+
+[NOTE]
+****
+Если запрошенный коммит совпадает с тегом, по умолчанию отображается более короткое описание. Полная версия эквивалентна:
+
+[source, shell]
+....
+% git describe --tags c66c71d
+v0.7.3
+
+% git describe --tags --long c66c71d
+v0.7.3-0-gc66c71d
+....
+
+****
+
+====
+
+[[makefile-master_sites-github-multiple]]
+==== Извлечение нескольких файлов из GitHub
+
+Фреймворк `USE_GITHUB` также поддерживает загрузку нескольких файлов дистрибутива из разных мест в GitHub. Он работает очень похоже на crossref:makefiles[porting-master-sites-n, Файлы дистрибуции или патчей из нескольких мест].
+
+В `GH_ACCOUNT`, `GH_PROJECT` и `GH_TAGNAME` добавляются несколько значений. Каждому различному значению присваивается группа. Основное значение может не иметь группы или принадлежать группе `:DEFAULT`. Значение может быть опущено, если оно совпадает со значением по умолчанию, указанным в crossref:makefiles[makefile-master_sites-github-description,описании `USE_GITHUB`].
+
+`GH_TUPLE` также можно использовать, когда имеется множество файлов дистрибутива. Это помогает сохранять учётные данные, проект, имя тега и информацию о группе в одном месте.
+
+Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}` могут использоваться для перемещения каталогов во время `post-extract`, добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для корректной сборки программного обеспечения.
+
+[CAUTION]
+====
+Часть `:__group__` _должна_ использоваться _только для одного_ файла дистрибутива. Она служит уникальным ключом, и её повторное использование приведёт к перезаписи предыдущих значений.
+====
+
+[NOTE]
+====
+Поскольку это всего лишь синтаксический сахар над `DISTFILES` и `MASTER_SITES`, имена групп должны соответствовать ограничениям на имена групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы дистрибутивов или патчей из нескольких источников]
+====
+
+При получении нескольких файлов из GitHub иногда файл дистрибутива по умолчанию не загружается из GitHub. Чтобы отключить загрузку файла дистрибутива по умолчанию, установите:
+
+[.programlisting]
+....
+USE_GITHUB= nodefault
+....
+
+[IMPORTANT]
+====
+При использовании `USE_GITHUB=nodefault` в [.filename]#Makefile# необходимо указать `DISTFILES` в его crossref:porting-order[porting-order-portname,верхнем блоке]. Определение должно быть следующим:
+
+[.programlisting]
+....
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+....
+
+====
+
+[[makefile-master_sites-github-multi]]
+.Использование `USE_GITHUB` с несколькими файлами дистрибутива
+[example]
+====
+Время от времени возникает необходимость загрузить более одного файла дистрибутива. Например, когда вышестоящий репозиторий git использует подмодули. Это можно легко сделать с помощью групп в переменных `GH_*`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+GH_ACCOUNT= bar:icons,contrib
+GH_PROJECT= foo-icons:icons foo-contrib:contrib
+GH_TAGNAME= 1.0:icons fa579bc:contrib
+GH_SUBDIR= ext/icons:icons
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+Это загрузит три файла дистрибутива с github. Стандартный берется из [.filename]#foo/foo# и имеет версию `1.0.2`. Второй, с группой `icons`, берется из [.filename]#bar/foo-icons# и имеет версию `1.0`. Третий берется из [.filename]#bar/foo-contrib# и использует Git-коммит `fa579bc`. Файлы дистрибутива называются [.filename]#foo-foo-1.0.2_GH0.tar.gz#, [.filename]#bar-foo-icons-1.0_GH0.tar.gz# и [.filename]#bar-foo-contrib-fa579bc_GH0.tar.gz#.
+
+Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном случае, [.filename]#${WRKDIR}/foo-1.0.2#. Каждый дополнительный файл дистрибутива извлекается в `${WRKSRC_group}`. Здесь, для группы `icons`, он называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-1.0#. Файл с группой `contrib` называется `${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-contrib-fa579bc`.
+
+Система сборки программы ожидает найти иконки в подкаталоге [.filename]#ext/icons# в её исходниках, поэтому используется `GH_SUBDIR`. `GH_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё не существует. Затем он выполняет следующее:
+
+[.programlisting]
+....
+post-extract:
+ @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons
+....
+
+====
+
+[[makefile-master_sites-github-multi2]]
+.Использование `USE_GITHUB` с несколькими файлами дистрибутива с помощью `GH_TUPLE`
+[example]
+====
+
+Это функционально эквивалентно crossref:makefiles[makefile-master_sites-github-multi,Использованию `USE_GITHUB` с несколькими файлами дистрибутива], но с использованием `GH_TUPLE`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+GH_TUPLE= bar:foo-icons:1.0:icons/ext/icons \
+ bar:foo-contrib:fa579bc:contrib
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+В предыдущем примере использовалась группировка с `bar:icons,contrib`. В `GH_TUPLE` присутствует избыточная информация, так как группировка невозможна.
+====
+
+[[makefile-master_sites-github-submodules]]
+.Как использовать `USE_GITHUB` с подмодулями Git?
+[example]
+====
+Порты, использующие GitHub в качестве вышестоящего репозитория, иногда применяют подмодули. Подробнее см. man:git-submodule[1].
+
+Проблема с подмодулями заключается в том, что каждый из них является отдельным репозиторием. Таким образом, каждый из них должен быть загружен отдельно.
+
+В качестве примера используем пакет package:finance/moneymanagerex[], его репозиторий на GitHub находится по адресу https://github.com/moneymanagerex/moneymanagerex/[]. В корне репозитория есть файл https://github.com/moneymanagerex/moneymanagerex/blob/master/.gitmodules[.gitmodules]. Этот файл описывает все подмодули, используемые в данном репозитории, и перечисляет дополнительные необходимые репозитории. Этот файл покажет, какие дополнительные репозитории требуются:
+
+[.programlisting]
+....
+[submodule "lib/wxsqlite3"]
+ path = lib/wxsqlite3
+ url = https://github.com/utelle/wxsqlite3.git
+[submodule "3rd/mongoose"]
+ path = 3rd/mongoose
+ url = https://github.com/cesanta/mongoose.git
+[submodule "3rd/LuaGlue"]
+ path = 3rd/LuaGlue
+ url = https://github.com/moneymanagerex/LuaGlue.git
+[submodule "3rd/cgitemplate"]
+ path = 3rd/cgitemplate
+ url = https://github.com/moneymanagerex/html-template.git
+[...]
+....
+
+Единственная информация, отсутствующая в этом файле, — это хэш коммита или тег, который следует использовать в качестве версии. Эта информация находится после клонирования репозитория:
+
+[source, shell]
+....
+% git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git
+Cloning into 'moneymanagerex'...
+remote: Counting objects: 32387, done.
+[...]
+Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'
+Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'
+Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'
+Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'
+[...]
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...
+[...]
+Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'
+Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'
+Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'
+Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'
+[...]
+% cd moneymanagerex
+% git submodule status
+ c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)
+ cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)
+ 2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)
+ fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)
+[...]
+....
+
+Это также можно найти на GitHub. Каждый подкаталог, который является подмодулем, отображается как `_директория @ хэш_`, например, `mongoose @ 2140e59`.
+
+[NOTE]
+****
+Хотя получение информации из GitHub кажется более простым, данные, полученные с помощью `git submodule status`, будут более информативными. Например, здесь хеш коммита ``lib/wxsqlite3`` `fb66eb2` соответствует `v3.4.0`. Оба варианта можно использовать взаимозаменяемо, но если доступен тег, предпочтительнее использовать его.
+****
+
+Теперь, когда вся необходимая информация собрана, можно написать [.filename]#Makefile# (показаны только строки, связанные с GitHub):
+
+[.programlisting]
+....
+PORTNAME= moneymanagerex
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.3.0
+
+USE_GITHUB= yes
+GH_TUPLE= utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \
+ moneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \
+ moneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \
+ cesanta:mongoose:2140e59:mongoose/3rd/mongoose \
+ [...]
+....
+
+====
+
+[[makefile-master_sites-gitlab]]
+=== `USE_GITLAB`
+
+Подобно GitHub, если файл дистрибутива поставляется с https://gitlab.com/[gitlab.com] или использует программное обеспечение GitLab, эти переменные доступны для использования и могут потребовать установки.
+
+[[makefile-master_sites-gitlab-description]]
+.Описание `USE_GITLAB`
+[cols="1,1,1", options="header"]
+|===
+| Переменная
+| Описание
+| По умолчанию
+
+|`GL_SITE`
+|Название сайта, на котором размещен проект GitLab
+|https://gitlab.com/
+
+|`GL_ACCOUNT`
+|Имя учётной записи пользователя GitLab, размещающего проект
+|`${PORTNAME}`
+
+|`GL_PROJECT`
+|Название проекта на GitLab
+|`${PORTNAME}`
+
+|`GL_COMMIT`
+|Хэш коммита для загрузки. Должен быть полным 160-битным, 40-символьным шестнадцатеричным хэшем sha1. Это обязательная переменная для GitLab.
+|`(нет)`
+
+|`GL_SUBDIR`
+|Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в
+`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в
+ crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab] для получения дополнительной информации.
+|(отсутствует)
+
+|`GL_TUPLE`
+|`GL_TUPLE` позволяет объединить `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT` и `GL_SUBDIR` в одну переменную. Формат записи: _сайт_`:`_учётная запись_`:`_проект_`:`_коммит_`:`_группа_`/`_поддиректория_. Части _сайт_`:` и `/`_поддиректория_ являются необязательными. Это полезно, когда требуется загрузить данные из нескольких проектов GitLab.
+|
|===
+[[makefile-master_sites-gitlab-ex1]]
+.Простое использование `USE_GITLAB`
+[example]
+====
+Пытаясь создать порт для версии `1.14` библиотеки libsignon-glib от пользователя accounts-sso на gitlab.com, по адресу https://gitlab.com/accounts-sso/libsignon-glib/[], файл [.filename]#Makefile# будет выглядеть следующим образом для загрузки дистрибутивных файлов:
+
+[.programlisting]
+....
+PORTNAME= libsignon-glib
+DISTVERSION= 1.14
+
+USE_GITLAB= yes
+GL_ACCOUNT= accounts-sso
+GL_COMMIT= e90302e342bfd27bc8c9132ab9d0ea3d8723fd03
+....
+
+Он автоматически получит `MASTER_SITES`, установленный на https://gitlab.com/[gitlab.com], и `WRKSRC` на `${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`.
+====
+
+[[makefile-master_sites-gitlab-ex2]]
+.Более полное использование `USE_GITLAB`
+[example]
+====
+
+Более полный пример использования вышеописанного, если порт не имеет версионирования и foobar принадлежит пользователю foo в проекте bar на самостоятельно размещенном сайте GitLab `https://gitlab.example.com/`, тогда [.filename]#Makefile# будет выглядеть следующим образом для загрузки дистрибутивных файлов:
+
+[.programlisting]
+....
+PORTNAME= foobar
+DISTVERSION= g20170906
+
+USE_GITLAB= yes
+GL_SITE= https://gitlab.example.com
+GL_ACCOUNT= foo
+GL_PROJECT= bar
+GL_COMMIT= 9c1669ce60c3f4f5eb43df874d7314483fb3f8a6
+....
+
+В нем будет установлено `MASTER_SITES` в `"https://gitlab.example.com"` и `WRKSRC` в `${WRKDIR}/bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`.
+
+[TIP]
+======
+`20170906` — это дата коммита, указанного в `GL_COMMIT`, а не дата редактирования файла [.filename]#Makefile# или дата коммита в дерево портов FreeBSD.
+======
+
+[NOTE]
+======
+Протокол, порт и корневая директория веб-сервера ``GL_SITE`` могут быть изменены в той же переменной.
+======
+
+====
+
+[[makefile-master_sites-gitlab-multiple]]
+==== Извлечение нескольких файлов из GitLab
+
+Фреймворк `USE_GITLAB` также поддерживает загрузку нескольких файлов дистрибутивов из различных мест GitLab и сайтов, размещённых на GitLab. Он работает очень похоже на crossref:makefiles[porting-master-sites-n, Несколько файлов дистрибутивов или патчей из разных местоположений] и crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab].
+
+В `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` и `GL_COMMIT` добавляются множественные значения. Каждое уникальное значение назначается группе. crossref:makefiles[makefile-master_sites-gitlab-description,Описание `USE_GITLAB`].
+
+`GL_TUPLE` также может использоваться, когда имеется множество файлов дистрибутива. Это помогает хранить информацию о сайте, учётной записи, проекте, коммите и группе в одном месте.
+
+Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}` могут использоваться для перемещения каталогов во время `post-extract`, добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для корректной сборки программного обеспечения.
+
+[CAUTION]
+====
+Часть `:__group__` _должна_ использоваться _только для одного_ файла дистрибутива. Она служит уникальным ключом, и её повторное использование приведёт к перезаписи предыдущих значений.
+====
+
+[NOTE]
+====
+Поскольку это всего лишь синтаксический сахар над `DISTFILES` и `MASTER_SITES`, имена групп должны соответствовать ограничениям на имена групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы дистрибутивов или патчей из нескольких источников]
+====
+
+При получении нескольких файлов с использованием GitLab иногда файл дистрибутива по умолчанию не загружается с сайта GitLab. Чтобы отключить загрузку файла дистрибутива по умолчанию, установите:
+
+[.programlisting]
+....
+USE_GITLAB= nodefault
+....
+
+[IMPORTANT]
+====
+При использовании `USE_GITLAB=nodefault`, [.filename]#Makefile# должен устанавливать `DISTFILES` в своем crossref:makefiles[porting-order-portname,верхнем блоке]. Определение должно быть следующим:
+
+[.programlisting]
+....
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+....
+
+====
+
+[[makefile-master_sites-gitlab-multi]]
+.Использование `USE_GITLAB` с несколькими файлами дистрибутива
+[example]
+====
+Время от времени возникает необходимость загрузить более одного файла дистрибутива. Например, когда вышестоящий git-репозиторий использует подмодули. Это можно легко сделать с помощью групп в переменных `GL_*`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITLAB= yes
+GL_SITE= https://gitlab.example.com:9434/gitlab:icons
+GL_ACCOUNT= bar:icons,contrib
+GL_PROJECT= foo-icons:icons foo-contrib:contrib
+GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib
+GL_SUBDIR= ext/icons:icons
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+Это загрузит два файла дистрибутива с gitlab.com и один с `gitlab.example.com`, где размещается GitLab. По умолчанию файл берется из [.filename]#https://gitlab.com/foo/foo#, а коммит — `c189207a55da45305c884fe2b50e086fcad4724b`. Второй файл, из группы `icons`, берется из [.filename]#https://gitlab.example.com:9434/gitlab/bar/foo-icons#, а коммит — `ae7368cab1ca7ca754b38d49da064df87968ffe4`. Третий файл берется из [.filename]#https://gitlab.com/bar/foo-contrib#, а коммит — `9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. Файлы дистрибутива называются [.filename]#foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, [.filename]#bar-foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz# и [.filename]#bar-foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz#.
+
+Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном случае это [.filename]#${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-c189207a55da45305c884fe2b50e086fcad4724b#. Каждый дополнительный файл дистрибутива извлекается в `${WRKSRC_group}`. Здесь для группы `icons` он называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4-ae7368cab1ca7ca754b38d49da064df87968ffe4#. Файл группы `contrib` называется `${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`.
+
+Система сборки программного обеспечения ожидает найти иконки в подкаталоге [.filename]#ext/icons# в своих исходниках, поэтому используется `GL_SUBDIR`. `GL_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё не существует. Затем она выполняет следующее:
+
+[.programlisting]
+....
+post-extract:
+ @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons
+....
+
+====
+
+[[makefile-master_sites-gitlab-multi2]]
+.Использование `USE_GITLAB` с несколькими файлами дистрибуции с помощью `GL_TUPLE`
+[example]
+====
+Это функционально эквивалентно crossref:makefiles[makefile-master_sites-gitlab-multi,Использование `USE_GITLAB` с несколькими файлами дистрибуции], но с использованием `GL_TUPLE`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITLAB= yes
+GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b
+GL_TUPLE= https://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \
+ bar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+В предыдущем примере использовалась группировка с `bar:icons,contrib`. Некоторую избыточную информацию приходится указывать с `GL_TUPLE`, так как группировка невозможна.
+====
+
+[[makefile-extract_sufx]]
=== `EXTRACT_SUFX`
-Если у вас имеется один дистрибутивный файл, и в его имени используется странное окончание для указания типа сжатия, задайте переменную `EXTRACT_SUFX`.
+Если имеется один файл дистрибутива, и он использует нестандартное суффикс для указания механизма сжатия, установите `EXTRACT_SUFX`.
-К примеру, если дистрибутивный файл носит имя [.filename]#foo.tgz#, а не более привычное [.filename]#foo.tar.gz#, вы должны написать:
+Например, если файл дистрибутива был назван [.filename]#foo.tar.gzip# вместо более привычного [.filename]#foo.tar.gz#, напишите:
[.programlisting]
....
DISTNAME= foo
-EXTRACT_SUFX= .tgz
+EXTRACT_SUFX= .tar.gzip
....
-Переменные `USE_BZIP2`, `USE_XZ` и `USE_ZIP` при необходимости автоматически устанавливают значение `EXTRACT_SUFX` в `.tar.bz2`, `.tar.xz` или `.zip`. Если ни одна из этих переменных не задана, то значение `EXTRACT_SUFX` по умолчанию устанавливается в `.tar.gz`.
+`USES=tar[:__xxx__]`, `USES=lha` или `USES=zip` автоматически устанавливают `EXTRACT_SUFX` в наиболее распространённые расширения архивов при необходимости, подробнее см. crossref:uses[uses,Использование макросов `USES`]. Если ни один из них не задан, `EXTRACT_SUFX` по умолчанию принимает значение `.tar.gz`.
[NOTE]
====
-Вам не нужно задавать значения `EXTRACT_SUFX` и `DISTFILES` одновременно.
+Как `EXTRACT_SUFX` используется только в `DISTFILES`, следует задавать только один из них.
====
+[[makefile-distfiles-definition]]
=== `DISTFILES`
-Иногда имена сгружаемых файлов не соответствуют имени порта. К примеру, файл может называться [.filename]#source.tar.gz# или подобным образом. В других случаях исходный код приложения может располагаться в нескольких отличающихся архивах, и все они должны быть сгружены.
+Иногда названия файлов для загрузки не имеют ничего общего с именем порта. Например, файл может называться [.filename]#source.tar.gz# или подобным образом. В других случаях исходный код приложения может быть разбит на несколько различных архивов, все из которых необходимо загрузить.
-Если это ваш случай, то задайте в переменной `DISTFILES` список разделённых пробелами имён файлов, которые нужно сгрузить.
+Если это так, установите `DISTFILES` как список разделённых пробелами файлов, которые необходимо загрузить.
[.programlisting]
....
DISTFILES= source1.tar.gz source2.tar.gz
....
-Если переменная `DISTFILES` не задана явно, то её значением по умолчанию будет `${DISTNAME}${EXTRACT_SUFX}`.
+Если явно не задано, `DISTFILES` по умолчанию равно `${DISTNAME}${EXTRACT_SUFX}`.
+[[makefile-extract_only]]
=== `EXTRACT_ONLY`
-Если только некоторые из `DISTFILES` должны быть распакованы-к примеру, часть из них является исходным кодом, а другие представляют собой неупакованную документацию-перечислите имена файлов, которые должны быть распакованы, в `EXTRACT_ONLY`.
+Если необходимо извлечь только некоторые из `DISTFILES` — например, один из них является исходным кодом, а другой — несжатым документом — укажите имена файлов, которые нужно извлечь, в `EXTRACT_ONLY`.
[.programlisting]
....
@@ -901,7 +1946,7 @@ DISTFILES= source.tar.gz manual.html
EXTRACT_ONLY= source.tar.gz
....
-Если _ни один_ из `DISTFILES` не должен распаковываться, то установите пустое значение переменной `EXTRACT_ONLY`.
+Если ни один из `DISTFILES` не требует распаковки, установите `EXTRACT_ONLY` в пустую строку.
[.programlisting]
....
@@ -911,77 +1956,103 @@ EXTRACT_ONLY=
[[porting-patchfiles]]
=== `PATCHFILES`
-Если вашему порту требуются некоторых дополнительные патчи, которые доступны по FTP или HTTP, задайте имена этих файлов в переменной `PATCHFILES`, а в переменной `PATCH_SITES` укажите URL того каталога, в котором они содержатся (формат такой же, как для `MASTER_SITES`).
+Если порт требует дополнительных исправлений, доступных через FTP или HTTP, установите `PATCHFILES` в имена файлов, а `PATCH_SITES` — в URL каталога, содержащего их (формат такой же, как у `MASTER_SITES`).
+
+Если патч не относится к корню исходного дерева (то есть к `WRKSRC`), потому что содержит дополнительные пути, установите `PATCH_DIST_STRIP` соответствующим образом. Например, если все пути в патче имеют дополнительный префикс `foozolix-1.0/` перед именами файлов, задайте `PATCH_DIST_STRIP=-p1`.
+
+Не беспокойтесь, если патчи сжаты; они будут автоматически распакованы, если их имена заканчиваются на [.filename]#.Z#, [.filename]#.gz#, [.filename]#.bz2# или [.filename]#.xz#.
+
+Если патч распространяется вместе с другими файлами, такими как документация, в сжатом tarball, использование `PATCHFILES` невозможно. В таком случае добавьте имя и расположение tarball с патчами в `DISTFILES` и `MASTER_SITES`. Затем используйте `EXTRA_PATCHES`, чтобы указать на эти файлы, и [.filename]#bsd.port.mk# автоматически применит их. В частности, _не_ копируйте файлы патчей в [.filename]#${PATCHDIR}#. Этот каталог может быть недоступен для записи.
+
+[TIP]
+====
+Если есть несколько патчей и для них требуются разные значения параметра strip, его можно добавить рядом с именем патча в `PATCHFILES`, например:
+
+[.programlisting]
+....
+PATCHFILES= patch1 patch2:-p1
+....
-Если патч не относится к самому верху дерева исходных текстов (то есть `WRKSRC`), потому что он содержит некоторые дополнительные пути, установите соответственно значение переменной `PATCH_DIST_STRIP`. В частности, если все имена путей в патче имеют дополнительный путь `foozolix-1.0/` перед именем файла, то задайте `PATCH_DIST_STRIP=-p1`.
+Это не конфликтует с crossref:makefiles[porting-master-sites-n,функцией группировки мастер-сайтов], добавление группы также работает:
-Не волнуйтесь, если патчи упакованы; они будут распакованы автоматически, если имена файлов оканчиваются на [.filename]#.gz# или [.filename]#.Z#.
+[.programlisting]
+....
+PATCHFILES= patch2:-p1:source2
+....
-Если патч распространяется вместе с какими-то другими файлами, такими, как документация, в виде tar-архива `gzip`, вы не можете просто использовать `PATCHFILES`. Если это ваш случай, добавьте имя и местоположение архива с патчем к `DISTFILES` и `MASTER_SITES`. Затем воспользуйтесь переменной `EXTRA_PATCHES` для указания этих файлов, и [.filename]#bsd.port.mk# автоматически применит эти патчи. В частности, _не копируйте_ файлы с патчами в каталог `PATCHDIR`-этот каталог может быть недоступным для записи.
+====
[NOTE]
====
-Архив будет распакован вне исходного кода, как обычно, и к тому же его не нужно явно распаковывать, если это обычный архив `gzip` или `compress`. Если вы сделаете последнее, приложите дополнительные усилия для того, чтобы не перезаписать что-либо, уже существующее в этом каталоге. Также не забудьте добавить команду для удаления скопированного патча в цели `pre-clean`.
+Tarball уже будет распакован вместе с обычными исходными кодами, поэтому нет необходимости явно его распаковывать, если это обычный сжатый tarball. Будьте особенно осторожны, чтобы не перезаписать существующие файлы в этом каталоге при ручной распаковке. Также не забудьте добавить команду для удаления скопированного патча в цель `pre-clean`.
====
[[porting-master-sites-n]]
-=== Несколько дистрибутивных файлов или патчей с различных серверов и подкаталогов (`MASTER_SITES:n`)
+=== Несколько файлов дистрибутивов или исправлений из нескольких местоположений
-(Этот раздел можно считать немного "повышенной трудности"; те, кто впервые знакомятся с этим текстом, могут пропустить этот раздел).
+(Считайте, что это несколько «продвинутая тема»; тем, кто впервые читает этот документ, возможно, стоит сначала пропустить этот раздел).
-В этом разделе находится информация о механизме сгрузки, известном как `MASTER_SITES:n` и `MASTER_SITES_NN`. Далее мы будем называть этот механизм `MASTER_SITES:n`.
+Этот раздел содержит информацию о механизме загрузки, известном как `MASTER_SITES:n` и `MASTER_SITES_NN`. Мы будем называть этот механизм `MASTER_SITES:n`.
-Сначала немного общей информации. В OpenBSD имеется полезная возможность, используемая в переменных `DISTFILES` и `PATCHFILES`, которая позволяет закреплять после имен файлов и патчей идентификаторы типа `:n`. Здесь `n` может быть из диапазона `[0-9]` и обозначать закреплённую группу. К примеру:
+Небольшая предыстория. В OpenBSD есть удобная функция внутри `DISTFILES` и `PATCHFILES`, которая позволяет добавлять постфикс `:n` к файлам и патчам. Здесь `n` может быть любым словом, содержащим `[0-9a-zA-Z_]`, и обозначать группу. Например:
[.programlisting]
....
DISTFILES= alpha:0 beta:1
....
-В OpenBSD дистрибутивный файл [.filename]#alpha# будет связан с переменной `MASTER_SITES0`, но не с нашей общей переменной `MASTER_SITES`, а файл [.filename]#beta# с переменной `MASTER_SITES1`.
+В OpenBSD файл дистрибутива [.filename]#alpha# будет связан с переменной `MASTER_SITES0`, а не с нашей общей `MASTER_SITES`, а [.filename]#beta# — с `MASTER_SITES1`.
+
+Это очень интересная функция, которая может сократить бесконечные поиски нужного сайта для загрузки.
-Этот очень интересная возможность, которая может уменьшить этот бесконечный поиск работающего сайта для сгрузки.
+Представьте 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`, причём сайты медленные как черепаха, где [.filename]#beta# есть на всех сайтах из `MASTER_SITES`, а [.filename]#alpha# можно найти только на 20-м сайте. Было бы так обидно проверять их все, если бы сопровождающий знал это заранее, не так ли? Не самое лучшее начало для чудесных выходных!
-Просто представьте себе 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`; сайты очень медленные, причём [.filename]#beta# находится на всех сайтах из `MASTER_SITES`, а [.filename]#alpha# может быть найден только на 20-м сайте. Будет неправильно проверять их все, если создатель знает об этом, не правда ли? Неподходящее начало для таких прекрасных выходных!
+Теперь, когда вы поняли идею, представьте больше `DISTFILES` и больше `MASTER_SITES`. Безусловно, наш "мастер по исследованию distfiles" оценил бы снижение нагрузки на сеть, которое это принесло бы.
-Теперь, когда вы получили общее представление, просто представьте ещё большее количество `DISTFILES` и `MASTER_SITES`. Конечно, наш "магистр доступности дистрибутивов" представляет масштабы нагрузки на сеть, которую это даёт.
+В следующих разделах будет приведена информация о реализации этой идеи в FreeBSD. Мы немного улучшили концепцию OpenBSD.
-В последующих разделах информация будет даваться вместе с реализацией этой идеи во FreeBSD. Мы несколько улучшили концепцию OpenBSD.
+[IMPORTANT]
+====
+Имена групп не могут содержать дефисы (`-`), более того, они не могут содержать любые символы вне диапазона `[a-zA-Z0-9_]`. Это связано с тем, что, хотя man:make[1] допускает использование имён переменных с дефисами, man:sh[1] — нет.
+====
-==== Упрощённая информация
+[[porting-master-sites-n-simplified]]
+==== Упрощенная информация
-В этом разделе рассказывается, как быстро подготовить точную сгрузку нескольких дистрибутивных файлов и патчей с разных сайтов и каталогов. Мы описываем здесь случай упрощённого использования `MASTER_SITES:n`. Для большинства сценариев этого будет достаточно. Однако, если вам нужна дополнительная информация, обратитесь к следующему разделу.
+В этом разделе объясняется, как быстро настроить детализированное получение нескольких файлов дистрибутивов и патчей с разных сайтов и подкаталогов. Здесь описывается случай упрощённого использования `MASTER_SITES:n`. Этого будет достаточно для большинства сценариев. Более подробная информация доступна в crossref:makefiles[ports-master-sites-n-detailed, Подробная Информация].
-Некоторые приложения состоят из многих дистрибутивных файлов, которые должны быть сгружены с нескольких различных сайтов. К примеру, Ghostscript состоит из основной программы и большого числа файлов драйверов, которые используются в зависимости от принтера пользователя. Некоторые из этих файлов драйверов поставляются с основной программой, но при этом многие другие должны быть сгружены с множества различных сайтов.
+Некоторые приложения состоят из нескольких распространяемых файлов, которые необходимо загрузить с различных сайтов. Например, Ghostscript включает основную часть программы и множество драйверов, используемых в зависимости от принтера пользователя. Некоторые из этих драйверов поставляются вместе с основной частью, но многие другие необходимо загружать с различных сайтов.
-Чтобы это поддерживать, за каждой записью в `DISTFILES` может следовать символ двоеточия и "имя метки". За каждым сайтом, перечисленным в `MASTER_SITES`, тоже следует двоеточие и метка, которая указывает, какие файлы дистрибутива должны быть сгружены с этого сайта.
+Для поддержки этого, каждая запись в `DISTFILES` может сопровождаться двоеточием и "именем группы". Затем каждый сайт, указанный в `MASTER_SITES`, сопровождается двоеточием и группой, которая указывает, какие файлы дистрибутива загружаются с данного сайта.
-Например, рассмотрим приложение, исходный код которого разделён на две части, [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые должны быть сгружены с двух различных источников. Файл [.filename]#Makefile# порта будет содержать строчки типа <<ports-master-sites-n-example-simple-use-one-file-per-site>>.
+Например, рассмотрим приложение, исходный код которого разделён на две части: [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые необходимо загрузить с двух разных сайтов. В [.filename]#Makefile# порта будут присутствовать строки, подобные crossref:makefiles[ports-master-sites-n-example-simple-use-one-file-per-site,Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт].
[[ports-master-sites-n-example-simple-use-one-file-per-site]]
-.Упрощённое использование `MASTER_SITES:n` с 1 файлом на каждом сайте
+.Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт
[example]
====
+
[.programlisting]
....
-MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
+MASTER_SITES= ftp://ftp1.example.com/:source1 \
+ http://www.example.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2
....
====
-Несколько дистрибутивных файлов могут иметь одну и ту же метку. Продолжая предыдущий пример, положим, что имеется и третий дистрибутивный файл, [.filename]#source3.tar.gz#, который должен быть сгружен с `ftp.example2.com`. Тогда файл [.filename]#Makefile# будет написан как <<ports-master-sites-n-example-simple-use-more-than-one-file-per-site>>.
+Несколько файлов дистрибутивов могут принадлежать одной группе. Продолжая предыдущий пример, предположим, что существует третий файл дистрибутива [.filename]#source3.tar.gz#, который загружается с `ftp.example2.com`. Тогда [.filename]#Makefile# будет записан, как показано в crossref:makefiles[ports-master-sites-n-example-simple-use-more-than-one-file-per-site,Упрощённое использование `MASTER_SITES:n` с несколькими файлами на один сайт].
[[ports-master-sites-n-example-simple-use-more-than-one-file-per-site]]
-.Упрощённое использование `MASTER_SITES:n` с более чем 1 файлом на каждом сервере
+.Упрощённое использование `MASTER_SITES:n` с несколькими файлами на одном сайте
[example]
====
+
[.programlisting]
....
-MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
+MASTER_SITES= ftp://ftp.example.com/:source1 \
+ http://www.example.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2 \
source3.tar.gz:source2
@@ -989,86 +2060,88 @@ DISTFILES= source1.tar.gz:source1 \
====
+[[ports-master-sites-n-detailed]]
==== Подробная информация
-Прекрасно, но пример из предыдущего раздела не показал вам всё, что вам нужно? В этом разделе мы подробно опишем, как работает механизм `MASTER_SITES:n` точной сгрузки и как вы можете изменить ваши порты, чтобы это использовать.
+Хорошо, значит, предыдущий пример не отражал потребности нового порта? В этом разделе мы подробно объясним, как работает механизм детализированного получения `MASTER_SITES:n` и как его можно использовать.
-. За элементами могут следовать символы `:n`, где _n_ это `[^:,]+`, то есть _n_ может теоретически быть любой алфавитно-цифровой строкой, но пока мы будем ограничивать их `[a-zA-Z_][0-9a-zA-Z_]+`.
-+
-Более того, совпадение строк чувствительно к регистру; другими словами, `n` отличается от `N`.
-+
-Однако следующие слова не могут использоваться для этих нужд, так как они имеют особое значение: `default`, `all` и `ALL` (они используются для своих нужд в <<porting-master-sites-n-what-changes-in-port-targets,ii>>). Кроме того, `DEFAULT` является специальным ключевым словом (посмотрите <<porting-master-sites-n-DEFAULT-group,3>>).
-. Элементы, за которыми следуют `:n`, принадлежат группе `n`, `:m` относится к группе `m` и так далее.
+. Элементы могут иметь постфикс `:__n__`, где _n_ — это `[^:,]+`, то есть _n_ концептуально может быть любой буквенно-цифровой строкой, но пока мы ограничим её `[a-zA-Z_][0-9a-zA-Z_]+`.
++
+Более того, сравнение строк чувствительно к регистру; то есть, `n` отличается от `N`.
++
+Однако эти слова не могут использоваться для постфиксных целей, так как имеют специальное значение: `default`, `all` и `ALL` (они используются внутри системы, см. crossref:makefiles[porting-master-sites-n-what-changes-in-port-targets, ii]). Кроме того, `DEFAULT` является словом специального назначения (проверьте пункт crossref:makefiles[porting-master-sites-n-DEFAULT-group,3]).
+. Элементы с постфиксом `:n` принадлежат группе `n`, `:m` — группе `m` и так далее.
++
[[porting-master-sites-n-DEFAULT-group]]
-. Элементы без таких суффиксов не относятся ни к какой группе, то есть они принадлежат к особой группе `DEFAULT`. Если вы укажете суффиксом любого элемента `DEFAULT`, вы просто выполните излишнюю работу, если только вы не хотите отнесения элемента как к группе `DEFAULT`, так и какой-то другой в одно и то же время (посмотрите на пункт <<porting-master-sites-n-comma-operator,5>>).
-+
-Следующие примеры равнозначны, но первый более предпочтителен:
+. Элементы без постфикса не принадлежат к группам, все они относятся к специальной группе `DEFAULT`. Элементы с постфиксом `DEFAULT` избыточны, за исключением случаев, когда элемент одновременно принадлежит и к `DEFAULT`, и к другим группам (см. пункт crossref:makefiles[porting-master-sites-n-comma-operator,5]).
++
+Эти примеры эквивалентны, но первый предпочтительнее:
+
[.programlisting]
....
MASTER_SITES= alpha
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT
....
-. Группы не являются эксклюзивными, элемент может принадлежать к нескольким отличающимся группам одновременно, а группа может либо иметь несколько различных элементов, либо не иметь их вовсе. Повторяющиеся элементы в одной и той же группе будут являться просто повторяющимися элементами.
+. Группы не являются исключительными, элемент может принадлежать нескольким разным группам одновременно, а группа может содержать несколько разных элементов или не содержать их вовсе.
++
[[porting-master-sites-n-comma-operator]]
-. Если в хотите, чтобы элемент принадлежал к нескольким группам одновременно, вы можете использовать запятую (`,`).
-+
-Вместо того, чтобы повторять их несколько раз, каждый раз с разным постфиксом, мы можем перечислить несколько групп за раз в одном постфиксе. Например, `:m,n,o` определяет элемент, принадлежащий группам `m`, `n` и `o`.
-+
-Все следующие примеры имеют один смысл, но последний является предпочтительным:
+. Когда элемент принадлежит нескольким группам одновременно, используйте оператор запятую (`,`).
++
+Вместо повторения несколько раз, каждый раз с разным постфиксом, мы можем перечислить несколько групп сразу в одном постфиксе. Например, `:m,n,o` обозначает элемент, принадлежащий группам `m`, `n` и `o`.
++
+Все эти примеры эквивалентны, но последний является предпочтительным:
+
[.programlisting]
....
MASTER_SITES= alpha alpha:SOME_SITE
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:SOME_SITE,DEFAULT
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT,SOME_SITE
....
-. Все серверы внутри определённой группы сортируются в соответствии с `MASTER_SORT_AWK`. Все группы в `MASTER_SITES` и `PATCH_SITES` тоже сортируются.
+. Все сайты в заданной группе сортируются согласно `MASTER_SORT_AWK`. Все группы в `MASTER_SITES` и `PATCH_SITES` также сортируются.
++
[[porting-master-sites-n-group-semantics]]
-. Семантика групп может использоваться в любой из следующих переменных `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и `PATCHFILES` в соответствии со следующим синтаксисом:
-.. Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR` должны заканчиваться символом прямого слэша `/`. Если какие-то элементы принадлежат каким-то группам, постфикс группы `:n` должен следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` опирается на наличие завершающего символа `/` во избежание совпадающих элементов, где `:n` является корректной частью элемента с вхождениями, где `:n` обозначает группу `n`. Для целей совместимости, так как завершающий символ `/` ранее не требовался в элементах `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`, если символ, сразу предшествующий постфиксу, не является символом `/`, то `:n` будет считаться корректной частью элемента, а не постфиксом группы, даже если за элементом следует `:n`. Посмотрите <<ports-master-sites-n-example-detailed-use-master-site-subdir>> и <<ports-master-sites-n-example-detailed-use-complete-example-master-sites>>.
+. Семантика групп может использоваться в любых переменных `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и `PATCHFILES` согласно следующему синтаксису:
+.. Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR` должны заканчиваться символом дробной черты `/`. Если элементы принадлежат к какой-либо группе, постфикс группы `:__n__` должен следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` полагается на наличие завершающего символа `/`, чтобы избежать путаницы между элементами, где `:n` является допустимой частью элемента, и случаями, где `:n` обозначает группу `n`. В целях совместимости, поскольку ранее завершающий символ `/` не требовался в элементах `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`, если символ, непосредственно предшествующий постфиксу, не является `/`, то `:n` будет считаться допустимой частью элемента, а не постфиксом группы, даже если элемент оканчивается на `:n`. См. оба раздела crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-subdir,Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`] и crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-example-master-sites,Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, несколькими сайтами и несколькими подкаталогами].
+
[[ports-master-sites-n-example-detailed-use-master-site-subdir]]
.Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`
[example]
====
+
[.programlisting]
....
MASTER_SITE_SUBDIR= old:n new/:NEW
....
-*** Каталоги внутри группы `DEFAULT` -> old:n
-*** Каталоги внутри группы `NEW` -> new
+*** Каталоги в группе `DEFAULT` -> old:n
+*** Каталоги в группе `NEW` -> new
====
+
[[ports-master-sites-n-example-detailed-use-complete-example-master-sites]]
-.Подробное использование `MASTER_SITES:n` с запятыми, несколькими файлами, несколькими серверами и несколькими подкаталогами
+.Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, сайтами и подкаталогами
[example]
====
+
[.programlisting]
....
MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \
@@ -1081,13 +2154,13 @@ DISTFILES= file1 file2:DEFAULT file3:group3 \
file4:group4,group5,group6 file5:grouping \
file6:group7
MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
- directory-one/:group6,DEFAULT \
- directory
+ directory-one/:group6,DEFAULT \
+ directory
....
-Предыдущий пример приводит к следующей точной сгрузке. Серверы перечислены в точном порядке их использования.
+Предыдущий пример приводит к такой детализированной загрузке файлов. Сайты перечислены в точном порядке их использования.
-*** [.filename]#file1# будет сгружаться с
+*** [.filename]#file1# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory-trial:1/
@@ -1097,7 +2170,7 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site7/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file2# будет сгружаться точно также, как [.filename]#file1#, так как они оба относятся к одной и той же группе
+*** [.filename]#file2# будет загружен точно так же, как [.filename]#file1#, поскольку они оба принадлежат к одной и той же группе
**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory-trial:1/
@@ -1107,13 +2180,13 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site7/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file3# будет сгружен с
+*** [.filename]#file3# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site3/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file4# будет сгружаться с
+*** [.filename]#file4# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site4/
@@ -1123,12 +2196,12 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site8/directory-one/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file5# будет сгружен с
+*** [.filename]#file5# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file6# будет сгружаться с
+*** [.filename]#file6# будет получен из
**** `MASTER_SITE_OVERRIDE`
**** http://site8/
@@ -1136,31 +2209,32 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
====
-. Как мне группировать одну из специальных переменных из [.filename]#bsd.sites.mk#, например, `MASTER_SITE_SOURCEFORGE`?
-+
-Посмотрите <<ports-master-sites-n-example-detailed-use-master-site-sourceforge>>.
+. Как сгруппировать один из специальных макросов из [.filename]#bsd.sites.mk#, например, SourceForge (`SF`)?
++
+Это максимально упрощено. См. crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-sourceforge,Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)].
+
[[ports-master-sites-n-example-detailed-use-master-site-sourceforge]]
-.Подробное использование `MASTER_SITES:n` с `MASTER_SITE_SOURCEFORGE`
+.Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)
[example]
====
+
[.programlisting]
....
-MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
+MASTER_SITES= http://site1/ SF/something/1.0:sourceforge,TEST
DISTFILES= something.tar.gz:sourceforge
....
+[.filename]#something.tar.gz# будет загружен со всех сайтов в пределах SourceForge.
====
-+
-[.filename]#something.tar.gz# будет сгружаться со всех сайтов из `MASTER_SITE_SOURCEFORGE`.
-. Как мне использовать это с переменными `PATCH*`?
-+
-Все примеры выполнялись с переменными `MASTER*`, и они работают точно так же и для `PATCH*`, как это можно видеть в <<ports-master-sites-n-example-detailed-use-patch-sites>>.
+. Как использовать это с `PATCH*`?
++
+Все примеры были выполнены с `MASTER*`, но они работают точно так же для `PATCH*`, как можно увидеть в crossref:makefiles[ports-master-sites-n-example-detailed-use-patch-sites,Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`].
+
[[ports-master-sites-n-example-detailed-use-patch-sites]]
-.Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`.
+.Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`
[example]
====
+
[.programlisting]
....
PATCH_SITES= http://site1/ http://site2/:test
@@ -1169,162 +2243,966 @@ PATCHFILES= patch1:test
====
-==== Что изменится для портов? А что не изменится?
+[[port-master-sites-n-what-changed]]
+==== Что меняется для портов? Что остается неизменным?
[lowerroman]
-. Все имеющиеся порты остаются без изменений. Код для механизма `MASTER_SITES:n` активируется, если только есть элементы, которые заканчиваются на `:n`, как и элементы в соответствии с вышеописанным синтаксисом, особенно как это показано в пункте <<porting-master-sites-n-group-semantics,7>>.
+. Все текущие порты остаются без изменений. Функция `MASTER_SITES:n` активируется только при наличии элементов с постфиксом `:__n__`, соответствующих указанным выше синтаксическим правилам, в частности, как показано в пункте crossref:makefiles[porting-master-sites-n-group-semantics, 7].
++
[[porting-master-sites-n-what-changes-in-port-targets]]
-. Цели порт остаются теми же самыми: `checksum`, `makesum`, `patch`, `configure`, `build` и так далее. С обычными исключениями для `do-fetch`, `fetch-list`, `master-sites` и `patch-sites`.
+. Порты сохраняют те же цели: `checksum`, `makesum`, `patch`, `configure`, `build` и т.д., за исключением очевидных случаев: `do-fetch`, `fetch-list`, `master-sites` и `patch-sites`.
-** `do-fetch`: использует новую группировку с постфиксами в `DISTFILES` и `PATCHFILES` с соответствующими элементами групп в `MASTER_SITES` и `PATCH_SITES`, которые используют группы из `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Посмотрите <<ports-master-sites-n-example-detailed-use-complete-example-master-sites>>.
-** `fetch-list`: работает так же, как старая цель `fetch-list` с тем исключением, что она группирует, как и `do-fetch`.
-** `master-sites` и `patch-sites`: (несовместимы со старыми версиями) только возвращают элементы группы `DEFAULT`; на самом деле они выполняют цели `master-sites-default` и `patch-sites-default` соответственно.
-+
-Более того, использование целей `master-sites-all` или `patch-sites-all` предпочтительно для непосредственной проверки `MASTER_SITES` или `PATCH_SITES`. Также работа прямой проверки в последующих версиях не гарантируется. Посмотрите <<porting-master-sites-n-new-port-targets-master-sites-all, B>> для получения более дополнительной информации об этих новых целях.
+** `do-fetch`: развертывает новую группировку с постфиксом `DISTFILES` и `PATCHFILES` с соответствующими групповыми элементами в `MASTER_SITES` и `PATCH_SITES`, которые используют соответствующие групповые элементы в `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Проверьте crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-example-master-sites,Подробное использование `MASTER_SITES:n` с оператором запятой, множественными файлами, множественными сайтами и множественными подкаталогами].
+** `fetch-list`: работает как старый `fetch-list`, за исключением того, что группировка происходит так же, как в `do-fetch`.
+** `master-sites` и `patch-sites`: (несовместимо с более старыми версиями) возвращают только элементы группы `DEFAULT`; фактически они выполняют цели `master-sites-default` и `patch-sites-default` соответственно.
++
+Кроме того, предпочтительнее использовать цель `master-sites-all` или `patch-sites-all`, чем напрямую проверять `MASTER_SITES` или `PATCH_SITES`. Кроме того, прямая проверка не гарантирует работу в будущих версиях. Для получения дополнительной информации об этих новых целях портов см. пункт crossref:makefiles[porting-master-sites-n-new-port-targets-master-sites-all, B].
-. Новые цели построения портов
-.. Имеются цели `master-sites-_n_` и `patch-sites-_n_`, которые будут перечислять элементы соответствующей группы _n_ из `MASTER_SITES` и `PATCH_SITES` соответственно. К примеру, `master-sites-DEFAULT` и `patch-sites-DEFAULT` обе будут возвращать элементы группы `DEFAULT`, `master-sites-test` и `patch-sites-test` группы `test` и так далее.
+. Новые цели портов
+.. Существуют цели `master-sites-_n_` и `patch-sites-_n_`, которые будут выводить элементы соответствующей группы _n_ в `MASTER_SITES` и `PATCH_SITES` соответственно. Например, и `master-sites-DEFAULT`, и `patch-sites-DEFAULT` вернут элементы группы `DEFAULT`, `master-sites-test` и `patch-sites-test` — группы `test`, и так далее.
++
[[porting-master-sites-n-new-port-targets-master-sites-all]]
-.. Имеются новые цели `master-sites-all` и `patch-sites-all`, которые выполняют работу старых `master-sites` и `patch-sites`. Они возвращают элементы всех групп, как если бы они все принадлежали одной и той же группе с тем, что она перечисляет ровно столько `MASTER_SITE_BACKUP` и `MASTER_SITE_OVERRIDE`, как и группы, определённые в `DISTFILES` или `PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`.
+.. Существуют новые цели `master-sites-all` и `patch-sites-all`, которые выполняют работу старых `master-sites` и `patch-sites`. Они возвращают элементы всех групп, как если бы они все принадлежали одной группе, с оговоркой, что перечисляется столько же `MASTER_SITE_BACKUP` и `MASTER_SITE_OVERRIDE`, сколько определено групп в `DISTFILES` или `PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`.
+[[makefile-dist_subdir]]
=== `DIST_SUBDIR`
-Не позволяйте вашему порту засорять [.filename]#/usr/ports/distfiles#. Если вашему порту требуется сгрузить много файлов, или он содержит имя файла, могущее вызвать конфликты с другими портами (например, [.filename]#Makefile#), то укажите в переменной `DIST_SUBDIR` имя порта (должны подойти `${PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит значение переменной `DISTDIR` со значения по умолчанию [.filename]#/usr/ports/distfiles# к значению [.filename]#/usr/ports/distfiles/DIST_SUBDIR#, и в результате всё, что требуется для порта, будет помещено в этот подкаталог.
+Не допускайте захламления портом каталога [.filename]#/usr/ports/distfiles#. Если порт требует загрузки большого количества файлов или содержит файл с именем, которое может конфликтовать с другими портами (например, [.filename]#Makefile#), установите `DIST_SUBDIR` в имя порта (подойдут `${PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит `DISTDIR` со значения по умолчанию [.filename]#/usr/ports/distfiles# на [.filename]#/usr/ports/distfiles/${DIST_SUBDIR}#, фактически помещая все необходимые для порта файлы в этот подкаталог.
+
+Также будет проверяться подкаталог с тем же именем на основном резервном сайте по адресу http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] (Явное указание `DISTDIR` в [.filename]#Makefile# не решит эту задачу, поэтому используйте `DIST_SUBDIR`.)
+
+[NOTE]
+====
+Это не влияет на сайты в `MASTER_SITES`, определённые в [.filename]#Makefile#.
+====
+
+[[makefile-maintainer]]
+== `MAINTAINER`
+
+Установите здесь свой адрес электронной почты. Пожалуйста. _:-)_
-Он заглянет также в подкаталог с тем же именем на основном резервном сервере [.filename]#ftp.FreeBSD.org#. (Явное задание переменной `DISTDIR` в вашем файле `Makefile` этого не сделает, так что, пожалуйста, воспользуйтесь `DIST_SUBDIR`.)
+Только один адрес без комментария допускается в качестве значения `MAINTAINER`. Используемый формат: `user@hostname.domain`. Пожалуйста, не включайте в эту запись описательный текст, например, настоящее имя. Это только вносит путаницу в инфраструктуру Ports и большинство инструментов, которые её используют.
+
+Ответственный за поддержку порта обязан поддерживать порт в актуальном состоянии и обеспечивать его корректную работу. Подробное описание обязанностей ответственного за поддержку порта приведено в разделе extref:{contributing}[Задача для сопровождающих портов,maintain-port].
[NOTE]
====
-Это не коснётся тех сайтов `MASTER_SITES`, которые вы указали в вашем файле [.filename]#Makefile#.
+Сопровождающий добровольно поддерживает порт в рабочем состоянии. Сопровождающие несут основную ответственность за свои порты, но не имеют исключительных прав на них. Порты существуют для пользы сообщества и, по сути, принадлежат сообществу. Это означает, что люди, не являющиеся сопровождающими, также могут вносить изменения в порт. Крупные изменения в коллекции портов могут потребовать правок во многих портах. Команда управления портами FreeBSD или члены других команд могут изменять порты для исправления проблем с зависимостями или других проблем, таких как обновление версии динамической библиотеки.
+
+Некоторые типы исправлений имеют "автоматическое согласование" от {portmgr}, что позволяет любому коммиттеру исправлять эти категории проблем в любом порте. Такие исправления не требуют одобрения от сопровождающего.
+
+Автоматическое согласование для большинства портов применяется к исправлениям, таким как изменения инфраструктуры, или тривиальным и _проверенным_ исправлениям сборки и выполнения. Текущий список доступен в extref:{committers-guide}[разделе Портов Руководства коммиттера, ports-qa-misc-blanket-approval].
====
-=== `ALWAYS_KEEP_DISTFILES`
+Другие изменения в порте будут отправлены сопровождающему на проверку и утверждение перед внесением. Если сопровождающий не отвечает на запрос об обновлении в течение двух недель (за исключением основных государственных праздников), это считается превышением времени ожидания сопровождающего, и обновление может быть внесено без его явного одобрения. Если сопровождающий не отвечает в течение трех месяцев или если произошло три последовательных превышения времени ожидания, то сопровождающий считается отсутствующим без уведомления, и все его порты могут быть возвращены в общий пул. Исключениями являются порты, сопровождаемые {portmgr} или {security-officer}. Никакие несанкционированные изменения не могут быть внесены в порты, сопровождаемые этими группами.
+
+Мы оставляем за собой право изменять представленные сопровождающим материалы, чтобы лучше соответствовать существующим политикам и стилю Коллекции портов, без явного одобрения отправителя или сопровождающего. Кроме того, масштабные инфраструктурные изменения могут привести к модификации порта без согласия сопровождающего. Подобные изменения никогда не повлияют на функциональность порта.
+
+{portmgr} оставляет за собой право отозвать или изменить права сопровождающего по любой причине, а {security-officer} оставляет за собой право отозвать или изменить права сопровождающего по соображениям безопасности.
+
+[[makefile-comment]]
+== `COMMENT`
+
+Комментарий — это однострочное описание порта, отображаемое командой `pkg info`. При составлении придерживайтесь следующих правил:
+
+. Строка COMMENT должна быть не длиннее 70 символов.
+. Не включайте название пакета или номер версии программного обеспечения.
+. Комментарий должен начинаться с заглавной буквы и заканчиваться без точки.
+. Не начинайте с неопределённого артикля (то есть A или An).
+. Пишите названия с заглавной буквы, например: Apache, JavaScript или Perl.
+. Используйте запятую для списков слов: "green, red, and blue."
+. Проверяйте на наличие орфографических ошибок.
+
+Вот пример:
+
+[.programlisting]
+....
+COMMENT= Cat chasing a mouse all over the screen
+....
+
+Переменная COMMENT следует сразу за переменной MAINTAINER в файле [.filename]#Makefile#.
+
+[[makefile-www]]
+== Веб-сайт проекта
+
+Каждый порт должен указывать на веб-сайт, предоставляющий дополнительную информацию о программном обеспечении.
+
+Везде, где это возможно, следует использовать официальный сайт проекта, поддерживаемый разработчиками программного обеспечения.
+
+[.programlisting]
+....
+WWW= https://ffmpeg.org/
+....
+
+Но это также может быть каталог или ресурс в репозитории исходного кода:
+
+[.programlisting]
+....
+WWW= https://sourceforge.net/projects/mpd/
+....
+
+Переменная WWW следует сразу за переменной COMMENT в файле [.filename]#Makefile#.
+
+Если один и тот же контент доступен по HTTP и HTTPS, следует использовать URL, начинающийся с `https://`. Если URI является корнем веб-сайта или директории, он должен заканчиваться косой чертой.
+
+Эта информация ранее размещалась в последней строке файла [.filename]#pkg-descr#. Она была перенесена в Makefile для удобства обслуживания и обработки. Наличие строки `WWW:` в конце файла [.filename]#pkg-descr# считается устаревшим.
+
+[[licenses]]
+== Лицензии
+
+Каждый порт должен содержать документацию о лицензии, под которой он распространяется. Если лицензия не одобрена OSI, необходимо также указать любые ограничения на распространение.
-Если ваш порт использует двоичные дистрибутивные файлы и обладает лицензией, требующей, чтобы исходный код предоставлялся вместе с пакетами, распространяемыми в двоичной форме, например GPL, то `ALWAYS_KEEP_DISTFILES` даст кластеру построения FreeBSD указание сохранять копию файлов, указанных в `DISTFILES`. Пользователям таких портов эти файлы в основном не нужны, поэтому хорошей идеей является добавление в `DISTFILES` исходных дистрибутивных файлов, только когда определена переменная `PACKAGE_BUILDING`.
+[[licenses-license]]
+=== `LICENSE`
-[[ports-master-sites-n-example-always-keep-distfiles]]
-.Использование `ALWAYS_KEEP_DISTFILES`.
+Краткое название лицензии или лицензий, если применяется более одной лицензии.
+
+Если это одна из лицензий, перечисленных в crossref:makefiles[licenses-license-list,Предопределенный список лицензий], можно задать только переменные `LICENSE_FILE` и `LICENSE_DISTFILES`.
+
+Если это лицензия, которая не определена в рамках портов (см. crossref:makefiles[licenses-license-list,Список предопределённых лицензий]), необходимо задать `LICENSE_PERMS` и `LICENSE_NAME`, а также `LICENSE_FILE` или `LICENSE_TEXT`. Также можно задать `LICENSE_DISTFILES` и `LICENSE_GROUPS`, но это не обязательно.
+
+Предопределенные лицензии показаны в crossref:makefiles[licenses-license-list,Список предопределенных лицензий]. Текущий список всегда доступен в [.filename]#Mk/bsd.licenses.db.mk#.
+
+[[licenses-license-ex1]]
+.Простейшее использование, предопределённые лицензии
[example]
====
+
+Когда в файле [.filename]#README# какого-либо программного обеспечения указано: «Данное программное обеспечение распространяется на условиях GNU Lesser General Public License, опубликованной Free Software Foundation; либо версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии», но сам файл лицензии не предоставлен, используйте следующее:
+
[.programlisting]
....
-.if defined(PACKAGE_BUILDING)
-DISTFILES+= foo.tar.gz
-ALWAYS_KEEP_DISTFILES= yes
-.endif
+LICENSE= LGPL21+
+....
+
+Когда программное обеспечение предоставляет файл лицензии, используйте это:
+
+[.programlisting]
+....
+LICENSE= LGPL21+
+LICENSE_FILE= ${WRKSRC}/COPYING
....
====
-При добавлении дополнительных файлов в `DISTFILES` убедитесь, что вы их также добавляете в [.filename]#distinfo#. Кроме того, дополнительные файлы обычно распаковываются также в `WRKDIR`, что для некоторых портов может вызывать нежелательные подобные эффекты и требовать особую обработку.
+Для предопределённых лицензий права по умолчанию: `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept`.
-[[makefile-maintainer]]
-== `MAINTAINER`
+[[licenses-license-list]]
+.Предопределенный список лицензий
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Короткое имя
+| Имя
+| Группа
+| Разрешения
+
+|`AGPLv3`
+|Универсальная общественная лицензия GNU Affero версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`AGPLv3+`
+|Универсальная общественная лицензия GNU Affero версии 3 (или позднее)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`APACHE10`
+|Apache License 1.0
+|`FSF`
+|(по умолчанию)
+
+|`APACHE11`
+|Apache License 1.1
+|`FSF OSI`
+|(по умолчанию)
+
+|`APACHE20`
+|Apache License 2.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`ART10`
+|Художественная лицензия версия 1.0
+|`OSI`
+|(по умолчанию)
+
+|`ART20`
+|Художественная лицензия версии 2.0
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`ARTPERL10`
+|Художественная лицензия (perl) версия 1.0
+|`OSI`
+|(по умолчанию)
+
+|`BSD`
+|Лицензия BSD, общая версия (устарела)
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD2CLAUSE`
+|BSD 2-пунктная лицензия "Упрощенная"
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD3CLAUSE`
+|BSD 3-пунктная лицензия "Новая" или "Пересмотренная"
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD4CLAUSE`
+|BSD 4-пунктная лицензия "Оригинальная" или "Старая"
+|`FSF`
+|(по умолчанию)
+
+|`BSL`
+|Лицензия программного обеспечения Boost
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`CC-BY-1.0`
+|Creative Commons с указанием авторства 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-2.0`
+|Creative Commons с указанием авторства 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-2.5`
+|Creative Commons с указанием авторства 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-3.0`
+|Creative Commons с указанием авторства 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-4.0`
+|Creative Commons с указанием авторства 4.0
+|
+|(по умолчанию)
+
+|`CC-BY-NC-1.0`
+|Creative Commons с указанием авторства – некоммерческая 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-2.0`
+|Creative Commons с указанием авторства – некоммерческая 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-2.5`
+|Creative Commons с указанием авторства – некоммерческая 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-3.0`
+|Creative Commons с указанием авторства – некоммерческая 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-4.0`
+|Creative Commons с указанием авторства – некоммерческая 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-1.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-2.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-2.5`
+|Creative Commons с указанием авторства – некоммерческая – без производных 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-3.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-4.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-1.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-2.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-2.5`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-3.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-4.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-ND-1.0`
+|Creative Commons с указанием авторства – без производных 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-2.0`
+|Creative Commons с указанием авторства – без производных 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-2.5`
+|Creative Commons с указанием авторства – без производных 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-ND-3.0`
+|Creative Commons с указанием авторства – без производных 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-4.0`
+|Creative Commons с указанием авторства – без производных 4.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-1.0`
+|Creative Commons с указанием авторства – на тех же условиях 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-2.0`
+|Creative Commons с указанием авторства – на тех же условиях 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-2.5`
+|Creative Commons с указанием авторства – на тех же условиях 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-SA-3.0`
+|Creative Commons с указанием авторства – на тех же условиях 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-4.0`
+|Creative Commons с указанием авторства – на тех же условиях 4.0
+|
+|(по умолчанию)
+
+|`CC0-1.0`
+|Creative Commons Zero v1.0 Universal (Отказ от прав 1.0 Универсальная)
+|`FSF GPL COPYFREE`
+|(по умолчанию)
+
+|`CDDL`
+|Лицензия на совместную разработку и распространение
+|`FSF OSI`
+|(по умолчанию)
+
+|`CPAL-1.0`
+|Публичная лицензия общего распространения с указанием авторства
+|`FSF OSI`
+|(по умолчанию)
+
+|`ClArtistic`
+|Уточнённая художественная лицензия
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`EPL`
+|Публичная лицензия Eclipse
+|`FSF OSI`
+|(по умолчанию)
+
+|`GFDL`
+|GNU Свободная лицензия на документацию
+|`FSF`
+|(по умолчанию)
+
+|`GMGPL`
+|Модифицированная Общедоступная лицензия GNAT
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv1`
+|Универсальная общественная лицензия GNU версии 1
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv1+`
+|Универсальная общественная лицензия GNU версии 1 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv2`
+|Универсальная общественная лицензия GNU версии 2
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv2+`
+|Универсальная общественная лицензия GNU версии 2 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3`
+|Универсальная общественная лицензия GNU версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3+`
+|Универсальная общественная лицензия GNU версии 3 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3RLE`
+|Исключение для библиотеки времени выполнения GNU GPL версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3RLE+`
+|Исключение для библиотеки времени выполнения GNU GPL версии 3 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`ISCL`
+|Лицензия Internet Systems Consortium
+|`FSF GPL OSI COPYFREE`
+|(по умолчанию)
+
+|`LGPL20`
+|Общедоступная лицензия GNU для библиотек, версия 2.0
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL20+`
+|Общедоступная лицензия GNU для библиотек, версия 2.0 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL21`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 2.1
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL21+`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 2.1 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL3`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL3+`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 3 (или более поздней)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LPPL10`
+|Публичная лицензия проекта LaTeX, версия 1.0
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL11`
+|Публичная лицензия проекта LaTeX, версия 1.1
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL12`
+|Публичная лицензия проекта LaTeX, версия 1.2
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13`
+|Публичная лицензия проекта LaTeX, версия 1.3
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13a`
+|Публичная лицензия проекта LaTeX, версия 1.3a
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13b`
+|Публичная лицензия проекта LaTeX, версия 1.3b
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13c`
+|Публичная лицензия проекта LaTeX, версия 1.3c
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`MIT`
+|Лицензия MIT / Лицензия X11
+|`COPYFREE FSF GPL OSI`
+|(по умолчанию)
+
+|`MPL10`
+|Публичная лицензия Mozilla, версия 1.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`MPL11`
+|Публичная лицензия Mozilla, версия 1.1
+|`FSF OSI`
+|(по умолчанию)
+
+|`MPL20`
+|Публичная лицензия Mozilla, версия 2.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`NCSA`
+|Открытая лицензия Университета Иллинойса/NCSA
+|`COPYFREE FSF GPL OSI`
+|(по умолчанию)
+
+|`NONE`
+|Лицензия не указана
+|
+|`none`
+
+|`OFL10`
+|Лицензия SIL Open Font версия 1.0 (https://scripts.sil.org/OFL/)
+|`FONTS`
+|(по умолчанию)
+
+|`OFL11`
+|Лицензия SIL Open Font версия 1.1 (https://scripts.sil.org/OFL/)
+|`FONTS`
+|(по умолчанию)
+
+|`OWL`
+|Лицензия Открытых Произведений (owl.apotheon.org)
+|`COPYFREE`
+|(по умолчанию)
+
+|`OpenSSL`
+|Лицензия OpenSSL
+|`FSF`
+|(по умолчанию)
+
+|`PD`
+|Общественное достояние
+|`GPL COPYFREE`
+|(по умолчанию)
+
+|`PHP202`
+|Лицензия PHP версии 2.02
+|`FSF OSI`
+|(по умолчанию)
+
+|`PHP30`
+|Лицензия PHP версии 3.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`PHP301`
+|Лицензия PHP версии 3.01
+|`FSF OSI`
+|(по умолчанию)
+
+|`PSFL`
+|Лицензия Python Software Foundation
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`PostgreSQL`
+|Лицензия PostgreSQL
+|`FSF GPL OSI COPYFREE`
+|(по умолчанию)
+
+|`RUBY`
+|Лицензия Ruby
+|`FSF`
+|(по умолчанию)
+
+|`UNLICENSE`
+|Отказ от лицензии (The Unlicense)
+|`COPYFREE FSF GPL`
+|(по умолчанию)
+
+|`WTFPL`
+|Публичная лицензия "Делай что хочешь" версия 2
+|`GPL FSF COPYFREE`
+|(по умолчанию)
+
+|`WTFPL1`
+|Публичная лицензия "Делай что хочешь" версия 1
+|`GPL FSF COPYFREE`
+|(по умолчанию)
+
+|`ZLIB`
+|Лицензия zlib
+|`GPL FSF OSI`
+|(по умолчанию)
+
+|`ZPL21`
+|Публичная лицензия Zope версия 2.1
+|`GPL OSI`
+|(по умолчанию)
+|===
-Укажите здесь ваш адрес электронной почты. Пожалуйста. _:-)_
+[[licenses-license_perms]]
+=== `LICENSE_PERMS` и `LICENSE_PERMS_NAME_`
-Заметьте, что в качестве значения для `MAINTAINER` допустимо использование только одного адреса без поля комментария. Должен использоваться формат `user@hostname.domain`. Пожалуйста, не включайте никакого описательного текста, например, вашего настоящего имени в эту строку-это несколько сбивает с толку [.filename]#bsd.port.mk#.
+Разрешения. Используйте `none`, если пусто.
-Сопровождающий ответственен за поддержание порта в актуальном состоянии и обеспечение правильной работы порта. За подробным описанием обязанностей сопровождающего порт обращайтесь к главе extref:{contributing}[The challenge for port maintainers, maintain-port].
+.Список разрешений лицензии
+[[licenses-license_perms-dist-mirror]]
+`dist-mirror`::
+Разрешается распространение дистрибутивных файлов. Дистрибутивные файлы будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD.
-Перед фиксацией в репозитории изменения в порте будут отправлены сопровождающему для просмотра и одобрения. Если сопровождающий порта не ответил на запрос пользователя об обновлении в течение двух недель (исключая большие праздники), то это можно считать тайм-аутом сопровождающего, и обновление может быть выполнено без явного подтверждения от сопровождающего. Если сопровождающий не отвечает в течение трёх месяцев, то считается, что он отсутствует, и как сопровождающий порта, о котором идёт речь, может быть заменён. Исключениями из этого правила является всё, что сопровождает {portmgr} или {security-officer}. Запрещено делать любые несанкционированные изменения в портах, которые ведут эти группы.
+[[licenses-license_perms-no-dist-mirror]]
+`no-dist-mirror`::
+Распространение дистрибутивных файлов запрещено. Это эквивалентно установке crossref:special[porting-restrictions-restricted,`RESTRICTED`]. Дистрибутивные файлы _не_ будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD.
-Мы оставляем за собой право изменять сообщение сопровождающего для лучшего соответствия существующим политикам и стилю Коллекции Портов без явного одобрения со стороны отправителя. Также, крупные изменения в инфраструктуре могут повлечь изменения в порте без согласия сопровождающего. Такой вид изменений никогда не будет затрагивать функциональность порта.
+[[licenses-license_perms-dist-sell]]
+`dist-sell`::
+Продажа файлов дистрибутива разрешена. Файлы дистрибутива будут присутствовать на образах установщика.
-За {portmgr} оставляется право снять или назначить кого-либо сопровождающим по любой причине, а за {security-officer} оставляется право лишать или назначать права на сопровождение порта по соображениям информационной безопасности.
+[[licenses-license_perms-no-dist-sell]]
+`no-dist-sell`::
+Продажа файлов дистрибутива запрещена. Это эквивалентно установке crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`].
-[[makefile-comment]]
-== `COMMENT`
+[[licenses-license_perms-pkg-mirror]]
+`pkg-mirror`::
+Свободное распространение пакета разрешено. Пакет будет распространяться через CDN пакетов FreeBSD https://pkg.freebsd.org/[https://pkg.freebsd.org/].
-Содержит однострочное описание порта. Пожалуйста, соблюдайте следующие правила:
+[[licenses-license_perms-no-pkg-mirror]]
+`no-pkg-mirror`::
+Свободное распространение пакета запрещено. Эквивалентно установке crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. Пакет _не_ будет распространяться через FreeBSD CDN для пакетов https://pkg.freebsd.org/[https://pkg.freebsd.org/].
-. Старайтесь делать строку COMMENT длиной не больше, чем 70 символов, так как эта строка будет использована командой `pkg info` (см. man:pkg-info[8]) для отображения однострочного описания порта;
-. _Не_ включайте сюда название пакета (или номер версии программного обеспечения);
-. Комментарий должен начинаться с заглавной буквы и не заканчиваться точкой;
-. Не начинайте комментарий с неопределённого артикля (A или An);
-. Имена пишутся с заглавной буквы (например, Apache, JavaScript, Perl);
-. Для перечислений используйте английскую Оксфордскую запятую (англ. Oxford comma) (например, green, red, and blue);
-. Используйте программу проверки орфографии.
+[[licenses-license_perms-pkg-sell]]
+`pkg-sell`::
+Продажа пакета разрешена. Пакет будет присутствовать на образах установщика.
-Вот пример:
+[[licenses-license_perms-no-pkg-sell]]
+`no-pkg-sell`::
+Продажа пакета запрещена. Это эквивалентно установке crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]. Пакет _не_ будет присутствовать на образах установщика.
+
+[[licenses-license_perms-auto-accept]]
+`auto-accept`::
+Лицензия принимается по умолчанию. Запросы на принятие лицензии не отображаются, если пользователь не определил `LICENSES_ASK`. Используйте это, если в лицензии не указано, что пользователь должен принять условия лицензии.
+
+[[licenses-license_perms-no-auto-accept]]
+`no-auto-accept`::
+Лицензия не принимается по умолчанию. Пользователь всегда будет запрошен на подтверждение принятия данной лицензии. Это должно использоваться, если лицензия требует, чтобы пользователь принял её условия.
+
+Когда присутствуют и `_permission_`, и `no-_permission_`, то `no-_permission_` отменяет `_permission_`.
+
+Когда `_permission_` отсутствует, это считается как `no-_permission_`.
+
+[WARNING]
+====
+Некоторые отсутствующие разрешения могут сделать порт (и все зависящие от него порты) непригодными для использования пользователями пакетов:
+
+Порт без разрешения `auto-accept` никогда не будет собран, и все зависящие от него порты будут проигнорированы.
+
+Порт без разрешения `pkg-mirror`, а также любые порты, зависящие от него, будут удалены после сборки, что гарантирует их отсутствие в дистрибуции.
+====
+
+[[licenses-license_perms-ex1]]
+.Нестандартная лицензия
+[example]
+====
+Прочитайте условия лицензии и переведите их, используя доступные разрешения.
[.programlisting]
....
-COMMENT= Cat chasing a mouse all over the screen
+LICENSE= UNKNOWN
+LICENSE_NAME= unknown
+LICENSE_TEXT= This program is NOT in public domain.\
+ It can be freely distributed for non-commercial purposes only.
+LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
+....
+
+====
+
+[[licenses-license_perms-ex2]]
+.Стандартные и нестандартные лицензии
+[example]
+====
+
+Прочитайте условия лицензии и укажите их, используя доступные разрешения. В случае сомнений обратитесь за разъяснениями на {freebsd-ports}.
+
+[.programlisting]
+....
+LICENSE= WARSOW GPLv2
+LICENSE_COMB= multi
+LICENSE_NAME_WARSOW= Warsow Content License
+LICENSE_FILE_WARSOW= ${WRKSRC}/docs/license.txt
+LICENSE_PERMS_WARSOW= dist-mirror pkg-mirror auto-accept
+....
+
+Когда разрешения лицензий GPLv2 и UNKNOWN смешиваются, порт получает `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept`. Опции `no-_разрешения_` отменяют соответствующие _разрешения_. Итоговый список разрешений: _dist-mirror pkg-mirror auto-accept_. Файлы дистрибутива и пакеты не будут доступны в образах установщика.
+====
+
+[[licenses-license_groups]]
+=== `LICENSE_GROUPS` и `LICENSE_GROUPS_NAME`
+
+Группы, к которым принадлежит лицензия.
+
+.Список предопределенных групп лицензий
+[[licenses-license_groups-FSF]]
+`FSF`::
+Одобрено Free Software Foundation, см. https://www.fsf.org/licensing/[Команда по лицензированию и соответствию FSF].
+
+[[licenses-license_groups-GPL]]
+`GPL`::
+Совместимые с GPL
+
+[[licenses-license_groups-OSI]]
+`OSI`::
+Одобрено OSI, см. страницу https://opensource.org/licenses/[Открытых лицензий].
+
+[[licenses-license_groups-COPYFREE]]
+`COPYFREE`::
+Соответствует определению стандарта Copyfree, см. страницу https://copyfree.org/standard/licenses/[лицензий Copyfree].
+
+[[licenses-license_groups-FONTS]]
+`FONTS`::
+Лицензии на шрифты
+
+[[licenses-license_name]]
+=== `LICENSE_NAME` и `LICENSE_NAME_NAME`
+
+Полное название лицензии.
+
+[[licenses-license_name-ex1]]
+.`LICENSE_NAME`
+[example]
+====
+
+[.programlisting]
+....
+LICENSE= UNRAR
+LICENSE_NAME= UnRAR License
+LICENSE_FILE= ${WRKSRC}/license.txt
+LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
....
-В файле [.filename]#Makefile# переменная COMMENT должна следовать сразу за переменной MAINTAINER.
+====
+
+[[licenses-license_file]]
+=== `LICENSE_FILE` и `LICENSE_FILE_NAME`
+
+Полный путь к файлу, содержащему текст лицензии, обычно [.filename]#${WRKSRC}/some/file#. Если файл отсутствует в дистрибутиве, а его содержимое слишком длинное для размещения в crossref:makefiles[licenses-license_text,`LICENSE_TEXT`], поместите его в новый файл в [.filename]#${FILESDIR}#.
+
+[[licenses-license_file-ex1]]
+.`LICENSE_FILE`
+[example]
+====
+
+[.programlisting]
+....
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+....
+
+====
+
+[[licenses-license_text]]
+=== `LICENSE_TEXT` и `LICENSE_TEXT_NAME`
+
+Текст для использования в качестве лицензии. Полезно, когда лицензия отсутствует в файлах дистрибутива и её текст краток.
+
+[[licenses-license_text-ex1]]
+.`LICENSE_TEXT`
+[example]
+====
+[.programlisting]
+....
+LICENSE= UNKNOWN
+LICENSE_NAME= unknown
+LICENSE_TEXT= This program is NOT in public domain.\
+ It can be freely distributed for non-commercial purposes only,\
+ and THERE IS NO WARRANTY FOR THIS PROGRAM.
+LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
+....
+
+====
+
+[[licenses-license_distfiles]]
+=== `LICENSE_DISTFILES` и `LICENSE_DISTFILES_NAME`
+
+Файлы дистрибутива, к которым применяются лицензии. По умолчанию — все файлы дистрибутива.
+
+[[licenses-license_distfiles-ex1]]
+.`LICENSE_DISTFILES`
+[example]
+====
+Используется, когда файлы дистрибутива имеют разные лицензии. Например, один файл имеет лицензию на код, а другой содержит некоторые произведения искусства, которые нельзя распространять:
+
+[.programlisting]
+....
+MASTER_SITES= SF/some-game
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip
+
+LICENSE= BSD3CLAUSE ARTWORK
+LICENSE_COMB= dual
+LICENSE_NAME_ARTWORK= The game artwork license
+LICENSE_TEXT_ARTWORK= The README says that the files cannot be redistributed
+LICENSE_PERMS_ARTWORK= pkg-mirror pkg-sell auto-accept
+LICENSE_DISTFILES_BSD3CLAUSE= ${DISTNAME}${EXTRACT_SUFX}
+LICENSE_DISTFILES_ARTWORK= artwork.zip
+....
+
+====
+
+[[licenses-license_comb]]
+=== `LICENSE_COMB`
+
+Установите значение `multi`, если применяются все лицензии. Установите значение `dual`, если применяется любая из лицензий. По умолчанию используется значение `single`.
+
+[[licenses-license_comb-ex1]]
+.Двойные лицензии
+[example]
+====
+
+Когда порт содержит указание «Это программное обеспечение может распространяться под GNU General Public License или Artistic License», это означает, что можно использовать любую из этих лицензий. Используйте следующее:
+
+[.programlisting]
+....
+LICENSE= ART10 GPLv1
+LICENSE_COMB= dual
+....
+
+Если предоставлены файлы лицензий, используйте это:
+
+[.programlisting]
+....
+LICENSE= ART10 GPLv1
+LICENSE_COMB= dual
+LICENSE_FILE_ART10= ${WRKSRC}/Artistic
+LICENSE_FILE_GPLv1= ${WRKSRC}/Copying
+....
+
+====
+
+[[licenses-license_comb-ex2]]
+.Множественные лицензии
+[example]
+====
+
+Если часть порта имеет одну лицензию, а другая часть — другую, используйте `multi`:
+
+[.programlisting]
+....
+LICENSE= GPLv2 LGPL21+
+LICENSE_COMB= multi
+....
+
+====
[[makefile-portscout]]
== `PORTSCOUT`
-Portscout являет собой автоматизированное средство проверки доступности дистрибутивных файлов для Коллекции Портов FreeBSD, подробное описание которого предоставляет crossref:keeping-up[distfile-survey, Portscout: сканер дистрибутивных файлов портов FreeBSD].
+Portscout — это автоматизированная утилита проверки distfile для Коллекции портов FreeBSD, подробно описанная в crossref:keeping-up[distfile-survey,Portscout: сканирование distfile портов FreeBSD].
+
+`PORTSCOUT` определяет специальные условия, в рамках которых работа сканера дистрибутивных файлов Portscout ограничена.
-Переменная `PORTSCOUT` задаёт специальные условия, ограничивающие работу Portscout - сканера дистрибутивных файлов.
+Ситуации, когда установлена переменная `PORTSCOUT`, включают:
-Ситуации, при которых следует указывать переменную `PORTSCOUT`:
+* Когда необходимо игнорировать distfiles для определённых версий. Например, чтобы исключить версию _8.2_ и версию _8.3_ из проверок версий distfiles, так как известно, что они неработоспособны, добавьте:
++
+[.programlisting]
+....
+PORTSCOUT= skipv:8.2,8.3
+....
-* Когда должны игнорироваться дистрибутивные файлы для конкретных версий или младших ревизий. Например, чтобы исключить из проверок новых версий дистрибутивных файлов версию _8.2_ по причине того, что она является поломанной, добавьте следующее:
+* Когда проверки версий distfile необходимо полностью отключить. Например, если порт больше не будет обновляться, добавьте:
+
[.programlisting]
....
-PORTSCOUT= ignore:8.2
+PORTSCOUT= ignore:1
....
-* Когда должны проверяться конкретные версии или старшие и младшие ревизии дистрибутивных файлов. Например, если следует ограничиться проверкой версии _0.6.4_, потому что более новые версии имеют проблемы совместимости с FreeBSD, добавьте:
+* Когда необходимо проверять конкретные версии или определенные мажорные и минорные редакции distfile. Например, если нужно отслеживать только версию _0.6.4_, потому что более новые версии имеют проблемы совместимости с FreeBSD, добавьте:
+
[.programlisting]
....
PORTSCOUT= limit:^0\.6\.4
....
-* Когда URL, в которых указаны доступные версии, отличаются от URL их загрузки. Например, чтобы привязать проверку новых версий дистрибутивных файлов к странице загрузки для порта package:databases/pgtune[], добавьте:
+* Когда URL-адреса, перечисляющие доступные версии, отличаются от URL-адресов загрузки. Например, чтобы ограничить проверку версий distfile страницей загрузки для пакета: package:databases/pgtune[] добавьте:
+
[.programlisting]
....
-PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416
+PORTSCOUT= site:http://www.renpy.org/dl/release/
....
[[makefile-depend]]
== Зависимости
-Многие порты зависят от других портов. Это очень удобная замечательная особенность большинства Unix-подобных операционных систем, включая FreeBSD. Множество портов могут использовать общую зависимость совместно, а не включать её в состав каждого порта или пакета, который в ней нуждается. Имеется семь переменных, которые вы можете использовать для обеспечения того, что всё требуемое находится на машине пользователя. Имеется также несколько предопределённых переменных, отражающих зависимости для общих случаев, плюс ещё несколько для управления поведением зависимостей.
+Многие порты зависят от других портов. Это очень удобная особенность большинства Unix-подобных операционных систем, включая FreeBSD. Несколько портов могут использовать общую зависимость вместо того, чтобы включать эту зависимость в каждый порт или пакет, который в ней нуждается. Существует семь переменных, которые можно использовать для обеспечения наличия всех необходимых компонентов на машине пользователя. Также есть предопределенные переменные зависимостей для распространенных случаев и несколько дополнительных для управления поведением зависимостей.
+
+[IMPORTANT]
+====
+Когда у программного обеспечения есть дополнительные зависимости, предоставляющие дополнительные возможности, основные зависимости, перечисленные в `*_DEPENDS`, должны включать те дополнительные зависимости, которые будут полезны большинству пользователей. Основные зависимости никогда не должны быть "минимальным" набором зависимостей. Цель состоит не в том, чтобы включить все возможные зависимости. Включайте только те, которые будут полезны большинству людей.
+====
+[[makefile-lib_depends]]
=== `LIB_DEPENDS`
-Эта переменная указывает, от каких совместно используемых библиотек зависит порт. Это список пар lib:dir, где _lib_ - это имя библиотеки, _dir_ - это каталог, в котором можно ее найти в случае, если ее нет на машине. Например,
+Эта переменная определяет разделяемые библиотеки, от которых зависит данный порт. Это список кортежей вида `_lib:dir_`, где `_lib_` — имя разделяемой библиотеки, а `_dir_` — директория, в которой её следует искать, если она недоступна. Например,
[.programlisting]
....
-LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg
+LIB_DEPENDS= libjpeg.so:graphics/jpeg
....
-проверит наличие библиотеки jpeg с любым номером версии и перейдет в подкаталог [.filename]#graphics/jpeg# вашего дерева портов для ее построения и установки, если библиотека отсутствует.
+проверит наличие общей библиотеки jpeg с любой версией и перейдет в подкаталог [.filename]#graphics/jpeg# дерева портов, чтобы собрать и установить её, если она не найдена.
-Зависимость проверяется дважды, один раз внутри цели `build`, а затем из цели `install`. Кроме того, имя зависимости помещается в пакет, так что `pkg install` (см. man:pkg-install[8]) будет автоматически её устанавливать, если её нет на пользовательской системе.
+Зависимость проверяется дважды: один раз внутри цели `build` и затем внутри цели `install`. Также имя зависимости добавляется в пакет, чтобы `pkg install` (см. man:pkg-install[8]) автоматически установил её, если её нет в системе пользователя.
+[[makefile-run_depends]]
=== `RUN_DEPENDS`
-В этой переменной перечисляются выполнимые файлы или файлы, от которых зависит работа порта. Это список пар вида path:dir:target, где _path_ - это имя программы или файла, а _dir_ - каталог, в котором можно найти порт в случае, если его нет в системе, и _target_ - это цель, которую нужно вызвать в этом каталоге. Если _path_ начинается со слэша (`/`), он воспринимается как файл и его существование проверяется командой `test -e`; в противном случае предполагается, что это выполнимый файл, и для определения того, имеется ли программа в пути поиска, используется команда `which -s`.
+Эта переменная определяет исполняемые файлы или файлы, от которых зависит порт во время выполнения. Это список кортежей ``_path:dir_``[:``_target_``], где `_path_` — это имя исполняемого файла или файла, _dir_ — директория, в которой его следует искать, если он недоступен, а _target_ — цель, которую нужно вызвать в этой директории. Если _path_ начинается с косой черты (`/`), он считается файлом, и его существование проверяется с помощью `test -e`; в противном случае предполагается, что это исполняемый файл, и `which -s` используется для проверки наличия программы в пути поиска.
Например,
[.programlisting]
....
-RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
- xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr
+RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:news/inn \
+ xmlcatmgr:textproc/xmlcatmgr
....
-проверит существование файла или каталога [.filename]#/usr/local/news/bin/innd#, и если ничего не будет найдено, то построит и установит порт из подкаталога [.filename]#news/inn# дерева портов. Также будет выполнена проверка, присутствует ли в пути поиска исполняемый файл с именем `xmlcatmgr`, и перейдет в подкаталог [.filename]#textproc/xmlcatmgr# вашего дерева портов для его построения и установки, если он не будет найден.
+проверит, существует ли файл или каталог [.filename]#/usr/local/news/bin/innd#, и соберет и установит его из подкаталога [.filename]#news/inn# дерева портов, если он не найден. Также будет проверено, находится ли исполняемый файл `xmlcatmgr` в пути поиска, и если он не найден, будет выполнен переход в [.filename]#textproc/xmlcatmgr# для сборки и установки.
[NOTE]
====
-В приведенном примере `innd` является выполнимым файлом; если выполнимый файл находится в месте, которое отсутствует в списке путей файлов, то вы должны указать полный путь к файлу.
+В этом случае `innd` является исполняемым файлом; если исполняемый файл находится в месте, которое не ожидается в пути поиска, используйте полный путь.
====
[NOTE]
====
-Официальным значением переменной поиска `PATH`, используемым в кластере построения портов является
+Официальный путь поиска `PATH`, используемый в кластере сборки портов
[.programlisting]
....
@@ -1333,361 +3211,333 @@ RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
====
-Зависимость проверяется внутри цели `install`. Кроме того, имя зависимости помещается в пакет, так что `pkg install` (см. man:pkg-install[8]) будет автоматически его устанавливать, если он не будет найден в пользовательской системе. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется внутри цели `install`. Также имя зависимости добавляется в пакет, чтобы команда `pkg install` (см. man:pkg-install[8]) автоматически установила её, если она отсутствует в системе пользователя. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
-Довольно распространенной является ситуация, когда `RUN_DEPENDS` буквально такая же как `BUILD_DEPENDS`, особенно если переносимое программное обеспечение написано на языке сценариев, или если оно требует такое же окружение для исполнения, как и используемое во время построения. В этом случае, очень заманчивым или довольно естественным является присвоение одного другому:
+Довольно распространённая ситуация, когда `RUN_DEPENDS` буквально совпадает с `BUILD_DEPENDS`, особенно если портируемое программное обеспечение написано на скриптовом языке или требует одинаковой среды для сборки и выполнения. В этом случае возникает соблазн и интуитивное желание напрямую присвоить одно другому:
[.programlisting]
....
RUN_DEPENDS= ${BUILD_DEPENDS}
....
-Тем не менее, подобные присвоения могут загрязнять зависимости времени исполнения содержимым, не заданным в `BUILD_DEPENDS` исходного порта. Такое случается из-за ленивого вычисления в man:make[1] присваиваемых переменных. Представьте [.filename]#Makefile# с переменными `USE_*`, которые обрабатываются в [.filename]#ports/Mk/bsd.*.mk# для пополнения первоначальных зависимостей построения. Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. Для предотвращения загрязнения `RUN_DEPENDS` подобными дополнительными зависимостями проявляйте осторожность с присвоением с раскрытием, т.е. с раскрытием значения перед его присвоением переменной:
+Однако такое присваивание может загрязнить зависимости во время выполнения записями, не определёнными в оригинальном `BUILD_DEPENDS` порта. Это происходит из-за ленивого вычисления присваивания переменных в man:make[1]. Рассмотрим [.filename]#Makefile# с `USE_*`, которые обрабатываются [.filename]#ports/Mk/bsd.*.mk# для добавления начальных зависимостей сборки. Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. Чтобы предотвратить попадание таких дополнительных зависимостей в `RUN_DEPENDS`, создайте другую переменную с текущим содержимым `BUILD_DEPENDS` и присвойте её как `BUILD_DEPENDS`, так и `RUN_DEPENDS`:
[.programlisting]
....
-RUN_DEPENDS:= ${BUILD_DEPENDS}
+MY_DEPENDS= some:devel/some \
+ other:lang/other
+BUILD_DEPENDS= ${MY_DEPENDS}
+RUN_DEPENDS= ${MY_DEPENDS}
....
+[IMPORTANT]
+====
+_Не используйте_ `:=` для присваивания `BUILD_DEPENDS` в `RUN_DEPENDS` или наоборот. Все переменные раскрываются немедленно, что является совершенно неправильным и почти всегда приводит к ошибке.
+====
+
+[[makefile-build_depends]]
=== `BUILD_DEPENDS`
-В этой переменной перечисляются выполнимые или обычные файлы, которые требуются порту для его построения. Как и `RUN_DEPENDS`, это список пар path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, необходимые для сборки данного порта. Как и `RUN_DEPENDS`, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
+BUILD_DEPENDS= unzip:archivers/unzip
....
-будет проверять наличие выполнимого фала с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# вашего дерева портов для его построения и установки, если последний не будет найден.
+проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, если он не будет найден.
[NOTE]
====
-Под "построением" здесь понимается всё, от распаковки до компиляции. Зависимость проверяется из цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+"build" здесь означает все процессы от извлечения до компиляции. Зависимость проверяется внутри цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`
====
+[[makefile-fetch_depends]]
=== `FETCH_DEPENDS`
-В этой переменной перечисляются выполняемые файлы или просто файлы, которые требуются порту для сгрузки. Как и предыдущие две переменные, это список пар path:dir:target. Например,
+Эта переменная определяет исполняемые файлы или файлы, необходимые для загрузки этого порта. Как и предыдущие две, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
+FETCH_DEPENDS= ncftp2:net/ncftp2
....
-будет проверять наличие выполняемого файла с именем `ncftp2` и перейдет в каталог [.filename]#net/ncftp2# вашего дерева портов для его построения и установки, если тот не будет найден.
+проверит наличие исполняемого файла с именем `ncftp2` и перейдет в подкаталог [.filename]#net/ncftp2# дерева портов для сборки и установки, если файл не будет найден.
-Зависимость проверяется при выполнении цели `fetch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется внутри цели `fetch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+[[makefile-extract_depends]]
=== `EXTRACT_DEPENDS`
-В этой переменной указываются программы или файлы, которые требуются для распаковки порта. Как и в предыдущих случаях, это список пар вида path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, которые требуются для извлечения данного порта. Как и предыдущая, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
+EXTRACT_DEPENDS= unzip:archivers/unzip
....
-будет проверять наличие программы с именем `unzip`, и перейдёт в подкаталог [.filename]#archivers/unzip# вашего дерева портов для её построения и установки, если такой программы не будет найдено.
+проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, если он не будет найден.
Зависимость проверяется внутри цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
[NOTE]
====
-Используйте эту переменную, только если распаковка не работает (по умолчанию предполагается использование `gzip`) и это не исправляется при помощи `USE_ZIP` или `USE_BZIP2`, которые описаны в <<use-vars>>.
+Используйте эту переменную только если извлечение уже не работает (по умолчанию предполагается `tar`) и не может быть исправлено с помощью `USES=tar`, `USES=lha` или `USES=zip`, как описано в crossref:uses[uses,Использование макросов `USES`].
====
+[[makefile-patch_depends]]
=== `PATCH_DEPENDS`
-Эта переменная указывает на программы или файлы, которые нужны порту для применения патчей. Как и в предыдущих случаях, это список пар вида path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, которые требуются этому порту для применения патчей. Как и предыдущая, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
+PATCH_DEPENDS= ${NONEXISTENT}:java/jfc:extract
....
-будет переходить в подкаталог [.filename]#java/jfc# вашего дерева портов для распаковки.
+будет спускаться в подкаталог [.filename]#java/jfc# дерева портов для его извлечения.
-Зависимость проверяется внутри цели `patch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется в рамках цели `patch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
-[[uses-makefiles]]
+[[makefile-uses]]
=== `USES`
-Могут быть добавлены параметры для определения различных характерных особенностей и зависимостей, которыми обладает данный порт. Они указываются путём добавления в [.filename]#Makefile# этой строки:
+Параметры могут быть добавлены для определения различных функций и зависимостей, используемых портом. Они указываются путем добавления этой строки в [.filename]#Makefile#:
[.programlisting]
....
USES= feature[:arguments]
....
-Для получения полного списка значений смотрите <<uses-makefiles>>.
+Для полного списка значений обратитесь к crossref:uses[uses,Использование макросов `USES`].
[WARNING]
====
-
-Значение `USES` нельзя присваивать после подключения [.filename]#bsd.port.pre.mk#.
+`USES` нельзя назначать после включения [.filename]#bsd.port.pre.mk#.
====
-[[use-vars]]
+[[makefile-use-vars]]
=== `USE_*`
-Для определения общих зависимостей, совместно используемых многими портами, предназначено несколько переменных. Их использование является необязательным, но помогает упростить избыточность файлов [.filename]#Makefile# порта. Каждый из них оформляется как `USE_*`. Эти переменные можно использовать только в [.filename]#Makefile# порта и [.filename]#ports/Mk/bsd.*.mk#. Они не предназначены для установки пользователями параметров - используйте для этих целей `PORT_OPTIONS`.
+Существует несколько переменных для определения общих зависимостей, используемых многими портами. Их использование необязательно, но помогает сократить многословность [.filename]##Makefile## портов. Каждая из них оформлена как `USE_*`. Эти переменные могут использоваться только в [.filename]##Makefile## портов и [.filename]#ports/Mk/bsd.*.mk#. Они не предназначены для настраиваемых пользователем опций — для этой цели используйте `PORT_OPTIONS`.
[NOTE]
====
-Установка любых `USE_*` в [.filename]#/etc/make.conf# _всегда_ является ошибочным действием. В частности, установка
+Всегда неправильно устанавливать любые `USE_*` в [.filename]#/etc/make.conf#. Например, установка
[.programlisting]
....
USE_GCC=X.Y
....
-(где X.Y соответствует версии) добавит зависимость от gccXY к каждому порту, включая и сам `lang/gccXY`!
+(где X.Y — номер версии) добавит зависимость от gccXY для каждого порта, включая сам `lang/gccXY`!
====
-.Переменные `USE_*`
+[[makefile-use-vars-table]]
+.`USE_*`
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
-|`USE_BZIP2`
-|tar-архивы порта упакованы при помощи `bzip2`.
+|`USE_GCC`
+a|
-|`USE_ZIP`
-|tar-архивы порта упакованы при помощи `zip`.
+Порт требует GCC (`gcc` или `{g-plus-plus}`) для сборки.
+Некоторые порты нуждаются в определённой, старой версии GCC, другие требуют современных, актуальных версий.
+Обычно устанавливается в `yes` (означает всегда использовать стабильную, современную версию GCC из портов, согласно `GCC_DEFAULT` в [.filename]#Mk/bsd.default-versions.mk#).
+Это также значение по умолчанию.
+Точная версия также может быть указана, например, значением `10`.
+GCC из базовой системы используется, если он удовлетворяет запрашиваемой версии, в противном случае подходящий компилятор собирается из портов, а `CC` и `CXX` корректируются соответствующим образом.
+Аргумент `:build`, следующий за указанием версии, добавляет только зависимость во время сборки порта.
+
+Например:
+[example]
+====
+[.programlisting]
+....
+USE_GCC=yes # порт требует текущей версии GCC
+USE_GCC=11:build # порт требует GCC 11 только во время сборки
+....
+====
+
+[NOTE]
+====
+`USE_GCC=any` устарел и не должен использоваться в новых портах
+====
-|`USE_GCC`
-|Для сборки порта требуется GCC (gcc или {gcc-plus-plus}). Некоторым портам подходит любая версия, для других требуются последние современные версии. Обычно используется со значением `any` (в этом случае используется встроенный GCC в тех версиях FreeBSD, в состав которых он всё ещё входит, или устанавливается порт `lang/gcc`, когда Clang является компилятором C/C++ по умолчанию) или `yes` (всегда используется стабильная современная версия GCC из порта `lang/gcc`). Также в значении переменной можно указать точную версию, например `4.7`. Минимально допустимую версию можно указать как `4.6+`. GCC из основной системы используется в случае, если его версия удовлетворяет запрошенной, иначе собирается подходящая версии компилятора из порта с соответствующей коррекцией переменных `CC` и `CXX`.
|===
-Переменные, относящиеся к gmake и сценарию [.filename]#configure#, описаны в crossref:special[building, Механизмы построения], а autoconf, automake и libtool описаны в crossref:special[using-autotools, Использование GNU Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-perl, Использование Perl]. Переменные X11 перечислены в crossref:special[using-x11, Использование X11]. crossref:special[using-gnome, Использование GNOME] работает с переменными GNOME и crossref:special[using-kde, Использование KDE] с KDE. crossref:special[using-java, Использование Java] описывает переменные Java, а crossref:special[using-php, Веб-приложения, Apache и PHP] содержит информацию об Apache, PHP и модулях PEAR. Python обсуждается в crossref:special[using-python, Использование Python], а Ruby в crossref:special[using-ruby, Использование Ruby]. crossref:special[using-sdl, Использование SDL] предоставляет переменные, используемые для приложений SDL, и, наконец, crossref:special[using-xfce, Использование Xfce] содержит информацию о приложении Xfce.
+Переменные, связанные с gmake и [.filename]#configure#, описаны в crossref:special[building,Механизмы сборки], тогда как autoconf, automake и libtool описаны в crossref:special[using-autotools,Использование GNU Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-perl,Использование Perl]. Переменные X11 перечислены в crossref:special[using-x11,Использование X11]. crossref:special[using-gnome,Использование GNOME] посвящено GNOME, а crossref:special[using-kde,Использование KDE] — переменным, связанным с KDE. crossref:special[using-java,Использование Java] документирует переменные Java, тогда как crossref:special[using-php,Веб-приложения, Apache и PHP] содержит информацию о модулях Apache, PHP и PEAR. Python обсуждается в crossref:special[using-python,Использование Python], а Ruby — в crossref:special[using-ruby,Использование Ruby]. crossref:special[using-sdl,Использование SDL] предоставляет переменные, используемые для приложений SDL, и, наконец, crossref:special[using-xfce,Использование Xfce] содержит информацию о Xfce.
-=== Минимальная версия зависимости
+[[makefile-version-dependency]]
+=== Минимальная версия зависимого пакета
-Минимальная версия зависимости может быть указана в любой переменной `*_DEPENDS`, за исключением `LIB_DEPENDS`, с использованием следующего синтаксиса:
+Минимальная версия зависимого пакета может быть указана в любом `*_DEPENDS`, кроме `LIB_DEPENDS`, используя следующий синтаксис:
[.programlisting]
....
-p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy
+p5-Spiffy>=0.26:devel/p5-Spiffy
....
-Первое поле содержит название зависимого пакета, которое обязано совпадать с записью в базе данные пакетов, знак сравнения и версию пакета. Зависимость удовлетворяется, если на машине установлен p5-Spiffy-0.26 или новее.
+Первое поле содержит имя зависимого пакета, которое должно соответствовать записи в базе данных пакетов, знак сравнения и версию пакета. Зависимость считается удовлетворённой, если на машине установлен p5-Spiffy-0.26 или новее.
-=== Замечания касательно зависимостей
+[[makefile-note-on-dependencies]]
+=== Заметки о зависимостях
-Как уже отмечено выше, целью, которая вызывается по умолчанию в случае, когда это требует зависимость, является `DEPENDS_TARGET`. Она по умолчанию есть `install`. Это пользовательская переменная; она нигде не определена в файле [.filename]#Makefile# порта. Если вашему порту требуется особый метод обработки зависимости, воспользуйтесь частью `:target` переменной `*_DEPENDS` вместо того, чтобы переопределять `DEPENDS_TARGET`.
+Как упомянуто выше, цель по умолчанию, вызываемая при необходимости зависимости, — это `DEPENDS_TARGET`. По умолчанию она установлена в `install`. Это пользовательская переменная; она никогда не определяется в [.filename]#Makefile# порта. Если порту требуется особый способ обработки зависимости, используйте часть `:target` в `*_DEPENDS` вместо переопределения `DEPENDS_TARGET`.
-Когда вы набираете команду `make clean`, эта операция также выполняется и над зависимостями этого порта. Если вы не хотите, чтобы это случилось, определите переменную `NOCLEANDEPENDS` в вашем окружении. Это может быть особенно нужным, если порт имеет нечто, что занимает много времени на построение, в своём списке зависимостей, например, KDE, GNOME или Mozilla.
+При выполнении `make clean` зависимости портов также автоматически очищаются. Если это нежелательно, определите переменную `NOCLEANDEPENDS` в окружении. Это может быть особенно полезно, если среди зависимостей порта есть что-то, что требует много времени для пересборки, например KDE, GNOME или Mozilla.
-Чтобы безусловно зависеть от другого порта, укажите переменную `${NONEXISTENT}` в качестве первого поля переменной `BUILD_DEPENDS` или `RUN_DEPENDS`. Пользуйтесь этим, только когда вам нужно иметь исходный код другого порта. Вы можете сэкономить время на компиляции, указав также и цель. Например,
+Для безусловной зависимости от другого порта используйте переменную `${NONEXISTENT}` в качестве первого поля `BUILD_DEPENDS` или `RUN_DEPENDS`. Используйте это только в случае, когда необходим исходный код другого порта. Время компиляции можно сократить, указав также цель. Например
[.programlisting]
....
-BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
+BUILD_DEPENDS= ${NONEXISTENT}:graphics/jpeg:extract
....
-всегда будет переходить в каталог с портом `jpeg` и распаковывать его.
+всегда будет переходить к порту `jpeg` и извлекать его.
-=== Зацикленные зависимости фатальны
+[[makefile-circular-dependencies]]
+=== Циклические зависимости фатальны
[IMPORTANT]
====
-Не помещайте зацикливающиеся зависимости в дерево портов!
+Не создавайте циклических зависимостей в дереве портов!
====
-Технология построения портов не защищена от зацикленных зависимостей. Если вы создадите такую, то у кого-нибудь и где-нибудь установка FreeBSD будет немедленно сломана, а у остальных сломается несколько позже. Это на самом деле очень трудно распознать; если вы сомневаетесь, то перед внесением изменений проверьте, что выполнили следующее: `cd /usr/ports; make index`. Этот процесс может быть достаточно медленным на старых машинах, хотя вы сможете спасти большое количество людей-включая себя-от грядущих бед.
+Технология сборки портов не допускает циклических зависимостей. Если такая зависимость будет добавлена, у кого-то в мире почти сразу окажется сломанной установка FreeBSD, а за этим последуют многие другие. Подобные проблемы бывает очень сложно обнаружить. Если есть сомнения, перед внесением изменений обязательно выполните: `cd /usr/ports; make index`. Этот процесс может быть довольно медленным на старых машинах, но он способен избавить множество людей, включая вас, от серьёзных проблем.
-=== Автоматические зависимости и проблемы, которые они вызывают
+[[makefile-automatic-dependencies]]
+=== Проблемы, вызванные автоматическими зависимостями
-Зависимости должны быть указаны либо явно, либо с использованием <<makefile-options,фреймворка OPTIONS>>. Использование прочих методов, таких как автоматическое обнаружение зависимостей, усложняет индексирование, что вызывает проблемы в управлении портами и пакетами.
+Зависимости должны быть объявлены явно или с использованием crossref:makefiles[makefile-options,OPTIONS framework]. Использование других методов, таких как автоматическое обнаружение, усложняет индексацию, что вызывает проблемы для управления портами и пакетами.
-.Некорректное объявление необязательной зависимости
+[[makefile-automatic-dependencies-bad]]
+.Неправильное объявление необязательной зависимости
[example]
====
+
[.programlisting]
....
.include <bsd.port.pre.mk>
.if exists(${LOCALBASE}/bin/foo)
-LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
+LIB_DEPENDS= libbar.so:foo/bar
.endif
....
====
-Проблема автоматического добавления зависимостей заключается в том, что файлы и настройки за пределами порта могут произвольно меняться. Пример: после построения индекса устанавливается набор портов. При этом один из них устанавливает проверяемый файл. На этом этапе индекс будет неправильным, потому что установленный порт неожиданно получит новую зависимость. Индекс может быть по прежнему неправильным даже после его перестроения, в случае если другие порты также определят дополнительные зависимости, основываясь на существовании других файлов.
+Проблема с попыткой автоматического добавления зависимостей заключается в том, что файлы и настройки за пределами отдельного порта могут измениться в любой момент. Например: индекс строится, затем устанавливается группа портов. Но один из портов устанавливает проверяемый файл. Теперь индекс неверен, потому что у установленного порта неожиданно появилась новая зависимость. Индекс может оставаться неверным даже после пересборки, если другие порты также определяют свою потребность в зависимостях на основе существования других файлов.
-.Корректное объявление необязательной зависимости
+[[makefile-automatic-dependencies-good]]
+.Правильное объявление необязательной зависимости
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= BAR
-BAR_DESC= Bar support
+BAR_DESC= Calling cellphones via bar
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MBAR}
-LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
-.endif
+BAR_LIB_DEPENDS= libbar.so:foo/bar
....
====
-Правильным способом является проверка переменных параметров. Этот способ не приводит к несоответствиям в индексе набора портов, поскольку параметры определены до построения индекса. При этом можно использовать простые скрипты для автоматизации построения, установки и обновления этих портов и соответствующих им пакетов.
-
-[[use-want]]
-=== `USE_` и `WANT_`
-
-Переменные `USE_` задаются мейнтейнером порта для определения программного обеспечения, от которого этот порт зависит. Порт, для которого нужен Firefox, укажет
-
-[.programlisting]
-....
-USE_FIREFOX= yes
-....
-
-Некоторые переменные `USE_` могут принимать номера версий или другие параметры. Например, порт, который требует Apache 2.2, укажет
+Проверка переменных опций является правильным методом. Это не вызовет несоответствий в индексе группы портов, при условии что опции были определены до сборки индекса. Затем можно использовать простые скрипты для автоматизации сборки, установки и обновления этих портов и их пакетов.
-[.programlisting]
-....
-USE_APACHE= 22
-....
-
-В некоторых случаях для большего контроля над зависимостями используются переменные `WANT_`, которые позволяют указывать требования в более точной форме. Например, взгляните на порт package:mail/squirrelmail[]. Этому порту нужны несколько модулей PHP, которые перечислены в переменной `USE_PHP`:
+[[makefile-masterdir]]
+== Подчиненные порты и `MASTERDIR`
-[.programlisting]
-....
-USE_PHP= session mhash gettext mbstring pcre openssl xml
-....
+Если порту необходимо собирать немного разные версии пакетов, используя переменную (например, разрешение или размер бумаги) с разными значениями, создайте по одному подкаталогу для каждого пакета, чтобы пользователям было проще понять, что делать, но старайтесь максимально использовать общие файлы между портами. Обычно, при грамотном использовании переменных, во всех каталогах, кроме одного, требуется лишь очень короткий [.filename]#Makefile#. В единственном [.filename]#Makefile# укажите директорию с остальными файлами с помощью `MASTERDIR`. Также используйте переменную как часть crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`], чтобы пакеты имели разные имена.
-Эти модули доступны в версиях CLI и web, поэтому версия web выбрана с переменной `WANT_`:
+Это лучше всего продемонстрировать на примере. Это часть файла [.filename]#print/pkfonts300/Makefile#;
[.programlisting]
....
-WANT_PHP_WEB= yes
-....
-
-Имеющиеся переменные `USE_` и `WANT_` определены в файлах в [.filename]#/usr/ports/Mk#.
-
-[[makefile-masterdir]]
-== `MASTERDIR`
-
-Если вашему порту требуется построение довольно различающихся версий пакетов через переменную (задающую, например, разрешение, или размер бумаги), которая принимает различные значения, создайте для каждого пакета отдельный подкаталог, чтобы пользователям было легче определить, каким пакетом воспользоваться, но попробуйте использовать совместно между портами как можно больше файлов. В типичном случае вам потребуются только очень короткие файлы [.filename]#Makefile# во всех каталогах, кроме одного, если вы будете использовать переменные с умом. В отдельных файлах [.filename]#Makefile# вы можете использовать переменную `MASTERDIR` для указания каталога, в котором находятся все остальные файлы. Также используйте переменную как часть <<porting-pkgname,`PKGNAMESUFFIX`>>, чтобы пакеты имели разные имена.
+PORTNAME= pkfonts${RESOLUTION}
+PORTVERSION= 1.0
+DISTFILES= pk${RESOLUTION}.tar.gz
-Продемонстрируем это на примере. Вот часть файла [.filename]#japanese/xdvi300/Makefile#:
+PLIST= ${PKGDIR}/pkg-plist.${RESOLUTION}
-[.programlisting]
-....
-PORTNAME= xdvi
-PORTVERSION= 17
-PKGNAMEPREFIX= ja-
-PKGNAMESUFFIX= ${RESOLUTION}
- :
-# default
-RESOLUTION?= 300
+.if !defined(RESOLUTION)
+RESOLUTION= 300
+.else
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
- ${RESOLUTION} != 300 && ${RESOLUTION} != 400
+ ${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \
+ ${RESOLUTION} != 400 && ${RESOLUTION} != 600
+.BEGIN:
@${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
- @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
+ @${ECHO_MSG} "Possible values are: 118, 240, 300, 360, 400 and 600."
@${FALSE}
.endif
+.endif
....
-Порт package:japanese/xdvi300[] содержит также все обычные патчи, файлы для пакета и так далее. Если вы введете здесь команду `make`, она возьмет в качестве разрешения значение по умолчанию (300) и построит порт обычным образом.
+Пакет `package:print/pkfonts300[]` также содержит все обычные исправления, файлы пакетов и т.д. При запуске `make` в этом месте будет взято значение разрешения по умолчанию (300), и порт будет собран в обычном режиме.
-Для другого разрешения приведем _полный_[.filename]#xdvi118/Makefile#:
+Что касается других разрешений, это _полный_ [.filename]#print/pkfonts360/Makefile#:
[.programlisting]
....
-RESOLUTION= 118
-MASTERDIR= ${.CURDIR}/../xdvi300
+RESOLUTION= 360
+MASTERDIR= ${.CURDIR}/../pkfonts300
-.include "${MASTERDIR}/Makefile"
+.include "${MASTERDIR}/Makefile"
....
-([.filename]#xdvi240/Makefile# и [.filename]#xdvi400/Makefile# похожи). Задание `MASTERDIR` говорит [.filename]#bsd.port.mk#, что обычный набор подкаталогов типа `FILESDIR` и `SCRIPTDIR` находится в каталоге [.filename]#xdvi300#. Строчка `RESOLUTION=118` переопределят строку `RESOLUTION=300` в файле [.filename]#xdvi300/Makefile# и порт будет построен с разрешением 118.
+([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/Makefile# и все остальные аналогичны). Определение `MASTERDIR` указывает [.filename]#bsd.port.mk#, что стандартный набор подкаталогов, таких как `FILESDIR` и `SCRIPTDIR`, следует искать в [.filename]#pkfonts300#. Строка `RESOLUTION=360` переопределит строку `RESOLUTION=300` в [.filename]#pkfonts300/Makefile#, и порт будет собран с разрешением, установленным на 360.
[[makefile-manpages]]
-== Страницы Справочника
+== Страницы Cправочника
-Если ваш порт определяет корнем для файлов Справочника каталог, отличный от `PREFIX`, вы можете использовать переменную `MANDIRS`, чтобы указать эти каталоги. Обратите внимание, что файлы страниц справочника следует размещать в [.filename]#pkg-plist# наряду с остальными файлами. `MANDIRS` предназначена для автоматического сжатия страниц справочника, так чтобы имена файлов оканчивались на [.filename]#.gz#.
+Если порт размещает дерево man в другом месте, отличном от `PREFIX`, используйте `MANDIRS` для указания этих каталогов. Обратите внимание, что файлы, соответствующие страницам руководства, должны быть добавлены в [.filename]#pkg-plist# вместе с остальными файлами. Назначение `MANDIRS` — обеспечить автоматическое сжатие страниц руководства, поэтому имена файлов имеют суффикс [.filename]#.gz#.
[[makefile-info]]
-== Файлы в формате info
+== Файлы информации
-Если в вашем пакете нужна установка файлов GNU info, они должны быть перечислены в переменной `INFO` (без окончания `.info`), по записи на документ. Предполагается, что эти файлы устанавливаются в [.filename]#PREFIX/INFO_PATH#. Вы можете изменить `INFO_PATH`, если ваш пакет использует другое место для размещения. Однако, это не рекомендуется делать. Эти записи всего лишь содержат путь относительно [.filename]#PREFIX/INFO_PATH#. Например, package:lang/gcc34[] устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и в `INFO` будет что-то вроде этого:
+Если пакету требуется установить файлы GNU info, перечислите их в `INFO` (без завершающего `.info`), по одному документу на строку. Предполагается, что эти файлы будут установлены в [.filename]#PREFIX/INFO_PATH#. Измените `INFO_PATH`, если пакет использует другое расположение. Однако это не рекомендуется. Эти записи содержат только путь относительно [.filename]#PREFIX/INFO_PATH#. Например, пакет package:lang/gcc34[] устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и `INFO` будет выглядеть примерно так:
[.programlisting]
....
INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...
....
-Перед регистрацией пакета соответствующий код установки/удаления будет автоматически добавлен во временный [.filename]#pkg-plist#.
+Соответствующий код установки/удаления будет автоматически добавлен во временный файл [.filename]#pkg-plist# перед регистрацией пакета.
[[makefile-options]]
-== Опции для Makefile
-
-Многие приложения могут быть построены в различных конфигурациях и с дополнительной функциональностью. Например, выбор естественного (человеческого) языка, GUI против командной строки или типа используемой базы данных. Пользователи могут нуждаться в различных конфигурациях, отличных от используемой по умолчанию, поэтому в системе портов предусмотрен механизм, позволяющий автору порта управлять сборкой того или иного варианта конфигурации. Правильная поддержка этих необязательных параметров облегчает пользователям жизнь и даёт два или более порта по цене одного.
-
-=== Knobs
+== Параметры Makefile
-==== `WITH__*_` и `WITHOUT__*_`
-
-Эти переменные предназначены для установки системным администратором. Многие из них стандартизованы в файле http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup[ports/KNOBS].
-
-При создании порта не давайте имя для knob, специфичное для данного приложения. На примере порта Avahi, используйте `WITHOUT_MDNS` вместо `WITHOUT_AVAHI_MDNS`.
-
-[NOTE]
-====
-Не стоит рассчитывать, что `WITH__*_` обязательно имеет соответствующую переменную `WITHOUT__*_`, и наоборот. В общем случае, предполагается значение по умолчанию.
-====
-
-[NOTE]
-====
-Если обратное не указано, то проверяется только факт установки самих переменных, но не их конкретное значение типа `YES` или `NO`.
-====
-
-.Основные переменные `WITH__*_` и `WITHOUT__*_`
-[cols="1,1", frame="none", options="header"]
-|===
-| Переменная
-| Значение
-
-|`WITH_OPENSSL_BASE`
-|Использовать версию OpenSSL из базовой системы.
-
-|`WITH_OPENSSL_PORT`
-|Устанавливает версию OpenSSL из package:security/openssl[], даже если в базовой системе последняя версия.
-|===
-
-==== Наименование KNOBS
-
-Портеры должны использовать так называемые knobs для помощи конечным пользователям и для поддержания количества наименований knobs в небольшом количестве. Список популярных названий knobs можно найти в файле http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup[KNOBS]
-
-Названия knobs должны отражать, что это такое и что выполняет. Если у порта имеется библиотечный префикс в `PORTNAME`, то он должен присутствовать в названии knobs.
+Многие приложения могут быть собраны с дополнительными или различными конфигурациями. Примеры включают выбор естественного (человеческого) языка, графический интерфейс или командная строка, тип поддерживаемой базы данных. Пользователям может потребоваться конфигурация, отличная от стандартной, поэтому система портов предоставляет хуки, которые автор порта может использовать для управления вариантом сборки. Правильная поддержка этих опций сделает пользователей счастливыми и эффективно предоставит два или более порта по цене одного.
+[[makefile-options-options]]
=== `OPTIONS`
-==== Описание
+[[makefile-options-background]]
+==== Пояснения
-При установке порта переменные `OPTIONS_*` предоставляют пользователю окно диалога с отображением доступных параметров, с записью выбранных параметров в файл [.filename]#/var/db/ports/${UNIQUENAME}/options#. Эти опции повторно используются при следующем построении порта.
+`OPTIONS_*` предоставляют пользователю, устанавливающему порт, диалоговое окно с доступными опциями, после чего сохраняют выбранные опции в [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. При следующей сборке порта эти опции будут использованы повторно. `PORT_DBDIR` по умолчанию имеет значение [.filename]#/var/db/ports#. `OPTIONS_NAME` соответствует имени порта (origin) с заменой разделителя на подчёркивания, например, для package:dns/bind99[] это будет `dns_bind99`.
-Когда пользователь запускает `make config` (или запускает впервые `make build`), инфраструктура выполняет проверку существования файла [.filename]#/var/db/ports/${UNIQUENAME}/options#. Если этот файл не существует, то используются значения `OPTIONS_*` и отображается диалоговое окно, в котором эти параметры можно включить или выключить. Затем сохраняется файл опций [.filename]#options#, и выбранные переменные используются при построении порта.
+Когда пользователь запускает `make config` (или впервые запускает `make build`), система проверяет наличие файла [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. Если этот файл не существует, используются значения `OPTIONS_*`, и отображается диалоговое окно, где можно включить или отключить опции. Затем файл [.filename]#options# сохраняется, а настроенные переменные используются при сборке порта.
-Если новая версия порта добавляет новые значения `OPTIONS`, то пользователю будет представлено окно диалога с сохраненными заполненными значениями старых `OPTIONS.`
+Если новая версия порта добавляет новые `OPTIONS`, пользователю будет показан диалог с сохранёнными значениями старых `OPTIONS`, заполненными заранее.
-`make showconfig` отображает сохраненную конфигурацию. Для удаления сохраненной конфигурации используйте `make rmconfig`.
+`make showconfig` показывает сохранённую конфигурацию. Используйте `make rmconfig` для удаления сохранённой конфигурации.
+[[makefile-options-syntax]]
==== Синтаксис
-`OPTIONS_DEFINE` содержит список используемых `OPTIONS`. Они независимы друг от друга и не сгруппированы:
+`OPTIONS_DEFINE` содержит список `OPTIONS`, которые будут использоваться. Они независимы друг от друга и не сгруппированы:
[.programlisting]
....
OPTIONS_DEFINE= OPT1 OPT2
....
-Далее после определения следует описание `OPTIONS` (не является обязательным, но настоятельно рекомендуется):
+После определения `OPTIONS` описываются (необязательно, но настоятельно рекомендуется):
[.programlisting]
....
@@ -1699,19 +3549,19 @@ OPT5_DESC= Describe OPT5
OPT6_DESC= Describe OPT6
....
+[.filename]#ports/Mk/bsd.options.desc.mk# содержит описания для многих распространённых `OPTIONS`. Хотя они часто полезны, переопределите их, если описание недостаточно для порта.
+
[TIP]
====
-
-[.filename]#ports/Mk/bsd.options.desc.mk# содержит описание множества наиболее используемых `OPTIONS`; переопределять их, как правило, не нужно.
+При описании параметров рассматривайте их с точки зрения пользователя: «Какую функциональность это изменяет?» и «Зачем мне включать этот параметр?» Не просто повторяйте название. Например, описание параметра `NLS` как «включить поддержку NLS» не помогает пользователю, который уже видит название параметра, но может не знать, что оно означает. Описание вроде «Поддержка родного языка с помощью утилиты gettext» гораздо полезнее.
====
-[TIP]
+[IMPORTANT]
====
-
-При описании параметров старайтесь представить себя на месте пользователя: "Что это делает?" и "Для чего бы я захотел включить это?" Не делайте простое повторение названия. Например, описание параметра `NLS` как "include NLS support" ("включить поддержку NLS") не поможет пользователю, который уже видит название параметра, но может не знать, что это означает. Описав его как "Native Language Support via gettext utilities" ("Поддержка национального языка через утилиты gettext"), вы поможете пользователю гораздо больше.
+Названия параметров всегда пишутся в верхнем регистре. Они не могут использовать смешанный регистр или нижний регистр.
====
-`OPTIONS` можно группировать в виде переключателей, для которых разрешен выбор единственного варианта в каждой группе:
+`OPTIONS` могут быть сгруппированы как переключаемые варианты, где допускается только один выбор из каждой группы:
[.programlisting]
....
@@ -1719,7 +3569,12 @@ OPTIONS_SINGLE= SG1
OPTIONS_SINGLE_SG1= OPT3 OPT4
....
-`OPTIONS` можно группировать в виде переключателей, для которых разрешен выбор единственного варианта (или ни одного) в каждой группе:
+[WARNING]
+====
+В каждый момент времени _должна_ быть выбрана одна опция из каждой группы `OPTIONS_SINGLE`, чтобы параметры были действительными. Один вариант из каждой группы _должен_ быть добавлен в `OPTIONS_DEFAULT`.
+====
+
+`OPTIONS` могут быть сгруппированы как переключаемые варианты, где ни один или только один вариант из каждой группы разрешён:
[.programlisting]
....
@@ -1727,7 +3582,7 @@ OPTIONS_RADIO= RG1
OPTIONS_RADIO_RG1= OPT7 OPT8
....
-`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых обязан быть включен _по крайней мере один_ из параметров:
+`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где _хотя бы одна_ опция должна быть включена:
[.programlisting]
....
@@ -1735,7 +3590,7 @@ OPTIONS_MULTI= MG1
OPTIONS_MULTI_MG1= OPT5 OPT6
....
-`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых могут быть включены любые параметры, включая отсутствие выбора:
+`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где ни одна или любые опции могут быть включены:
[.programlisting]
....
@@ -1743,36 +3598,31 @@ OPTIONS_GROUP= GG1
OPTIONS_GROUP_GG1= OPT9 OPT10
....
-По умолчанию `OPTIONS` находится в выключенном положении, если при этом оно также отсутствует в списке `OPTIONS_DEFAULT`:
+`OPTIONS` по умолчанию не установлены, если они не перечислены в `OPTIONS_DEFAULT`:
[.programlisting]
....
OPTIONS_DEFAULT= OPT1 OPT3 OPT6
....
-Определения `OPTIONS` обязаны быть до подключения [.filename]#bsd.port.options.mk#. Переменные `PORT_OPTIONS` могут быть проверены только после подключения [.filename]#bsd.port.options.mk#. Вместо этого также можно использовать подключение [.filename]#bsd.port.pre.mk#, что все еще широко используется в портах, написанных до появления [.filename]#bsd.port.options.mk#. Но имейте в виду, что некоторые переменные, обычно, это некоторые флаги `USE_*`, после подключения [.filename]#bsd.port.pre.mk# будут работать не так, как этого от них ожидают.
+Определения `OPTIONS` должны быть указаны до включения файла [.filename]#bsd.port.options.mk#. Значения `PORT_OPTIONS` можно проверять только после включения [.filename]#bsd.port.options.mk#. Включение [.filename]#bsd.port.pre.mk# также может использоваться и до сих пор широко применяется в портах, написанных до введения [.filename]#bsd.port.options.mk#. Однако следует учитывать, что некоторые переменные не будут работать как ожидается после включения [.filename]#bsd.port.pre.mk#, обычно это некоторые флаги `USE_*`.
[[ports-options-simple-use]]
.Простое использование `OPTIONS`
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= FOO BAR
-FOO_DESC= Enable option foo
-BAR_DESC= Support feature bar
-
-.include <bsd.port.options.mk>
+OPTIONS_DEFAULT=FOO
-.if ${PORT_OPTIONS:MFOO}
-CONFIGURE_ARGS+=--with-foo
-.else
-CONFIGURE_ARGS+=--without-foo
-.endif
+FOO_DESC= Option foo support
+BAR_DESC= Feature bar support
-.if ${PORT_OPTIONS:MBAR}
-RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
-.endif
+# Will add --with-foo / --without-foo
+FOO_CONFIGURE_WITH= foo
+BAR_RUN_DEPENDS= bar:bar/bar
.include <bsd.port.mk>
....
@@ -1780,9 +3630,10 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
====
[[ports-options-check-unset]]
-.Проверка незаданных значений `OPTIONS`
+.Проверка неустановленных `OPTIONS` порта
[example]
====
+
[.programlisting]
....
.if ! ${PORT_OPTIONS:MEXAMPLES}
@@ -1790,15 +3641,25 @@ CONFIGURE_ARGS+=--without-examples
.endif
....
+Приведённая выше форма не рекомендуется. Предпочтительный метод — использование параметра configure для фактического включения и отключения функции в соответствии с опцией:
+
+[.programlisting]
+....
+# Will add --with-examples / --without-examples
+EXAMPLES_CONFIGURE_WITH= examples
+....
+
====
[[ports-options-practical-use]]
.Пример реального использования `OPTIONS`
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= EXAMPLES
+OPTIONS_DEFAULT= PGSQL LDAP SSL
OPTIONS_SINGLE= BACKEND
OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB
@@ -1814,100 +3675,150 @@ LDAP_DESC= Build with LDAP authentication support
PAM_DESC= Build with PAM support
SSL_DESC= Build with OpenSSL support
-OPTIONS_DEFAULT= PGSQL LDAP SSL
-
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MPGSQL}
-USE_PGSQL= yes
-CONFIGURE_ARGS+= --with-postgres
-.else
-CONFIGURE_ARGS+= --without-postgres
-.endif
+# Will add USE_PGSQL=yes
+PGSQL_USE= pgsql=yes
+# Will add --enable-postgres / --disable-postgres
+PGSQL_CONFIGURE_ENABLE= postgres
-.if ${PORT_OPTIONS:MICU}
-LIB_DEPENDS+= libicuuc.so:${PORTSDIR}/devel/icu
-.endif
+ICU_LIB_DEPENDS= libicuuc.so:devel/icu
-.if ! ${PORT_OPTIONS:MEXAMPLES}
-CONFIGURE_ARGS+= --without-examples
-.endif
+# Will add --with-examples / --without-examples
+EXAMPLES_CONFIGURE_WITH= examples
-# Проверка других параметров OPTIONS
+# Check other OPTIONS
.include <bsd.port.mk>
....
====
-==== Параметры по умолчанию
+[[makefile-options-default]]
+==== Опции по умолчанию
-Следующие параметры по умолчанию всегда включены.
+Эти опции всегда включены по умолчанию.
-* `DOCS` - построение и установка документации.
-* `NLS` - интернационализация.
-* `EXAMPLES` - построение и установка примеров использования.
-* `IPV6` - поддержка протокола IPv6.
+* `DOCS` — сборка и установка документации.
+* `NLS` — Поддержка родного языка.
+* `EXAMPLES` — сборка и установка примеров.
+* `IPV6` — Поддержка протокола IPv6.
[NOTE]
====
-Нет необходимости добавлять эти параметры в `OPTIONS_DEFAULT`. Тем не менее, чтобы отобразить их в окне диалога выбора параметров, они должны быть добавлены в `OPTIONS_DEFINE`.
+Нет необходимости добавлять их в `OPTIONS_DEFAULT`. Однако, чтобы они были активны и отображались в диалоге выбора опций, их необходимо добавить в `OPTIONS_DEFINE`.
====
-=== Функция автоматической активации
+[[makefile-options-auto-activation]]
+=== Автоматическая активация функций
-При использовании сценария GNU configure, следите за тем, какие необязательные функции задействуются посредством автоматической активации. Отключайте явным образом те необязательные функции, которые вы не хотели бы использовать, через передачу соответствующих `--without-xxx` или `--disable-xxx` в переменной `CONFIGURE_ARGS`.
+При использовании скрипта GNU configure следите за тем, какие дополнительные функции активируются автоматическим определением. Явно отключите ненужные дополнительные функции, добавив `--without-xxx` или `--disable-xxx` в `CONFIGURE_ARGS`.
-.Неправильное управление опцией
+[[makefile-options-auto-activation-bad]]
+.Неправильная обработка опции
[example]
====
+
[.programlisting]
....
.if ${PORT_OPTIONS:MFOO}
-LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
+LIB_DEPENDS+= libfoo.so:devel/foo
CONFIGURE_ARGS+= --enable-foo
.endif
....
====
-В приведенном выше примере представьте себе библиотеку libfoo, установленную в системе. Пользователь не желает, чтобы приложение использовало libfoo, и поэтому он выключает соответствующую опцию в диалоге `make config`. Но сценарий configure приложения определяет наличие библиотеки в системе и включает ее поддержку в итоговый исполняемый файл. Теперь, когда пользователь решит удалить libfoo из системы, система портов позволит это сделать (т.к. зависимость от libfoo не была записана), но приложение перестанет работать.
+В приведённом выше примере представьте, что библиотека libfoo установлена в системе. Пользователь не хочет, чтобы это приложение использовало libfoo, поэтому он отключил соответствующую опцию в диалоге `make config`. Однако скрипт configure приложения обнаруживает библиотеку в системе и включает её поддержку в итоговом исполняемом файле. Теперь, когда пользователь решает удалить libfoo из системы, система портов не протестует (зависимость от libfoo не была записана), но приложение перестаёт работать.
-.Правильное управление опцией
+[[makefile-options-auto-activation-good]]
+.Правильная обработка опции
[example]
====
+
[.programlisting]
....
-.if ${PORT_OPTIONS:MFOO}
-LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
-CONFIGURE_ARGS+= --enable-foo
-.else
-CONFIGURE_ARGS+= --disable-foo
-.endif
+FOO_LIB_DEPENDS= libfoo.so:devel/foo
+# Will add --enable-foo / --disable-foo
+FOO_CONFIGURE_ENABLE= foo
....
====
-Во втором примере библиотека libfoo отключена явным образом. Сценарий configure не включает соответствующие функции в приложении, несмотря на присутствие библиотеки в системе.
-
[NOTE]
====
-При определенных условиях сокращенный синтаксис записи условий может вызывать проблемы со сложными конструкциями. Если вы получаете ошибки, такие как `Malformed conditional`, то может быть использован альтернативный синтаксис.
+В некоторых случаях сокращенный синтаксис условных выражений может вызывать проблемы со сложными конструкциями. Ошибки обычно имеют вид `Malformed conditional`, тогда можно использовать альтернативный синтаксис.
[.programlisting]
....
.if !empty(VARIABLE:MVALUE)
-# as an alternative to
+....
+
+в качестве альтернативы
+
+[.programlisting]
+....
.if ${VARIABLE:MVALUE}
....
====
-=== Вспомогательные макросы
+[[options-helpers]]
+=== Помощники параметров
+
+Существуют макросы, которые помогают упростить условные значения, различающиеся в зависимости от установленных опций. Для удобства приведён полный список:
+
+`PLIST_SUB`, `SUB_LIST`::
+Для автоматической генерации `%%_OPT_%%` и `%%NO__OPT__%%` см. crossref:makefiles[options_sub, `OPTIONS_SUB`].
++
+Для более сложных случаев использования см. crossref:makefiles[options-variables, Замена общих переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+
+`CONFIGURE_ARGS`::
+Для информации о `--enable-_x_` и `--disable-_x_` см. crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`].
++
+О `--with-_x_` и `--without-_x_` см. crossref:makefiles[options-configure_with, `OPT_CONFIGURE_WITH`].
++
+Во всех остальных случаях см. crossref:makefiles[options-configure_on, `OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`].
+
+`CMAKE_ARGS`::
+Для аргументов, которые являются булевыми значениями (`on`, `off`, `true`, `false`, `0`, `1`), см. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`].
++
+Для всех остальных случаев см. crossref:makefiles[options-cmake_on, `OPT_CMAKE_ON` и `OPT_CMAKE_OFF`].
+
+`MESON_ARGS`::
+Для аргументов, принимающих `true` или `false`, см. crossref:makefiles[options-meson_true, `OPT_MESON_TRUE` и `OPT_MESON_FALSE`].
++
+Для аргументов, принимающих `yes` или `no`, используйте crossref:makefiles[options-meson_yes, `OPT_MESON_YES` и `OPT_MESON_NO`].
++
+Для аргументов, принимающих `enabled` или `disabled`, см. crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`].
++
+Во всех остальных случаях используйте crossref:makefiles[options-meson_on, `OPT_MESON_ON` и `OPT_MESON_OFF`].
+
+`QMAKE_ARGS`::
+См. crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`].
+
+`USE_*`::
+См. crossref:makefiles[options-use, `OPT_USE` и `OPT_USE_OFF`].
-Существует несколько макросов, упрощающих запись условных значений, которые отличаются в зависимости от набора параметров.
+`*_DEPENDS`::
+См. crossref:makefiles[options-dependencies, Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`].
-Если переменная `OPTIONS_SUB` имеет значение `yes`, то каждый из указанных в `OPTIONS_DEFINE` параметров будет добавлен в `PLIST_SUB`. Следующая запись:
+`*` (Любая переменная)::
+Наиболее используемые переменные имеют своих помощников, см. crossref:makefiles[options-variables, Замена Общих Переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
++
+Для любой переменной без специального помощника см. crossref:makefiles[options-vars, `OPT_VARS` и `OPT_VARS_OFF`].
+
+Зависимости параметров::
+Когда для работы опции требуется другая опция, см. crossref:makefiles[options-implies, `OPT_IMPLIES`].
+
+Конфликты опций::
+Когда опция не может работать, если включена другая, см. crossref:makefiles[options-prevents, `OPT_PREVENTS` и `OPT_PREVENTS_MSG`].
+
+Цели сборки::
+Когда для опции требуется дополнительная обработка, см. crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`].
+
+[[options_sub]]
+==== `OPTIONS_SUB`
+
+Если `OPTIONS_SUB` установлен в `yes`, то каждая из опций, добавленных в `OPTIONS_DEFINE`, будет добавлена в `PLIST_SUB` и `SUB_LIST`, например:
[.programlisting]
....
@@ -1915,7 +3826,7 @@ OPTIONS_DEFINE= OPT1
OPTIONS_SUB= yes
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1924,21 +3835,33 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-PLIST_SUB+= OPT1=""
+PLIST_SUB+= OPT1="" NO_OPT1="@comment "
+SUB_LIST+= OPT1="" NO_OPT1="@comment "
.else
-PLIST_SUB+= OPT1="@comment "
+PLIST_SUB+= OPT1="@comment " NO_OPT1=""
+SUB_LIST+= OPT1="@comment " NO_OPT1=""
.endif
....
-`X_CONFIGURE_ENABLE` дописывает в `CONFIGURE_ARGS` строку `--enable-${X_CONFIGURE_ENABLE}` или `--disable-${X_CONFIGURE_ENABLE}` в соответствии с состоянием `X`. Следующая запись:
+[NOTE]
+====
+Значение `OPTIONS_SUB` игнорируется. Установка любого значения добавит записи `PLIST_SUB` и `SUB_LIST` для _всех_ опций.
+====
+
+[[options-use]]
+==== `OPT_USE` и `OPT_USE_OFF`
+
+Когда выбрана опция _OPT_, для каждой пары `_ключ=значение_` в ``OPT_USE``, _значение_ добавляется к соответствующему `USE_KEY`. Если _значение_ содержит пробелы, замените их запятыми, и они будут преобразованы обратно в пробелы во время обработки. `OPT_USE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_ENABLE= test
+OPT1_USES= xorg
+OPT1_USE= mysql=yes xorg=x11,xextproto,xext,xrandr
+OPT1_USE_OFF= openssl=yes
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1947,21 +3870,30 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --enable-test
+USE_MYSQL= yes
+USES+= xorg
+USE_XORG= x11 xextproto xext xrandr
.else
-CONFIGURE_ARGS+= --disable-test
+USE_OPENSSL= yes
.endif
....
-`X_CONFIGURE_WITH` дописывает в `CONFIGURE_ARGS` строку `--with-${X_CONFIGURE_WITH}` или `--without-${X_CONFIGURE_WITH}` в соответствии с состоянием `X`. Следующая запись:
+[[options-configure-helpers]]
+==== Помощники `CONFIGURE_ARGS`
+
+[[options-configure_enable]]
+===== `OPT_CONFIGURE_ENABLE`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CONFIGURE_ENABLE` к `CONFIGURE_ARGS` добавляется `--enable-_элемент_`. Если опция _OPT_ _не_ выбрана, к `CONFIGURE_ARGS` добавляется `--disable-_элемент_`. Необязательный аргумент может быть указан с помощью символа `=`. Этот аргумент добавляется только к опции конфигурации `--enable-_элемент_`. Например:
[.programlisting]
....
-OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_WITH= test
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_CONFIGURE_ENABLE= test1 test2
+OPT2_CONFIGURE_ENABLE= test2=exhaustive
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1970,21 +3902,64 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --with-test
+CONFIGURE_ARGS+= --enable-test1 --enable-test2
+.else
+CONFIGURE_ARGS+= --disable-test1 --disable-test2
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+CONFIGURE_ARGS+= --enable-test2=exhaustive
+.else
+CONFIGURE_ARGS+= --disable-test2
+.endif
+....
+
+[[options-configure_with]]
+===== `OPT_CONFIGURE_WITH`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `_OPT_CONFIGURE_WITH` к `CONFIGURE_ARGS` добавляется `--with-_элемент_`. Если опция _OPT_ _не_ выбрана, к `CONFIGURE_ARGS` добавляется `--without-_элемент_`. Необязательный аргумент можно указать с помощью символа `=`. Этот аргумент добавляется только к опции конфигурации `--with-_элемент_`. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_CONFIGURE_WITH= test1
+OPT2_CONFIGURE_WITH= test2=exhaustive
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --with-test1
+.else
+CONFIGURE_ARGS+= --without-test1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+CONFIGURE_ARGS+= --with-test2=exhaustive
.else
-CONFIGURE_ARGS+= --without-test
+CONFIGURE_ARGS+= --without-test2
.endif
....
-Значение переменной `X_CONFIGURE_ON` будет дописано в `CONFIGURE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[[options-configure_on]]
+===== `OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_CONFIGURE_ON`, если оно определено, добавляется к `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_ON= --add-test
+OPT1_CONFIGURE_OFF= --no-test
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1994,37 +3969,65 @@ OPTIONS_DEFINE= OPT1
.if ${PORT_OPTIONS:MOPT1}
CONFIGURE_ARGS+= --add-test
+.else
+CONFIGURE_ARGS+= --no-test
.endif
....
-Значение переменной `X_CONFIGURE_OFF` будет дописано в `CONFIGURE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[TIP]
+====
+В большинстве случаев помощники crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`] и crossref:makefiles[options-configure_with, `OPT_CONFIGURE_WITH`] предоставляют более короткий и понятный функционал.
+====
+
+[[options-cmake-helpers]]
+==== Помощники `CMAKE_ARGS`
+
+[[options-cmake_on]]
+===== `OPT_CMAKE_ON` и `OPT_CMAKE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_CMAKE_ON`, если оно определено, добавляется к `CMAKE_ARGS`. `OPT_CMAKE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_OFF= --no-test
+OPT1_CMAKE_ON= -DTEST:BOOL=true -DDEBUG:BOOL=true
+OPT1_CMAKE_OFF= -DOPTIMIZE:BOOL=true
....
-соответствует:
+эквивалентно:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
+
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --no-test
+
+.if ${PORT_OPTIONS:MOPT1}
+CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true
+.else
+CMAKE_ARGS+= -DOPTIMIZE:BOOL=true
.endif
....
-Значение переменной `X_CMAKE_ON` будет дописано в `CMAKE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[TIP]
+====
+
+См. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`] для более краткой записи, когда значение является булевым.
+====
+
+[[options-cmake_bool]]
+===== `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CMAKE_BOOL` добавляется `-D_элемент_:BOOL=true` к `CMAKE_ARGS`. Если опция _OPT_ _не_ выбрана, `-D_элемент_:BOOL=false` добавляется к `CONFIGURE_ARGS`. `OPT_CMAKE_BOOL_OFF` работает наоборот: `-D_элемент_:BOOL=false` добавляется к `CMAKE_ARGS`, когда опция выбрана, и `-D_элемент_:BOOL=true`, когда опция _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CMAKE_ON= -DTEST:BOOL=true
+OPT1_CMAKE_BOOL= TEST DEBUG
+OPT1_CMAKE_BOOL_OFF= OPTIMIZE
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2033,19 +4036,30 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CMAKE_ARGS+= -DTEST:BOOL=true
+CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true \
+ -DOPTIMIZE:BOOL=false
+.else
+CMAKE_ARGS+= -DTEST:BOOL=false -DDEBUG:BOOL=false \
+ -DOPTIMIZE:BOOL=true
.endif
....
-Значение переменной `X_CMAKE_OFF` будет дописано в `CMAKE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[[options-meson-helpers]]
+==== Помощники `MESON_ARGS`
+
+[[options-meson_on]]
+===== `OPT_MESON_ON` и `OPT_MESON_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_MESON_ON`, если оно определено, добавляется к `MESON_ARGS`. `OPT_MESON_OFF` работает аналогичным образом, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CMAKE_OFF= -DTEST:BOOL=false
+OPT1_MESON_ON= -Dopt=1
+OPT1_MESON_OFF= -Dopt=2
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2053,42 +4067,55 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-CMAKE_ARGS+= -DTEST:BOOL=false
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dopt=1
+.else
+MESON_ARGS+= -Dopt=2
.endif
....
-Для любой из следующих переменных:
+[[options-meson_true]]
+===== `OPT_MESON_TRUE` и `OPT_MESON_FALSE`
-* `ALL_TARGET`
-* `CATEGORIES`
-* `CFLAGS`
-* `CPPFLAGS`
-* `CXXFLAGS`
-* `CONFIGURE_ENV`
-* `DISTFILES`
-* `EXTRA_PATCHES`
-* `INSTALL_TARGET`
-* `LDFLAGS`
-* `MAKE_ARGS`
-* `MAKE_ENV`
-* `PATCH_SITES`
-* `PATCHFILES`
-* `PLIST_FILES`
-* `PLIST_DIRS`
-* `PLIST_DIRSTRY`
-* `USES`
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_TRUE` добавляется `-D_элемент_=true` в `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=false` в `MESON_ARGS`. `OPT_MESON_FALSE` работает противоположным образом: `-D_элемент_=false` добавляется в `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=true`, когда опция _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_MESON_TRUE= test debug
+OPT1_MESON_FALSE= optimize
+....
-Значение переменной `X_ABOVEVARIABLE` будет дописано в `ABOVEVARIABLE` в соответствии с состоянием `X`. Следующая запись:
+эквивалентно:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_USES= gmake
-OPT1_CFLAGS= -DTEST
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dtest=true -Ddebug=true \
+ -Doptimize=false
+.else
+MESON_ARGS+= -Dtest=false -Ddebug=false \
+ -Doptimize=true
+.endif
+....
+
+[[options-meson_yes]]
+===== `OPT_MESON_YES` и `OPT_MESON_NO`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_YES` добавляется `-D_элемент_=yes` к `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=no` к `MESON_ARGS`. `OPT_MESON_NO` работает противоположным образом: `-D_элемент_=no` добавляется к `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=yes`, когда опция _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_MESON_YES= test debug
+OPT1_MESON_NO= optimize
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2097,20 +4124,54 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-USES+= gmake
-CFLAGS+= -DTEST
+MESON_ARGS+= -Dtest=yes -Ddebug=yes \
+ -Doptimize=no
+.else
+MESON_ARGS+= -Dtest=no -Ddebug=no \
+ -Doptimize=yes
+.endif
+....
+
+[[options-meson_enabled]]
+===== `OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_ENABLED` добавляется `-D_элемент_=enabled` к `MESON_ARGS`. Когда опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=disabled` к `MESON_ARGS`. `OPT_MESON_DISABLED` работает противоположным образом: `-D_элемент_=disabled` добавляется к `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=enabled`, когда опция _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_MESON_ENABLED= test
+OPT1_MESON_DISABLED= debug
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dtest=enabled -Ddebug=disabled
+.else
+MESON_ARGS+= -Dtest=disabled -Ddebug=enabled
.endif
....
-Если установлена `X_ABOVEVARIABLE_OFF`, то флаг `ABOVEVARIABLE` будет автоматически выставлен при выключенном параметре `X`. Например:
+[[options-qmake_on]]
+==== `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_QMAKE_ON`, если оно определено, добавляется к `QMAKE_ARGS`. `OPT_QMAKE_OFF` работает аналогичным образом, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_USES_OFF=gmake
+OPT1_QMAKE_ON= -DTEST:BOOL=true
+OPT1_QMAKE_OFF= -DPRODUCTION:BOOL=true
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2118,12 +4179,193 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-USES+= gmake
+.if ${PORT_OPTIONS:MOPT1}
+QMAKE_ARGS+= -DTEST:BOOL=true
+.else
+QMAKE_ARGS+= -DPRODUCTION:BOOL=true
+.endif
+....
+
+[[options-implies]]
+==== `OPT_IMPLIES`
+
+Предоставляет способ добавления зависимостей между опциями.
+
+При выборе _OPT_ все перечисленные в этой переменной опции также будут выбраны. В качестве примера можно использовать описанный ранее crossref:makefiles[options-configure_enable,`OPT_CONFIGURE_ENABLE`]:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_IMPLIES= OPT2
+
+OPT1_CONFIGURE_ENABLE= opt1
+OPT2_CONFIGURE_ENABLE= opt2
+....
+
+Эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --enable-opt1
+.else
+CONFIGURE_ARGS+= --disable-opt1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --enable-opt2
+.else
+CONFIGURE_ARGS+= --disable-opt2
+.endif
+....
+
+[[options-implies-ex1]]
+.Простое использование `OPT_IMPLIES`
+[example]
+====
+
+Этот порт имеет опцию `X11` и опцию `GNOME`, для сборки которой необходимо выбрать опцию `X11`.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= X11 GNOME
+OPTIONS_DEFAULT= X11
+
+X11_USES= xorg
+X11_USE= xorg=xi,xextproto
+GNOME_USE= gnome=gtk30
+GNOME_IMPLIES= X11
+....
+
+====
+
+[[options-prevents]]
+==== `OPT_PREVENTS` и `OPT_PREVENTS_MSG`
+
+Предоставляет способ добавления конфликтов между опциями.
+
+Когда выбрана _OPT_, все опции, перечисленные в `OPT_PREVENTS`, должны быть сняты. Если задано `OPT_PREVENTS_MSG` и возникает конфликт, его содержимое будет показано с объяснением причины конфликта. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_PREVENTS= OPT2
+OPT1_PREVENTS_MSG= OPT1 and OPT2 enable conflicting options
+....
+
+Примерно эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}
+BROKEN= Option OPT1 conflicts with OPT2 (select only one)
+.endif
+....
+
+Единственное отличие заключается в том, что первый вариант выведет ошибку после выполнения `make config`, предлагая изменить выбранные настройки.
+
+[[options-prevents-ex1]]
+.Простое использование `OPT_PREVENTS`
+[example]
+====
+
+Этот порт имеет опции `X509` и `SCTP`. Обе опции добавляют патчи, но патчи конфликтуют друг с другом, поэтому их нельзя выбрать одновременно.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= X509 SCTP
+
+SCTP_PATCHFILES= ${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1
+SCTP_CONFIGURE_WITH= sctp
+
+X509_PATCH_SITES= http://www.roumenpetrov.info/openssh/x509/:x509
+X509_PATCHFILES= ${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509
+X509_PREVENTS= SCTP
+X509_PREVENTS_MSG= X509 and SCTP patches conflict
+....
+
+====
+
+[[options-vars]]
+==== `OPT_VARS` и `OPT_VARS_OFF`
+
+Предоставляет универсальный способ установки и добавления значений переменным.
+
+[WARNING]
+====
+Перед использованием `OPT_VARS` и `OPT_VARS_OFF` проверьте, доступен ли более специфичный вспомогательный инструмент в crossref:makefiles[options-variables, Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+====
+
+Когда выбрана опция _OPT_ и определены `OPT_VARS`, пары `_key_=_value_` и `_key_+=_value_` обрабатываются из `OPT_VARS`. Оператор `=` приводит к перезаписи существующего значения `KEY`, а `+=` добавляет к значению. `OPT_VARS_OFF` работает аналогично, но когда `OPT` _не_ выбрана.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2 OPT3
+OPT1_VARS= also_build+=bin1
+OPT2_VARS= also_build+=bin2
+OPT3_VARS= bin3_build=yes
+OPT3_VARS_OFF= bin3_build=no
+
+MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+ALSO_BUILD+= bin1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+ALSO_BUILD+= bin2
.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+BIN3_BUILD= yes
+.else
+BIN3_BUILD= no
+.endif
+....
+
+[IMPORTANT]
+====
+Значения, содержащие пробелы, должны быть заключены в кавычки:
+
+[.programlisting]
+....
+OPT_VARS= foo="bar baz"
....
-Для любого из следующих типов зависимости:
+Это связано с тем, как man:make[1] обрабатывает пробелы при раскрытии переменных. Когда `OPT_VARS= foo=bar baz` раскрывается, переменная в итоге содержит две строки: `foo=bar` и `baz`. Однако отправитель, вероятно, предполагал, что должна быть только одна строка — `foo=bar baz`. Заключение значения в кавычки предотвращает использование пробела в качестве разделителя.
+
+Также _не_ добавляйте лишние пробелы после знака `_var_=` и перед значением, это также разобьёт строку на две части. _Это не сработает_:
+
+[.programlisting]
+....
+OPT_VARS= foo= bar
+....
+
+====
+
+[[options-dependencies]]
+==== Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`
+
+Для любого из этих типов зависимостей:
* `PKG_DEPENDS`
* `EXTRACT_DEPENDS`
@@ -2133,15 +4375,91 @@ USES+= gmake
* `LIB_DEPENDS`
* `RUN_DEPENDS`
-Значение переменной `X_ABOVEVARIABLE` будет дописано в `ABOVEVARIABLE` в соответствии с состоянием `X`. Следующая запись:
+Когда выбрана опция _OPT_, значение `OPT_DEPTYPE`, если оно определено, добавляется к `DEPTYPE`. `OPT_DEPTYPE_OFF` работает аналогично, но когда _не_ выбрана `OPT`. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_LIB_DEPENDS= liba.so:devel/a
+OPT1_LIB_DEPENDS_OFF= libb.so:devel/b
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+LIB_DEPENDS+= liba.so:devel/a
+.else
+LIB_DEPENDS+= libb.so:devel/b
+.endif
+....
+
+[[options-variables]]
+==== Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`
+
+Для любой из этих переменных:
+
+* `ALL_TARGET`
+* `BINARY_ALIAS`
+* `BROKEN`
+* `CATEGORIES`
+* `CFLAGS`
+* `CONFIGURE_ENV`
+* `CONFLICTS`
+* `CONFLICTS_BUILD`
+* `CONFLICTS_INSTALL`
+* `CPPFLAGS`
+* `CXXFLAGS`
+* `DESKTOP_ENTRIES`
+* `DISTFILES`
+* `EXTRACT_ONLY`
+* `EXTRA_PATCHES`
+* `GH_ACCOUNT`
+* `GH_PROJECT`
+* `GH_SUBDIR`
+* `GH_TAGNAME`
+* `GH_TUPLE`
+* `GL_ACCOUNT`
+* `GL_COMMIT`
+* `GL_PROJECT`
+* `GL_SITE`
+* `GL_SUBDIR`
+* `GL_TUPLE`
+* `IGNORE`
+* `INFO`
+* `INSTALL_TARGET`
+* `LDFLAGS`
+* `LIBS`
+* `MAKE_ARGS`
+* `MAKE_ENV`
+* `MASTER_SITES`
+* `PATCHFILES`
+* `PATCH_SITES`
+* `PLIST_DIRS`
+* `PLIST_FILES`
+* `PLIST_SUB`
+* `PORTDOCS`
+* `PORTEXAMPLES`
+* `SUB_FILES`
+* `SUB_LIST`
+* `TEST_TARGET`
+* `USES`
+
+Когда выбрана опция _OPT_, значение `OPT_ABOVEVARIABLE`, если оно определено, добавляется к `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a
+OPT1_USES= gmake
+OPT1_CFLAGS_OFF= -DTEST
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2150,118 +4468,290 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
+USES+= gmake
+.else
+CFLAGS+= -DTEST
.endif
....
-Если установлена `X_ABOVEVARIABLE_OFF`, то зависимость типа `ABOVEVARIABLE` будет добавлена при выключенном параметре `X`. Например:
+[NOTE]
+====
+Некоторые переменные отсутствуют в этом списке, в частности `PKGNAMEPREFIX` и `PKGNAMESUFFIX`. Это сделано намеренно. Порт _не должен_ изменять своё имя при изменении набора опций.
+====
+
+[WARNING]
+====
+Некоторые из этих переменных, по крайней мере `ALL_TARGET`, `DISTFILES` и `INSTALL_TARGET`, получают свои значения по умолчанию _после_ обработки опций.
+
+С такими строками в [.filename]#Makefile#:
+
+[.programlisting]
+....
+ALL_TARGET= all
+
+DOCS_ALL_TARGET= doc
+....
+
+Если опция `DOCS` включена, `ALL_TARGET` будет иметь конечное значение `all doc`; если опция отключена, значение будет `all`.
+
+Только со строкой помощника опций в [.filename]#Makefile#:
+
+[.programlisting]
+....
+DOCS_ALL_TARGET= doc
+....
+
+Если опция `DOCS` включена, `ALL_TARGET` будет иметь окончательное значение `doc`; если опция отключена, значение будет `all`.
+====
+
+[[options-targets]]
+==== Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`
+
+Эти цели в [.filename]#Makefile# могут принимать дополнительные опциональные цели сборки:
+
+* `pre-fetch`
+* `do-fetch`
+* `post-fetch`
+* `pre-extract`
+* `do-extract`
+* `post-extract`
+* `pre-patch`
+* `do-patch`
+* `post-patch`
+* `pre-configure`
+* `do-configure`
+* `post-configure`
+* `pre-build`
+* `do-build`
+* `post-build`
+* `pre-install`
+* `do-install`
+* `post-install`
+* `post-stage`
+* `pre-package`
+* `do-package`
+* `post-package`
+
+Когда выбрана опция _OPT_, цель `_TARGET_-_OPT_-on`, если она определена, выполняется после `_TARGET_`. `_TARGET_-_OPT_-off` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_LIB_DEPENDS_OFF= liba.so:${PORTSDIR}/devel/a
+
+post-patch-OPT1-on:
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
+
+post-patch-OPT1-off:
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
....
-соответствует:
+эквивалентно:
[.programlisting]
....
-OPTIONS_DEFINE= OPT1
+OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-. if ! ${PORT_OPTIONS:MOPT1}
-LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
+post-patch:
+.if ${PORT_OPTIONS:MOPT1}
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
+.else
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
.endif
....
[[makefile-wrkdir]]
-== Задание рабочего каталога
+== Указание рабочего каталога
-Каждый порт распаковывается в рабочий каталог, который должен быть доступным для записи. В системе портов по умолчанию `DISTFILES` распаковываются в каталог с именем `${DISTNAME}`. Другими словами, если вы задали:
+Каждый порт извлекается в рабочий каталог, который должен быть доступен для записи. Система портов по умолчанию распаковывает `DISTFILES` в каталог с именем `${DISTNAME}`. Другими словами, если в [.filename]#Makefile# указано:
[.programlisting]
....
PORTNAME= foo
-PORTVERSION= 1.0
+DISTVERSION= 1.0
....
-то дистрибутивные файлы порта содержат каталог верхнего уровня, [.filename]#foo-1.0#, и все файлы расположены в этом каталоге.
+то файлы дистрибутива порта содержат каталог верхнего уровня [.filename]#foo-1.0#, и остальные файлы находятся в этом каталоге.
-Если это не ваш случай, то имеется несколько переменных, которые вы можете переопределить.
+Если нужно расположение файлов в других каталогах, можно переопределить ряд переменных.
+[[makefile-wrksrc]]
=== `WRKSRC`
-Эта переменная задаёт имя каталога, который создаётся при распаковке исходных файлов приложения. В нашем предыдущем примере если бы распаковка происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), то вы должны написать:
+Переменная указывает имя каталога, который создается при распаковке distfiles приложения. Чтобы в нашем предыдущем примере распаковка происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), напишите:
[.programlisting]
....
WRKSRC= ${WRKDIR}/foo
....
-или, как вариант
+или можно
[.programlisting]
....
WRKSRC= ${WRKDIR}/${PORTNAME}
....
+[[makefile-wrksrc_subdir]]
+=== `WRKSRC_SUBDIR`
+
+Если исходные файлы, необходимые для порта, находятся в подкаталоге распакованного дистрибутива, присвойте `WRKSRC_SUBDIR` имя этого каталога.
+
+[.programlisting]
+....
+WRKSRC_SUBDIR= src
+....
+
+[[makefile-no_wrksubdir]]
=== `NO_WRKSUBDIR`
-Если порт вообще не распаковывается ни в какой каталог, то вы должны задать для этого переменную `NO_WRKSUBDIR`.
+Если порт не распаковывается в подкаталог вообще, установите `NO_WRKSUBDIR`, чтобы указать это.
[.programlisting]
....
NO_WRKSUBDIR= yes
....
+[NOTE]
+====
+Поскольку `WRKDIR` является единственной директорией, которая должна быть доступна для записи во время сборки, и используется для хранения многих файлов, фиксирующих состояние сборки, извлечение порта будет принудительно выполнено в поддиректорию.
+====
+
[[conflicts]]
-== Разрешение конфликтов
+== Обработка конфликтов
-Для регистрации конфликта между пакетами и портами используются три различные переменные: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`.
+Существует три различные переменные для регистрации конфликтов между пакетами и портами: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`.
[NOTE]
====
-Переменные регистрации конфликта автоматически определяют переменную `IGNORE`, которая более подробно описана в crossref:porting-dads[dads-noinstall, "Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE` "].
+Эти переменные автоматически устанавливают переменную `IGNORE`, более подробно описанную в crossref:porting-dads[dads-noinstall,Пометка порта как неустанавливаемого с помощью `BROKEN`, `FORBIDDEN` или `IGNORE`].
+====
+
+При удалении одного из нескольких конфликтующих портов рекомендуется оставлять `CONFLICTS` в тех других портах на несколько месяцев, чтобы учесть пользователей, которые обновляются лишь время от времени.
+
+[[conclicts-conflicts_install]]
+`CONFLICTS_INSTALL`::
+Если пакет не может сосуществовать с другими пакетами (из-за конфликтов файлов, несовместимости во время выполнения и т.д.). Проверка `CONFLICTS_INSTALL` выполняется после этапа сборки и перед этапом установки.
+
+[[conclicts-conflicts_build]]
+`CONFLICTS_BUILD`::
+Если порт не может быть собран, когда уже установлены другие определённые порты. Конфликты сборки не фиксируются в результирующем пакете.
+
+[[conclicts-conflicts]]
+`CONFLICTS`::
+Если порт не может быть собран, когда определённый порт уже установлен и итоговый пакет не может сосуществовать с другим пакетом. Проверка `CONFLICTS` выполняется до этапа сборки и до этапа установки.
+
+Каждый элемент, разделённый пробелами, в значениях переменных `CONFLICTS*` сопоставляется с пакетами(кроме того, который собирается) с использованием правил раскрытия шаблонов имен файлов в оболочке shell. Это позволяет перечислить все варианты порта в списке конфликтов вместо необходимости исключать собираемый вариант из этого списка. Например, если установлен git-lite, `CONFLICTS_INSTALL=git git-lite` позволит выполнить:
+[source, shell]
+....
+% make -C devel/git FLAVOR=lite all deinstall install
+....
+
+Но следующая команда сообщит о конфликте, так как установленное имя базового пакета — `git-lite`, а `git` будет собран, но не может быть установлен вместе с `git-lite`:
+[source, shell]
+....
+% make -C devel/git FLAVOR=default all deinstall install
+....
+
+Без этой функции Makefile потребовал бы по одному `_flavor__CONFLICTS_INSTALL` для каждого варианта, перечисляя все остальные варианты.
+
+Наиболее распространённым содержимым одной из этих переменных является база пакета другого порта. База пакета — это имя пакета без указания версии, её можно получить, выполнив команду `make -V PKGBASE`.
+
+[[conflicts-ex1]]
+.Простой пример использования `CONFLICTS*`
+[example]
+====
+
+Пакет package:dns/bind99[] не может быть установлен, если присутствует пакет package:dns/bind910[], так как они устанавливают одинаковые файлы. Сначала соберите базовый пакет для использования:
+
+[source, shell]
+....
+% make -C dns/bind99 -V PKGBASE
+bind99
+% make -C dns/bind910 -V PKGBASE
+bind910
+....
+
+Затем добавьте в [.filename]#Makefile# пакета package:dns/bind99[]:
+
+[.programlisting]
+....
+CONFLICTS_INSTALL= bind910
+....
+
+И добавьте в [.filename]#Makefile# пакета package:dns/bind910[]:
+
+[.programlisting]
+....
+CONFLICTS_INSTALL= bind99
+....
+
+====
+
+Иногда только определенные версии другого порта несовместимы. В этом случае используйте полное имя пакета, включая версию. При необходимости используйте подстановочные символы шаблонов имён файлов оболочки, такие как `*` и `?`, чтобы охватить все необходимые версии.
+
+[[conflicts-ex2]]
+.Использование `CONFLICTS*` с шаблонами имён файлов.
+[example]
====
-При удалении одного из конфликтующих портов целесообразно сохранить записи `CONFLICTS` в тех других портах в течении нескольких месяцев, чтобы позаботиться о тех пользователей, которые обновляются от случая к случаю.
+В версиях с 2.0 по 2.4.1_2 пакет package:deskutils/gnotime[] устанавливал встроенную версию пакета package:databases/qof[].
-=== `CONFLICTS_INSTALL`
+Чтобы отразить это прошлое, [.filename]#Makefile# пакета package:databases/qof[] содержит:
-Если ваш пакет не может существовать вместе с другими (из-за конфликта файлов, несовместимости времени выполнения и так далее), перечислите имена остальных пакетов в переменной `CONFLICTS_INSTALL`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Пожалуйста, убедитесь, что `CONFLICTS_INSTALL` не содержит пакет самого этого порта. В противном случае не будет работать установка с использованием переменной `FORCE_PKG_REGISTER`. Проверка CONFLICTS_INSTALL выполняется после процесса сборки и до процесса установки.
+[.programlisting]
+....
+CONFLICTS_INSTALL= gnotime-2.[0-3]* \
+ gnotime-2.4.0* gnotime-2.4.1 \
+ gnotime-2.4.1_[12]
+....
-=== `CONFLICTS_BUILD`
+Первый элемент соответствует версиям `2.0`–`2.3`, второй — всем редакциям `2.4.0`, третий — точно версии `2.4.1`, а последний — первой и второй редакциям версии `2.4.1`.
-Если ваш порт не может быть собран, когда уже установлен другой, перечислите имена остальных портов в переменной `CONFLICTS_BUILD`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Проверка CONFLICTS_BUILD выполняется до процесса сборки. Конфликты сборки в получаемом пакете не записываются.
+package:deskutils/gnotime[] не имеет строки конфликтов, потому что его текущая версия не конфликтует ни с чем другим.
+====
-=== `CONFLICTS`
+Переменная `DISABLE_CONFLICTS` может быть временно установлена при выполнении целей, на которые не влияют конфликты. Эту переменную не следует устанавливать в Makefiles портов.
-Если ваш порт не может быть собран, когда уже установлен другой, а получаемый пакет не может существовать вместе с другими, перечислите имена остальных пакетов в переменной `CONFLICTS`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Пожалуйста, убедитесь, что `CONFLICTS` не содержит пакет самого этого порта. В противном случае не будет работать установка с использованием переменной `FORCE_PKG_REGISTER`. Проверка CONFLICTS выполняется до процессов сборки и установки.
+[source, shell]
+....
+% make -DDISABLE_CONFLICTS patch
+....
[[install]]
== Установка файлов
+[IMPORTANT]
+====
+Фаза `install` очень важна для конечного пользователя, так как она добавляет файлы в его систему. Все дополнительные команды, выполняемые в целях `*-install` [.filename]#Makefile# порта, должны выводиться на экран. _Не_ заглушайте эти команды с помощью `@` или `.SILENT`.
+====
+
[[install-macros]]
=== Макросы `INSTALL_*`
-Используйте макросы, которые есть в файле [.filename]#bsd.port.mk# для обеспечения правильных прав доступа файлов в целях `*-install` порта. Устанавливайте права владения напрямую в [.filename]#pkg-plist# через соответствующие записи `@owner owner` и `@group group`. Эти операторы работают до момента их переопределения или до конца [.filename]#pkg-plist#, поэтому не забывайте их сбрасывать, когда они больше не нужны. По умолчанию владение устанавливается для `root:wheel`.
+Используйте макросы, предоставленные в [.filename]#bsd.port.mk#, чтобы обеспечить корректные режимы файлов в целях `*-install` порта. Устанавливайте владельца напрямую в [.filename]#pkg-plist# в соответствующих записях, таких как `@(_владелец_,_группа_,)`, `@owner _владелец_` и `@group _группа_`. Эти операторы действуют до переопределения или до конца [.filename]#pkg-plist#, поэтому не забудьте сбросить их, когда они больше не нужны. Владелец по умолчанию — `root:wheel`. Дополнительную информацию см. в crossref:plist[plist-keywords-base,Базовые Ключевые Слова].
-* `INSTALL_PROGRAM` - это команда для установки бинарных выполнимых файлов.
-* `INSTALL_SCRIPT` - это команда для установки выполнимых скриптов.
-* `INSTALL_LIB` - это команда для установки динамических библиотек.
-* `INSTALL_KLD` - это команда для установки загружаемых модулей ядра. Некоторые архитектуры предпочитают, чтобы для модулей сохранялись отладочные сведения, по этой причине используйте эту команду вместо `INSTALL_PROGRAM`.
-* `INSTALL_DATA` - это команда для установки совместно используемых файлов данных.
-* `INSTALL_MAN` - это команда для установки страниц Справочника и другой документации (никаких файлов она не сжимает).
+* `INSTALL_PROGRAM` — команда для установки бинарных исполняемых файлов.
+* `INSTALL_SCRIPT` — команда для установки исполняемых скриптов.
+* `INSTALL_LIB` — это команда для установки общих библиотек (но не статических библиотек).
+* `INSTALL_KLD` — это команда для установки загружаемых модулей ядра. Некоторые архитектуры не поддерживают удаление символов из модулей, поэтому используйте эту команду вместо `INSTALL_PROGRAM`.
+* `INSTALL_DATA` — это команда для установки общих данных, включая статические библиотеки.
+* `INSTALL_MAN` — это команда для установки man-страниц и другой документации (она ничего не сжимает).
-В основе работы этих макросов лежит команда `install` со всеми соответствующими флагами. Смотрите пример их использования ниже.
+Эти переменные передаются команде man:install[1] с соответствующими флагами для каждой ситуации.
+
+[IMPORTANT]
+====
+Не используйте `INSTALL_LIB` для установки статических библиотек, так как их удаление делает их бесполезными. Вместо этого используйте `INSTALL_DATA`.
+====
[[install-strip]]
-=== Удаление отладочной информации в бинарных файлах и динамических библиотеках
+=== Удаление символов из бинарных файлов и разделяемых библиотек
-Не удаляйте отладочную информацию из бинарных файлов вручную, если вы это делали. Во всех двоичных файлах отладочная информация должна быть удалена, и макрос `INSTALL_PROGRAM` выполнит установку и удаление отладочной информации одновременно (обратитесь к следующему разделу). Макрос `INSTALL_LIB` делает то же самое для динамических библиотек.
+Установленные бинарные файлы должны быть очищены от отладочной информации. Не очищайте бинарные файлы вручную, если это не является абсолютно необходимым. Макрос `INSTALL_PROGRAM` устанавливает и очищает бинарный файл одновременно. Макрос `INSTALL_LIB` делает то же самое с разделяемыми библиотеками.
-Если вам нужно удалить отладочную информацию из файла без использования макросов `INSTALL_PROGRAM` и `INSTALL_LIB`, то это можно сделать при помощи `${STRIP_CMD}`. Обычно это делается внутри цели `post-install`. К примеру:
+Когда файл необходимо очистить, но ни макросы `INSTALL_PROGRAM`, ни `INSTALL_LIB` не подходят, `${STRIP_CMD}` очищает программу или разделяемую библиотеку. Обычно это делается в цели `post-install`. Например:
[.programlisting]
....
@@ -2269,24 +4759,33 @@ post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl
....
-Удаление отладочной информации из нескольких файлов:
+Когда необходимо удалить отладочную информацию из нескольких файлов:
[.programlisting]
....
post-install:
- .for l in geometry media body track world
+.for l in geometry media body track world
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0
- .endfor
+.endfor
....
-Для проверки того, удалена ли отладочная информация из файла, используйте man:file[1]. Для двоичных файлов man:file[1] печатает `stripped` или `not stripped`. Кроме того, man:strip[1] определяет, была ли уже удалена из программы отладочная информация, и в этом случае просто завершает свою работу.
+Используйте man:file[1] для файла, чтобы определить, был ли он подвергнут удалению символов. man:file[1] сообщает, что бинарные файлы либо `stripped` (удалены символы), либо `not stripped` (символы не удалены). Кроме того, man:strip[1] обнаружит программы, которые уже были подвергнуты удалению символов, и завершит работу без ошибок.
+
+[IMPORTANT]
+====
+Когда определён `WITH_DEBUG`, elf-файлы _не должны_ быть очищены.
+
+Переменные (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) и crossref:uses[uses,`USES`], предоставляемые фреймворком, обрабатывают это автоматически.
+
+Некоторое программное обеспечение добавляет `-s` к своим `LDFLAGS`. В этом случае либо удалите `-s`, если установлен `WITH_DEBUG`, либо удалите его безусловно и используйте `STRIP_CMD` в `post-install`.
+====
[[install-copytree]]
=== Установка целого дерева файлов
-Иногда должно быть установлено большое количество файлов с сохранением их иерархической организации. Например, копирование дерева каталогов целиком из `WRKSRC` в целевой каталог внутри `PREFIX`. Обратите внимание, что `PREFIX`, `EXAMPLESDIR`, `DATADIR` и другие переменные пути всегда должны предваряться `STAGEDIR`, чтобы не ломать staging (смотрите <<staging>>).
+Иногда необходимо установить большое количество файлов с сохранением их иерархической структуры. Например, копирование всего дерева каталогов из `WRKSRC` в целевой каталог под `PREFIX`. Обратите внимание, что `PREFIX`, `EXAMPLESDIR`, `DATADIR` и другие переменные путей всегда должны предваряться `STAGEDIR` для соблюдения процедуры промежуточной установки (см. crossref:special[staging,Промежуточная установка]).
-Для этой ситуации существует два макроса. Преимущество от использования этих макросов вместо команды `cp` в том, что они гарантируют установку правильного владельца и прав на конечные файлы. Первый макрос, `COPYTREE_BIN`, делает все устанавливаемые файлы исполняемыми, что подходит для установки в [.filename]#PREFIX/bin#. Второй макрос, `COPYTREE_SHARE`, не устанавливает на файлы права исполнения, и, таким образом, подходит для установки файлов внутри каталога [.filename]#PREFIX/share#.
+Для этой ситуации существуют два макроса. Преимущество использования этих макросов вместо `cp` заключается в том, что они гарантируют целевым файлам правильные значения владельца и разрешений. Первый макрос, `COPYTREE_BIN`, устанавливает все установленные файлы как исполняемые, что делает его подходящим для установки в [.filename]#PREFIX/bin#. Второй макрос, `COPYTREE_SHARE#, не устанавливает исполняемые разрешения для файлов и, следовательно, подходит для установки файлов в [.filename]#PREFIX/share#.
[.programlisting]
....
@@ -2295,7 +4794,7 @@ post-install:
(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})
....
-В этом примере устанавливается содержимое каталога [.filename]#examples# из установочных файлов производителя в надлежащее место для примеров вашего порта.
+Этот пример установит содержимое каталога [.filename]#examples# из дистрибутива вендора в соответствующее расположение примеров порта.
[.programlisting]
....
@@ -2304,9 +4803,9 @@ post-install:
(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} "June July August" ${STAGEDIR}${DATADIR}/summer)
....
-А в этом примере будут установлены данные летних месяцев в подкаталог [.filename]#summer# каталога [.filename]#DATADIR#.
+И этот пример установит данные летних месяцев в подкаталог [.filename]#summer# каталога [.filename]#DATADIR#.
-В качестве третьего параметра в макросе `COPYTREE_*` можно передать дополнительные параметры `find`. Например, чтобы в первом примере установить все файлы кроме файлов Makefile, можно использовать следующую команду.
+Дополнительные аргументы `find` могут быть переданы через третий аргумент макросов `COPYTREE_*`. Например, чтобы установить все файлы из первого примера, кроме Makefiles, можно использовать следующие команды.
[.programlisting]
....
@@ -2316,50 +4815,51 @@ post-install:
${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} "! -name Makefile")
....
-Эти макросы не производят добавление устанавливаемых файлов в [.filename]#pkg-plist#. Они должны быть добавлены туда вручную. Необязательные файлы документации (`PORTDOCS`, смотрите <<install-documentation>>) и примеров (`PORTEXAMPLES`) всегда должны предваряться в [.filename]#pkg-plist# префиксами `%%PORTDOCS%%` или `%%PORTEXAMPLES%%`.
+Эти макросы не добавляют установленные файлы в [.filename]#pkg-plist#. Их необходимо добавлять вручную. Для дополнительной документации (`PORTDOCS`, см. crossref:makefiles[install-documentation, Установка дополнительной документации]) и примеров (`PORTEXAMPLES`), префиксы `%%PORTDOCS%%` или `%%PORTEXAMPLES%%` должны быть добавлены в [.filename]#pkg-plist#.
[[install-documentation]]
=== Установка дополнительной документации
-Если с вашим программным обеспечением поставляется некоторая документация, отличающаяся от стандартных страниц Справочника и файлов info, которая, как вы думаете, будет полезна пользователям, установите ее в каталог [.filename]#PREFIX/shared/doc#. Это может быть сделано, как и в предыдущем разделе, в цели `post-install`.
+Если у программного обеспечения есть документация, помимо стандартных страниц man и info, которая может быть полезна пользователю, установите её в `DOCSDIR`. Это можно сделать, как и в предыдущем пункте, в цели `post-install`.
-Создайте для вашего порта новый каталог. Имя каталога должно соответствовать тому, что представляет из себя порт. Обычно это означает `PORTNAME`. Однако, если вы думаете, что пользователь захочет иметь разные версии порта, установленные одновременно, то вы можете использовать полное имя `PKGNAME`.
+Создайте новый каталог для порта. Имя каталога — `DOCSDIR`. Обычно оно равно `PORTNAME`. Однако, если пользователю может потребоваться установка разных версий порта одновременно, можно использовать полное имя `PKGNAME`.
-Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-plist#, безопасным способом будет устанавливать документацию в `STAGEDIR` всегда (смотрите crossref:special[staging, Staging]). Следовательно, блоки `.if` нужны только для файлов достаточно большого размера, установка которых влечёт значительные накладные расходы на операции ввода/вывода.
+Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-plist#, можно безопасно всегда устанавливать документацию в `STAGEDIR` (см. crossref:special[staging,Staging]). Поэтому блоки `.if` требуются только в тех случаях, когда устанавливаемые файлы достаточно велики, чтобы вызвать значительные накладные расходы на ввод-вывод.
[.programlisting]
....
post-install:
${MKDIR} ${STAGEDIR}${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
....
-Вот несколько полезных переменных и то, как они преобразуются по умолчанию при использовании в [.filename]#Makefile#:
+С другой стороны, если в порте есть опция DOCS, установите документацию в цели `post-install-DOCS-on`. Эти цели описаны в crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`].
-* `DATADIR` преобразуется в [.filename]#PREFIX/shared/PORTNAME#.
-* `DATADIR_REL` преобразуется в [.filename]#share/PORTNAME#.
-* `DOCSDIR` преобразуется в [.filename]#PREFIX/shared/doc/PORTNAME#.
-* `DOCSDIR_REL` преобразуется в [.filename]#share/doc/PORTNAME#.
-* `EXAMPLESDIR` преобразуется в [.filename]#PREFIX/shared/examples/PORTNAME#.
-* `EXAMPLESDIR_REL` преобразуется в [.filename]#share/examples/PORTNAME#.
+Вот несколько полезных переменных и их стандартное раскрытие при использовании в [.filename]#Makefile#:
+
+* `DATADIR` раскрывается в [.filename]#PREFIX/share/PORTNAME#.
+* `DATADIR_REL` раскрывается в [.filename]#share/PORTNAME#.
+* `DOCSDIR` раскрывается в [.filename]#PREFIX/share/doc/PORTNAME#.
+* `DOCSDIR_REL` раскрывается в [.filename]#share/doc/PORTNAME#.
+* `EXAMPLESDIR` раскрывается в [.filename]#PREFIX/share/examples/PORTNAME#.
+* `EXAMPLESDIR_REL` раскрывается в [.filename]#share/examples/PORTNAME#.
[NOTE]
====
-Параметр `DOCS` управляет установкой дополнительной документации в `DOCSDIR`. Это не относится к стандартным страницам справочника и страницам info. Все, что устанавливается в `DATADIR` и `EXAMPLESDIR`, соответственно управляется через параметры `DATA` и `EXAMPLES`.
+Опция `DOCS` управляет только дополнительной документацией, устанавливаемой в `DOCSDIR`. Она не применяется к стандартным man-страницам и info-страницам. Содержимое, устанавливаемое в `EXAMPLESDIR`, контролируется опцией `EXAMPLES`.
====
-Эти переменные экспортируются в `PLIST_SUB`. Их значения появятся там в виде имён путей относительно [.filename]#PREFIX#, если это возможно. То есть [.filename]#share/doc/PORTNAME# в списке сборки по умолчанию будет заменен на `%%DOCSDIR%%`, и так далее. (Дополнительную информацию о подстановке в [.filename]#pkg-plist# можно найти <<plist-sub,здесь>>.)
+Эти переменные экспортируются в `PLIST_SUB`. Их значения будут представлены там в виде путей относительно [.filename]#PREFIX#, если это возможно. То есть, [.filename]#share/doc/PORTNAME# будет заменено на `%%DOCSDIR%%` в списке упаковки по умолчанию и так далее. (Подробнее о подстановках в [.filename]#pkg-plist# см. crossref:plist[plist-sub,здесь].)
-Все условно устанавливаемые файлы и каталоги с документацией должны быть перечислены в файле [.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:
+Все условно устанавливаемые файлы и каталоги документации включаются в [.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:
[.programlisting]
....
%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
%%PORTDOCS%%%%DOCSDIR%%/CONTACT
-%%PORTDOCS%%@dirrm %%DOCSDIR%%
....
-В качестве альтернативы перечислению файлов документации в файле [.filename]#pkg-plist#, порт может указать в переменной `PORTDOCS` список имён файлов и глобальных шаблонов командного процессора для добавления в окончательный список сборки. Имена будут задаваться относительно `DOCSDIR`. Таким образом, порт, использующий `PORTDOCS` и нестандартное местоположение документации, должен задавать соответствующим образом и `DOCSDIR`. Если каталог указан в `PORTDOCS` или соответствует шаблону для этой переменной, то полное поддерево с входящими в него файлами и каталогами будет регистрироваться в окончательном списке сборки. Если параметр `DOCS` не задан, то файлы и каталоги, перечисленные в `PORTDOCS`, не будут установлены и добавлены в список сборки порта. Установка документации в `PORTDOCS`, как это показано выше, остаётся за самим портом. Типичный пример использования `PORTDOCS` выглядит следующим образом:
+В качестве альтернативы перечислению файлов документации в [.filename]#pkg-plist#, порт может установить переменную `PORTDOCS` в список имён файлов и шаблонов имен файлов shell для добавления в итоговый список упаковки. Имена будут относительны к `DOCSDIR`. Поэтому порт, использующий `PORTDOCS` и нестандартное расположение документации, должен соответствующим образом установить `DOCSDIR`. Если в `PORTDOCS` указан каталог или он соответствует шаблону из этой переменной, всё поддерево содержащихся файлов и каталогов будет зарегистрировано в итоговом списке упаковки. Если опция `DOCS` отключена, файлы и каталоги, перечисленные в `PORTDOCS`, не будут установлены или добавлены в список упаковки порта. Установка документации в `PORTDOCS`, как показано выше, остаётся на усмотрение самого порта. Типичный пример использования `PORTDOCS`:
[.programlisting]
....
@@ -2368,12 +4868,57 @@ PORTDOCS= README.* ChangeLog docs/*
[NOTE]
====
-Эквивалентами `PORTDOCS` для файлов, устанавливаемых в `DATADIR` и `EXAMPLESDIR` являются `PORTDATA` и `PORTEXAMPLES` соответственно.
+Эквивалентами `PORTDOCS` для файлов, установленных в `DATADIR` и `EXAMPLESDIR`, являются `PORTDATA` и `PORTEXAMPLES` соответственно.
-Во время установки выводится содержимое [.filename]#pkg-message#. За подробной информацией обратитесь к <<porting-message,разделу об использовании [.filename]#pkg-message#>>. Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
+Содержимое файла [.filename]#pkg-message# отображается при установке. Подробности см. в разделе crossref:pkg-files[porting-message,использование файла [.filename]#pkg-message#]. Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
====
[[install-subdirs]]
-=== Подкаталоги внутри PREFIX
+=== Подкаталоги в `PREFIX`
+
+Попробуйте сделать так, чтобы порт размещал файлы в правильных подкаталогах `PREFIX`. Некоторые порты собирают всё в кучу и помещают в подкаталог с именем порта, что неверно. Также многие порты размещают все файлы, кроме бинарников, заголовочных файлов и страниц руководства, в подкаталоге [.filename]#lib#, что плохо согласуется с парадигмой BSD. Многие из этих файлов должны быть перемещены в один из следующих каталогов: [.filename]#etc# (файлы настройки/конфигурации), [.filename]#libexec# (исполняемые файлы для внутреннего использования), [.filename]#sbin# (исполняемые файлы для суперпользователей/администраторов), [.filename]#info# (документация для браузера info) или [.filename]#share# (архитектурно-независимые файлы). Подробности см. в man:hier[7]; правила, действующие для [.filename]#/usr#, в основном применимы и к [.filename]#/usr/local#. Исключение составляют порты, связанные с USENET "news". Они могут использовать [.filename]#PREFIX/news# в качестве места назначения для своих файлов.
+
+[[binary-alias]]
+== Используйте `BINARY_ALIAS` для переименования команд вместо исправления сборки
+
+Когда определена переменная `BINARY_ALIAS`, будут созданы символьные ссылки на указанные команды в каталоге, который будет добавлен в начало переменной `PATH`.
+
+Используйте это для замены жёстко заданных команд, от которых зависит этап сборки, без необходимости исправлять какие-либо файлы сборки.
+
+[[binary-alias-ex1]]
+.Использование `BINARY_ALIAS` для предоставления `gsed` в качестве `sed`
+[example]
+====
+Некоторые порты ожидают, что `sed` будет вести себя как GNU sed и используют возможности, которые man:sed[1] не предоставляет. GNU sed доступен в пакете package:textproc/gsed[] на FreeBSD.
+
+Используйте `BINARY_ALIAS` для замены `sed` на `gsed` на время сборки:
+
+[.programlisting]
+....
+BUILD_DEPENDS= gsed:textproc/gsed
+...
+BINARY_ALIAS= sed=gsed
+....
+
+====
+
+[[binary-alias-ex2]]
+.Использование `BINARY_ALIAS` для создания псевдонимов жестко заданных команд `python3`
+[example]
+====
+Порт, в котором есть жёсткая ссылка на `python3` в скриптах сборки, требует его наличия в `PATH` во время сборки. Используйте `BINARY_ALIAS` для создания псевдонима, указывающего на нужный бинарный файл Python 3:
+
+[.programlisting]
+....
+USES= python:3.4+,build
+...
+BINARY_ALIAS= python3=${PYTHON_CMD}
+....
-Попробуйте поместить все файлы порта в правильных подкаталогах каталога `PREFIX`. Некоторые порты игнорируют все установки и помещают все в подкаталог с именем порта, что неправильно. Также многие порты помещают все, кроме бинарных файлов, файлов заголовков и страниц Справочника, в подкаталог каталога [.filename]#lib#, что не очень хорошо работает с подходом BSD. Многие файлы должны быть перемещены в одно из следующих местоположений: [.filename]#etc# (настроечные/конфигурационные файлы), [.filename]#libexec# (выполнимые файлы, запускаемые из других программ), [.filename]#sbin# (исполнимые файлы для администраторов/менеджеров системы), [.filename]#info# (документация в формате info для просмотрщика info) или [.filename]#share# (независимые от архитектуры файлы). Обратитесь к man:hier[7] для прояснения деталей; правила, покрывающие [.filename]#/usr#, достаточно хорошо подходят также и к [.filename]#/usr/local#. Исключением являются порты, имеющие дело с "новостями" USENET. Они могут использовать каталог [.filename]#PREFIX/news# для установки своих файлов.
+См. crossref:special[using-python,Использование Python] для получения дополнительной информации о `USES=python`.
+====
+
+[NOTE]
+====
+Бинарные псевдонимы создаются после обработки зависимостей, указанных через `BUILD_DEPENDS` и `LIB_DEPENDS`, но до цели `configure`. Это приводит к различным ограничениям. Например, программы, установленные через `TEST_DEPENDS`, нельзя использовать для создания бинарного псевдонима, так как тестовые зависимости, указанные таким образом, обрабатываются после создания бинарных псевдонимов.
+====
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.po b/documentation/content/ru/books/porters-handbook/makefiles/_index.po
new file mode 100644
index 0000000000..359d99d977
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/makefiles/_index.po
@@ -0,0 +1,14066 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookmakefiles_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Configuring the Makefile for FreeBSD Ports"
+msgstr "Настройка Makefile для портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. Configuring the Makefile"
+msgstr "Глава 5. Настройка Makefile"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:14
+#, no-wrap
+msgid "Configuring the Makefile"
+msgstr "Настройка Makefile"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:55
+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 ""
+"Настройка [.filename]#Makefile# довольно проста, и мы снова рекомендуем "
+"изучить существующие примеры перед началом. Также в этом руководстве есть "
+"crossref:porting-samplem[porting-samplem,пример Makefile], поэтому "
+"ознакомьтесь с ним и, пожалуйста, соблюдайте порядок переменных и разделов в "
+"этом шаблоне, чтобы порт был удобнее для чтения другими."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:57
+msgid ""
+"Consider these problems in sequence during the design of the new "
+"[.filename]#Makefile#:"
+msgstr ""
+"Рассмотрите эти проблемы последовательно при разработке нового "
+"[.filename]#Makefile#:"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:59
+#, no-wrap
+msgid "The Original Source"
+msgstr "Оригинальный исходный код"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:63
+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 ""
+"Находится ли он в `DISTDIR` в виде стандартного архива ``gzip`` с именем "
+"вроде [.filename]#foozolix-1.2.tar.gz#? Если да, переходите к следующему "
+"шагу. Если нет, возможно, для формата имени файла дистрибутива потребуется "
+"переопределить одну или несколько переменных: `DISTVERSION`, `DISTNAME`, "
+"`EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` "
+"или `DISTFILES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:66
+msgid ""
+"In the worst case, create a custom `do-extract` target to override the "
+"default. This is rarely, if ever, necessary."
+msgstr ""
+"В худшем случае создайте пользовательскую цель `do-extract`, чтобы "
+"переопределить стандартную. Это редко, если вообще когда-либо, необходимо."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:68
+#, no-wrap
+msgid "Naming"
+msgstr "Именование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:71
+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 ""
+"Первая часть [.filename]#Makefile# порта указывает его название, описывает "
+"номер версии и помещает его в соответствующую категорию."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:73
+#, no-wrap
+msgid "`PORTNAME`"
+msgstr "`PORTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:77
+msgid ""
+"Set `PORTNAME` to the base name of the software. It is used as the base for "
+"the FreeBSD package, and for crossref:makefiles[makefile-"
+"distname,`DISTNAME`]."
+msgstr ""
+"Установите `PORTNAME` как базовое имя программы. Оно используется в качестве "
+"основы для пакета FreeBSD и для crossref:makefiles[makefile-"
+"distname,`DISTNAME`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:84
+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 crossref:makefiles[porting-pkgnameprefix-"
+"suffix,`PKGNAMEPREFIX` or `PKGNAMESUFFIX`]."
+msgstr ""
+"Название пакета должно быть уникальным во всём дереве портов. Убедитесь, что "
+"`PORTNAME` ещё не используется существующим портом и что никакой другой порт "
+"уже не имеет такой же `PKGBASE`. Если имя уже занято, добавьте либо "
+"crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`, либо "
+"`PKGNAMESUFFIX`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:87
+#, no-wrap
+msgid "Versions, `DISTVERSION` _or_ `PORTVERSION`"
+msgstr "Версии, `DISTVERSION` _или_ `PORTVERSION`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:90
+msgid "Set `DISTVERSION` to the version number of the software."
+msgstr "Установите `DISTVERSION` в номер версии программы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:94
+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 ""
+"`PORTVERSION` — это версия, используемая для пакета FreeBSD. Она будет "
+"автоматически вычислена из `DISTVERSION` в соответствии со схемой "
+"версионирования пакетов FreeBSD. Если версия содержит _буквы_, может "
+"потребоваться задать `PORTVERSION` вместо `DISTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:98
+msgid "Only one of `PORTVERSION` and `DISTVERSION` can be set at a time."
+msgstr ""
+"Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть "
+"установлена одновременно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:101
+msgid ""
+"From time to time, some software will use a version scheme that is not "
+"compatible with how `DISTVERSION` translates in `PORTVERSION`."
+msgstr ""
+"Время от времени некоторые программы используют схему версионирования, "
+"которая несовместима с тем, как `DISTVERSION` преобразуется в `PORTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:106
+msgid ""
+"When updating a port, it is possible to use the `-t` argument of man:pkg-"
+"version[8] to check if the new version is greater or lesser than before. "
+"See below on how to use man:pkg-version[8] to compare versions."
+msgstr ""
+"При обновлении порта можно использовать аргумент `-t` утилиты man:pkg-"
+"version[8], чтобы проверить, является ли новая версия больше или меньше "
+"предыдущей. Смотрите ниже, как использовать man:pkg-version[8] для сравнения "
+"версий."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:109
+#, no-wrap
+msgid "Using man:pkg-version[8] to Compare Versions"
+msgstr "Использование man:pkg-version[8] для сравнения версий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:113
+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 ""
+"`pkg version -t` принимает две версии в качестве аргументов и возвращает "
+"`<`, `=` или `>`, если первая версия меньше, равна или больше второй версии "
+"соответственно."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.3\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2\n"
+msgstr ""
+"% pkg version -t 1.2 1.3\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2\n"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:121
+#, no-wrap
+msgid "<.>"
+msgstr "<.>"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:121
+msgid "% pkg version -t 1.2 1.2.0"
+msgstr "% pkg version -t 1.2 1.2.0"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:128
+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 ""
+"% pkg version -t 1.2 1.2.p1\n"
+"> <.>\n"
+"% pkg version -t 1.2.a1 1.2.b1\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2p1\n"
+"< <.>"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:131
+msgid "`1.2` is before `1.3`."
+msgstr "`1.2` идёт перед `1.3`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:132
+msgid "`1.2` and `1.2` are equal as they have the same version."
+msgstr "`1.2` и `1.2` равны, так как имеют одинаковую версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:133
+msgid "`1.2` and `1.2.0` are equal as nothing equals zero."
+msgstr "`1.2` и `1.2.0` равны, так как ноль ничего не значит."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:134
+msgid "`1.2` is after `1.2.p1` as `.p1`, think \"pre-release 1\"."
+msgstr ""
+"`1.2` идёт после `1.2.p1`, так как `.p1` означает «pre-release 1» "
+"(предрелизная версия 1)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:135
+msgid ""
+"`1.2.a1` is before `1.2.b1`, think \"alpha\" and \"beta\", and `a` is before "
+"`b`."
+msgstr ""
+"`1.2.a1` предшествует `1.2.b1`, представьте \"alpha\" и \"beta\", где `a` "
+"идёт перед `b`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:136
+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 ""
+"`1.2` находится перед `1.2p1`, так же как `2p1` (читается как \"2, уровень "
+"исправления 1\") — это версия, следующая после любой `2.X`, но перед `3`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:141
+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 ""
+"Здесь `a`, `b` и `p` используются так, как если бы они означали \"альфа\", "
+"\"бета\" или \"пре-релиз\" и \"уровень патча\", но на самом деле это просто "
+"буквы, которые сортируются в алфавитном порядке, поэтому можно использовать "
+"любую букву, и они будут отсортированы соответствующим образом."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:145
+#, no-wrap
+msgid "Examples of `DISTVERSION` and the Derived `PORTVERSION`"
+msgstr "Примеры `DISTVERSION` и производной `PORTVERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:149
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:499
+#, no-wrap
+msgid "DISTVERSION"
+msgstr "DISTVERSION"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:151
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:500
+#, no-wrap
+msgid "PORTVERSION"
+msgstr ".PORTVERSION"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:152
+#, no-wrap
+msgid "0.7.1d"
+msgstr "0.7.1d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:154
+#, no-wrap
+msgid "0.7.1.d"
+msgstr "0.7.1.d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:155
+#, no-wrap
+msgid "10Alpha3"
+msgstr "10Alpha3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:157
+#, no-wrap
+msgid "10.a3"
+msgstr "10.a3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:158
+#, no-wrap
+msgid "3Beta7-pre2"
+msgstr "3Beta7-pre2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:160
+#, no-wrap
+msgid "3.b7.p2"
+msgstr "3.b7.p2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:161
+#, no-wrap
+msgid "8:f_17"
+msgstr "8:f_17"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:162
+#, no-wrap
+msgid "8f.17"
+msgstr "8f.17"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:165
+#, no-wrap
+msgid "Using `DISTVERSION`"
+msgstr "Использование `DISTVERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:169
+msgid ""
+"When the version only contains numbers separated by dots, dashes or "
+"underscores, use `DISTVERSION`."
+msgstr ""
+"Если версия содержит только числа, разделённые точками, тире или "
+"подчёркиваниями, используйте `DISTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:174
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:177
+msgid "It will generate a `PORTVERSION` of `1.2.4`."
+msgstr "Это сгенерирует `PORTVERSION` равный `1.2.4`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:180
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Starts with a Letter or a Prefix"
+msgstr "Использование `DISTVERSION` когда версия начинается с буквы или префикса"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:184
+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 ""
+"Когда версия начинается или заканчивается буквой, или префиксом, или "
+"суффиксом, которые не являются частью версии, используйте "
+"`DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:186
+msgid "If the version is `v1.2-4`:"
+msgstr "Если версия `v1.2-4`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:192
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t1_2_4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t1_2_4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:196
+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 ""
+"Некоторые проекты, использующие GitHub, могут включать своё название в "
+"версии. Например, версия может выглядеть как `nekoto-1.2-4`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:202
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2_4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2_4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:205
+msgid ""
+"Those projects also sometimes use some string at the end of the version, for "
+"example, `1.2-4_RELEASE`:"
+msgstr ""
+"Эти проекты также иногда используют строку в конце версии, например, "
+"`1.2-4_RELEASE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:211
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:214
+msgid "Or they do both, for example, `nekoto-1.2-4_RELEASE`:"
+msgstr "Или они делают и то, и другое, например, `nekoto-1.2-4_RELEASE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:221
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:224
+msgid ""
+"`DISTVERSIONPREFIX` and `DISTVERSIONSUFFIX` will not be used while "
+"constructing `PORTVERSION`, but only used in `DISTNAME`."
+msgstr ""
+"`DISTVERSIONPREFIX` и `DISTVERSIONSUFFIX` не будут использоваться при "
+"формировании `PORTVERSION`, а только в `DISTNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:226
+msgid "All will generate a `PORTVERSION` of `1.2.4`."
+msgstr "Все сгенерируют `PORTVERSION` равный `1.2.4`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:229
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Contains Letters Meaning \"alpha\", \"beta\", or \"pre-release\""
+msgstr "Использование `DISTVERSION`, когда версия содержит буквы, означающие \"alpha\", \"beta\" или \"pre-release\""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:233
+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 ""
+"Если версия содержит числа, разделённые точками, тире или подчёркиваниями, а "
+"буквы используются для обозначения \"альфа\", \"бета\" или \"предварительной "
+"версии\" (то есть до версии без букв), используйте `DISTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:238
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-pre4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-pre4\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:244
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2p4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2p4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:247
+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 ""
+"Оба варианта создадут `PORTVERSION` равную `1.2.p4`, что предшествует версии "
+"1.2. Для проверки этого факта можно использовать man:pkg-version[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:252
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2.p4 1.2\n"
+"<\n"
+msgstr ""
+"% pkg version -t 1.2.p4 1.2\n"
+"<\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:257
+#, no-wrap
+msgid "Not Using `DISTVERSION` When the Version Contains Letters Meaning \"Patch Level\""
+msgstr "Не использовать `DISTVERSION`, если версия содержит буквы, означающие \"уровень патча\""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:261
+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 ""
+"Если версия содержит буквы, которые не означают \"alpha\", \"beta\" или "
+"\"pre\", а скорее указывают на \"уровень исправления\" и следуют после "
+"версии без букв, используйте `PORTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:266
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"PORTVERSION=\t1.2p4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"PORTVERSION=\t1.2p4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:270
+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 ""
+"В данном случае использование `DISTVERSION` невозможно, так как это приведёт "
+"к генерации версии `1.2.p4`, которая будет считаться более ранней, чем "
+"`1.2`, а не более поздней. man:pkg-version[8] подтвердит это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:277
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.2.p4\n"
+"> <.>\n"
+"% pkg version -t 1.2 1.2p4\n"
+"< <.>\n"
+msgstr ""
+"% pkg version -t 1.2 1.2.p4\n"
+"> <.>\n"
+"% pkg version -t 1.2 1.2p4\n"
+"< <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:280
+msgid "`1.2` is after `1.2.p4`, which is _wrong_ in this case."
+msgstr "`1.2` идёт после `1.2.p4`, что в данном случае _неверно_."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:281
+msgid "`1.2` is before `1.2p4`, which is what was needed."
+msgstr "`1.2` находится перед `1.2p4`, что и требовалось."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:287
+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 "
+"crossref:makefiles[makefile-distname, `DISTNAME`]."
+msgstr ""
+"Для более сложных примеров настройки `PORTVERSION`, когда версия "
+"программного обеспечения действительно несовместима с FreeBSD, или "
+"`DISTNAME`, когда файл дистрибутива не содержит саму версию, см. "
+"crossref:makefiles[makefile-distname, `DISTNAME`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:289
+#, no-wrap
+msgid "`PORTREVISION` and `PORTEPOCH`"
+msgstr "`PORTREVISION` и `PORTEPOCH`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:292
+#, no-wrap
+msgid "`PORTREVISION`"
+msgstr "`PORTREVISION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:296
+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 ""
+"`PORTREVISION` — это монотонно возрастающее значение, которое сбрасывается в "
+"0 при каждом увеличении `DISTVERSION`, обычно при каждом новом официальном "
+"выпуске от поставщика. Если `PORTREVISION` не равен нулю, его значение "
+"добавляется к имени пакета. Изменения `PORTREVISION` используются "
+"автоматизированными инструментами, такими как man:pkg-version[8], для "
+"определения доступности нового пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:300
+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 crossref:makefiles[makefile-"
+"options,options]."
+msgstr ""
+"`PORTREVISION` должен быть увеличен каждый раз, когда в порт вносятся "
+"изменения, которые так или иначе влияют на сгенерированный пакет. Это "
+"включает изменения, затрагивающие только пакеты, собранные с нестандартными "
+"crossref:makefiles[makefile-options,опциями]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:302
+msgid "Examples of when `PORTREVISION` must be bumped:"
+msgstr "Примеры случаев, когда необходимо увеличить `PORTREVISION`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:304
+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:305
+msgid ""
+"Changes to the port [.filename]#Makefile# to enable or disable compile-time "
+"options in the package."
+msgstr ""
+"Изменения в [.filename]#Makefile# порта для включения или отключения "
+"параметров сборки в пакете."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:306
+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 ""
+"Изменения в списке файлов пакета или в поведении во время установки. "
+"Например, изменение скрипта, который генерирует начальные данные для пакета, "
+"такие как ключи хоста man:ssh[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:307
+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 ""
+"Увеличение версии зависимости порта от общей библиотеки (в данном случае, "
+"попытка установить старый пакет после установки более новой версии "
+"зависимости завершится неудачей, так как будет искаться старая версия "
+"libfoo.x вместо libfoo.(x+1))."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:308
+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 ""
+"Тихие изменения в дистрибутивном файле порта, которые имеют значительные "
+"функциональные отличия. Например, изменения в дистрибутивном файле, "
+"требующие корректировки файла [.filename]#distinfo# без соответствующего "
+"изменения `DISTVERSION`, когда сравнение `diff -ru` старой и новой версий "
+"показывает нетривиальные изменения в коде."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:309
+msgid "Changes to `MAINTAINER`."
+msgstr "Изменения в `MAINTAINER`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:311
+msgid "Examples of changes which do not require a `PORTREVISION` bump:"
+msgstr "Примеры изменений, которые не требуют увеличения `PORTREVISION`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:313
+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:314
+msgid ""
+"Changes to `MASTER_SITES` or other functional changes to the port which do "
+"not affect the resulting package."
+msgstr ""
+"Изменения в `MASTER_SITES` или другие функциональные изменения порта, "
+"которые не влияют на итоговый пакет."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:315
+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:316
+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 ""
+"Исправления сборки, которые позволяют пакету компилироваться там, где ранее "
+"это не удавалось. При условии, что изменения не вносят функциональных "
+"изменений на других платформах, где порт ранее собирался. Поскольку "
+"`PORTREVISION` отражает содержимое пакета, если пакет ранее не мог быть "
+"собран, то нет необходимости увеличивать `PORTREVISION` для обозначения "
+"изменений."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:321
+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 ""
+"Эмпирическое правило заключается в том, чтобы решить, является ли изменение, "
+"внесённое в порт, чем-то, что принесёт пользу _некоторым_ пользователям. "
+"Будь то улучшение, исправление или просто факт, что новый пакет вообще будет "
+"работать. Затем необходимо сопоставить это с тем, что всем, кто регулярно "
+"обновляет своё дерево портов, придётся выполнить обновление. Если ответ "
+"положительный, необходимо увеличить `PORTREVISION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:326
+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 ""
+"Пользователи бинарных пакетов _никогда_ не увидят обновления, если "
+"`PORTREVISION` не увеличен. Без увеличения `PORTREVISION` сборщики пакетов "
+"не могут обнаружить изменение и, следовательно, не пересоберут пакет."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:329
+#, no-wrap
+msgid "`PORTEPOCH`"
+msgstr "`PORTEPOCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:333
+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 ""
+"Время от времени разработчики программного обеспечения или сопровождающие "
+"портов FreeBSD совершают ошибку и выпускают версию своего ПО, которая "
+"фактически имеет меньший номер по сравнению с предыдущей. Примером может "
+"служить переход с foo-20000801 на foo-1.0 (первая версия будет ошибочно "
+"считаться более новой, поскольку число 20000801 больше, чем 1.0)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:339
+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 ""
+"Результаты сравнения номеров версий не всегда очевидны. Команда `pkg "
+"version` (см. man:pkg-version[8]) может быть использована для проверки "
+"сравнения двух строк с номерами версий. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:344
+#, no-wrap
+msgid ""
+"% pkg version -t 0.031 0.29\n"
+">\n"
+msgstr ""
+"% pkg version -t 0.031 0.29\n"
+">\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:347
+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 ""
+"Символ `>` в выводе указывает, что версия 0.031 считается больше, чем версия "
+"0.29, что могло быть неочевидно для сопровождающего."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:354
+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 ""
+"В таких ситуациях необходимо увеличить `PORTEPOCH`. Если `PORTEPOCH` не "
+"равен нулю, он добавляется к имени пакета, как описано в разделе 0 выше. "
+"`PORTEPOCH` никогда не должен уменьшаться или сбрасываться до нуля, потому "
+"что это приведёт к ошибке при сравнении с пакетом из более ранней эпохи. "
+"Например, пакет не будет обнаружен как устаревший. Новый номер версии, "
+"`1.0,1` в приведённом выше примере, всё ещё численно меньше предыдущей "
+"версии, 20000801, но суффикс `,1` обрабатывается автоматизированными "
+"инструментами особым образом и считается большим, чем подразумеваемый "
+"суффикс `,0` у предыдущего пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:357
+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 ""
+"Неправильное удаление или сброс `PORTEPOCH` приводит к бесконечным "
+"проблемам. Если приведённое выше объяснение недостаточно ясно, обратитесь к "
+"{freebsd-ports}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:361
+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 ""
+"Ожидается, что `PORTEPOCH` не будет использоваться для большинства портов, и "
+"что разумное использование `DISTVERSION` или аккуратное применение "
+"`PORTVERSION` часто может предотвратить необходимость его использования, "
+"если будущий выпуск программного обеспечения изменит структуру версий. "
+"Однако разработчикам портов FreeBSD следует быть осторожными, когда вендор "
+"выпускает релиз без официального номера версии — например, релиз в виде "
+"\"снимка\" кода. Возникает соблазн обозначить такой релиз датой выпуска, что "
+"вызовет проблемы, как в примере выше, когда будет сделан новый "
+"\"официальный\" релиз."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:364
+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 ""
+"Например, если снимок выпущен на дату `20000917`, а предыдущая версия "
+"программного обеспечения была `1.2`, не следует использовать `20000917` для "
+"`DISTVERSION`. Правильным будет указать `DISTVERSION` как `1.2.20000917` или "
+"подобное, чтобы следующая версия, например `1.3`, оставалась численно "
+"большей."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:366
+#, no-wrap
+msgid "Example of `PORTREVISION` and `PORTEPOCH` Usage"
+msgstr "Пример использования `PORTREVISION` и `PORTEPOCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:369
+msgid ""
+"The `gtkmumble` port, version `0.10`, is committed to the ports collection:"
+msgstr "Порт `gtkmumble` версии `0.10` добавлен в коллекцию портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:374
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:377
+msgid "`PKGNAME` becomes `gtkmumble-0.10`."
+msgstr "`PKGNAME` становится `gtkmumble-0.10`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:380
+msgid ""
+"A security hole is discovered which requires a local FreeBSD patch. "
+"`PORTREVISION` is bumped accordingly."
+msgstr ""
+"Обнаружена уязвимость в безопасности, требующая локального исправления "
+"FreeBSD. `PORTREVISION` соответствующим образом увеличивается."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:386
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+"PORTREVISION=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+"PORTREVISION=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:389
+msgid "`PKGNAME` becomes `gtkmumble-0.10_1`"
+msgstr "`PKGNAME` принимает значение `gtkmumble-0.10_1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:393
+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 ""
+"Выпущена новая версия от поставщика под номером `0.2` (оказывается, автор "
+"изначально подразумевал, что `0.10` на самом деле означает `0.1.0`, а не "
+"\"то, что идет после 0.9\" — увы, теперь уже поздно). Поскольку новая "
+"минорная версия `2` численно меньше предыдущей версии `10`, необходимо "
+"увеличить `PORTEPOCH`, чтобы вручную заставить систему распознавать новый "
+"пакет как \"более новый\". Так как это новый релиз кода от поставщика, "
+"`PORTREVISION` сбрасывается до 0 (или удаляется из [.filename]#Makefile#)."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:399
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.2\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.2\n"
+"PORTEPOCH=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:402
+msgid "`PKGNAME` becomes `gtkmumble-0.2,1`"
+msgstr "`PKGNAME` становится `gtkmumble-0.2,1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:405
+msgid ""
+"The next release is 0.3. Since `PORTEPOCH` never decreases, the version "
+"variables are now:"
+msgstr ""
+"Следующий выпуск — 0.3. Поскольку `PORTEPOCH` никогда не уменьшается, "
+"переменные версий теперь выглядят так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:411
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.3\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.3\n"
+"PORTEPOCH=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:414
+msgid "`PKGNAME` becomes `gtkmumble-0.3,1`"
+msgstr "`PKGNAME` принимает значение `gtkmumble-0.3,1`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:419
+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 ""
+"Если бы `PORTEPOCH` был сброшен в `0` при этом обновлении, пользователь, "
+"установивший пакет `gtkmumble-0.10_1`, не увидел бы пакет `gtkmumble-0.3` "
+"как более новый, поскольку `3` всё ещё численно меньше, чем `10`. Помните, в "
+"этом и заключается вся суть `PORTEPOCH` изначально."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:422
+#, no-wrap
+msgid "`PKGNAMEPREFIX` and `PKGNAMESUFFIX`"
+msgstr "`PKGNAMEPREFIX` и `PKGNAMESUFFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:429
+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 "
+"crossref:makefiles[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 ""
+"Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, "
+"объединяются с `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в виде "
+"`${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что "
+"это соответствует нашим crossref:makefiles[porting-pkgname,рекомендациям по "
+"именованию пакетов]. В частности, использование дефиса (`-`) в `PORTVERSION` "
+"_не_ допускается. Кроме того, если имя пакета содержит часть _language-_ или "
+"_-compiled.specifics_ (см. ниже), используйте `PKGNAMEPREFIX` и "
+"`PKGNAMESUFFIX` соответственно. Не включайте их в `PORTNAME`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:431
+#, no-wrap
+msgid "Package Naming Conventions"
+msgstr "Соглашения о наименовании пакетов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:435
+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:437
+msgid ""
+"Package names take the form of [.filename]#language_region-name-"
+"compiled.specifics-version.numbers#."
+msgstr ""
+"Имена пакетов имеют формат [.filename]#language_region-name-"
+"compiled.specifics-version.numbers#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:440
+msgid ""
+"The package name is defined as `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-$"
+"{PORTVERSION}`. Make sure to set the variables to conform to that format."
+msgstr ""
+"Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-$"
+"{PORTVERSION}`. Убедитесь, что переменные заданы в соответствии с этим "
+"форматом."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:442
+#, no-wrap
+msgid "[.filename]#language_region-#"
+msgstr "[.filename]#language_region-#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:446
+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 ""
+"FreeBSD стремится поддерживать родной язык своих пользователей. Часть "
+"_language-_ представляет собой двухбуквенное сокращение естественного языка, "
+"определённое стандартом ISO-639, когда порт относится к определённому "
+"языку. Примерами являются `ja` для японского, `ru` для русского, `vi` для "
+"вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:449
+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 ""
+"Если порт относится к определённому региону в языковой зоне, добавьте также "
+"двухбуквенный код страны. Например, `en_US` для американского английского и "
+"`fr_CH` для швейцарского французского."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:451
+msgid "The _language-_ part is set in `PKGNAMEPREFIX`."
+msgstr "Часть _language-_ задается в `PKGNAMEPREFIX`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:453
+#, no-wrap
+msgid "[.filename]#name#"
+msgstr "[.filename]#name#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:458
+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 ""
+"Убедитесь, что название порта и его версия четко разделены и указаны в "
+"`PORTNAME` и `DISTVERSION`. Единственная причина, по которой `PORTNAME` "
+"может содержать часть версии, — это если вышестоящее распространяемое ПО "
+"действительно так названо, как в портах package:textproc/libxml2[] или "
+"package:japanese/kinput2-freewnn[]. В противном случае `PORTNAME` не может "
+"содержать информацию о версии. Довольно нормально, когда несколько портов "
+"имеют одинаковый `PORTNAME`, как это делают порты package:www/apache*[]; в "
+"таком случае разные версии (и разные записи в индексе) различаются "
+"значениями `PKGNAMEPREFIX` и `PKGNAMESUFFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:461
+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 ""
+"Существует традиция называть модули `Perl 5`, добавляя префикс `p5-` и "
+"заменя разделитель в виде двойного двоеточия на дефис. Например, модуль "
+"`Data::Dumper` становится `p5-Data-Dumper`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:462
+#, no-wrap
+msgid "[.filename]#-compiled.specifics#"
+msgstr "[.filename]#-compiled.specifics#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:467
+msgid ""
+"If the port can be built with different crossref:makefiles[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 ""
+"Если порт может быть собран с различными crossref:makefiles[makefile-"
+"masterdir,жестко заданными значениями по умолчанию] (обычно это часть имени "
+"каталога в семействе портов), часть _-compiled.specifics_ указывает "
+"скомпилированные значения по умолчанию. Дефис является необязательным. "
+"Примерами могут служить размер бумаги и единицы измерения шрифтов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:469
+msgid "The _-compiled.specifics_ part is set in `PKGNAMESUFFIX`."
+msgstr "Часть _-compiled.specifics_ задаётся в `PKGNAMESUFFIX`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:471
+#, no-wrap
+msgid "[.filename]#-version.numbers#"
+msgstr "[.filename]#-version.numbers#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:477
+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 ""
+"Строка версии следует после тире (`-`) и представляет собой разделённый "
+"точками список целых чисел и строчных букв латинского алфавита. В частности, "
+"не допускается использование дополнительных тире внутри строки версии. "
+"Единственное исключение — строка `pl` (означающая \"уровень исправления\"), "
+"которую можно использовать _только_ в случае отсутствия у программного "
+"обеспечения номеров основной и дополнительной версий. Если в версии "
+"программного обеспечения встречаются строки типа \"alpha\", \"beta\", \"rc\" "
+"или \"pre\", следует взять первую букву и поместить её сразу после точки. "
+"Если после таких названий строка версии продолжается, числа следуют за "
+"буквой без дополнительной точки между ними (например, `1.0b2`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:481
+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 ""
+"Идея заключается в упрощении сортировки портов за счёт анализа строки "
+"версии. В частности, необходимо убедиться, что компоненты номера версии "
+"всегда разделены точкой, а если дата является частью строки, использовать "
+"формат `d__yyyy.mm.dd__`, а не `_dd.mm.yyyy_` или не соответствующий "
+"стандарту Y2K формат `_yy.mm.dd_`. Важно добавлять перед версией букву, в "
+"данном случае `d` (от слова \"дата\"), на случай, если будет выпущена версия "
+"с фактическим номером, который численно окажется меньше `_yyyy_`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:487
+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 "
+"crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` or "
+"`PKGNAMESUFFIX`]."
+msgstr ""
+"Название пакета должно быть уникальным среди всех портов в дереве. "
+"Убедитесь, что порт с таким же `PORTNAME` ещё не существует, и если он есть, "
+"добавьте один из crossref:makefiles[porting-pkgnameprefix-"
+"suffix,`PKGNAMEPREFIX` или `PKGNAMESUFFIX`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:490
+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 ""
+"Вот несколько (реальных) примеров преобразования названия, указанного "
+"авторами программного обеспечения, в подходящее имя пакета. В каждой строке "
+"указана только одна из переменных `DISTVERSION` или `PORTVERSION`, в "
+"зависимости от того, какая используется в [.filename]#Makefile# порта:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:491
+#, no-wrap
+msgid "Package Naming Examples"
+msgstr "Примеры наименования пакетов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:495
+#, no-wrap
+msgid "Distribution Name"
+msgstr "Имя дистрибутива"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:496
+#, no-wrap
+msgid "PKGNAMEPREFIX"
+msgstr "PKGNAMEPREFIX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:497
+#, no-wrap
+msgid "PORTNAME"
+msgstr "PORTNAME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:498
+#, no-wrap
+msgid "PKGNAMESUFFIX"
+msgstr "PKGNAMESUFFIX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:502
+#, no-wrap
+msgid "Reason or comment"
+msgstr "Причина или комментарий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:503
+#, no-wrap
+msgid "mule-2.2.2"
+msgstr "mule-2.2.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:504
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:506
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:512
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:520
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:522
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:528
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:530
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:536
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:538
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:544
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:546
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:552
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:554
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:560
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:562
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:568
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:570
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:576
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:578
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:586
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:592
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:600
+#, no-wrap
+msgid "(empty)"
+msgstr "(пусто)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:505
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:513
+#, no-wrap
+msgid "mule"
+msgstr "mule"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:507
+#, no-wrap
+msgid "2.2.2"
+msgstr "2.2.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:510
+#, no-wrap
+msgid "No changes required"
+msgstr "Никаких изменений не требуется"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:511
+#, no-wrap
+msgid "mule-1.0.1"
+msgstr "mule-1.0.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:514
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:515
+#, no-wrap
+msgid "1.0.1"
+msgstr "1.0.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:518
+#, no-wrap
+msgid "This is version 1 of mule, and version 2 already exists"
+msgstr "Это версия 1 mule, а версия 2 уже существует"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:519
+#, no-wrap
+msgid "EmiClock-1.0.2"
+msgstr "EmiClock-1.0.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:521
+#, no-wrap
+msgid "emiclock"
+msgstr "emiclock"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:523
+#, no-wrap
+msgid "1.0.2"
+msgstr "1.0.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:526
+#, no-wrap
+msgid "No uppercase names for single programs"
+msgstr "Нет имен в верхнем регистре для отдельных программ"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:527
+#, no-wrap
+msgid "rdist-1.3alpha"
+msgstr "rdist-1.3alpha"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:529
+#, no-wrap
+msgid "rdist"
+msgstr "rdist"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:531
+#, no-wrap
+msgid "1.3alpha"
+msgstr "1.3alpha"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:534
+#, no-wrap
+msgid "Version will be `1.3.a`"
+msgstr "Версия будет `1.3.a`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:535
+#, no-wrap
+msgid "es-0.9-beta1"
+msgstr "es-0.9-beta1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:537
+#, no-wrap
+msgid "es"
+msgstr "es"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:539
+#, no-wrap
+msgid "0.9-beta1"
+msgstr "0.9-beta1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:542
+#, no-wrap
+msgid "Version will be `0.9.b1`"
+msgstr "Версия будет `0.9.b1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:543
+#, no-wrap
+msgid "mailman-2.0rc3"
+msgstr "mailman-2.0rc3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:545
+#, no-wrap
+msgid "mailman"
+msgstr "mailman"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:547
+#, no-wrap
+msgid "2.0rc3"
+msgstr "2.0rc3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:550
+#, no-wrap
+msgid "Version will be `2.0.r3`"
+msgstr "Версия будет `2.0.r3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:551
+#, no-wrap
+msgid "v3.3beta021.src"
+msgstr "v3.3beta021.src"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:553
+#, no-wrap
+msgid "tiff"
+msgstr "tiff"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:556
+#, no-wrap
+msgid "3.3"
+msgstr "3.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:558
+#, no-wrap
+msgid "What the heck was that anyway?"
+msgstr "Что это вообще было?"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:559
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:561
+#, no-wrap
+msgid "tvtwm"
+msgstr "tvtwm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:564
+#, no-wrap
+msgid "p11"
+msgstr "p11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:566
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:574
+#, 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:567
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:569
+#, no-wrap
+msgid "piewm"
+msgstr "piewm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:571
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:603
+#, no-wrap
+msgid "1.0"
+msgstr "1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:575
+#, no-wrap
+msgid "xvgr-2.10pl1"
+msgstr "xvgr-2.10pl1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:577
+#, no-wrap
+msgid "xvgr"
+msgstr "xvgr"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:580
+#, no-wrap
+msgid "2.10.pl1"
+msgstr "2.10.pl1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:582
+#, no-wrap
+msgid "In that case, `pl1` means patch level, so using DISTVERSION is not possible."
+msgstr "В таком случае, `pl1` означает уровень патча, поэтому использование DISTVERSION невозможно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:583
+#, no-wrap
+msgid "gawk-2.15.6"
+msgstr "gawk-2.15.6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:584
+#, no-wrap
+msgid "ja-"
+msgstr "ja-"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:585
+#, no-wrap
+msgid "gawk"
+msgstr "gawk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:587
+#, no-wrap
+msgid "2.15.6"
+msgstr "2.15.6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:590
+#, no-wrap
+msgid "Japanese language version"
+msgstr "Японская языковая версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:591
+#, no-wrap
+msgid "psutils-1.13"
+msgstr "psutils-1.13"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:593
+#, no-wrap
+msgid "psutils"
+msgstr "psutils"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:594
+#, no-wrap
+msgid "-letter"
+msgstr "-letter"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:595
+#, no-wrap
+msgid "1.13"
+msgstr "1.13"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:598
+#, no-wrap
+msgid "Paper size hardcoded at package build time"
+msgstr "Размер бумаги жестко задан во время сборки пакета"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:599
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:601
+#, no-wrap
+msgid "pkfonts"
+msgstr "pkfonts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:602
+#, no-wrap
+msgid "300"
+msgstr "300"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:605
+#, no-wrap
+msgid "Package for 300dpi fonts"
+msgstr "Пакет для шрифтов с разрешением 300dpi"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:609
+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 ""
+"Если в исходном источнике полностью отсутствует информация о версии и "
+"маловероятно, что автор когда-либо выпустит новую версию, просто укажите "
+"строку версии как `1.0` (как в примере с `piewm` выше). В противном случае, "
+"спросите автора или используйте дату выпуска исходного файла в формате "
+"`d__yyyy.mm.dd__` или `d__yyyymmdd__` в качестве версии."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:614
+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 ""
+"Используйте любую букву. Здесь `d` означает дату, если источник — это "
+"репозиторий Git, часто используется `g` с последующей датой коммита, также "
+"распространено использование `s` для снимка."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:617
+#, no-wrap
+msgid "Categorization"
+msgstr "Категоризация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:620
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4867
+#, no-wrap
+msgid "`CATEGORIES`"
+msgstr "`CATEGORIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:626
+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 crossref:makefiles[porting-categories,current list "
+"of categories] and pick the ones that are suitable for the port."
+msgstr ""
+"При создании пакета он помещается в [.filename]#/usr/ports/packages/All#, и "
+"ссылки на него создаются в одной или нескольких поддиректориях [.filename]#/"
+"usr/ports/packages#. Имена этих поддиректорий задаются переменной "
+"`CATEGORIES`. Это предназначено для облегчения поиска пакетов пользователем "
+"при просмотре большого количества пакетов на FTP-сайте или CDROM. "
+"Пожалуйста, ознакомьтесь с crossref:makefiles[porting-categories,текущим "
+"списком категорий] и выберите подходящие для данного порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:630
+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 "
+"crossref:makefiles[choosing-categories,below] for more discussion about how "
+"to pick the right categories."
+msgstr ""
+"Этот список также определяет, где в дереве портов будет размещён порт. Если "
+"здесь указано несколько категорий, файлы порта должны быть помещены в "
+"подкаталог с названием первой категории. Дополнительные сведения о выборе "
+"подходящих категорий см. в crossref:makefiles[choosing-categories,ниже]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:632
+#, no-wrap
+msgid "Current List of Categories"
+msgstr "Текущий список категорий"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:637
+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:641
+msgid ""
+"For non-virtual categories, there is a one-line description in `COMMENT` in "
+"that subdirectory's [.filename]#Makefile#."
+msgstr ""
+"Для невиртуальных категорий в `COMMENT` в [.filename]#Makefile# "
+"соответствующего подкаталога содержится однострочное описание."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:647
+#, no-wrap
+msgid "Category"
+msgstr "Категория"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:648
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1473
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1882
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:650
+#, no-wrap
+msgid "Notes"
+msgstr "Заметки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:651
+#, no-wrap
+msgid "[.filename]#accessibility#"
+msgstr "[.filename]#accessibility#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:652
+#, no-wrap
+msgid "Ports to help disabled users."
+msgstr "Порты для помощи пользователям с ограниченными возможностями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:655
+#, no-wrap
+msgid "[.filename]#afterstep#`*`"
+msgstr "[.filename]#afterstep#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:656
+#, no-wrap
+msgid "Ports to support the http://www.afterstep.org/[AfterStep] window manager."
+msgstr "Порты для поддержки оконного менеджера http://www.afterstep.org/[AfterStep]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:659
+#, no-wrap
+msgid "[.filename]#arabic#"
+msgstr "[.filename]#arabic#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:660
+#, no-wrap
+msgid "Arabic language support."
+msgstr "Поддержка арабского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:663
+#, no-wrap
+msgid "[.filename]#archivers#"
+msgstr "[.filename]#archivers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:664
+#, no-wrap
+msgid "Archiving tools."
+msgstr "Инструменты для архивирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:667
+#, no-wrap
+msgid "[.filename]#astro#"
+msgstr "[.filename]#astro#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:668
+#, no-wrap
+msgid "Astronomical ports."
+msgstr "Астрономические порты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:671
+#, no-wrap
+msgid "[.filename]#audio#"
+msgstr "[.filename]#audio#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:672
+#, no-wrap
+msgid "Sound support."
+msgstr "Поддержка звука."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:675
+#, no-wrap
+msgid "[.filename]#benchmarks#"
+msgstr "[.filename]#benchmarks#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:676
+#, no-wrap
+msgid "Benchmarking utilities."
+msgstr "Утилиты для тестирования производительности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:679
+#, no-wrap
+msgid "[.filename]#biology#"
+msgstr "[.filename]#biology#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:680
+#, no-wrap
+msgid "Biology-related software."
+msgstr "Программное обеспечение, связанное с биологией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:683
+#, no-wrap
+msgid "[.filename]#cad#"
+msgstr "[.filename]#cad#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:684
+#, no-wrap
+msgid "Computer aided design tools."
+msgstr "Компьютерные средства автоматизированного проектирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:687
+#, no-wrap
+msgid "[.filename]#chinese#"
+msgstr "[.filename]#chinese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:688
+#, no-wrap
+msgid "Chinese language support."
+msgstr "Поддержка китайского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:691
+#, no-wrap
+msgid "[.filename]#comms#"
+msgstr "[.filename]#comms#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:692
+#, no-wrap
+msgid "Communication software."
+msgstr "Программное обеспечение для связи."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:694
+#, no-wrap
+msgid "Mostly software to talk to the serial port."
+msgstr "В основном программное обеспечение для работы с последовательным портом."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:695
+#, no-wrap
+msgid "[.filename]#converters#"
+msgstr "[.filename]#converters#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:696
+#, no-wrap
+msgid "Character code converters."
+msgstr "Преобразователи символьных кодировок."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:699
+#, no-wrap
+msgid "[.filename]#databases#"
+msgstr "[.filename]#databases#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:700
+#, no-wrap
+msgid "Databases."
+msgstr "Базы данных."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:703
+#, no-wrap
+msgid "[.filename]#deskutils#"
+msgstr "[.filename]#deskutils#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:704
+#, 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:707
+#, no-wrap
+msgid "[.filename]#devel#"
+msgstr "[.filename]#devel#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:708
+#, no-wrap
+msgid "Development utilities."
+msgstr "Средства разработки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:710
+#, 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:711
+#, no-wrap
+msgid "[.filename]#dns#"
+msgstr "[.filename]#dns#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:712
+#, no-wrap
+msgid "DNS-related software."
+msgstr "Программное обеспечение, связанное с DNS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:715
+#, no-wrap
+msgid "[.filename]#docs#`*`"
+msgstr "[.filename]#docs#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:716
+#, no-wrap
+msgid "Meta-ports for FreeBSD documentation."
+msgstr "Мета-порты для документации FreeBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:719
+#, no-wrap
+msgid "[.filename]#editors#"
+msgstr "[.filename]#editors#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:720
+#, no-wrap
+msgid "General editors."
+msgstr "Общие редакторы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:722
+#, 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 "Специализированные редакторы помещаются в раздел соответствующих инструментов. Например, редактор математических формул будет помещён в [.filename]#math#, а [.filename]#editors# будет для него второй категорией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:723
+#, no-wrap
+msgid "[.filename]#education#`*`"
+msgstr "[.filename]#education#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:724
+#, no-wrap
+msgid "Education-related software."
+msgstr "Программное обеспечение для образования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:726
+#, 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:727
+#, no-wrap
+msgid "[.filename]#elisp#`*`"
+msgstr "[.filename]#elisp#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:728
+#, no-wrap
+msgid "Emacs-lisp ports."
+msgstr "Порты Emacs-lisp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:731
+#, no-wrap
+msgid "[.filename]#emulators#"
+msgstr "[.filename]#emulators#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:732
+#, no-wrap
+msgid "Emulators for other operating systems."
+msgstr "Эмуляторы других операционных систем."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:734
+#, 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 "Терминальные эмуляторы _не_ относятся сюда. Основанные на X идут в [.filename]#x11#, а текстовые — либо в [.filename]#comms#, либо в [.filename]#misc#, в зависимости от конкретной функциональности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:735
+#, no-wrap
+msgid "[.filename]#enlightenment#`*`"
+msgstr "[.filename]#enlightenment#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:736
+#, no-wrap
+msgid "Ports related to the Enlightenment window manager."
+msgstr "Порты, связанные с оконным менеджером Enlightenment."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:739
+#, no-wrap
+msgid "[.filename]#filesystems#"
+msgstr "[.filename]#filesystems#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:740
+#, no-wrap
+msgid "File systems and related utilities."
+msgstr "Файловые системы и связанные утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:743
+#, no-wrap
+msgid "[.filename]#finance#"
+msgstr "[.filename]#finance#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:744
+#, no-wrap
+msgid "Monetary, financial and related applications."
+msgstr "Монетарные, финансовые и связанные с ними приложения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:747
+#, no-wrap
+msgid "[.filename]#french#"
+msgstr "[.filename]#french#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:748
+#, no-wrap
+msgid "French language support."
+msgstr "Поддержка французского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:751
+#, no-wrap
+msgid "[.filename]#ftp#"
+msgstr "[.filename]#ftp#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:752
+#, no-wrap
+msgid "FTP client and server utilities."
+msgstr "Клиентские и серверные утилиты FTP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:754
+#, no-wrap
+msgid "If the port speaks both FTP and HTTP, put it in [.filename]#ftp# with a secondary category of [.filename]#www#."
+msgstr "Если порт поддерживает как FTP, так и HTTP, поместите его в [.filename]#ftp# с дополнительной категорией [.filename]#www#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:755
+#, no-wrap
+msgid "[.filename]#games#"
+msgstr "[.filename]#games#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:756
+#, no-wrap
+msgid "Games."
+msgstr "Игры."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:759
+#, no-wrap
+msgid "[.filename]#geography#`*`"
+msgstr "[.filename]#география#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:760
+#, no-wrap
+msgid "Geography-related software."
+msgstr "Программное обеспечение, связанное с географией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:763
+#, no-wrap
+msgid "[.filename]#german#"
+msgstr "[.filename]#german#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:764
+#, no-wrap
+msgid "German language support."
+msgstr "Поддержка немецкого языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:767
+#, no-wrap
+msgid "[.filename]#gnome#`*`"
+msgstr "[.filename]#gnome#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:768
+#, no-wrap
+msgid "Ports from the https://www.gnome.org/[GNOME] Project."
+msgstr "Порты из проекта https://www.gnome.org/[GNOME]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:771
+#, no-wrap
+msgid "[.filename]#gnustep#`*`"
+msgstr "[.filename]#gnustep#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:772
+#, no-wrap
+msgid "Software related to the GNUstep desktop environment."
+msgstr "Программное обеспечение, связанное со средой рабочего стола GNUstep."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:775
+#, no-wrap
+msgid "[.filename]#graphics#"
+msgstr "[.filename]#graphics#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:776
+#, no-wrap
+msgid "Graphics utilities."
+msgstr "Графические утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:779
+#, no-wrap
+msgid "[.filename]#hamradio#`*`"
+msgstr "[.filename]#hamradio#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:780
+#, no-wrap
+msgid "Software for amateur radio."
+msgstr "Программное обеспечение для радиолюбителей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:783
+#, no-wrap
+msgid "[.filename]#haskell#`*`"
+msgstr "[.filename]#haskell#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:784
+#, no-wrap
+msgid "Software related to the Haskell language."
+msgstr "Программное обеспечение, связанное с языком Haskell."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:787
+#, no-wrap
+msgid "[.filename]#hebrew#"
+msgstr "[.filename]#hebrew#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:788
+#, no-wrap
+msgid "Hebrew language support."
+msgstr "Поддержка иврита."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:791
+#, no-wrap
+msgid "[.filename]#hungarian#"
+msgstr "[.filename]#hungarian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:792
+#, no-wrap
+msgid "Hungarian language support."
+msgstr "Венгерская языковая поддержка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:795
+#, no-wrap
+msgid "[.filename]#irc#"
+msgstr "[.filename]#irc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:796
+#, no-wrap
+msgid "Internet Relay Chat utilities."
+msgstr "Утилиты Internet Relay Chat."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:799
+#, no-wrap
+msgid "[.filename]#japanese#"
+msgstr "[.filename]#japanese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:800
+#, no-wrap
+msgid "Japanese language support."
+msgstr "Поддержка японского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:803
+#, no-wrap
+msgid "[.filename]#java#"
+msgstr "[.filename]#java#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:804
+#, no-wrap
+msgid "Software related to the Java(TM) language."
+msgstr "Программное обеспечение, связанное с языком Java(TM)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:806
+#, 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 "Категория [.filename]#java# не должна быть единственной для порта. За исключением портов, непосредственно связанных с языком Java, разработчикам также рекомендуется не использовать [.filename]#java# в качестве основной категории для порта."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:807
+#, no-wrap
+msgid "[.filename]#kde#`*`"
+msgstr "[.filename]#kde#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:808
+#, no-wrap
+msgid "Ports from the https://www.kde.org/[KDE] Project (generic)."
+msgstr "Порты проекта https://www.kde.org/[KDE] (общие)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:811
+#, no-wrap
+msgid "[.filename]#kde-applications#`*`"
+msgstr "[.filename]#kde-приложения#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:812
+#, no-wrap
+msgid "Applications from the https://www.kde.org/[KDE] Project."
+msgstr "Приложения от проекта https://www.kde.org/[KDE]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:815
+#, no-wrap
+msgid "[.filename]#kde-frameworks#`*`"
+msgstr "[.filename]#kde-frameworks#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:816
+#, no-wrap
+msgid "Add-on libraries from the https://www.kde.org/[KDE] Project for programming with Qt."
+msgstr "Дополнительные библиотеки от проекта https://www.kde.org/[KDE] для программирования с использованием Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:819
+#, no-wrap
+msgid "[.filename]#kde-plasma#`*`"
+msgstr "[.filename]#kde-plasma#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:820
+#, no-wrap
+msgid "Desktop from the https://www.kde.org/[KDE] Project."
+msgstr "Рабочий стол от проекта https://www.kde.org/[KDE]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:823
+#, no-wrap
+msgid "[.filename]#kld#`*`"
+msgstr "[.filename]#kld#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:824
+#, no-wrap
+msgid "Kernel loadable modules."
+msgstr "Загружаемые модули ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:827
+#, no-wrap
+msgid "[.filename]#korean#"
+msgstr "[.filename]#korean#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:828
+#, no-wrap
+msgid "Korean language support."
+msgstr "Поддержка корейского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:831
+#, no-wrap
+msgid "[.filename]#lang#"
+msgstr "[.filename]#lang#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:832
+#, no-wrap
+msgid "Programming languages."
+msgstr "Языки программирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:835
+#, no-wrap
+msgid "[.filename]#linux#`*`"
+msgstr "[.filename]#linux#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:836
+#, no-wrap
+msgid "Linux applications and support utilities."
+msgstr "Приложения и вспомогательные утилиты Linux."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:839
+#, no-wrap
+msgid "[.filename]#lisp#`*`"
+msgstr "[.filename]#lisp#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:840
+#, no-wrap
+msgid "Software related to the Lisp language."
+msgstr "Программное обеспечение, связанное с языком Lisp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:843
+#, no-wrap
+msgid "[.filename]#mail#"
+msgstr "[.filename]#mail#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:844
+#, no-wrap
+msgid "Mail software."
+msgstr "Почтовое программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:847
+#, no-wrap
+msgid "[.filename]#mate#`*`"
+msgstr "[.filename]#mate#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:848
+#, no-wrap
+msgid "Ports related to the MATE desktop environment, a fork of GNOME 2."
+msgstr "Порты, связанные с окружением рабочего стола MATE, форком GNOME 2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:851
+#, no-wrap
+msgid "[.filename]#math#"
+msgstr "[.filename]#math#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:852
+#, no-wrap
+msgid "Numerical computation software and other utilities for mathematics."
+msgstr "Численные расчеты и другие математические утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:855
+#, no-wrap
+msgid "[.filename]#mbone#`*`"
+msgstr "[.filename]#mbone#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:856
+#, no-wrap
+msgid "MBone applications."
+msgstr "Приложения MBone."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:859
+#, no-wrap
+msgid "[.filename]#misc#"
+msgstr "[.filename]#misc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:860
+#, no-wrap
+msgid "Miscellaneous utilities"
+msgstr "Различные утилиты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:862
+#, 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 "Вещи, которые не подходят никуда больше. По возможности, попытайтесь найти для порта категорию лучше, чем `misc`, так как порты здесь часто остаются без внимания."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:863
+#, no-wrap
+msgid "[.filename]#multimedia#"
+msgstr "[.filename]#multimedia#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:864
+#, no-wrap
+msgid "Multimedia software."
+msgstr "Мультимедийное программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:867
+#, no-wrap
+msgid "[.filename]#net#"
+msgstr "[.filename]#net#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:868
+#, no-wrap
+msgid "Miscellaneous networking software."
+msgstr "Различное сетевое программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:871
+#, no-wrap
+msgid "[.filename]#net-im#"
+msgstr "[.filename]#net-im#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:872
+#, no-wrap
+msgid "Instant messaging software."
+msgstr "Программное обеспечение для обмена мгновенными сообщениями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:875
+#, no-wrap
+msgid "[.filename]#net-mgmt#"
+msgstr "[.filename]#net-mgmt#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:876
+#, no-wrap
+msgid "Networking management software."
+msgstr "Программное обеспечение для управления сетями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:879
+#, no-wrap
+msgid "[.filename]#net-p2p#"
+msgstr "[.filename]#net-p2p#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:880
+#, no-wrap
+msgid "Peer to peer network applications."
+msgstr "Одноранговые сетевые приложения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:883
+#, no-wrap
+msgid "[.filename]#net-vpn#`*`"
+msgstr "[.filename]#сеть-vpn#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:884
+#, no-wrap
+msgid "Virtual Private Network applications."
+msgstr "Виртуальные частные сети."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:887
+#, no-wrap
+msgid "[.filename]#news#"
+msgstr "[.filename]#news#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:888
+#, no-wrap
+msgid "USENET news software."
+msgstr "Программное обеспечение для USENET-новостей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:891
+#, no-wrap
+msgid "[.filename]#parallel#`*`"
+msgstr "[.filename]#parallel#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:892
+#, no-wrap
+msgid "Applications dealing with parallelism in computing."
+msgstr "Приложения, работающие с параллелизмом в вычислениях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:895
+#, no-wrap
+msgid "[.filename]#pear#`*`"
+msgstr "[.filename]#pear#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:896
+#, no-wrap
+msgid "Ports related to the Pear PHP framework."
+msgstr "Порты, связанные с PHP-фреймворком Pear."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:899
+#, no-wrap
+msgid "[.filename]#perl5#`*`"
+msgstr "[.filename]#perl5#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:900
+#, no-wrap
+msgid "Ports that require Perl version 5 to run."
+msgstr "Порты, требующие Perl версии 5 для работы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:903
+#, no-wrap
+msgid "[.filename]#plan9#`*`"
+msgstr "[.filename]#plan9#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:904
+#, no-wrap
+msgid "Various programs from https://9p.io/wiki/plan9/Download/index.html[Plan9]."
+msgstr "Различные программы с https://9p.io/wiki/plan9/Download/index.html[Plan9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:907
+#, no-wrap
+msgid "[.filename]#polish#"
+msgstr "[.filename]#polish#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:908
+#, no-wrap
+msgid "Polish language support."
+msgstr "Поддержка польского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:911
+#, no-wrap
+msgid "[.filename]#ports-mgmt#"
+msgstr "[.filename]#ports-mgmt#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:912
+#, no-wrap
+msgid "Ports for managing, installing and developing FreeBSD ports and packages."
+msgstr "Порты для управления, установки и разработки портов и пакетов FreeBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:915
+#, no-wrap
+msgid "[.filename]#portuguese#"
+msgstr "[.filename]#portuguese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:916
+#, no-wrap
+msgid "Portuguese language support."
+msgstr "Поддержка португальского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:919
+#, no-wrap
+msgid "[.filename]#print#"
+msgstr "[.filename]#print#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:920
+#, no-wrap
+msgid "Printing software."
+msgstr "Программное обеспечение для печати."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:922
+#, no-wrap
+msgid "Desktop publishing tools (previewers, etc.) belong here too."
+msgstr "Инструменты для настольных издательских систем (превьюеры и т. д.) также относятся сюда."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:923
+#, no-wrap
+msgid "[.filename]#python#`*`"
+msgstr "[.filename]#python#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:924
+#, no-wrap
+msgid "Software related to the https://www.python.org/[Python] language."
+msgstr "Программное обеспечение, связанное с языком https://www.python.org/[Python]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:927
+#, no-wrap
+msgid "[.filename]#ruby#`*`"
+msgstr "[.filename]#ruby#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:928
+#, no-wrap
+msgid "Software related to the https://www.ruby-lang.org/[Ruby] language."
+msgstr "Программное обеспечение, связанное с языком https://www.ruby-lang.org/[Ruby]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:931
+#, no-wrap
+msgid "[.filename]#rubygems#`*`"
+msgstr "[.filename]#rubygems#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:932
+#, no-wrap
+msgid "Ports of https://www.rubygems.org/[RubyGems] packages."
+msgstr "Порты пакетов https://www.rubygems.org/[RubyGems]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:935
+#, no-wrap
+msgid "[.filename]#russian#"
+msgstr "[.filename]#russian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:936
+#, no-wrap
+msgid "Russian language support."
+msgstr "Поддержка русского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:939
+#, no-wrap
+msgid "[.filename]#scheme#`*`"
+msgstr "[.filename]#scheme#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:940
+#, no-wrap
+msgid "Software related to the Scheme language."
+msgstr "Программное обеспечение, связанное с языком Scheme."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:943
+#, no-wrap
+msgid "[.filename]#science#"
+msgstr "[.filename]#science#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:944
+#, no-wrap
+msgid "Scientific ports that do not fit into other categories such as [.filename]#astro#, [.filename]#biology# and [.filename]#math#."
+msgstr "Научные порты, которые не входят в другие категории, такие как [.filename]#astro#, [.filename]#biology# и [.filename]#math#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:947
+#, no-wrap
+msgid "[.filename]#security#"
+msgstr "[.filename]#security#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:948
+#, no-wrap
+msgid "Security utilities."
+msgstr "Средства обеспечения безопасности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:951
+#, no-wrap
+msgid "[.filename]#shells#"
+msgstr "[.filename]#shells#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:952
+#, no-wrap
+msgid "Command line shells."
+msgstr "Командные оболочки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:955
+#, no-wrap
+msgid "[.filename]#spanish#`*`"
+msgstr "[.filename]#spanish#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:956
+#, no-wrap
+msgid "Spanish language support."
+msgstr "Поддержка испанского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:959
+#, no-wrap
+msgid "[.filename]#sysutils#"
+msgstr "[.filename]#sysutils#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:960
+#, no-wrap
+msgid "System utilities."
+msgstr "Системные утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:963
+#, no-wrap
+msgid "[.filename]#tcl#`*`"
+msgstr "[.filename]#tcl#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:964
+#, no-wrap
+msgid "Ports that use Tcl to run."
+msgstr "Порты, использующие Tcl для запуска."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:967
+#, no-wrap
+msgid "[.filename]#textproc#"
+msgstr "[.filename]#textproc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:968
+#, no-wrap
+msgid "Text processing utilities."
+msgstr "Средства обработки текста."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:970
+#, no-wrap
+msgid "It does not include desktop publishing tools, which go to [.filename]#print#."
+msgstr "Он не включает инструменты для настольных издательских систем, которые помещаются в [.filename]#print#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:971
+#, no-wrap
+msgid "[.filename]#tk#`*`"
+msgstr "[.filename]#tk#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:972
+#, no-wrap
+msgid "Ports that use Tk to run."
+msgstr "Порты, использующие Tk для работы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:975
+#, no-wrap
+msgid "[.filename]#ukrainian#"
+msgstr "[.filename]#ukrainian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:976
+#, no-wrap
+msgid "Ukrainian language support."
+msgstr "Поддержка украинского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:979
+#, no-wrap
+msgid "[.filename]#vietnamese#"
+msgstr "[.filename]#vietnamese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:980
+#, no-wrap
+msgid "Vietnamese language support."
+msgstr "Поддержка вьетнамского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:983
+#, no-wrap
+msgid "[.filename]#wayland#`*`"
+msgstr "[.filename]#wayland#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:984
+#, no-wrap
+msgid "Ports to support the Wayland display server."
+msgstr "Порты для поддержки сервера дисплея Wayland."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:987
+#, no-wrap
+msgid "[.filename]#windowmaker#`*`"
+msgstr "[.filename]#windowmaker#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:988
+#, no-wrap
+msgid "Ports to support the Window Maker window manager."
+msgstr "Порты для поддержки оконного менеджера Window Maker."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:991
+#, no-wrap
+msgid "[.filename]#www#"
+msgstr "[.filename]#www#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:992
+#, no-wrap
+msgid "Software related to the World Wide Web."
+msgstr "Программное обеспечение, связанное с Всемирной паутиной."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:994
+#, no-wrap
+msgid "HTML language support belongs here too."
+msgstr "Поддержка языка HTML также относится сюда."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:995
+#, no-wrap
+msgid "[.filename]#x11#"
+msgstr "[.filename]#x11#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:996
+#, no-wrap
+msgid "The X Window System and friends."
+msgstr "Система X Window и связанные компоненты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:998
+#, 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 "Эта категория предназначена только для программного обеспечения, которое напрямую поддерживает оконную систему. Не помещайте сюда обычные X-приложения. Большинство из них относятся к другим категориям [.filename]#x11-*# (см. ниже)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:999
+#, no-wrap
+msgid "[.filename]#x11-clocks#"
+msgstr "[.filename]#x11-clocks#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1000
+#, no-wrap
+msgid "X11 clocks."
+msgstr "Часы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1003
+#, no-wrap
+msgid "[.filename]#x11-drivers#"
+msgstr "[.filename]#x11-drivers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1004
+#, no-wrap
+msgid "X11 drivers."
+msgstr "Драйверы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1007
+#, no-wrap
+msgid "[.filename]#x11-fm#"
+msgstr "[.filename]#x11-fm#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1008
+#, no-wrap
+msgid "X11 file managers."
+msgstr "Менеджеры файлов X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1011
+#, no-wrap
+msgid "[.filename]#x11-fonts#"
+msgstr "[.filename]#x11-fonts#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1012
+#, no-wrap
+msgid "X11 fonts and font utilities."
+msgstr "Шрифты и утилиты для работы со шрифтами в X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1015
+#, no-wrap
+msgid "[.filename]#x11-servers#"
+msgstr "[.filename]#x11-servers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1016
+#, no-wrap
+msgid "X11 servers."
+msgstr "Серверы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1019
+#, no-wrap
+msgid "[.filename]#x11-themes#"
+msgstr "[.filename]#x11-themes#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1020
+#, no-wrap
+msgid "X11 themes."
+msgstr "Темы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1023
+#, no-wrap
+msgid "[.filename]#x11-toolkits#"
+msgstr "[.filename]#x11-toolkits#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1024
+#, no-wrap
+msgid "X11 toolkits."
+msgstr "Инструментарии X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1027
+#, no-wrap
+msgid "[.filename]#x11-wm#"
+msgstr "[.filename]#x11-wm#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1028
+#, no-wrap
+msgid "X11 window managers."
+msgstr "Оконные менеджеры X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1031
+#, no-wrap
+msgid "[.filename]#xfce#`*`"
+msgstr "[.filename]#xfce#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1032
+#, no-wrap
+msgid "Ports related to the https://www.xfce.org/[Xfce] desktop environment."
+msgstr "Порты, связанные с окружением рабочего стола https://www.xfce.org/[Xfce]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1035
+#, no-wrap
+msgid "[.filename]#zope#`*`"
+msgstr "[.filename]#zope#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1036
+#, no-wrap
+msgid "https://www.zope.org/[Zope] support."
+msgstr "https://www.zope.org/[Zope] поддержка."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1040
+#, no-wrap
+msgid "Choosing the Right Category"
+msgstr "Выбор подходящей категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1045
+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:1048
+msgid ""
+"The first category must be a physical category (see "
+"crossref:makefiles[porting-categories,above]). This is necessary to make the "
+"packaging work. Virtual categories and physical categories may be intermixed "
+"after that."
+msgstr ""
+"Первая категория должна быть физической (см. crossref:makefiles[porting-"
+"categories,выше]). Это необходимо для работы упаковки. Виртуальные категории "
+"и физические категории могут чередоваться после этого."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1049
+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 ""
+"Языковые категории всегда указываются первыми. Например, если порт "
+"устанавливает японские шрифты для X11, то строка `CATEGORIES` будет "
+"выглядеть так: [.filename]#japanese x11-fonts#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1050
+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 ""
+"Конкретные категории перечислены перед менее специфичными. Например, HTML-"
+"редактор указывается как [.filename]#www editors#, а не наоборот. Также не "
+"следует указывать [.filename]#net#, если порт принадлежит к любой из "
+"категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, "
+"[.filename]#security# или [.filename]#www#, так как [.filename]#net# "
+"подразумевается автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1051
+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 ""
+"[.filename]#x11# используется как вторичная категория только в случае, когда "
+"основной категорией указан естественный язык. В частности, не указывайте "
+"[.filename]#x11# в строке категории для X-приложений."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1052
+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 ""
+"Режимы Emacs размещаются в той же категории портов, что и приложение, "
+"поддерживаемое данным режимом, а не в [.filename]#editors#. Например, режим "
+"Emacs для редактирования исходных файлов какого-либо языка программирования "
+"попадает в [.filename]#lang#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1053
+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 ""
+"Порты, устанавливающие загружаемые модули ядра, также имеют виртуальную "
+"категорию [.filename]#kld# в строке `CATEGORIES`. Это одна из вещей, "
+"автоматически обрабатываемых при добавлении `USES=kmod`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1054
+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 ""
+"[.filename]#misc# не встречается вместе с другими невиртуальными "
+"категориями. Если `misc` указан вместе с чем-то еще в `CATEGORIES`, это "
+"означает, что `misc` можно безопасно удалить, а порт разместить только в "
+"другом подкаталоге."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1055
+msgid ""
+"If the port truly does not belong anywhere else, put it in [.filename]#misc#."
+msgstr ""
+"Если порт действительно не подходит никуда больше, поместите его в "
+"[.filename]#misc#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1059
+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 ""
+"Если категория не определена четко, пожалуйста, укажите это в комментарии "
+"при https://bugs.freebsd.org/submit/[отправке порта] в баг-трекере, чтобы мы "
+"могли обсудить её перед импортом. Как коммиттер, отправьте сообщение в "
+"рассылку {freebsd-ports}, чтобы мы сначала обсудили это. Слишком часто новые "
+"порты импортируются в неправильную категорию, после чего их сразу же "
+"приходится перемещать."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1061
+#, no-wrap
+msgid "Proposing a New Category"
+msgstr "Предложение новой категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1066
+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:1068
+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:1072
+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 ""
+"Обоснование этого заключается в том, что такое изменение создает extref:"
+"{committers-guide}[значительный объем работы, ports] как для коммиттеров, "
+"так и для всех пользователей, которые отслеживают изменения в Коллекции "
+"портов. Кроме того, предлагаемые изменения категорий, как правило, вызывают "
+"споры. (Возможно, это связано с отсутствием четкого консенсуса относительно "
+"того, когда категория становится «слишком большой», а также относительно "
+"того, должны ли категории способствовать удобству просмотра (и, "
+"следовательно, какое количество категорий было бы идеальным), и так далее.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1074
+msgid "Here is the procedure:"
+msgstr "Вот процедура:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1077
+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 ""
+"Предложите новую категорию на {freebsd-ports}. Включите подробное "
+"обоснование для новой категории, объясните, почему существующие категории "
+"недостаточны, и укажите список существующих портов, предлагаемых к "
+"перемещению. (Если в Bugzilla есть ожидающие рассмотрения новые порты, "
+"которые подходят под эту категорию, также перечислите их.) Если вы являетесь "
+"сопровождающим и/или подающим предложение, укажите это, так как это может "
+"помочь в рассмотрении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1078
+msgid "Participate in the discussion."
+msgstr "Участвуйте в обсуждении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1079
+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 ""
+"Если кажется, что идея находит поддержку, оформите PR, включающий как "
+"обоснование, так и список существующих портов, которые необходимо "
+"переместить. В идеале, этот PR также должен содержать следующие исправления:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1081
+msgid "[.filename]##Makefile##s for the new ports once they are repocopied"
+msgstr ""
+"[.filename]##Makefile## для новых портов после копирования их репозитория"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1082
+msgid "[.filename]#Makefile# for the new category"
+msgstr "[.filename]#Makefile# для новой категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1083
+msgid "[.filename]#Makefile# for the old ports' categories"
+msgstr "[.filename]#Makefile# для старых категорий портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1084
+msgid "[.filename]##Makefile##s for ports that depend on the old ports"
+msgstr "[.filename]##Makefile## для портов, зависящих от старых портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1085
+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:1087
+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 ""
+"Поскольку это затрагивает инфраструктуру портов и включает перемещение и "
+"исправление многих портов, а также, возможно, проведение регрессионных "
+"тестов на сборочном кластере, назначьте PR для {portmgr}."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1088
+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 ""
+"Если этот PR будет одобрен, коммиттер должен будет выполнить оставшуюся "
+"часть процедуры, extref:{committers-guide}[описанной в Руководстве "
+"коммиттера,ports]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1091
+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 ""
+"Предложение новой виртуальной категории аналогично описанному выше, но "
+"гораздо менее трудоёмко, так как фактически не потребуется перемещать порты. "
+"В этом случае единственные патчи, которые нужно включить в PR, — это "
+"добавление новой категории в `CATEGORIES` затронутых портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1093
+#, no-wrap
+msgid "Proposing Reorganizing All the Categories"
+msgstr "Предложение о реорганизации всех категорий"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1099
+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:1101
+#, no-wrap
+msgid "The Distribution Files"
+msgstr "Файлы дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1104
+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 ""
+"Вторая часть [.filename]#Makefile# описывает файлы, которые необходимо "
+"загрузить для сборки порта, и места, откуда их можно скачать."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1106
+#, no-wrap
+msgid "`DISTNAME`"
+msgstr "`DISTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1113
+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 ""
+"`DISTNAME` — это имя порта, используемое авторами программного обеспечения. "
+"По умолчанию `DISTNAME` имеет значение `${PORTNAME}-${DISTVERSIONPREFIX}$"
+"{DISTVERSION}${DISTVERSIONSUFFIX}`, а если не задано, `DISTVERSION` по "
+"умолчанию принимает значение `${PORTVERSION}`, поэтому переопределяйте "
+"`DISTNAME` только при необходимости. `DISTNAME` используется только в двух "
+"случаях. Во-первых, список файлов дистрибутива (`DISTFILES`) по умолчанию "
+"имеет значение `${DISTNAME}${EXTRACT_SUFX}`. Во-вторых, ожидается, что файл "
+"дистрибутива распакуется в подкаталог с именем `WRKSRC`, который по "
+"умолчанию равен [.filename]#work/${DISTNAME}#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1116
+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 ""
+"Некоторые названия дистрибутивов от поставщиков, которые не соответствуют "
+"схеме `${PORTNAME}-${PORTVERSION}`, могут обрабатываться автоматически путем "
+"установки `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`. "
+"`PORTVERSION` будет автоматически вычисляться из `DISTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1121
+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 ""
+"Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть "
+"установлена одновременно. Если `DISTVERSION` не определяет корректную "
+"`PORTVERSION`, не используйте `DISTVERSION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1125
+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 ""
+"Если схема версий исходного проекта может быть преобразована в схему, "
+"совместимую с портами, установите некоторую переменную в версию исходного "
+"проекта, _не используйте_ имя переменной `DISTVERSION`. Установите "
+"`PORTVERSION` в вычисленную версию на основе созданной вами переменной и "
+"задайте `DISTNAME` соответствующим образом."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1127
+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 ""
+"Если схема версионирования вышестоящего проекта не может быть легко "
+"преобразована в значение, совместимое с портами, установите `PORTVERSION` в "
+"разумное значение и задайте `DISTNAME` как `PORTNAME` с дословной версией "
+"вышестоящего проекта."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1129
+#, no-wrap
+msgid "Deriving `PORTVERSION` Manually"
+msgstr "Получение `PORTVERSION` вручную"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1135
+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 ""
+"BIND9 использует схему версионирования, несовместимую с версиями портов (в "
+"версиях используется `-`), и её нельзя получить с помощью `DISTVERSION`, так "
+"как после выпуска 9.9.9 выходят «уровни исправлений» в формате `9.9.9-P1`. "
+"`DISTVERSION` преобразует это в `9.9.9.p1`, что в схеме версионирования "
+"портов означает 9.9.9 pre-release 1, то есть версию, предшествующую 9.9.9, а "
+"не следующую за ней. Поэтому `PORTVERSION` вручную формируется из переменной "
+"`ISCVERSION`, чтобы получить `9.9.9p1`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1137
+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 ""
+"Порядок, в котором система портов и pkg будут сортировать версии, "
+"проверяется с помощью аргумента `-t` из man:pkg-version[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1144
+#, 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 ""
+"% pkg version -t 9.9.9 9.9.9.p1\n"
+"> <.>\n"
+"% pkg version -t 9.9.9 9.9.9p1\n"
+"< <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1147
+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 ""
+"Знак `>` означает, что первый аргумент, переданный в `-t`, больше второго "
+"аргумента. `9.9.9` находится после `9.9.9.p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1148
+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 ""
+"Знак `<` означает, что первый аргумент, переданный в `-t`, меньше второго "
+"аргумента. `9.9.9` находится перед `9.9.9p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1150
+msgid ""
+"In the port [.filename]#Makefile#, for example package:dns/bind99[], it is "
+"achieved by:"
+msgstr ""
+"В файле [.filename]#Makefile# порта, например package:dns/bind99[], это "
+"достигается с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1159
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1163
+#, 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 ""
+"MAINTAINER=\tmat@FreeBSD.org\n"
+"COMMENT=\tBIND DNS suite with updated DNSSEC and DNS64\n"
+"WWW=\t\thttps://www.isc.org/bind/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1165
+#, no-wrap
+msgid "LICENSE=\tISCL\n"
+msgstr "LICENSE=\tISCL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1168
+#, 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 ""
+"# 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1174
+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 ""
+"Определите версию вышестоящего пакета в `ISCVERSION`, с комментарием, "
+"объясняющим, _почему_ это необходимо. Используйте `ISCVERSION` для получения "
+"совместимого с портами `PORTVERSION`. Используйте `ISCVERSION` напрямую для "
+"получения правильного URL для загрузки файла дистрибутива. Используйте "
+"`ISCVERSION` напрямую для именования дистрибутивного файла."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1177
+#, no-wrap
+msgid "Derive `DISTNAME` from `PORTVERSION`"
+msgstr "Получить `DISTNAME` из `PORTVERSION`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1181
+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:1183
+msgid ""
+"In package:comms/kermit[], only the last element of the version is present "
+"in the distribution file:"
+msgstr ""
+"В пакете package:comms/kermit[], в файле дистрибутива присутствует только "
+"последний элемент версии:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1191
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1195
+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 ""
+"Модификатор `:E` man:make[1] возвращает суффикс переменной, в данном случае "
+"`304`. Файл дистрибутива корректно создаётся как `cku304-dev20.tar.gz`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1198
+#, no-wrap
+msgid "Exotic Case 1"
+msgstr "Экзотический случай 1"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1202
+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:1204
+msgid "From package:audio/libworkman[]:"
+msgstr "Из пакета package:audio/libworkman[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1212
+#, 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 ""
+"PORTNAME= libworkman\n"
+"PORTVERSION= 1.4\n"
+"CATEGORIES= audio\n"
+"MASTER_SITES= LOCAL/jim\n"
+"DISTNAME= ${PORTNAME}-1999-06-20\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1217
+#, no-wrap
+msgid "Exotic Case 2"
+msgstr "Экзотический случай 2"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1222
+msgid ""
+"In package:comms/librs232[], the distribution file is not versioned, so "
+"using crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`] is needed:"
+msgstr ""
+"В пакете package:comms/librs232[] файл дистрибутива не имеет версии, поэтому "
+"необходимо использовать crossref:makefiles[makefile-"
+"dist_subdir,`DIST_SUBDIR`]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1231
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1239
+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 ""
+"`PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на `DISTNAME`. Также обратите "
+"внимание, что если `WRKSRC` равно [.filename]#${WRKDIR}/${DISTNAME}#, а "
+"исходный архив с исходным кодом называется иначе, чем `${PORTNAME}-$"
+"{PORTVERSION}${EXTRACT_SUFX}`, оставьте `DISTNAME` без изменений — "
+"определение только `DISTFILES` проще, чем определение и `DISTNAME`, и "
+"`WRKSRC` (а возможно, и `EXTRACT_SUFX`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1242
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4897
+#, no-wrap
+msgid "`MASTER_SITES`"
+msgstr "`MASTER_SITES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1246
+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 ""
+"Запишите именем каталога из FTP/HTTP-URL, указывающего на исходный tarball, "
+"в `MASTER_SITES`. Не забудьте завершающий слэш ([.filename]#/#)!"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1248
+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 ""
+"Макросы `make` будут пытаться использовать эту спецификацию для загрузки "
+"файла дистрибутива с помощью `FETCH`, если не смогут найти его уже в системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1251
+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:1259
+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 ""
+"`MASTER_SITES` не должен быть пустым. Он должен указывать на реальный сайт, "
+"где размещены файлы дистрибутива. Он не может указывать на веб-архивы или "
+"кэшированные сайты с файлами дистрибутива FreeBSD. Единственное исключение "
+"из этого правила — порты, у которых нет файлов дистрибутива. Например, мета-"
+"порты не имеют файлов дистрибутива, поэтому `MASTER_SITES` не нужно задавать."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1262
+#, no-wrap
+msgid "Using `MASTER_SITE_*` Variables"
+msgstr "Использование переменных `MASTER_SITE_*`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1265
+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 ""
+"Для популярных архивов, таких как SourceForge (`SOURCEFORGE`), GNU (`GNU`) "
+"или Perl CPAN (`PERL_CPAN`), доступны сокращённые обозначения. "
+"`MASTER_SITES` может использовать их напрямую:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1269
+#, no-wrap
+msgid "MASTER_SITES=\tGNU/make\n"
+msgstr "MASTER_SITES=\tGNU/make\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1273
+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:1278
+#, no-wrap
+msgid ""
+"MASTER_SITES=\t\t${MASTER_SITE_GNU}\n"
+"MASTER_SITE_SUBDIR=\tmake\n"
+msgstr ""
+"MASTER_SITES=\t\t${MASTER_SITE_GNU}\n"
+"MASTER_SITE_SUBDIR=\tmake\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1282
+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 ""
+"Эти значения и переменные определены в https://cgit.freebsd.org/ports/tree/"
+"Mk/bsd.sites.mk[Mk/bsd.sites.mk]. Новые записи добавляются часто, поэтому "
+"обязательно проверяйте последнюю версию этого файла перед отправкой порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1287
+msgid ""
+"For any `MASTER_SITE_FOO` variable, the shorthand `_FOO_` can be used. For "
+"example, use:"
+msgstr ""
+"Для любой переменной `MASTER_SITE_FOO` можно использовать сокращение "
+"`_FOO_`. Например, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1291
+#, no-wrap
+msgid "MASTER_SITES=\tFOO\n"
+msgstr "MASTER_SITES=\tFOO\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1294
+msgid "If `MASTER_SITE_SUBDIR` is needed, use this:"
+msgstr "Если требуется `MASTER_SITE_SUBDIR`, используйте следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1298
+#, no-wrap
+msgid "MASTER_SITES=\tFOO/bar\n"
+msgstr "MASTER_SITES=\tFOO/bar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1305
+msgid ""
+"Some `MASTER_SITE_*` names are quite long, and for ease of use, shortcuts "
+"have been defined:"
+msgstr ""
+"Некоторые имена `MASTER_SITE_*` довольно длинные, и для удобства "
+"использования были определены сокращения:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1307
+#, no-wrap
+msgid "Shortcuts for `MASTER_SITE_*` Macros"
+msgstr "Сокращения для макросов `MASTER_SITE_*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1311
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1369
+#, no-wrap
+msgid "Macro"
+msgstr "Макрос"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1313
+#, no-wrap
+msgid "Shortcut"
+msgstr "Сокращение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1314
+#, no-wrap
+msgid "`PERL_CPAN`"
+msgstr "`PERL_CPAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1316
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1387
+#, no-wrap
+msgid "`CPAN`"
+msgstr "`CPAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1317
+#, no-wrap
+msgid "`GITHUB`"
+msgstr "`GITHUB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1319
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1408
+#, no-wrap
+msgid "`GH`"
+msgstr "`GH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1320
+#, no-wrap
+msgid "`GITHUB_CLOUD`"
+msgstr "`GITHUB_CLOUD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1322
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1411
+#, no-wrap
+msgid "`GHC`"
+msgstr "`GHC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1323
+#, no-wrap
+msgid "`LIBREOFFICE_DEV`"
+msgstr "`LIBREOFFICE_DEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1325
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1429
+#, no-wrap
+msgid "`LODEV`"
+msgstr "`LODEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1326
+#, no-wrap
+msgid "`NETLIB`"
+msgstr "`NETLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1328
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1438
+#, no-wrap
+msgid "`NL`"
+msgstr "`NL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1329
+#, no-wrap
+msgid "`RUBYGEMS`"
+msgstr "`RUBYGEMS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1331
+#, no-wrap
+msgid "`RG`"
+msgstr "`RG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1332
+#, no-wrap
+msgid "`SOURCEFORGE`"
+msgstr "`SOURCEFORGE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1333
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1450
+#, no-wrap
+msgid "`SF`"
+msgstr "`SF`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1337
+#, no-wrap
+msgid "Magic MASTER_SITES Macros"
+msgstr "Волшебные макросы MASTER_SITES"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1342
+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 ""
+"Существует несколько \"волшебных\" макросов для популярных сайтов с "
+"предсказуемой структурой каталогов. Для них достаточно использовать "
+"сокращение, и система автоматически выберет подкаталог. Например, для порта "
+"с именем `Stardict`, версии `1.2.3`, размещенного на SourceForge, добавьте "
+"следующую строку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1346
+#, no-wrap
+msgid "MASTER_SITES=\tSF\n"
+msgstr "MASTER_SITES=\tSF\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1350
+msgid ""
+"infers a subdirectory named `/project/stardict/stardict/1.2.3`. If the "
+"inferred directory is incorrect, it can be overridden:"
+msgstr ""
+"подразумевает подкаталог с именем `/project/stardict/stardict/1.2.3`. Если "
+"подразумеваемый каталог указан неверно, его можно переопределить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1354
+#, no-wrap
+msgid "MASTER_SITES=\tSF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr "MASTER_SITES=\tSF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1357
+msgid "This can also be written as"
+msgstr "Это также можно записать как"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1362
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tSF\n"
+"MASTER_SITE_SUBDIR=\tstardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr ""
+"MASTER_SITES=\tSF\n"
+"MASTER_SITE_SUBDIR=\tstardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1365
+#, no-wrap
+msgid "Magic `MASTER_SITES` Macros"
+msgstr "Волшебные макросы `MASTER_SITES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1371
+#, no-wrap
+msgid "Assumed subdirectory"
+msgstr "Предполагаемая поддиректория"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1372
+#, no-wrap
+msgid "`APACHE_COMMONS_BINARIES`"
+msgstr "`APACHE_COMMONS_BINARIES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1374
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1377
+#, no-wrap
+msgid "`${PORTNAME:S,commons-,,}`"
+msgstr "`${PORTNAME:S,commons-,,}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1375
+#, no-wrap
+msgid "`APACHE_COMMONS_SOURCE`"
+msgstr "`APACHE_COMMONS_SOURCE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1378
+#, no-wrap
+msgid "`APACHE_JAKARTA`"
+msgstr "`APACHE_JAKARTA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1380
+#, no-wrap
+msgid "`${PORTNAME:S,-,/,}/source`"
+msgstr "`${PORTNAME:S,-,/,}/source`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1381
+#, no-wrap
+msgid "`BERLIOS`"
+msgstr "`BERLIOS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1383
+#, no-wrap
+msgid "`${PORTNAME:tl}.berlios`"
+msgstr "`${PORTNAME:tl}.berlios`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1384
+#, no-wrap
+msgid "`CHEESESHOP`"
+msgstr "`CHEESESHOP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1386
+#, no-wrap
+msgid "`source/${DISTNAME:C/(.).\\*/\\1/}/${DISTNAME:C/(.*)-[0-9].*/\\1/}`"
+msgstr "`source/${DISTNAME:C/(.).\\*/\\1/}/${DISTNAME:C/(.*)-[0-9].*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1389
+#, no-wrap
+msgid "`${PORTNAME:C/-.*//}`"
+msgstr "`${PORTNAME:C/-.*//}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1390
+#, no-wrap
+msgid "`DEBIAN`"
+msgstr "`DEBIAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1392
+#, no-wrap
+msgid "`pool/main/${PORTNAME:C/^((lib)?.).*$/\\1/}/${PORTNAME}`"
+msgstr "`pool/main/${PORTNAME:C/^((lib)?.).*$/\\1/}/${PORTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1393
+#, no-wrap
+msgid "`FARSIGHT`"
+msgstr "`FARSIGHT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1395
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1419
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1422
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1425
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1428
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1431
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1440
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1446
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1479
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1483
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1892
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1896
+#, no-wrap
+msgid "`${PORTNAME}`"
+msgstr "`${PORTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1396
+#, no-wrap
+msgid "`FESTIVAL`"
+msgstr "`FESTIVAL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1398
+#, no-wrap
+msgid "`${PORTREVISION}`"
+msgstr "`${PORTREVISION}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1399
+#, no-wrap
+msgid "`GCC`"
+msgstr "`GCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1401
+#, no-wrap
+msgid "`releases/${DISTNAME}`"
+msgstr "`releases/${DISTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1402
+#, no-wrap
+msgid "`GENTOO`"
+msgstr "`GENTOO`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1404
+#, no-wrap
+msgid "`distfiles`"
+msgstr "`distfiles`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1405
+#, no-wrap
+msgid "`GIMP`"
+msgstr "`GIMP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1407
+#, no-wrap
+msgid "`${PORTNAME}/${PORTVERSION:R}/`"
+msgstr "`${PORTNAME}/${PORTVERSION:R}/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1410
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`"
+msgstr "`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1413
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/`"
+msgstr "`${GH_ACCOUNT}/${GH_PROJECT}/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1414
+#, no-wrap
+msgid "`GNOME`"
+msgstr "`GNOME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1416
+#, no-wrap
+msgid "`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr "`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1417
+#, no-wrap
+msgid "`GNU`"
+msgstr "`GNU`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1420
+#, no-wrap
+msgid "`GNUPG`"
+msgstr "`GNUPG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1423
+#, no-wrap
+msgid "`GNU_ALPHA`"
+msgstr "`GNU_ALPHA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1426
+#, no-wrap
+msgid "`HORDE`"
+msgstr "`HORDE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1432
+#, no-wrap
+msgid "`MATE`"
+msgstr "`MATE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1434
+#, no-wrap
+msgid "`${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr "`${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1435
+#, no-wrap
+msgid "`MOZDEV`"
+msgstr "`MOZDEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1437
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1449
+#, no-wrap
+msgid "`${PORTNAME:tl}`"
+msgstr "`${PORTNAME:tl}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1441
+#, no-wrap
+msgid "`QT`"
+msgstr "`QT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1443
+#, no-wrap
+msgid "`archive/qt/${PORTVERSION:R}`"
+msgstr "`archive/qt/${PORTVERSION:R}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1444
+#, no-wrap
+msgid "`SAMBA`"
+msgstr "`SAMBA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1447
+#, no-wrap
+msgid "`SAVANNAH`"
+msgstr "`SAVANNAH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1451
+#, no-wrap
+msgid "`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`"
+msgstr "`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1454
+#, no-wrap
+msgid "`USE_GITHUB`"
+msgstr "`USE_GITHUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1458
+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 ""
+"Если файл дистрибутива получен из определённого коммита или тега на https://"
+"github.com/[GitHub], для которого нет официально выпущенного файла, "
+"существует простой способ автоматически установить правильные значения "
+"`DISTNAME` и `MASTER_SITES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1463
+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 ""
+"По состоянию на 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-"
+"future-stability-of-source-code-archives-and-hashes/[GitHub] объявили, что "
+"загрузки исходного кода будут стабильными в течение года. Пожалуйста, "
+"переключитесь на ресурсы выпусков (release assets), а если они недоступны, "
+"запросите их создание у вышестоящих разработчиков."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1466
+msgid "These variables are available:"
+msgstr "Доступны следующие переменные:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1468
+#, no-wrap
+msgid "`USE_GITHUB` Description"
+msgstr "`USE_GITHUB` Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1472
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1881
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3681
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1475
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1884
+#, no-wrap
+msgid "Default"
+msgstr "По умолчанию"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1476
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4879
+#, no-wrap
+msgid "`GH_ACCOUNT`"
+msgstr "`GH_ACCOUNT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1477
+#, no-wrap
+msgid "Account name of the GitHub user hosting the project"
+msgstr "Имя учётной записи пользователя GitHub, который размещает проект"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1480
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4880
+#, no-wrap
+msgid "`GH_PROJECT`"
+msgstr "`GH_PROJECT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1481
+#, no-wrap
+msgid "Name of the project on GitHub"
+msgstr "Название проекта на GitHub"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1484
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4882
+#, no-wrap
+msgid "`GH_TAGNAME`"
+msgstr "`GH_TAGNAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1485
+#, 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 "Имя тега для загрузки (2.0.1, хэш, ...) Использование имени ветки здесь некорректно. Также можно использовать хэш идентификатора коммита для создания снимка состояния."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1487
+#, no-wrap
+msgid "`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`"
+msgstr "`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1488
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4881
+#, no-wrap
+msgid "`GH_SUBDIR`"
+msgstr "`GH_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1491
+#, no-wrap
+msgid ""
+"When the software needs an additional distribution file to be extracted within\n"
+"`${WRKSRC}`, this variable can be used. See the examples in\n"
+"crossref:makefiles[makefile-master_sites-github-multiple, Fetching Multiple Files from GitHub] for more information."
+msgstr ""
+"Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в\n"
+"`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в\n"
+"crossref:makefiles[makefile-master_sites-github-multiple, Загрузка нескольких файлов из GitHub] для получения дополнительной информации."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1493
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1906
+#, no-wrap
+msgid "(none)"
+msgstr "(отсутствует)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1494
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4883
+#, no-wrap
+msgid "`GH_TUPLE`"
+msgstr "`GH_TUPLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1495
+#, 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 "`GH_TUPLE` позволяет объединить `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME` и `GH_SUBDIR` в одну переменную. Формат следующий: _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. Часть `/`_subdir_ является необязательной. Это полезно, когда требуется получить несколько проектов с GitHub."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1501
+msgid ""
+"Do not use `GH_TUPLE` for the default distribution file, as it has no "
+"default."
+msgstr ""
+"Не используйте `GH_TUPLE` для файла дистрибутива по умолчанию, так как у "
+"него нет значения по умолчанию."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1504
+#, no-wrap
+msgid "Simple Use of `USE_GITHUB`"
+msgstr "Простое использование `USE_GITHUB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1509
+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 ""
+"При попытке создать порт для версии `1.2.7` pkg от пользователя FreeBSD на "
+"github, по адресу https://github.com/freebsd/pkg/[], файл "
+"[.filename]#Makefile# в итоге будет выглядеть следующим образом "
+"(незначительно сокращено для примера):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1514
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg\n"
+"DISTVERSION=\t1.2.7\n"
+msgstr ""
+"PORTNAME=\tpkg\n"
+"DISTVERSION=\t1.2.7\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1517
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1520
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to `$"
+"{WRKDIR}/pkg-1.2.7`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES` установленным в `GH` и `WRKSRC` в `$"
+"{WRKDIR}/pkg-1.2.7`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1523
+#, no-wrap
+msgid "More Complete Use of `USE_GITHUB`"
+msgstr "Более полное использование `USE_GITHUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1527
+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 ""
+"При попытке создать порт для самой последней версии pkg от пользователя "
+"FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл "
+"[.filename]#Makefile# в итоге выглядит следующим образом (незначительно "
+"сокращено для примера):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1532
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg-devel\n"
+"DISTVERSION=\t1.3.0.a.20140411\n"
+msgstr ""
+"PORTNAME=\tpkg-devel\n"
+"DISTVERSION=\t1.3.0.a.20140411\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1537
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+"GH_PROJECT=\tpkg\n"
+"GH_TAGNAME=\t6dbb17b\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+"GH_PROJECT=\tpkg\n"
+"GH_TAGNAME=\t6dbb17b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1540
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to `$"
+"{WRKDIR}/pkg-6dbb17b`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES` со значением `GH` и `WRKSRC` со "
+"значением `${WRKDIR}/pkg-6dbb17b`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1544
+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 ""
+"`20140411` — это дата коммита, указанного в `GH_TAGNAME`, а не дата "
+"редактирования файла [.filename]#Makefile# или дата создания коммита."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1549
+#, no-wrap
+msgid "Use of `USE_GITHUB` with `DISTVERSIONPREFIX`"
+msgstr "Использование `USE_GITHUB` с `DISTVERSIONPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1555
+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 ""
+"Время от времени `GH_TAGNAME` немного отличается от `DISTVERSION`. Например, "
+"если версия `1.0.2`, то тег будет `v1.0.2`. В таких случаях можно "
+"использовать `DISTVERSIONPREFIX` или `DISTVERSIONSUFFIX`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1561
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.0.2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1563
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1627
+#, no-wrap
+msgid "USE_GITHUB=\tyes\n"
+msgstr "USE_GITHUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1566
+msgid ""
+"It will automatically set `GH_TAGNAME` to `v1.0.2`, while `WRKSRC` will be "
+"kept to `${WRKDIR}/foo-1.0.2`."
+msgstr ""
+"Он автоматически установит `GH_TAGNAME` в `v1.0.2`, в то время как `WRKSRC` "
+"останется `${WRKDIR}/foo-1.0.2`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1569
+#, no-wrap
+msgid "Using `USE_GITHUB` When Upstream Does Not Use Versions"
+msgstr "Использование `USE_GITHUB` при отсутствии версий у исходного проекта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1574
+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 ""
+"Если никогда не было версии вышестоящего репозитория, не изобретайте её, "
+"например `0.1` или `1.0`. Создайте порт с `DISTVERSION` в формате "
+"`g__YYYYMMDD__`, где `g` означает Git, а `_YYYYMMDD_` представляет дату "
+"коммита, указанного в `GH_TAGNAME`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1579
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSION=\tg20140411\n"
+msgstr ""
+"PORTNAME=\tbar\n"
+"DISTVERSION=\tg20140411\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1582
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TAGNAME=\tc472d66b\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_TAGNAME=\tc472d66b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1586
+msgid ""
+"This creates a versioning scheme that increases over time, and that is still "
+"before version `0`. See crossref:makefiles[makefile-versions-ex-pkg-"
+"version, this secion on how to compare versions] using man:pkg-version[8]):"
+msgstr ""
+"Это создаёт схему версионирования, которая увеличивается со временем и всё "
+"ещё находится до версии `0`. Подробности об использовании man:pkg-version[8] "
+"для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-"
+"version, этой секции]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1591
+#, no-wrap
+msgid ""
+"% pkg version -t g20140411 0\n"
+"<\n"
+msgstr ""
+"% pkg version -t g20140411 0\n"
+"<\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1594
+msgid ""
+"Which means using `PORTEPOCH` will not be needed in case upstream decides to "
+"cut versions in the future."
+msgstr ""
+"Что означает, что использование `PORTEPOCH` не потребуется, если вышестоящий "
+"проект решит сократить версии в будущем."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1597
+#, no-wrap
+msgid "Using `USE_GITHUB` to Access a Commit Between Two Versions"
+msgstr "Использование `USE_GITHUB` для доступа к коммиту между двумя версиями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1601
+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 ""
+"Если текущая версия программного обеспечения использует тег Git, и порт "
+"необходимо обновить до более новой промежуточной версии без тега, "
+"используйте man:git-describe[1], чтобы определить версию для использования:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1606
+#, no-wrap
+msgid ""
+"% git describe --tags f0038b1\n"
+"v0.7.3-14-gf0038b1\n"
+msgstr ""
+"% git describe --tags f0038b1\n"
+"v0.7.3-14-gf0038b1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1609
+msgid "`v0.7.3-14-gf0038b1` can be split into three parts:"
+msgstr "`v0.7.3-14-gf0038b1` можно разделить на три части:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1610
+#, no-wrap
+msgid "`v0.7.3`"
+msgstr "`v0.7.3`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1612
+msgid ""
+"This is the last Git tag that appears in the commit history before the "
+"requested commit."
+msgstr ""
+"Это последний тег Git, который появляется в истории коммитов перед "
+"запрошенным коммитом."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1613
+#, no-wrap
+msgid "`-14`"
+msgstr "`-14`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1615
+msgid ""
+"This means that the requested commit, `f0038b1`, is the 14th commit after "
+"the `v0.7.3` tag."
+msgstr ""
+"Это означает, что запрошенный коммит `f0038b1` является 14-м коммитом после "
+"тега `v0.7.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1616
+#, no-wrap
+msgid "`-gf0038b1`"
+msgstr "`-gf0038b1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1618
+msgid ""
+"The `-g` means \"Git\", and the `f0038b1` is the commit hash that this "
+"reference points to."
+msgstr ""
+"`-g` означает \"Git\", а `f0038b1` — это хеш коммита, на который указывает "
+"данная ссылка."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1625
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t0.7.3-14\n"
+"DISTVERSIONSUFFIX= -gf0038b1\n"
+msgstr ""
+"PORTNAME=\tbar\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t0.7.3-14\n"
+"DISTVERSIONSUFFIX= -gf0038b1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1631
+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 "
+"crossref:makefiles[makefile-versions-ex-pkg-version, this section for how to "
+"compare versions] using man:pkg-version[8]):"
+msgstr ""
+"Это создаёт схему версионирования, которая увеличивается со временем "
+"(точнее, с коммитами) и не конфликтует с созданием версии `0.7.4`. "
+"Подробности об использовании man:pkg-version[8] для сравнения версий "
+"смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой "
+"секции] :"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1638
+#, 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 ""
+"% pkg version -t 0.7.3 0.7.3.14\n"
+"<\n"
+"% pkg version -t 0.7.3.14 0.7.4\n"
+"<\n"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1644
+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:1649
+#, no-wrap
+msgid ""
+"% git describe --tags c66c71d\n"
+"v0.7.3\n"
+msgstr ""
+"% git describe --tags c66c71d\n"
+"v0.7.3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1652
+#, no-wrap
+msgid ""
+"% git describe --tags --long c66c71d\n"
+"v0.7.3-0-gc66c71d\n"
+msgstr ""
+"% git describe --tags --long c66c71d\n"
+"v0.7.3-0-gc66c71d\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1659
+#, no-wrap
+msgid "Fetching Multiple Files from GitHub"
+msgstr "Извлечение нескольких файлов из GitHub"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1663
+msgid ""
+"The `USE_GITHUB` framework also supports fetching multiple distribution "
+"files from different places in GitHub. It works in a way very similar to "
+"crossref:makefiles[porting-master-sites-n, Multiple Distribution or Patches "
+"Files from Multiple Locations]."
+msgstr ""
+"Фреймворк `USE_GITHUB` также поддерживает загрузку нескольких файлов "
+"дистрибутива из разных мест в GitHub. Он работает очень похоже на "
+"crossref:makefiles[porting-master-sites-n, Файлы дистрибуции или патчей из "
+"нескольких мест]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1669
+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 crossref:makefiles[makefile-master_sites-github-"
+"description,`USE_GITHUB` Description]."
+msgstr ""
+"В `GH_ACCOUNT`, `GH_PROJECT` и `GH_TAGNAME` добавляются несколько значений. "
+"Каждому различному значению присваивается группа. Основное значение может не "
+"иметь группы или принадлежать группе `:DEFAULT`. Значение может быть "
+"опущено, если оно совпадает со значением по умолчанию, указанным в "
+"crossref:makefiles[makefile-master_sites-github-description,описании "
+"`USE_GITHUB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1672
+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 ""
+"`GH_TUPLE` также можно использовать, когда имеется множество файлов "
+"дистрибутива. Это помогает сохранять учётные данные, проект, имя тега и "
+"информацию о группе в одном месте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1675
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1979
+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 ""
+"Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, "
+"содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}"
+"` могут использоваться для перемещения каталогов во время `post-extract`, "
+"добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для "
+"корректной сборки программного обеспечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1680
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1984
+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 ""
+"Часть `:__group__` _должна_ использоваться _только для одного_ файла "
+"дистрибутива. Она служит уникальным ключом, и её повторное использование "
+"приведёт к перезаписи предыдущих значений."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1687
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1991
+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 "
+"crossref:makefiles[porting-master-sites-n, Multiple Distribution or Patches "
+"Files from Multiple Locations]"
+msgstr ""
+"Поскольку это всего лишь синтаксический сахар над `DISTFILES` и "
+"`MASTER_SITES`, имена групп должны соответствовать ограничениям на имена "
+"групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы "
+"дистрибутивов или патчей из нескольких источников]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1691
+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 ""
+"При получении нескольких файлов из GitHub иногда файл дистрибутива по "
+"умолчанию не загружается из GitHub. Чтобы отключить загрузку файла "
+"дистрибутива по умолчанию, установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1695
+#, no-wrap
+msgid "USE_GITHUB=\tnodefault\n"
+msgstr "USE_GITHUB=\tnodefault\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1700
+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 ""
+"При использовании `USE_GITHUB=nodefault` в [.filename]#Makefile# необходимо "
+"указать `DISTFILES` в его crossref:porting-order[porting-order-"
+"portname,верхнем блоке]. Определение должно быть следующим:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1704
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2010
+#, no-wrap
+msgid "DISTFILES= ${DISTNAME}${EXTRACT_SUFX}\n"
+msgstr "DISTFILES= ${DISTNAME}${EXTRACT_SUFX}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1709
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files"
+msgstr "Использование `USE_GITHUB` с несколькими файлами дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1715
+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 ""
+"Время от времени возникает необходимость загрузить более одного файла "
+"дистрибутива. Например, когда вышестоящий репозиторий git использует "
+"подмодули. Это можно легко сделать с помощью групп в переменных `GH_*`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1720
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1766
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2026
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2072
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0.2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1726
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1728
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1772
+#, no-wrap
+msgid "CONFIGURE_ARGS=\t--with-contrib=${WRKSRC_contrib}\n"
+msgstr "CONFIGURE_ARGS=\t--with-contrib=${WRKSRC_contrib}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1735
+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 ""
+"Это загрузит три файла дистрибутива с github. Стандартный берется из "
+"[.filename]#foo/foo# и имеет версию `1.0.2`. Второй, с группой `icons`, "
+"берется из [.filename]#bar/foo-icons# и имеет версию `1.0`. Третий берется "
+"из [.filename]#bar/foo-contrib# и использует Git-коммит `fa579bc`. Файлы "
+"дистрибутива называются [.filename]#foo-foo-1.0.2_GH0.tar.gz#, "
+"[.filename]#bar-foo-icons-1.0_GH0.tar.gz# и [.filename]#bar-foo-contrib-"
+"fa579bc_GH0.tar.gz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1741
+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 ""
+"Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих "
+"подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном "
+"случае, [.filename]#${WRKDIR}/foo-1.0.2#. Каждый дополнительный файл "
+"дистрибутива извлекается в `${WRKSRC_group}`. Здесь, для группы `icons`, он "
+"называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-"
+"icons-1.0#. Файл с группой `contrib` называется `${WRKSRC_contrib}` и "
+"содержит `${WRKDIR}/foo-contrib-fa579bc`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1745
+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 ""
+"Система сборки программы ожидает найти иконки в подкаталоге [.filename]#ext/"
+"icons# в её исходниках, поэтому используется `GH_SUBDIR`. `GH_SUBDIR` "
+"гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё "
+"не существует. Затем он выполняет следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1750
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1755
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files Using `GH_TUPLE`"
+msgstr "Использование `USE_GITHUB` с несколькими файлами дистрибутива с помощью `GH_TUPLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1761
+msgid ""
+"This is functionally equivalent to crossref:makefiles[makefile-master_sites-"
+"github-multi,Use of `USE_GITHUB` with Multiple Distribution Files], but "
+"using `GH_TUPLE`:"
+msgstr ""
+"Это функционально эквивалентно crossref:makefiles[makefile-master_sites-"
+"github-multi,Использованию `USE_GITHUB` с несколькими файлами дистрибутива], "
+"но с использованием `GH_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1770
+#, 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 ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tbar:foo-icons:1.0:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:fa579bc:contrib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1776
+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 ""
+"В предыдущем примере использовалась группировка с `bar:icons,contrib`. В "
+"`GH_TUPLE` присутствует избыточная информация, так как группировка "
+"невозможна."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1779
+#, no-wrap
+msgid "How to Use `USE_GITHUB` with Git Submodules?"
+msgstr "Как использовать `USE_GITHUB` с подмодулями Git?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1784
+msgid ""
+"Ports with GitHub as an upstream repository sometimes use submodules. See "
+"man:git-submodule[1] for more information."
+msgstr ""
+"Порты, использующие GitHub в качестве вышестоящего репозитория, иногда "
+"применяют подмодули. Подробнее см. man:git-submodule[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1787
+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:1792
+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 ""
+"В качестве примера используем пакет package:finance/moneymanagerex[], его "
+"репозиторий на GitHub находится по адресу https://github.com/moneymanagerex/"
+"moneymanagerex/[]. В корне репозитория есть файл https://github.com/"
+"moneymanagerex/moneymanagerex/blob/master/.gitmodules[.gitmodules]. Этот "
+"файл описывает все подмодули, используемые в данном репозитории, и "
+"перечисляет дополнительные необходимые репозитории. Этот файл покажет, какие "
+"дополнительные репозитории требуются:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1808
+#, 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 ""
+"[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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1812
+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:1841
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1845
+msgid ""
+"It can also be found on GitHub. Each subdirectory that is a submodule is "
+"shown as `_directory @ hash_`, for example, `mongoose @ 2140e59`."
+msgstr ""
+"Это также можно найти на GitHub. Каждый подкаталог, который является "
+"подмодулем, отображается как `_директория @ хэш_`, например, `mongoose @ "
+"2140e59`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1851
+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 ""
+"Хотя получение информации из GitHub кажется более простым, данные, "
+"полученные с помощью `git submodule status`, будут более информативными. "
+"Например, здесь хеш коммита ``lib/wxsqlite3`` `fb66eb2` соответствует "
+"`v3.4.0`. Оба варианта можно использовать взаимозаменяемо, но если доступен "
+"тег, предпочтительнее использовать его."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1854
+msgid ""
+"Now that all the required information has been gathered, the "
+"[.filename]#Makefile# can be written (only GitHub-related lines are shown):"
+msgstr ""
+"Теперь, когда вся необходимая информация собрана, можно написать "
+"[.filename]#Makefile# (показаны только строки, связанные с GitHub):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1860
+#, no-wrap
+msgid ""
+"PORTNAME=\tmoneymanagerex\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.3.0\n"
+msgstr ""
+"PORTNAME=\tmoneymanagerex\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.3.0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1867
+#, 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 ""
+"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"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1872
+#, no-wrap
+msgid "`USE_GITLAB`"
+msgstr "`USE_GITLAB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1875
+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 ""
+"Подобно GitHub, если файл дистрибутива поставляется с https://gitlab.com/"
+"[gitlab.com] или использует программное обеспечение GitLab, эти переменные "
+"доступны для использования и могут потребовать установки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1877
+#, no-wrap
+msgid "`USE_GITLAB` Description"
+msgstr "Описание `USE_GITLAB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1885
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4887
+#, no-wrap
+msgid "`GL_SITE`"
+msgstr "`GL_SITE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1886
+#, no-wrap
+msgid "Site name hosting the GitLab project"
+msgstr "Название сайта, на котором размещен проект GitLab"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1888
+#, no-wrap
+msgid "https://gitlab.com/"
+msgstr "https://gitlab.com/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1889
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4884
+#, no-wrap
+msgid "`GL_ACCOUNT`"
+msgstr "`GL_ACCOUNT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1890
+#, no-wrap
+msgid "Account name of the GitLab user hosting the project"
+msgstr "Имя учётной записи пользователя GitLab, размещающего проект"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1893
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4886
+#, no-wrap
+msgid "`GL_PROJECT`"
+msgstr "`GL_PROJECT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1894
+#, no-wrap
+msgid "Name of the project on GitLab"
+msgstr "Название проекта на GitLab"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1897
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4885
+#, no-wrap
+msgid "`GL_COMMIT`"
+msgstr "`GL_COMMIT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1898
+#, 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 "Хэш коммита для загрузки. Должен быть полным 160-битным, 40-символьным шестнадцатеричным хэшем sha1. Это обязательная переменная для GitLab."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1900
+#, no-wrap
+msgid "`(none)`"
+msgstr "`(нет)`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1901
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4888
+#, no-wrap
+msgid "`GL_SUBDIR`"
+msgstr "`GL_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1904
+#, no-wrap
+msgid ""
+"When the software needs an additional distribution file to be extracted within\n"
+"`${WRKSRC}`, this variable can be used. See the examples in\n"
+"\tcrossref:makefiles[makefile-master_sites-gitlab-multiple, Fetching Multiple Files from GitLab] for more information."
+msgstr ""
+"Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в\n"
+"`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в\n"
+"\tcrossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab] для получения дополнительной информации."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1907
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4889
+#, no-wrap
+msgid "`GL_TUPLE`"
+msgstr "`GL_TUPLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1908
+#, 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 "`GL_TUPLE` позволяет объединить `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT` и `GL_SUBDIR` в одну переменную. Формат записи: _сайт_`:`_учётная запись_`:`_проект_`:`_коммит_`:`_группа_`/`_поддиректория_. Части _сайт_`:` и `/`_поддиректория_ являются необязательными. Это полезно, когда требуется загрузить данные из нескольких проектов GitLab."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1912
+#, no-wrap
+msgid "Simple Use of `USE_GITLAB`"
+msgstr "Простое использование `USE_GITLAB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1916
+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 ""
+"Пытаясь создать порт для версии `1.14` библиотеки libsignon-glib от "
+"пользователя accounts-sso на gitlab.com, по адресу https://gitlab.com/"
+"accounts-sso/libsignon-glib/[], файл [.filename]#Makefile# будет выглядеть "
+"следующим образом для загрузки дистрибутивных файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1921
+#, no-wrap
+msgid ""
+"PORTNAME=\tlibsignon-glib\n"
+"DISTVERSION=\t1.14\n"
+msgstr ""
+"PORTNAME=\tlibsignon-glib\n"
+"DISTVERSION=\t1.14\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1925
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_ACCOUNT=\taccounts-sso\n"
+"GL_COMMIT=\te90302e342bfd27bc8c9132ab9d0ea3d8723fd03\n"
+msgstr ""
+"USE_GITLAB=\tyes\n"
+"GL_ACCOUNT=\taccounts-sso\n"
+"GL_COMMIT=\te90302e342bfd27bc8c9132ab9d0ea3d8723fd03\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1928
+msgid ""
+"It will automatically have `MASTER_SITES` set to https://gitlab.com/"
+"[gitlab.com] and `WRKSRC` to `${WRKDIR}/libsignon-glib-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES`, установленный на https://gitlab.com/"
+"[gitlab.com], и `WRKSRC` на `${WRKDIR}/libsignon-glib-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1931
+#, no-wrap
+msgid "More Complete Use of `USE_GITLAB`"
+msgstr "Более полное использование `USE_GITLAB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1936
+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 ""
+"Более полный пример использования вышеописанного, если порт не имеет "
+"версионирования и foobar принадлежит пользователю foo в проекте bar на "
+"самостоятельно размещенном сайте GitLab `https://gitlab.example.com/`, тогда "
+"[.filename]#Makefile# будет выглядеть следующим образом для загрузки "
+"дистрибутивных файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1941
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoobar\n"
+"DISTVERSION=\tg20170906\n"
+msgstr ""
+"PORTNAME=\tfoobar\n"
+"DISTVERSION=\tg20170906\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1947
+#, 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 ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com\n"
+"GL_ACCOUNT=\tfoo\n"
+"GL_PROJECT=\tbar\n"
+"GL_COMMIT=\t9c1669ce60c3f4f5eb43df874d7314483fb3f8a6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1950
+msgid ""
+"It will have `MASTER_SITES` set to `\"https://gitlab.example.com\"` and "
+"`WRKSRC` to `${WRKDIR}/"
+"bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`."
+msgstr ""
+"В нем будет установлено `MASTER_SITES` в `\"https://gitlab.example.com\"` и "
+"`WRKSRC` в `${WRKDIR}/"
+"bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1954
+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 ""
+"`20170906` — это дата коммита, указанного в `GL_COMMIT`, а не дата "
+"редактирования файла [.filename]#Makefile# или дата коммита в дерево портов "
+"FreeBSD."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1959
+msgid ""
+"``GL_SITE``'s protocol, port and webroot can all be modified in the same "
+"variable."
+msgstr ""
+"Протокол, порт и корневая директория веб-сервера ``GL_SITE`` могут быть "
+"изменены в той же переменной."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1964
+#, no-wrap
+msgid "Fetching Multiple Files from GitLab"
+msgstr "Извлечение нескольких файлов из GitLab"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1969
+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 crossref:makefiles[porting-master-sites-n, Multiple "
+"Distribution or Patches Files from Multiple Locations] and "
+"crossref:makefiles[makefile-master_sites-gitlab-multiple, Fetching Multiple "
+"Files from GitLab]."
+msgstr ""
+"Фреймворк `USE_GITLAB` также поддерживает загрузку нескольких файлов "
+"дистрибутивов из различных мест GitLab и сайтов, размещённых на GitLab. Он "
+"работает очень похоже на crossref:makefiles[porting-master-sites-n, "
+"Несколько файлов дистрибутивов или патчей из разных местоположений] и "
+"crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка "
+"нескольких файлов из GitLab]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1973
+msgid ""
+"Multiple values are added to `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` and "
+"`GL_COMMIT`. Each different value is assigned a group. "
+"crossref:makefiles[makefile-master_sites-gitlab-description,`USE_GITLAB` "
+"Description]."
+msgstr ""
+"В `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` и `GL_COMMIT` добавляются "
+"множественные значения. Каждое уникальное значение назначается группе. "
+"crossref:makefiles[makefile-master_sites-gitlab-description,Описание "
+"`USE_GITLAB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1976
+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 ""
+"`GL_TUPLE` также может использоваться, когда имеется множество файлов "
+"дистрибутива. Это помогает хранить информацию о сайте, учётной записи, "
+"проекте, коммите и группе в одном месте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1995
+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 ""
+"При получении нескольких файлов с использованием GitLab иногда файл "
+"дистрибутива по умолчанию не загружается с сайта GitLab. Чтобы отключить "
+"загрузку файла дистрибутива по умолчанию, установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1999
+#, no-wrap
+msgid "USE_GITLAB=\tnodefault\n"
+msgstr "USE_GITLAB=\tnodefault\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2006
+msgid ""
+"When using `USE_GITLAB=nodefault`, the [.filename]#Makefile# must set "
+"`DISTFILES` in its crossref:makefiles[porting-order-portname,top block]. "
+"The definition should be:"
+msgstr ""
+"При использовании `USE_GITLAB=nodefault`, [.filename]#Makefile# должен "
+"устанавливать `DISTFILES` в своем crossref:makefiles[porting-order-"
+"portname,верхнем блоке]. Определение должно быть следующим:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2015
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files"
+msgstr "Использование `USE_GITLAB` с несколькими файлами дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2021
+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 ""
+"Время от времени возникает необходимость загрузить более одного файла "
+"дистрибутива. Например, когда вышестоящий git-репозиторий использует "
+"подмодули. Это можно легко сделать с помощью групп в переменных `GL_*`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2033
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2035
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2079
+#, no-wrap
+msgid "CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}\n"
+msgstr "CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2042
+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 ""
+"Это загрузит два файла дистрибутива с gitlab.com и один с "
+"`gitlab.example.com`, где размещается GitLab. По умолчанию файл берется из "
+"[.filename]#https://gitlab.com/foo/foo#, а коммит — "
+"`c189207a55da45305c884fe2b50e086fcad4724b`. Второй файл, из группы `icons`, "
+"берется из [.filename]#https://gitlab.example.com:9434/gitlab/bar/foo-"
+"icons#, а коммит — `ae7368cab1ca7ca754b38d49da064df87968ffe4`. Третий файл "
+"берется из [.filename]#https://gitlab.com/bar/foo-contrib#, а коммит — "
+"`9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. Файлы дистрибутива называются "
+"[.filename]#foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, "
+"[.filename]#bar-foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz# и [.filename]#bar-foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2048
+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 ""
+"Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих "
+"подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном "
+"случае это [.filename]#${WRKDIR}/foo-"
+"c189207a55da45305c884fe2b50e086fcad4724b-"
+"c189207a55da45305c884fe2b50e086fcad4724b#. Каждый дополнительный файл "
+"дистрибутива извлекается в `${WRKSRC_group}`. Здесь для группы `icons` он "
+"называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4#. Файл группы `contrib` называется "
+"`${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2052
+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 ""
+"Система сборки программного обеспечения ожидает найти иконки в подкаталоге "
+"[.filename]#ext/icons# в своих исходниках, поэтому используется `GL_SUBDIR`. "
+"`GL_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/"
+"icons# ещё не существует. Затем она выполняет следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2057
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2062
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files Using `GL_TUPLE`"
+msgstr "Использование `USE_GITLAB` с несколькими файлами дистрибуции с помощью `GL_TUPLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2067
+msgid ""
+"This is functionally equivalent to crossref:makefiles[makefile-master_sites-"
+"gitlab-multi,Use of `USE_GITLAB` with Multiple Distribution Files], but "
+"using `GL_TUPLE`:"
+msgstr ""
+"Это функционально эквивалентно crossref:makefiles[makefile-master_sites-"
+"gitlab-multi,Использование `USE_GITLAB` с несколькими файлами дистрибуции], "
+"но с использованием `GL_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2077
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2083
+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 ""
+"В предыдущем примере использовалась группировка с `bar:icons,contrib`. "
+"Некоторую избыточную информацию приходится указывать с `GL_TUPLE`, так как "
+"группировка невозможна."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2086
+#, no-wrap
+msgid "`EXTRACT_SUFX`"
+msgstr "`EXTRACT_SUFX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2089
+msgid ""
+"If there is one distribution file, and it uses an odd suffix to indicate the "
+"compression mechanism, set `EXTRACT_SUFX`."
+msgstr ""
+"Если имеется один файл дистрибутива, и он использует нестандартное суффикс "
+"для указания механизма сжатия, установите `EXTRACT_SUFX`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2091
+msgid ""
+"For example, if the distribution file was named [.filename]#foo.tar.gzip# "
+"instead of the more normal [.filename]#foo.tar.gz#, write:"
+msgstr ""
+"Например, если файл дистрибутива был назван [.filename]#foo.tar.gzip# вместо "
+"более привычного [.filename]#foo.tar.gz#, напишите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2096
+#, no-wrap
+msgid ""
+"DISTNAME=\tfoo\n"
+"EXTRACT_SUFX=\t.tar.gzip\n"
+msgstr ""
+"DISTNAME=\tfoo\n"
+"EXTRACT_SUFX=\t.tar.gzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2100
+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 ""
+"`USES=tar[:__xxx__]`, `USES=lha` или `USES=zip` автоматически устанавливают "
+"`EXTRACT_SUFX` в наиболее распространённые расширения архивов при "
+"необходимости, подробнее см. crossref:uses[uses,Использование макросов "
+"`USES`]. Если ни один из них не задан, `EXTRACT_SUFX` по умолчанию принимает "
+"значение `.tar.gz`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2104
+msgid "As `EXTRACT_SUFX` is only used in `DISTFILES`, only set one of them.."
+msgstr ""
+"Как `EXTRACT_SUFX` используется только в `DISTFILES`, следует задавать "
+"только один из них."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2107
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4876
+#, no-wrap
+msgid "`DISTFILES`"
+msgstr "`DISTFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2112
+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 ""
+"Иногда названия файлов для загрузки не имеют ничего общего с именем порта. "
+"Например, файл может называться [.filename]#source.tar.gz# или подобным "
+"образом. В других случаях исходный код приложения может быть разбит на "
+"несколько различных архивов, все из которых необходимо загрузить."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2114
+msgid ""
+"If this is the case, set `DISTFILES` to be a space separated list of all the "
+"files that must be downloaded."
+msgstr ""
+"Если это так, установите `DISTFILES` как список разделённых пробелами "
+"файлов, которые необходимо загрузить."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2118
+#, no-wrap
+msgid "DISTFILES=\tsource1.tar.gz source2.tar.gz\n"
+msgstr "DISTFILES=\tsource1.tar.gz source2.tar.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2121
+msgid ""
+"If not explicitly set, `DISTFILES` defaults to `${DISTNAME}${EXTRACT_SUFX}`."
+msgstr ""
+"Если явно не задано, `DISTFILES` по умолчанию равно `${DISTNAME}$"
+"{EXTRACT_SUFX}`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2123
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4877
+#, no-wrap
+msgid "`EXTRACT_ONLY`"
+msgstr "`EXTRACT_ONLY`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2126
+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 ""
+"Если необходимо извлечь только некоторые из `DISTFILES` — например, один из "
+"них является исходным кодом, а другой — несжатым документом — укажите имена "
+"файлов, которые нужно извлечь, в `EXTRACT_ONLY`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2131
+#, no-wrap
+msgid ""
+"DISTFILES=\tsource.tar.gz manual.html\n"
+"EXTRACT_ONLY=\tsource.tar.gz\n"
+msgstr ""
+"DISTFILES=\tsource.tar.gz manual.html\n"
+"EXTRACT_ONLY=\tsource.tar.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2134
+msgid ""
+"When none of the `DISTFILES` need to be uncompressed, set `EXTRACT_ONLY` to "
+"the empty string."
+msgstr ""
+"Если ни один из `DISTFILES` не требует распаковки, установите `EXTRACT_ONLY` "
+"в пустую строку."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2138
+#, no-wrap
+msgid "EXTRACT_ONLY=\n"
+msgstr "EXTRACT_ONLY=\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2141
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4898
+#, no-wrap
+msgid "`PATCHFILES`"
+msgstr "`PATCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2144
+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 ""
+"Если порт требует дополнительных исправлений, доступных через FTP или HTTP, "
+"установите `PATCHFILES` в имена файлов, а `PATCH_SITES` — в URL каталога, "
+"содержащего их (формат такой же, как у `MASTER_SITES`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2147
+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 ""
+"Если патч не относится к корню исходного дерева (то есть к `WRKSRC`), потому "
+"что содержит дополнительные пути, установите `PATCH_DIST_STRIP` "
+"соответствующим образом. Например, если все пути в патче имеют "
+"дополнительный префикс `foozolix-1.0/` перед именами файлов, задайте "
+"`PATCH_DIST_STRIP=-p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2149
+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 ""
+"Не беспокойтесь, если патчи сжаты; они будут автоматически распакованы, если "
+"их имена заканчиваются на [.filename]#.Z#, [.filename]#.gz#, "
+"[.filename]#.bz2# или [.filename]#.xz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2155
+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 ""
+"Если патч распространяется вместе с другими файлами, такими как "
+"документация, в сжатом tarball, использование `PATCHFILES` невозможно. В "
+"таком случае добавьте имя и расположение tarball с патчами в `DISTFILES` и "
+"`MASTER_SITES`. Затем используйте `EXTRA_PATCHES`, чтобы указать на эти "
+"файлы, и [.filename]#bsd.port.mk# автоматически применит их. В частности, "
+"_не_ копируйте файлы патчей в [.filename]#${PATCHDIR}#. Этот каталог может "
+"быть недоступен для записи."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2159
+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 ""
+"Если есть несколько патчей и для них требуются разные значения параметра "
+"strip, его можно добавить рядом с именем патча в `PATCHFILES`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2163
+#, no-wrap
+msgid "PATCHFILES=\tpatch1 patch2:-p1\n"
+msgstr "PATCHFILES=\tpatch1 patch2:-p1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2166
+msgid ""
+"This does not conflict with crossref:makefiles[porting-master-sites-n,the "
+"master site grouping feature], adding a group also works:"
+msgstr ""
+"Это не конфликтует с crossref:makefiles[porting-master-sites-n,функцией "
+"группировки мастер-сайтов], добавление группы также работает:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2170
+#, no-wrap
+msgid "PATCHFILES=\tpatch2:-p1:source2\n"
+msgstr "PATCHFILES=\tpatch2:-p1:source2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2178
+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 ""
+"Tarball уже будет распакован вместе с обычными исходными кодами, поэтому нет "
+"необходимости явно его распаковывать, если это обычный сжатый tarball. "
+"Будьте особенно осторожны, чтобы не перезаписать существующие файлы в этом "
+"каталоге при ручной распаковке. Также не забудьте добавить команду для "
+"удаления скопированного патча в цель `pre-clean`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2181
+#, 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:2184
+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:2187
+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 ""
+"Этот раздел содержит информацию о механизме загрузки, известном как "
+"`MASTER_SITES:n` и `MASTER_SITES_NN`. Мы будем называть этот механизм "
+"`MASTER_SITES:n`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2192
+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 ""
+"Небольшая предыстория. В OpenBSD есть удобная функция внутри `DISTFILES` и "
+"`PATCHFILES`, которая позволяет добавлять постфикс `:n` к файлам и патчам. "
+"Здесь `n` может быть любым словом, содержащим `[0-9a-zA-Z_]`, и обозначать "
+"группу. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2196
+#, no-wrap
+msgid "DISTFILES=\talpha:0 beta:1\n"
+msgstr "DISTFILES=\talpha:0 beta:1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2199
+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 ""
+"В OpenBSD файл дистрибутива [.filename]#alpha# будет связан с переменной "
+"`MASTER_SITES0`, а не с нашей общей `MASTER_SITES`, а [.filename]#beta# — с "
+"`MASTER_SITES1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2201
+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:2204
+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 ""
+"Представьте 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`, причём сайты "
+"медленные как черепаха, где [.filename]#beta# есть на всех сайтах из "
+"`MASTER_SITES`, а [.filename]#alpha# можно найти только на 20-м сайте. Было "
+"бы так обидно проверять их все, если бы сопровождающий знал это заранее, не "
+"так ли? Не самое лучшее начало для чудесных выходных!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2207
+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 ""
+"Теперь, когда вы поняли идею, представьте больше `DISTFILES` и больше "
+"`MASTER_SITES`. Безусловно, наш \"мастер по исследованию distfiles\" оценил "
+"бы снижение нагрузки на сеть, которое это принесло бы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2210
+msgid ""
+"In the next sections, information will follow on the FreeBSD implementation "
+"of this idea. We improved a bit on OpenBSD's concept."
+msgstr ""
+"В следующих разделах будет приведена информация о реализации этой идеи в "
+"FreeBSD. Мы немного улучшили концепцию OpenBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2215
+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 ""
+"Имена групп не могут содержать дефисы (`-`), более того, они не могут "
+"содержать любые символы вне диапазона `[a-zA-Z0-9_]`. Это связано с тем, "
+"что, хотя man:make[1] допускает использование имён переменных с дефисами, "
+"man:sh[1] — нет."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2218
+#, no-wrap
+msgid "Simplified Information"
+msgstr "Упрощенная информация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2225
+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 crossref:makefiles[ports-master-sites-n-"
+"detailed, Detailed Information]."
+msgstr ""
+"В этом разделе объясняется, как быстро настроить детализированное получение "
+"нескольких файлов дистрибутивов и патчей с разных сайтов и подкаталогов. "
+"Здесь описывается случай упрощённого использования `MASTER_SITES:n`. Этого "
+"будет достаточно для большинства сценариев. Более подробная информация "
+"доступна в crossref:makefiles[ports-master-sites-n-detailed, Подробная "
+"Информация]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2229
+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 ""
+"Некоторые приложения состоят из нескольких распространяемых файлов, которые "
+"необходимо загрузить с различных сайтов. Например, Ghostscript включает "
+"основную часть программы и множество драйверов, используемых в зависимости "
+"от принтера пользователя. Некоторые из этих драйверов поставляются вместе с "
+"основной частью, но многие другие необходимо загружать с различных сайтов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2232
+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 ""
+"Для поддержки этого, каждая запись в `DISTFILES` может сопровождаться "
+"двоеточием и \"именем группы\". Затем каждый сайт, указанный в "
+"`MASTER_SITES`, сопровождается двоеточием и группой, которая указывает, "
+"какие файлы дистрибутива загружаются с данного сайта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2236
+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 crossref:makefiles[ports-master-sites-n-example-simple-"
+"use-one-file-per-site,Simplified Use of `MASTER_SITES:n` with One File Per "
+"Site]."
+msgstr ""
+"Например, рассмотрим приложение, исходный код которого разделён на две "
+"части: [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые "
+"необходимо загрузить с двух разных сайтов. В [.filename]#Makefile# порта "
+"будут присутствовать строки, подобные crossref:makefiles[ports-master-sites-"
+"n-example-simple-use-one-file-per-site,Упрощённое использование "
+"`MASTER_SITES:n` с одним файлом на сайт]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2238
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with One File Per Site"
+msgstr "Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2248
+#, 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 ""
+"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"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2256
+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 "
+"crossref:makefiles[ports-master-sites-n-example-simple-use-more-than-one-"
+"file-per-site,Simplified Use of `MASTER_SITES:n` with More Than One File Per "
+"Site]."
+msgstr ""
+"Несколько файлов дистрибутивов могут принадлежать одной группе. Продолжая "
+"предыдущий пример, предположим, что существует третий файл дистрибутива "
+"[.filename]#source3.tar.gz#, который загружается с `ftp.example2.com`. Тогда "
+"[.filename]#Makefile# будет записан, как показано в crossref:makefiles[ports-"
+"master-sites-n-example-simple-use-more-than-one-file-per-site,Упрощённое "
+"использование `MASTER_SITES:n` с несколькими файлами на один сайт]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2258
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with More Than One File Per Site"
+msgstr "Упрощённое использование `MASTER_SITES:n` с несколькими файлами на одном сайте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2269
+#, 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 ""
+"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"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2274
+#, no-wrap
+msgid "Detailed Information"
+msgstr "Подробная информация"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2277
+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 ""
+"Хорошо, значит, предыдущий пример не отражал потребности нового порта? В "
+"этом разделе мы подробно объясним, как работает механизм детализированного "
+"получения `MASTER_SITES:n` и как его можно использовать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2279
+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 ""
+"Элементы могут иметь постфикс `:__n__`, где _n_ — это `[^:,]+`, то есть _n_ "
+"концептуально может быть любой буквенно-цифровой строкой, но пока мы "
+"ограничим её `[a-zA-Z_][0-9a-zA-Z_]+`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2281
+msgid ""
+"Moreover, string matching is case sensitive; that is, `n` is different from "
+"`N`."
+msgstr ""
+"Более того, сравнение строк чувствительно к регистру; то есть, `n` "
+"отличается от `N`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2287
+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 crossref:makefiles[porting-master-sites-n-what-changes-in-port-targets, "
+"ii]). Furthermore, `DEFAULT` is a special purpose word (check item "
+"crossref:makefiles[porting-master-sites-n-DEFAULT-group,3])."
+msgstr ""
+"Однако эти слова не могут использоваться для постфиксных целей, так как "
+"имеют специальное значение: `default`, `all` и `ALL` (они используются "
+"внутри системы, см. crossref:makefiles[porting-master-sites-n-what-changes-"
+"in-port-targets, ii]). Кроме того, `DEFAULT` является словом специального "
+"назначения (проверьте пункт crossref:makefiles[porting-master-sites-n-"
+"DEFAULT-group,3])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2288
+msgid ""
+"Elements postfixed with `:n` belong to the group `n`, `:m` belong to group "
+"`m` and so forth."
+msgstr ""
+"Элементы с постфиксом `:n` принадлежат группе `n`, `:m` — группе `m` и так "
+"далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2294
+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 crossref:makefiles[porting-master-sites-n-comma-"
+"operator,5])."
+msgstr ""
+"Элементы без постфикса не принадлежат к группам, все они относятся к "
+"специальной группе `DEFAULT`. Элементы с постфиксом `DEFAULT` избыточны, за "
+"исключением случаев, когда элемент одновременно принадлежит и к `DEFAULT`, и "
+"к другим группам (см. пункт crossref:makefiles[porting-master-sites-n-comma-"
+"operator,5])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2296
+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:2300
+#, no-wrap
+msgid "MASTER_SITES=\talpha\n"
+msgstr "MASTER_SITES=\talpha\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2305
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2308
+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:2311
+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:2314
+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 ""
+"Вместо повторения несколько раз, каждый раз с разным постфиксом, мы можем "
+"перечислить несколько групп сразу в одном постфиксе. Например, `:m,n,o` "
+"обозначает элемент, принадлежащий группам `m`, `n` и `o`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2316
+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:2320
+#, no-wrap
+msgid "MASTER_SITES=\talpha alpha:SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha alpha:SOME_SITE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2325
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT alpha:SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT alpha:SOME_SITE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2330
+#, no-wrap
+msgid "MASTER_SITES=\talpha:SOME_SITE,DEFAULT\n"
+msgstr "MASTER_SITES=\talpha:SOME_SITE,DEFAULT\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2335
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT,SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT,SOME_SITE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2338
+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 ""
+"Все сайты в заданной группе сортируются согласно `MASTER_SORT_AWK`. Все "
+"группы в `MASTER_SITES` и `PATCH_SITES` также сортируются."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2341
+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 ""
+"Семантика групп может использоваться в любых переменных `MASTER_SITES`, "
+"`PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и "
+"`PATCHFILES` согласно следующему синтаксису:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2355
+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 "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-"
+"subdir,Detailed Use of `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`] and "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Detailed Use of `MASTER_SITES:n` with Comma Operator, "
+"Multiple Files, Multiple Sites and Multiple Subdirectories]."
+msgstr ""
+"Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и "
+"`PATCH_SITE_SUBDIR` должны заканчиваться символом дробной черты `/`. Если "
+"элементы принадлежат к какой-либо группе, постфикс группы `:__n__` должен "
+"следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` "
+"полагается на наличие завершающего символа `/`, чтобы избежать путаницы "
+"между элементами, где `:n` является допустимой частью элемента, и случаями, "
+"где `:n` обозначает группу `n`. В целях совместимости, поскольку ранее "
+"завершающий символ `/` не требовался в элементах `MASTER_SITE_SUBDIR` и "
+"`PATCH_SITE_SUBDIR`, если символ, непосредственно предшествующий постфиксу, "
+"не является `/`, то `:n` будет считаться допустимой частью элемента, а не "
+"постфиксом группы, даже если элемент оканчивается на `:n`. См. оба раздела "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-"
+"subdir,Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`] и "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Подробное использование `MASTER_SITES:n` с оператором "
+"запятая, несколькими файлами, несколькими сайтами и несколькими "
+"подкаталогами]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2357
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`"
+msgstr "Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2364
+#, no-wrap
+msgid "MASTER_SITE_SUBDIR=\told:n new/:NEW\n"
+msgstr "MASTER_SITE_SUBDIR=\told:n new/:NEW\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2367
+msgid "Directories within group `DEFAULT` -> old:n"
+msgstr "Каталоги в группе `DEFAULT` -> old:n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2368
+msgid "Directories within group `NEW` -> new"
+msgstr "Каталоги в группе `NEW` -> new"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2372
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with Comma Operator, Multiple Files, Multiple Sites and Multiple Subdirectories"
+msgstr "Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, сайтами и подкаталогами"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2390
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2394
+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:2396
+msgid "[.filename]#file1# will be fetched from"
+msgstr "[.filename]#file1# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2398
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2408
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2418
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2424
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2434
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2439
+msgid "`MASTER_SITE_OVERRIDE`"
+msgstr "`MASTER_SITE_OVERRIDE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2399
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2409
+msgid "http://site1/directory-trial:1/"
+msgstr "http://site1/directory-trial:1/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2400
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2410
+msgid "http://site1/directory-one/"
+msgstr "http://site1/directory-one/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2401
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2411
+msgid "http://site1/directory/"
+msgstr "http://site1/directory/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2402
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2412
+msgid "http://site2/"
+msgstr "http://site2/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2403
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2413
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2428
+msgid "http://site7/"
+msgstr "http://site7/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2404
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2414
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2420
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2430
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2435
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2441
+msgid "`MASTER_SITE_BACKUP`"
+msgstr "`MASTER_SITE_BACKUP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2406
+msgid ""
+"[.filename]#file2# will be fetched exactly as [.filename]#file1# since they "
+"both belong to the same group"
+msgstr ""
+"[.filename]#file2# будет загружен точно так же, как [.filename]#file1#, "
+"поскольку они оба принадлежат к одной и той же группе"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2416
+msgid "[.filename]#file3# will be fetched from"
+msgstr "[.filename]#file3# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2419
+msgid "http://site3/"
+msgstr "http://site3/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2422
+msgid "[.filename]#file4# will be fetched from"
+msgstr "[.filename]#file4# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2425
+msgid "http://site4/"
+msgstr "http://site4/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2426
+msgid "http://site5/"
+msgstr "http://site5/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2427
+msgid "http://site6/"
+msgstr "http://site6/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2429
+msgid "http://site8/directory-one/"
+msgstr "http://site8/directory-one/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2432
+msgid "[.filename]#file5# will be fetched from"
+msgstr "[.filename]#file5# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2437
+msgid "[.filename]#file6# will be fetched from"
+msgstr "[.filename]#file6# будет получен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2440
+msgid "http://site8/"
+msgstr "http://site8/"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2445
+msgid ""
+"How do I group one of the special macros from [.filename]#bsd.sites.mk#, for "
+"example, SourceForge (`SF`)?"
+msgstr ""
+"Как сгруппировать один из специальных макросов из [.filename]#bsd.sites.mk#, "
+"например, SourceForge (`SF`)?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2449
+msgid ""
+"This has been simplified as much as possible. See crossref:makefiles[ports-"
+"master-sites-n-example-detailed-use-master-site-sourceforge,Detailed Use of "
+"`MASTER_SITES:n` with SourceForge (`SF`)]."
+msgstr ""
+"Это максимально упрощено. См. crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-master-site-sourceforge,Подробное использование "
+"`MASTER_SITES:n` с SourceForge (`SF`)]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2451
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with SourceForge (`SF`)"
+msgstr "Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2459
+#, no-wrap
+msgid ""
+"MASTER_SITES=\thttp://site1/ SF/something/1.0:sourceforge,TEST\n"
+"DISTFILES=\tsomething.tar.gz:sourceforge\n"
+msgstr ""
+"MASTER_SITES=\thttp://site1/ SF/something/1.0:sourceforge,TEST\n"
+"DISTFILES=\tsomething.tar.gz:sourceforge\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2462
+msgid ""
+"[.filename]#something.tar.gz# will be fetched from all sites within "
+"SourceForge."
+msgstr ""
+"[.filename]#something.tar.gz# будет загружен со всех сайтов в пределах "
+"SourceForge."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2464
+msgid "How do I use this with `PATCH*`?"
+msgstr "Как использовать это с `PATCH*`?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2468
+msgid ""
+"All examples were done with `MASTER*` but they work exactly the same for "
+"`PATCH*` ones as can be seen in crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-patch-sites,Simplified Use of `MASTER_SITES:n` with "
+"`PATCH_SITES`]."
+msgstr ""
+"Все примеры были выполнены с `MASTER*`, но они работают точно так же для "
+"`PATCH*`, как можно увидеть в crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-patch-sites,Упрощённое использование `MASTER_SITES:n` с "
+"`PATCH_SITES`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2470
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with `PATCH_SITES`"
+msgstr "Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2478
+#, no-wrap
+msgid ""
+"PATCH_SITES=\thttp://site1/ http://site2/:test\n"
+"PATCHFILES=\tpatch1:test\n"
+msgstr ""
+"PATCH_SITES=\thttp://site1/ http://site2/:test\n"
+"PATCHFILES=\tpatch1:test\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2483
+#, 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:2490
+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 "
+"crossref:makefiles[porting-master-sites-n-group-semantics, 7]."
+msgstr ""
+"Все текущие порты остаются без изменений. Функция `MASTER_SITES:n` "
+"активируется только при наличии элементов с постфиксом `:__n__`, "
+"соответствующих указанным выше синтаксическим правилам, в частности, как "
+"показано в пункте crossref:makefiles[porting-master-sites-n-group-semantics, "
+"7]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2493
+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 ""
+"Порты сохраняют те же цели: `checksum`, `makesum`, `patch`, `configure`, "
+"`build` и т.д., за исключением очевидных случаев: `do-fetch`, `fetch-list`, "
+"`master-sites` и `patch-sites`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2499
+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 crossref:makefiles[ports-"
+"master-sites-n-example-detailed-use-complete-example-master-sites,Detailed "
+"Use of `MASTER_SITES:n` with Comma Operator, Multiple Files, Multiple Sites "
+"and Multiple Subdirectories]."
+msgstr ""
+"`do-fetch`: развертывает новую группировку с постфиксом `DISTFILES` и "
+"`PATCHFILES` с соответствующими групповыми элементами в `MASTER_SITES` и "
+"`PATCH_SITES`, которые используют соответствующие групповые элементы в "
+"`MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Проверьте "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Подробное использование `MASTER_SITES:n` с оператором "
+"запятой, множественными файлами, множественными сайтами и множественными "
+"подкаталогами]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2500
+msgid ""
+"`fetch-list`: works like old `fetch-list` with the exception that it groups "
+"just like `do-fetch`."
+msgstr ""
+"`fetch-list`: работает как старый `fetch-list`, за исключением того, что "
+"группировка происходит так же, как в `do-fetch`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2501
+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 ""
+"`master-sites` и `patch-sites`: (несовместимо с более старыми версиями) "
+"возвращают только элементы группы `DEFAULT`; фактически они выполняют цели "
+"`master-sites-default` и `patch-sites-default` соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2506
+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 crossref:makefiles[porting-master-sites-n-new-port-targets-master-"
+"sites-all, B] for more information on these new port targets."
+msgstr ""
+"Кроме того, предпочтительнее использовать цель `master-sites-all` или `patch-"
+"sites-all`, чем напрямую проверять `MASTER_SITES` или `PATCH_SITES`. Кроме "
+"того, прямая проверка не гарантирует работу в будущих версиях. Для получения "
+"дополнительной информации об этих новых целях портов см. пункт "
+"crossref:makefiles[porting-master-sites-n-new-port-targets-master-sites-all, "
+"B]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2508
+msgid "New port targets"
+msgstr "Новые цели портов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2509
+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 ""
+"Существуют цели `master-sites-_n_` и `patch-sites-_n_`, которые будут "
+"выводить элементы соответствующей группы _n_ в `MASTER_SITES` и "
+"`PATCH_SITES` соответственно. Например, и `master-sites-DEFAULT`, и `patch-"
+"sites-DEFAULT` вернут элементы группы `DEFAULT`, `master-sites-test` и "
+"`patch-sites-test` — группы `test`, и так далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2512
+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 ""
+"Существуют новые цели `master-sites-all` и `patch-sites-all`, которые "
+"выполняют работу старых `master-sites` и `patch-sites`. Они возвращают "
+"элементы всех групп, как если бы они все принадлежали одной группе, с "
+"оговоркой, что перечисляется столько же `MASTER_SITE_BACKUP` и "
+"`MASTER_SITE_OVERRIDE`, сколько определено групп в `DISTFILES` или "
+"`PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2514
+#, no-wrap
+msgid "`DIST_SUBDIR`"
+msgstr "`DIST_SUBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2519
+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 ""
+"Не допускайте захламления портом каталога [.filename]#/usr/ports/distfiles#. "
+"Если порт требует загрузки большого количества файлов или содержит файл с "
+"именем, которое может конфликтовать с другими портами (например, "
+"[.filename]#Makefile#), установите `DIST_SUBDIR` в имя порта (подойдут `$"
+"{PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит `DISTDIR` со "
+"значения по умолчанию [.filename]#/usr/ports/distfiles# на [.filename]#/usr/"
+"ports/distfiles/${DIST_SUBDIR}#, фактически помещая все необходимые для "
+"порта файлы в этот подкаталог."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2521
+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 ""
+"Также будет проверяться подкаталог с тем же именем на основном резервном "
+"сайте по адресу http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] "
+"(Явное указание `DISTDIR` в [.filename]#Makefile# не решит эту задачу, "
+"поэтому используйте `DIST_SUBDIR`.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2525
+msgid ""
+"This does not affect `MASTER_SITES` defined in the [.filename]#Makefile#."
+msgstr ""
+"Это не влияет на сайты в `MASTER_SITES`, определённые в "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2528
+#, no-wrap
+msgid "`MAINTAINER`"
+msgstr "`MAINTAINER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2531
+msgid "Set your mail-address here. Please. _:-)_"
+msgstr "Установите здесь свой адрес электронной почты. Пожалуйста. _:-)_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2536
+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 ""
+"Только один адрес без комментария допускается в качестве значения "
+"`MAINTAINER`. Используемый формат: `user@hostname.domain`. Пожалуйста, не "
+"включайте в эту запись описательный текст, например, настоящее имя. Это "
+"только вносит путаницу в инфраструктуру Ports и большинство инструментов, "
+"которые её используют."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2539
+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 ""
+"Ответственный за поддержку порта обязан поддерживать порт в актуальном "
+"состоянии и обеспечивать его корректную работу. Подробное описание "
+"обязанностей ответственного за поддержку порта приведено в разделе extref:"
+"{contributing}[Задача для сопровождающих портов,maintain-port]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2548
+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 ""
+"Сопровождающий добровольно поддерживает порт в рабочем состоянии. "
+"Сопровождающие несут основную ответственность за свои порты, но не имеют "
+"исключительных прав на них. Порты существуют для пользы сообщества и, по "
+"сути, принадлежат сообществу. Это означает, что люди, не являющиеся "
+"сопровождающими, также могут вносить изменения в порт. Крупные изменения в "
+"коллекции портов могут потребовать правок во многих портах. Команда "
+"управления портами FreeBSD или члены других команд могут изменять порты для "
+"исправления проблем с зависимостями или других проблем, таких как обновление "
+"версии динамической библиотеки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2551
+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 ""
+"Некоторые типы исправлений имеют \"автоматическое согласование\" от "
+"{portmgr}, что позволяет любому коммиттеру исправлять эти категории проблем "
+"в любом порте. Такие исправления не требуют одобрения от сопровождающего."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2554
+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 ""
+"Автоматическое согласование для большинства портов применяется к "
+"исправлениям, таким как изменения инфраструктуры, или тривиальным и "
+"_проверенным_ исправлениям сборки и выполнения. Текущий список доступен в "
+"extref:{committers-guide}[разделе Портов Руководства коммиттера, ports-qa-"
+"misc-blanket-approval]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2561
+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 ""
+"Другие изменения в порте будут отправлены сопровождающему на проверку и "
+"утверждение перед внесением. Если сопровождающий не отвечает на запрос об "
+"обновлении в течение двух недель (за исключением основных государственных "
+"праздников), это считается превышением времени ожидания сопровождающего, и "
+"обновление может быть внесено без его явного одобрения. Если сопровождающий "
+"не отвечает в течение трех месяцев или если произошло три последовательных "
+"превышения времени ожидания, то сопровождающий считается отсутствующим без "
+"уведомления, и все его порты могут быть возвращены в общий пул. Исключениями "
+"являются порты, сопровождаемые {portmgr} или {security-officer}. Никакие "
+"несанкционированные изменения не могут быть внесены в порты, сопровождаемые "
+"этими группами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2565
+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:2567
+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 ""
+"{portmgr} оставляет за собой право отозвать или изменить права "
+"сопровождающего по любой причине, а {security-officer} оставляет за собой "
+"право отозвать или изменить права сопровождающего по соображениям "
+"безопасности."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2569
+#, no-wrap
+msgid "`COMMENT`"
+msgstr "`COMMENT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2573
+msgid ""
+"The comment is a one-line description of a port shown by `pkg info`. Please "
+"follow these rules when composing it:"
+msgstr ""
+"Комментарий — это однострочное описание порта, отображаемое командой `pkg "
+"info`. При составлении придерживайтесь следующих правил:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2575
+msgid "The COMMENT string should be 70 characters or less."
+msgstr "Строка COMMENT должна быть не длиннее 70 символов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2576
+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:2577
+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:2578
+msgid "Do not start with an indefinite article (that is, A or An)."
+msgstr "Не начинайте с неопределённого артикля (то есть A или An)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2579
+msgid "Capitalize names such as Apache, JavaScript, or Perl."
+msgstr ""
+"Пишите названия с заглавной буквы, например: Apache, JavaScript или Perl."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2580
+msgid "Use a serial comma for lists of words: \"green, red, and blue.\""
+msgstr "Используйте запятую для списков слов: \"green, red, and blue.\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2581
+msgid "Check for spelling errors."
+msgstr "Проверяйте на наличие орфографических ошибок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2583
+msgid "Here is an example:"
+msgstr "Вот пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2587
+#, no-wrap
+msgid "COMMENT=\tCat chasing a mouse all over the screen\n"
+msgstr "COMMENT=\tCat chasing a mouse all over the screen\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2590
+msgid ""
+"The COMMENT variable immediately follows the MAINTAINER variable in the "
+"[.filename]#Makefile#."
+msgstr ""
+"Переменная COMMENT следует сразу за переменной MAINTAINER в файле "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2592
+#, no-wrap
+msgid "Project website"
+msgstr "Веб-сайт проекта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2595
+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:2597
+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:2601
+#, no-wrap
+msgid "WWW=\t\thttps://ffmpeg.org/\n"
+msgstr "WWW=\t\thttps://ffmpeg.org/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2604
+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:2608
+#, no-wrap
+msgid "WWW=\t\thttps://sourceforge.net/projects/mpd/\n"
+msgstr "WWW=\t\thttps://sourceforge.net/projects/mpd/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2611
+msgid ""
+"The WWW variable immediately follows the COMMENT variable in the "
+"[.filename]#Makefile#."
+msgstr ""
+"Переменная WWW следует сразу за переменной COMMENT в файле "
+"[.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2614
+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 ""
+"Если один и тот же контент доступен по HTTP и HTTPS, следует использовать "
+"URL, начинающийся с `https://`. Если URI является корнем веб-сайта или "
+"директории, он должен заканчиваться косой чертой."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2618
+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 ""
+"Эта информация ранее размещалась в последней строке файла [.filename]#pkg-"
+"descr#. Она была перенесена в Makefile для удобства обслуживания и "
+"обработки. Наличие строки `WWW:` в конце файла [.filename]#pkg-descr# "
+"считается устаревшим."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2620
+#, no-wrap
+msgid "Licenses"
+msgstr "Лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2624
+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 ""
+"Каждый порт должен содержать документацию о лицензии, под которой он "
+"распространяется. Если лицензия не одобрена OSI, необходимо также указать "
+"любые ограничения на распространение."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2626
+#, no-wrap
+msgid "`LICENSE`"
+msgstr "`LICENSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2629
+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:2631
+msgid ""
+"If it is one of the licenses listed in crossref:makefiles[licenses-license-"
+"list,Predefined License List], only `LICENSE_FILE` and `LICENSE_DISTFILES` "
+"variables can be set."
+msgstr ""
+"Если это одна из лицензий, перечисленных в crossref:makefiles[licenses-"
+"license-list,Предопределенный список лицензий], можно задать только "
+"переменные `LICENSE_FILE` и `LICENSE_DISTFILES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2635
+msgid ""
+"If this is a license that has not been defined in the ports framework (see "
+"crossref:makefiles[licenses-license-list,Predefined 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 ""
+"Если это лицензия, которая не определена в рамках портов (см. "
+"crossref:makefiles[licenses-license-list,Список предопределённых лицензий]), "
+"необходимо задать `LICENSE_PERMS` и `LICENSE_NAME`, а также `LICENSE_FILE` "
+"или `LICENSE_TEXT`. Также можно задать `LICENSE_DISTFILES` и "
+"`LICENSE_GROUPS`, но это не обязательно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2638
+msgid ""
+"The predefined licenses are shown in crossref:makefiles[licenses-license-"
+"list,Predefined License List]. The current list is always available in "
+"[.filename]#Mk/bsd.licenses.db.mk#."
+msgstr ""
+"Предопределенные лицензии показаны в crossref:makefiles[licenses-license-"
+"list,Список предопределенных лицензий]. Текущий список всегда доступен в "
+"[.filename]#Mk/bsd.licenses.db.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2640
+#, no-wrap
+msgid "Simplest Usage, Predefined Licenses"
+msgstr "Простейшее использование, предопределённые лицензии"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2645
+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 ""
+"Когда в файле [.filename]#README# какого-либо программного обеспечения "
+"указано: «Данное программное обеспечение распространяется на условиях GNU "
+"Lesser General Public License, опубликованной Free Software Foundation; либо "
+"версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии», но "
+"сам файл лицензии не предоставлен, используйте следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2649
+#, no-wrap
+msgid "LICENSE=\tLGPL21+\n"
+msgstr "LICENSE=\tLGPL21+\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2652
+msgid "When the software provides the license file, use this:"
+msgstr ""
+"Когда программное обеспечение предоставляет файл лицензии, используйте это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2657
+#, no-wrap
+msgid ""
+"LICENSE=\tLGPL21+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+"LICENSE=\tLGPL21+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2662
+msgid ""
+"For the predefined licenses, the default permissions are `dist-mirror dist-"
+"sell pkg-mirror pkg-sell auto-accept`."
+msgstr ""
+"Для предопределённых лицензий права по умолчанию: `dist-mirror dist-sell pkg-"
+"mirror pkg-sell auto-accept`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2664
+#, no-wrap
+msgid "Predefined License List"
+msgstr "Предопределенный список лицензий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2668
+#, no-wrap
+msgid "Short Name"
+msgstr "Короткое имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2669
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2670
+#, no-wrap
+msgid "Group"
+msgstr "Группа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2672
+#, no-wrap
+msgid "Permissions"
+msgstr "Разрешения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2673
+#, no-wrap
+msgid "`AGPLv3`"
+msgstr "`AGPLv3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2674
+#, no-wrap
+msgid "GNU Affero General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU Affero версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2675
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2680
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2705
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2905
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2920
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2925
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2930
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2935
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2940
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2945
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2950
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2955
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2960
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2970
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2975
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2980
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2985
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2990
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2995
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3105
+#, no-wrap
+msgid "`FSF GPL OSI`"
+msgstr "`FSF GPL OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2677
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2682
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2687
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2692
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2697
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2702
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2707
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2712
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2717
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2722
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2727
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2732
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2737
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2742
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2747
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2752
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2757
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2762
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2842
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2847
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2852
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2857
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2862
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2867
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2872
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2877
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2882
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2887
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2892
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2897
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2902
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2907
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2912
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2917
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2922
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2927
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2932
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2937
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2942
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2947
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2952
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2957
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2962
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2967
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2972
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2977
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2982
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2987
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2992
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2997
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3037
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3042
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3047
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3052
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3057
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3067
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3072
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3077
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3082
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3087
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3092
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3097
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3102
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3107
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3112
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3117
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3122
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3127
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3132
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3137
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3141
+#, no-wrap
+msgid "(default)"
+msgstr "(по умолчанию)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2678
+#, no-wrap
+msgid "`AGPLv3+`"
+msgstr "`AGPLv3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2679
+#, no-wrap
+msgid "GNU Affero General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU Affero версии 3 (или позднее)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2683
+#, no-wrap
+msgid "`APACHE10`"
+msgstr "`APACHE10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2684
+#, no-wrap
+msgid "Apache License 1.0"
+msgstr "Apache License 1.0"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2685
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2730
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2915
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3080
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3115
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3264
+#, no-wrap
+msgid "`FSF`"
+msgstr "`FSF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2688
+#, no-wrap
+msgid "`APACHE11`"
+msgstr "`APACHE11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2689
+#, no-wrap
+msgid "Apache License 1.1"
+msgstr "Apache License 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2690
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2695
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2895
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2900
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2910
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3000
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3005
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3010
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3015
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3020
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3025
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3030
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3040
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3045
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3050
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3090
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3095
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3100
+#, no-wrap
+msgid "`FSF OSI`"
+msgstr "`FSF OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2693
+#, no-wrap
+msgid "`APACHE20`"
+msgstr "`APACHE20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2694
+#, no-wrap
+msgid "Apache License 2.0"
+msgstr "Apache License 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2698
+#, no-wrap
+msgid "`ART10`"
+msgstr "`ART10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2699
+#, no-wrap
+msgid "Artistic License version 1.0"
+msgstr "Художественная лицензия версия 1.0"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2700
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2710
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3272
+#, no-wrap
+msgid "`OSI`"
+msgstr "`OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2703
+#, no-wrap
+msgid "`ART20`"
+msgstr "`ART20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2704
+#, no-wrap
+msgid "Artistic License version 2.0"
+msgstr "Художественная лицензия версии 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2708
+#, no-wrap
+msgid "`ARTPERL10`"
+msgstr "`ARTPERL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2709
+#, no-wrap
+msgid "Artistic License (perl) version 1.0"
+msgstr "Художественная лицензия (perl) версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2713
+#, no-wrap
+msgid "`BSD`"
+msgstr "`BSD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2714
+#, no-wrap
+msgid "BSD license Generic Version (deprecated)"
+msgstr "Лицензия BSD, общая версия (устарела)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2715
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2720
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2725
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2735
+#, no-wrap
+msgid "`FSF OSI COPYFREE`"
+msgstr "`FSF OSI COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2718
+#, no-wrap
+msgid "`BSD2CLAUSE`"
+msgstr "`BSD2CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2719
+#, no-wrap
+msgid "BSD 2-clause \"Simplified\" License"
+msgstr "BSD 2-пунктная лицензия \"Упрощенная\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2723
+#, no-wrap
+msgid "`BSD3CLAUSE`"
+msgstr "`BSD3CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2724
+#, no-wrap
+msgid "BSD 3-clause \"New\" or \"Revised\" License"
+msgstr "BSD 3-пунктная лицензия \"Новая\" или \"Пересмотренная\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2728
+#, no-wrap
+msgid "`BSD4CLAUSE`"
+msgstr "`BSD4CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2729
+#, no-wrap
+msgid "BSD 4-clause \"Original\" or \"Old\" License"
+msgstr "BSD 4-пунктная лицензия \"Оригинальная\" или \"Старая\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2733
+#, no-wrap
+msgid "`BSL`"
+msgstr "`BSL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2734
+#, no-wrap
+msgid "Boost Software License"
+msgstr "Лицензия программного обеспечения Boost"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2738
+#, no-wrap
+msgid "`CC-BY-1.0`"
+msgstr "`CC-BY-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2739
+#, no-wrap
+msgid "Creative Commons Attribution 1.0"
+msgstr "Creative Commons с указанием авторства 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2743
+#, no-wrap
+msgid "`CC-BY-2.0`"
+msgstr "`CC-BY-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2744
+#, no-wrap
+msgid "Creative Commons Attribution 2.0"
+msgstr "Creative Commons с указанием авторства 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2748
+#, no-wrap
+msgid "`CC-BY-2.5`"
+msgstr "`CC-BY-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2749
+#, no-wrap
+msgid "Creative Commons Attribution 2.5"
+msgstr "Creative Commons с указанием авторства 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2753
+#, no-wrap
+msgid "`CC-BY-3.0`"
+msgstr "`CC-BY-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2754
+#, no-wrap
+msgid "Creative Commons Attribution 3.0"
+msgstr "Creative Commons с указанием авторства 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2758
+#, no-wrap
+msgid "`CC-BY-4.0`"
+msgstr "`CC-BY-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2759
+#, no-wrap
+msgid "Creative Commons Attribution 4.0"
+msgstr "Creative Commons с указанием авторства 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2763
+#, no-wrap
+msgid "`CC-BY-NC-1.0`"
+msgstr "`CC-BY-NC-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2764
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2767
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2772
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2777
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2782
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2787
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2792
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2797
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2802
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2807
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2812
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2817
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2822
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2827
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2832
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2837
+#, no-wrap
+msgid "`dist-mirror``pkg-mirror``auto-accept`"
+msgstr "`dist-mirror``pkg-mirror``auto-accept`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2768
+#, no-wrap
+msgid "`CC-BY-NC-2.0`"
+msgstr "`CC-BY-NC-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2769
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2773
+#, no-wrap
+msgid "`CC-BY-NC-2.5`"
+msgstr "`CC-BY-NC-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2774
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2778
+#, no-wrap
+msgid "`CC-BY-NC-3.0`"
+msgstr "`CC-BY-NC-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2779
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2783
+#, no-wrap
+msgid "`CC-BY-NC-4.0`"
+msgstr "`CC-BY-NC-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2784
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2788
+#, no-wrap
+msgid "`CC-BY-NC-ND-1.0`"
+msgstr "`CC-BY-NC-ND-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2789
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2793
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.0`"
+msgstr "`CC-BY-NC-ND-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2794
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2798
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.5`"
+msgstr "`CC-BY-NC-ND-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2799
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2803
+#, no-wrap
+msgid "`CC-BY-NC-ND-3.0`"
+msgstr "`CC-BY-NC-ND-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2804
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2808
+#, no-wrap
+msgid "`CC-BY-NC-ND-4.0`"
+msgstr "`CC-BY-NC-ND-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2809
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2813
+#, no-wrap
+msgid "`CC-BY-NC-SA-1.0`"
+msgstr "`CC-BY-NC-SA-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2814
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2818
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.0`"
+msgstr "`CC-BY-NC-SA-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2819
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2823
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.5`"
+msgstr "`CC-BY-NC-SA-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2824
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2828
+#, no-wrap
+msgid "`CC-BY-NC-SA-3.0`"
+msgstr "`CC-BY-NC-SA-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2829
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2833
+#, no-wrap
+msgid "`CC-BY-NC-SA-4.0`"
+msgstr "`CC-BY-NC-SA-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2834
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2838
+#, no-wrap
+msgid "`CC-BY-ND-1.0`"
+msgstr "`CC-BY-ND-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2839
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 1.0"
+msgstr "Creative Commons с указанием авторства – без производных 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2843
+#, no-wrap
+msgid "`CC-BY-ND-2.0`"
+msgstr "`CC-BY-ND-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2844
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.0"
+msgstr "Creative Commons с указанием авторства – без производных 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2848
+#, no-wrap
+msgid "`CC-BY-ND-2.5`"
+msgstr "`CC-BY-ND-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2849
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.5"
+msgstr "Creative Commons с указанием авторства – без производных 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2853
+#, no-wrap
+msgid "`CC-BY-ND-3.0`"
+msgstr "`CC-BY-ND-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2854
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 3.0"
+msgstr "Creative Commons с указанием авторства – без производных 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2858
+#, no-wrap
+msgid "`CC-BY-ND-4.0`"
+msgstr "`CC-BY-ND-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2859
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 4.0"
+msgstr "Creative Commons с указанием авторства – без производных 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2863
+#, no-wrap
+msgid "`CC-BY-SA-1.0`"
+msgstr "`CC-BY-SA-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2864
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 1.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2868
+#, no-wrap
+msgid "`CC-BY-SA-2.0`"
+msgstr "`CC-BY-SA-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2869
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2873
+#, no-wrap
+msgid "`CC-BY-SA-2.5`"
+msgstr "`CC-BY-SA-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2874
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.5"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2878
+#, no-wrap
+msgid "`CC-BY-SA-3.0`"
+msgstr "`CC-BY-SA-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2879
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 3.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2883
+#, no-wrap
+msgid "`CC-BY-SA-4.0`"
+msgstr "`CC-BY-SA-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2884
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 4.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2888
+#, no-wrap
+msgid "`CC0-1.0`"
+msgstr "`CC0-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2889
+#, no-wrap
+msgid "Creative Commons Zero v1.0 Universal"
+msgstr "Creative Commons Zero v1.0 Universal (Отказ от прав 1.0 Универсальная)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2890
+#, no-wrap
+msgid "`FSF GPL COPYFREE`"
+msgstr "`FSF GPL COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2893
+#, no-wrap
+msgid "`CDDL`"
+msgstr "`CDDL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2894
+#, no-wrap
+msgid "Common Development and Distribution License"
+msgstr "Лицензия на совместную разработку и распространение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2898
+#, no-wrap
+msgid "`CPAL-1.0`"
+msgstr "`CPAL-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2899
+#, no-wrap
+msgid "Common Public Attribution License"
+msgstr "Публичная лицензия общего распространения с указанием авторства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2903
+#, no-wrap
+msgid "`ClArtistic`"
+msgstr "`ClArtistic`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2904
+#, no-wrap
+msgid "Clarified Artistic License"
+msgstr "Уточнённая художественная лицензия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2908
+#, no-wrap
+msgid "`EPL`"
+msgstr "`EPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2909
+#, no-wrap
+msgid "Eclipse Public License"
+msgstr "Публичная лицензия Eclipse"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2913
+#, no-wrap
+msgid "`GFDL`"
+msgstr "`GFDL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2914
+#, no-wrap
+msgid "GNU Free Documentation License"
+msgstr "GNU Свободная лицензия на документацию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2918
+#, no-wrap
+msgid "`GMGPL`"
+msgstr "`GMGPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2919
+#, no-wrap
+msgid "GNAT Modified General Public License"
+msgstr "Модифицированная Общедоступная лицензия GNAT"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2923
+#, no-wrap
+msgid "`GPLv1`"
+msgstr "`GPLv1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2924
+#, no-wrap
+msgid "GNU General Public License version 1"
+msgstr "Универсальная общественная лицензия GNU версии 1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2928
+#, no-wrap
+msgid "`GPLv1+`"
+msgstr "`GPLv1+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2929
+#, no-wrap
+msgid "GNU General Public License version 1 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 1 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2933
+#, no-wrap
+msgid "`GPLv2`"
+msgstr "`GPLv2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2934
+#, no-wrap
+msgid "GNU General Public License version 2"
+msgstr "Универсальная общественная лицензия GNU версии 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2938
+#, no-wrap
+msgid "`GPLv2+`"
+msgstr "`GPLv2+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2939
+#, no-wrap
+msgid "GNU General Public License version 2 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 2 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2943
+#, no-wrap
+msgid "`GPLv3`"
+msgstr "`GPLv3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2944
+#, no-wrap
+msgid "GNU General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2948
+#, no-wrap
+msgid "`GPLv3+`"
+msgstr "`GPLv3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2949
+#, no-wrap
+msgid "GNU General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 3 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2953
+#, no-wrap
+msgid "`GPLv3RLE`"
+msgstr "`GPLv3RLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2954
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception"
+msgstr "Исключение для библиотеки времени выполнения GNU GPL версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2958
+#, no-wrap
+msgid "`GPLv3RLE+`"
+msgstr "`GPLv3RLE+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2959
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception (or later)"
+msgstr "Исключение для библиотеки времени выполнения GNU GPL версии 3 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2963
+#, no-wrap
+msgid "`ISCL`"
+msgstr "`ISCL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2964
+#, no-wrap
+msgid "Internet Systems Consortium License"
+msgstr "Лицензия Internet Systems Consortium"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2965
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3110
+#, no-wrap
+msgid "`FSF GPL OSI COPYFREE`"
+msgstr "`FSF GPL OSI COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2968
+#, no-wrap
+msgid "`LGPL20`"
+msgstr "`LGPL20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2969
+#, no-wrap
+msgid "GNU Library General Public License version 2.0"
+msgstr "Общедоступная лицензия GNU для библиотек, версия 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2973
+#, no-wrap
+msgid "`LGPL20+`"
+msgstr "`LGPL20+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2974
+#, no-wrap
+msgid "GNU Library General Public License version 2.0 (or later)"
+msgstr "Общедоступная лицензия GNU для библиотек, версия 2.0 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2978
+#, no-wrap
+msgid "`LGPL21`"
+msgstr "`LGPL21`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2979
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 2.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2983
+#, no-wrap
+msgid "`LGPL21+`"
+msgstr "`LGPL21+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2984
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1 (or later)"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 2.1 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2988
+#, no-wrap
+msgid "`LGPL3`"
+msgstr "`LGPL3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2989
+#, no-wrap
+msgid "GNU Lesser General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2993
+#, no-wrap
+msgid "`LGPL3+`"
+msgstr "`LGPL3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2994
+#, no-wrap
+msgid "GNU Lesser General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 3 (или более поздней)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2998
+#, no-wrap
+msgid "`LPPL10`"
+msgstr "`LPPL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2999
+#, no-wrap
+msgid "LaTeX Project Public License version 1.0"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3002
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3007
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3012
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3017
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3022
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3027
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3032
+#, no-wrap
+msgid "`dist-mirror dist-sell`"
+msgstr "`dist-mirror dist-sell`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3003
+#, no-wrap
+msgid "`LPPL11`"
+msgstr "`LPPL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3004
+#, no-wrap
+msgid "LaTeX Project Public License version 1.1"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3008
+#, no-wrap
+msgid "`LPPL12`"
+msgstr "`LPPL12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3009
+#, no-wrap
+msgid "LaTeX Project Public License version 1.2"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3013
+#, no-wrap
+msgid "`LPPL13`"
+msgstr "`LPPL13`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3014
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3018
+#, no-wrap
+msgid "`LPPL13a`"
+msgstr "`LPPL13a`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3019
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3a"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3a"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3023
+#, no-wrap
+msgid "`LPPL13b`"
+msgstr "`LPPL13b`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3024
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3b"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3b"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3028
+#, no-wrap
+msgid "`LPPL13c`"
+msgstr "`LPPL13c`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3029
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3c"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3c"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3033
+#, no-wrap
+msgid "`MIT`"
+msgstr "`MIT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3034
+#, no-wrap
+msgid "MIT license / X11 license"
+msgstr "Лицензия MIT / Лицензия X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3035
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3055
+#, no-wrap
+msgid "`COPYFREE FSF GPL OSI`"
+msgstr "`COPYFREE FSF GPL OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3038
+#, no-wrap
+msgid "`MPL10`"
+msgstr "`MPL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3039
+#, no-wrap
+msgid "Mozilla Public License version 1.0"
+msgstr "Публичная лицензия Mozilla, версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3043
+#, no-wrap
+msgid "`MPL11`"
+msgstr "`MPL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3044
+#, no-wrap
+msgid "Mozilla Public License version 1.1"
+msgstr "Публичная лицензия Mozilla, версия 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3048
+#, no-wrap
+msgid "`MPL20`"
+msgstr "`MPL20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3049
+#, no-wrap
+msgid "Mozilla Public License version 2.0"
+msgstr "Публичная лицензия Mozilla, версия 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3053
+#, no-wrap
+msgid "`NCSA`"
+msgstr "`NCSA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3054
+#, no-wrap
+msgid "University of Illinois/NCSA Open Source License"
+msgstr "Открытая лицензия Университета Иллинойса/NCSA"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3058
+#, no-wrap
+msgid "`NONE`"
+msgstr "`NONE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3059
+#, no-wrap
+msgid "No license specified"
+msgstr "Лицензия не указана"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3062
+#, no-wrap
+msgid "`none`"
+msgstr "`none`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3063
+#, no-wrap
+msgid "`OFL10`"
+msgstr "`OFL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3064
+#, no-wrap
+msgid "SIL Open Font License version 1.0 (https://scripts.sil.org/OFL/)"
+msgstr "Лицензия SIL Open Font версия 1.0 (https://scripts.sil.org/OFL/)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3065
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3070
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3280
+#, no-wrap
+msgid "`FONTS`"
+msgstr "`FONTS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3068
+#, no-wrap
+msgid "`OFL11`"
+msgstr "`OFL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3069
+#, no-wrap
+msgid "SIL Open Font License version 1.1 (https://scripts.sil.org/OFL/)"
+msgstr "Лицензия SIL Open Font версия 1.1 (https://scripts.sil.org/OFL/)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3073
+#, no-wrap
+msgid "`OWL`"
+msgstr "`OWL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3074
+#, no-wrap
+msgid "Open Works License (owl.apotheon.org)"
+msgstr "Лицензия Открытых Произведений (owl.apotheon.org)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3075
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3276
+#, no-wrap
+msgid "`COPYFREE`"
+msgstr "`COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3078
+#, no-wrap
+msgid "`OpenSSL`"
+msgstr "`OpenSSL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3079
+#, no-wrap
+msgid "OpenSSL License"
+msgstr "Лицензия OpenSSL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3083
+#, no-wrap
+msgid "`PD`"
+msgstr "`PD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3084
+#, no-wrap
+msgid "Public Domain"
+msgstr "Общественное достояние"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3085
+#, no-wrap
+msgid "`GPL COPYFREE`"
+msgstr "`GPL COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3088
+#, no-wrap
+msgid "`PHP202`"
+msgstr "`PHP202`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3089
+#, no-wrap
+msgid "PHP License version 2.02"
+msgstr "Лицензия PHP версии 2.02"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3093
+#, no-wrap
+msgid "`PHP30`"
+msgstr "`PHP30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3094
+#, no-wrap
+msgid "PHP License version 3.0"
+msgstr "Лицензия PHP версии 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3098
+#, no-wrap
+msgid "`PHP301`"
+msgstr "`PHP301`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3099
+#, no-wrap
+msgid "PHP License version 3.01"
+msgstr "Лицензия PHP версии 3.01"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3103
+#, no-wrap
+msgid "`PSFL`"
+msgstr "`PSFL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3104
+#, no-wrap
+msgid "Python Software Foundation License"
+msgstr "Лицензия Python Software Foundation"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3108
+#, no-wrap
+msgid "`PostgreSQL`"
+msgstr "`PostgreSQL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3109
+#, no-wrap
+msgid "PostgreSQL License"
+msgstr "Лицензия PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3113
+#, no-wrap
+msgid "`RUBY`"
+msgstr "`RUBY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3114
+#, no-wrap
+msgid "Ruby License"
+msgstr "Лицензия Ruby"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3118
+#, no-wrap
+msgid "`UNLICENSE`"
+msgstr "`UNLICENSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3119
+#, no-wrap
+msgid "The Unlicense"
+msgstr "Отказ от лицензии (The Unlicense)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3120
+#, no-wrap
+msgid "`COPYFREE FSF GPL`"
+msgstr "`COPYFREE FSF GPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3123
+#, no-wrap
+msgid "`WTFPL`"
+msgstr "`WTFPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3124
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 2"
+msgstr "Публичная лицензия \"Делай что хочешь\" версия 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3125
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3130
+#, no-wrap
+msgid "`GPL FSF COPYFREE`"
+msgstr "`GPL FSF COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3128
+#, no-wrap
+msgid "`WTFPL1`"
+msgstr "`WTFPL1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3129
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 1"
+msgstr "Публичная лицензия \"Делай что хочешь\" версия 1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3133
+#, no-wrap
+msgid "`ZLIB`"
+msgstr "`ZLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3134
+#, no-wrap
+msgid "zlib License"
+msgstr "Лицензия zlib"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3135
+#, no-wrap
+msgid "`GPL FSF OSI`"
+msgstr "`GPL FSF OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3138
+#, no-wrap
+msgid "`ZPL21`"
+msgstr "`ZPL21`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3139
+#, no-wrap
+msgid "Zope Public License version 2.1"
+msgstr "Публичная лицензия Zope версия 2.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3140
+#, no-wrap
+msgid "`GPL OSI`"
+msgstr "`GPL OSI`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3144
+#, no-wrap
+msgid "`LICENSE_PERMS` and `LICENSE_PERMS_NAME_`"
+msgstr "`LICENSE_PERMS` и `LICENSE_PERMS_NAME_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3147
+msgid "Permissions. use `none` if empty."
+msgstr "Разрешения. Используйте `none`, если пусто."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3148
+#, no-wrap
+msgid "License Permissions List"
+msgstr "Список разрешений лицензии"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3150
+#, no-wrap
+msgid "`dist-mirror`"
+msgstr "`dist-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3153
+msgid ""
+"Redistribution of the distribution files is permitted. The distribution "
+"files will be added to the FreeBSD `MASTER_SITE_BACKUP` CDN."
+msgstr ""
+"Разрешается распространение дистрибутивных файлов. Дистрибутивные файлы "
+"будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3155
+#, no-wrap
+msgid "`no-dist-mirror`"
+msgstr "`no-dist-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3159
+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 ""
+"Распространение дистрибутивных файлов запрещено. Это эквивалентно установке "
+"crossref:special[porting-restrictions-restricted,`RESTRICTED`]. "
+"Дистрибутивные файлы _не_ будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3161
+#, no-wrap
+msgid "`dist-sell`"
+msgstr "`dist-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3164
+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:3166
+#, no-wrap
+msgid "`no-dist-sell`"
+msgstr "`no-dist-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3169
+msgid ""
+"Selling of distribution files is prohibited. This is equivalent to setting "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]."
+msgstr ""
+"Продажа файлов дистрибутива запрещена. Это эквивалентно установке "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3171
+#, no-wrap
+msgid "`pkg-mirror`"
+msgstr "`pkg-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3174
+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 ""
+"Свободное распространение пакета разрешено. Пакет будет распространяться "
+"через CDN пакетов FreeBSD https://pkg.freebsd.org/[https://pkg.freebsd.org/]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3176
+#, no-wrap
+msgid "`no-pkg-mirror`"
+msgstr "`no-pkg-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3180
+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 ""
+"Свободное распространение пакета запрещено. Эквивалентно установке "
+"crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. Пакет _не_ "
+"будет распространяться через FreeBSD CDN для пакетов https://pkg.freebsd.org/"
+"[https://pkg.freebsd.org/]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3182
+#, no-wrap
+msgid "`pkg-sell`"
+msgstr "`pkg-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3185
+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:3187
+#, no-wrap
+msgid "`no-pkg-sell`"
+msgstr "`no-pkg-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3191
+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 ""
+"Продажа пакета запрещена. Это эквивалентно установке "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]. Пакет _не_ будет "
+"присутствовать на образах установщика."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3193
+#, no-wrap
+msgid "`auto-accept`"
+msgstr "`auto-accept`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3197
+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 ""
+"Лицензия принимается по умолчанию. Запросы на принятие лицензии не "
+"отображаются, если пользователь не определил `LICENSES_ASK`. Используйте "
+"это, если в лицензии не указано, что пользователь должен принять условия "
+"лицензии."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3199
+#, no-wrap
+msgid "`no-auto-accept`"
+msgstr "`no-auto-accept`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3203
+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:3205
+msgid ""
+"When both `_permission_` and `no-_permission_` is present the `no-"
+"_permission_` will cancel `_permission_`."
+msgstr ""
+"Когда присутствуют и `_permission_`, и `no-_permission_`, то `no-"
+"_permission_` отменяет `_permission_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3207
+msgid ""
+"When `_permission_` is not present, it is considered to be a `no-"
+"_permission_`."
+msgstr "Когда `_permission_` отсутствует, это считается как `no-_permission_`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3211
+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:3213
+msgid ""
+"A port without the `auto-accept` permission will never be be built and all "
+"the ports depending on it will be ignored."
+msgstr ""
+"Порт без разрешения `auto-accept` никогда не будет собран, и все зависящие "
+"от него порты будут проигнорированы."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3215
+msgid ""
+"A port without the `pkg-mirror` permission, and any ports that depend on it, "
+"will be removed after the build, thus ensuring they are not distributed."
+msgstr ""
+"Порт без разрешения `pkg-mirror`, а также любые порты, зависящие от него, "
+"будут удалены после сборки, что гарантирует их отсутствие в дистрибуции."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3218
+#, no-wrap
+msgid "Nonstandard License"
+msgstr "Нестандартная лицензия"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3222
+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:3230
+#, 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 ""
+"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"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3235
+#, no-wrap
+msgid "Standard and Nonstandard Licenses"
+msgstr "Стандартные и нестандартные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3241
+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 ""
+"Прочитайте условия лицензии и укажите их, используя доступные разрешения. В "
+"случае сомнений обратитесь за разъяснениями на {freebsd-ports}."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3249
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3255
+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 ""
+"Когда разрешения лицензий GPLv2 и UNKNOWN смешиваются, порт получает `dist-"
+"mirror dist-sell pkg-mirror pkg-sell auto-accept dist-mirror no-dist-sell "
+"pkg-mirror no-pkg-sell auto-accept`. Опции `no-_разрешения_` отменяют "
+"соответствующие _разрешения_. Итоговый список разрешений: _dist-mirror pkg-"
+"mirror auto-accept_. Файлы дистрибутива и пакеты не будут доступны в образах "
+"установщика."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3258
+#, no-wrap
+msgid "`LICENSE_GROUPS` and `LICENSE_GROUPS_NAME`"
+msgstr "`LICENSE_GROUPS` и `LICENSE_GROUPS_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3261
+msgid "Groups the license belongs."
+msgstr "Группы, к которым принадлежит лицензия."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3262
+#, no-wrap
+msgid "Predefined License Groups List"
+msgstr "Список предопределенных групп лицензий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3266
+msgid ""
+"Free Software Foundation Approved, see the https://www.fsf.org/licensing/"
+"[FSF Licensing & Compliance Team]."
+msgstr ""
+"Одобрено Free Software Foundation, см. https://www.fsf.org/licensing/"
+"[Команда по лицензированию и соответствию FSF]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3268
+#, no-wrap
+msgid "`GPL`"
+msgstr "`GPL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3270
+msgid "GPL Compatible"
+msgstr "Совместимые с GPL"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3274
+msgid ""
+"OSI Approved, see the Open Source Initiative https://opensource.org/licenses/"
+"[Open Source Licenses] page."
+msgstr ""
+"Одобрено OSI, см. страницу https://opensource.org/licenses/[Открытых "
+"лицензий]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3278
+msgid ""
+"Comply with Copyfree Standard Definition, see the https://copyfree.org/"
+"standard/licenses/[Copyfree Licenses] page."
+msgstr ""
+"Соответствует определению стандарта Copyfree, см. страницу https://"
+"copyfree.org/standard/licenses/[лицензий Copyfree]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3282
+msgid "Font licenses"
+msgstr "Лицензии на шрифты"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3284
+#, no-wrap
+msgid "`LICENSE_NAME` and `LICENSE_NAME_NAME`"
+msgstr "`LICENSE_NAME` и `LICENSE_NAME_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3287
+msgid "Full name of the license."
+msgstr "Полное название лицензии."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3289
+#, no-wrap
+msgid "`LICENSE_NAME`"
+msgstr "`LICENSE_NAME`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3299
+#, 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 ""
+"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"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3304
+#, no-wrap
+msgid "`LICENSE_FILE` and `LICENSE_FILE_NAME`"
+msgstr "`LICENSE_FILE` и `LICENSE_FILE_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3309
+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 crossref:makefiles[licenses-"
+"license_text,`LICENSE_TEXT`], put it in a new file in [.filename]#${FILESDIR}"
+"#."
+msgstr ""
+"Полный путь к файлу, содержащему текст лицензии, обычно [.filename]#$"
+"{WRKSRC}/some/file#. Если файл отсутствует в дистрибутиве, а его содержимое "
+"слишком длинное для размещения в crossref:makefiles[licenses-"
+"license_text,`LICENSE_TEXT`], поместите его в новый файл в [.filename]#$"
+"{FILESDIR}#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3311
+#, no-wrap
+msgid "`LICENSE_FILE`"
+msgstr "`LICENSE_FILE`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3319
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv3+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+"LICENSE=\tGPLv3+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3324
+#, no-wrap
+msgid "`LICENSE_TEXT` and `LICENSE_TEXT_NAME`"
+msgstr "`LICENSE_TEXT` и `LICENSE_TEXT_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3328
+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:3330
+#, no-wrap
+msgid "`LICENSE_TEXT`"
+msgstr "`LICENSE_TEXT`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3341
+#, 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 ""
+"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"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3346
+#, no-wrap
+msgid "`LICENSE_DISTFILES` and `LICENSE_DISTFILES_NAME`"
+msgstr "`LICENSE_DISTFILES` и `LICENSE_DISTFILES_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3350
+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:3352
+#, no-wrap
+msgid "`LICENSE_DISTFILES`"
+msgstr "`LICENSE_DISTFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3357
+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:3362
+#, no-wrap
+msgid ""
+"MASTER_SITES= SF/some-game\n"
+"DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip\n"
+msgstr ""
+"MASTER_SITES= SF/some-game\n"
+"DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3370
+#, 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 ""
+"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"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3375
+#, no-wrap
+msgid "`LICENSE_COMB`"
+msgstr "`LICENSE_COMB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3380
+msgid ""
+"Set to `multi` if all licenses apply. Set to `dual` if any license "
+"applies. Defaults to `single`."
+msgstr ""
+"Установите значение `multi`, если применяются все лицензии. Установите "
+"значение `dual`, если применяется любая из лицензий. По умолчанию "
+"используется значение `single`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3382
+#, no-wrap
+msgid "Dual Licenses"
+msgstr "Двойные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3389
+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 ""
+"Когда порт содержит указание «Это программное обеспечение может "
+"распространяться под GNU General Public License или Artistic License», это "
+"означает, что можно использовать любую из этих лицензий. Используйте "
+"следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3394
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+msgstr ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3397
+msgid "If license files are provided, use this:"
+msgstr "Если предоставлены файлы лицензий, используйте это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3404
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_FILE_ART10= ${WRKSRC}/Artistic\n"
+"LICENSE_FILE_GPLv1= ${WRKSRC}/Copying\n"
+msgstr ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_FILE_ART10= ${WRKSRC}/Artistic\n"
+"LICENSE_FILE_GPLv1= ${WRKSRC}/Copying\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3409
+#, no-wrap
+msgid "Multiple Licenses"
+msgstr "Множественные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3414
+msgid ""
+"When part of a port has one license, and another part has a different "
+"license, use `multi`:"
+msgstr ""
+"Если часть порта имеет одну лицензию, а другая часть — другую, используйте "
+"`multi`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3419
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv2 LGPL21+\n"
+"LICENSE_COMB=\tmulti\n"
+msgstr ""
+"LICENSE=\tGPLv2 LGPL21+\n"
+"LICENSE_COMB=\tmulti\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3424
+#, no-wrap
+msgid "`PORTSCOUT`"
+msgstr "`PORTSCOUT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3427
+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 ""
+"Portscout — это автоматизированная утилита проверки distfile для Коллекции "
+"портов FreeBSD, подробно описанная в crossref:keeping-up[distfile-"
+"survey,Portscout: сканирование distfile портов FreeBSD]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3429
+msgid ""
+"`PORTSCOUT` defines special conditions within which the Portscout distfile "
+"scanner is restricted."
+msgstr ""
+"`PORTSCOUT` определяет специальные условия, в рамках которых работа сканера "
+"дистрибутивных файлов Portscout ограничена."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3431
+msgid "Situations where `PORTSCOUT` is set include:"
+msgstr "Ситуации, когда установлена переменная `PORTSCOUT`, включают:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3433
+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 ""
+"Когда необходимо игнорировать distfiles для определённых версий. Например, "
+"чтобы исключить версию _8.2_ и версию _8.3_ из проверок версий distfiles, "
+"так как известно, что они неработоспособны, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3437
+#, no-wrap
+msgid "PORTSCOUT=\tskipv:8.2,8.3\n"
+msgstr "PORTSCOUT=\tskipv:8.2,8.3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3440
+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 ""
+"Когда проверки версий distfile необходимо полностью отключить. Например, "
+"если порт больше не будет обновляться, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3444
+#, no-wrap
+msgid "PORTSCOUT=\tignore:1\n"
+msgstr "PORTSCOUT=\tignore:1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3447
+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 ""
+"Когда необходимо проверять конкретные версии или определенные мажорные и "
+"минорные редакции distfile. Например, если нужно отслеживать только версию "
+"_0.6.4_, потому что более новые версии имеют проблемы совместимости с "
+"FreeBSD, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3451
+#, no-wrap
+msgid "PORTSCOUT=\tlimit:^0\\.6\\.4\n"
+msgstr "PORTSCOUT=\tlimit:^0\\.6\\.4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3454
+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 ""
+"Когда URL-адреса, перечисляющие доступные версии, отличаются от URL-адресов "
+"загрузки. Например, чтобы ограничить проверку версий distfile страницей "
+"загрузки для пакета: package:databases/pgtune[] добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3458
+#, no-wrap
+msgid "PORTSCOUT=\tsite:http://www.renpy.org/dl/release/\n"
+msgstr "PORTSCOUT=\tsite:http://www.renpy.org/dl/release/\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3461
+#, no-wrap
+msgid "Dependencies"
+msgstr "Зависимости"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3468
+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 ""
+"Многие порты зависят от других портов. Это очень удобная особенность "
+"большинства Unix-подобных операционных систем, включая FreeBSD. Несколько "
+"портов могут использовать общую зависимость вместо того, чтобы включать эту "
+"зависимость в каждый порт или пакет, который в ней нуждается. Существует "
+"семь переменных, которые можно использовать для обеспечения наличия всех "
+"необходимых компонентов на машине пользователя. Также есть предопределенные "
+"переменные зависимостей для распространенных случаев и несколько "
+"дополнительных для управления поведением зависимостей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3474
+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 ""
+"Когда у программного обеспечения есть дополнительные зависимости, "
+"предоставляющие дополнительные возможности, основные зависимости, "
+"перечисленные в `*_DEPENDS`, должны включать те дополнительные зависимости, "
+"которые будут полезны большинству пользователей. Основные зависимости "
+"никогда не должны быть \"минимальным\" набором зависимостей. Цель состоит не "
+"в том, чтобы включить все возможные зависимости. Включайте только те, "
+"которые будут полезны большинству людей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3477
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4830
+#, no-wrap
+msgid "`LIB_DEPENDS`"
+msgstr "`LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3482
+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 ""
+"Эта переменная определяет разделяемые библиотеки, от которых зависит данный "
+"порт. Это список кортежей вида `_lib:dir_`, где `_lib_` — имя разделяемой "
+"библиотеки, а `_dir_` — директория, в которой её следует искать, если она "
+"недоступна. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3486
+#, no-wrap
+msgid "LIB_DEPENDS= libjpeg.so:graphics/jpeg\n"
+msgstr "LIB_DEPENDS= libjpeg.so:graphics/jpeg\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3489
+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 ""
+"проверит наличие общей библиотеки jpeg с любой версией и перейдет в "
+"подкаталог [.filename]#graphics/jpeg# дерева портов, чтобы собрать и "
+"установить её, если она не найдена."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3492
+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 ""
+"Зависимость проверяется дважды: один раз внутри цели `build` и затем внутри "
+"цели `install`. Также имя зависимости добавляется в пакет, чтобы `pkg "
+"install` (см. man:pkg-install[8]) автоматически установил её, если её нет в "
+"системе пользователя."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3494
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4831
+#, no-wrap
+msgid "`RUN_DEPENDS`"
+msgstr "`RUN_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3499
+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 ""
+"Эта переменная определяет исполняемые файлы или файлы, от которых зависит "
+"порт во время выполнения. Это список кортежей ``_path:dir_``[:``_target_``], "
+"где `_path_` — это имя исполняемого файла или файла, _dir_ — директория, в "
+"которой его следует искать, если он недоступен, а _target_ — цель, которую "
+"нужно вызвать в этой директории. Если _path_ начинается с косой черты (`/`), "
+"он считается файлом, и его существование проверяется с помощью `test -e`; в "
+"противном случае предполагается, что это исполняемый файл, и `which -s` "
+"используется для проверки наличия программы в пути поиска."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3501
+msgid "For example,"
+msgstr "Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3506
+#, no-wrap
+msgid ""
+"RUN_DEPENDS=\t${LOCALBASE}/news/bin/innd:news/inn \\\n"
+"\t\txmlcatmgr:textproc/xmlcatmgr\n"
+msgstr ""
+"RUN_DEPENDS=\t${LOCALBASE}/news/bin/innd:news/inn \\\n"
+"\t\txmlcatmgr:textproc/xmlcatmgr\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3510
+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 ""
+"проверит, существует ли файл или каталог [.filename]#/usr/local/news/bin/"
+"innd#, и соберет и установит его из подкаталога [.filename]#news/inn# дерева "
+"портов, если он не найден. Также будет проверено, находится ли исполняемый "
+"файл `xmlcatmgr` в пути поиска, и если он не найден, будет выполнен переход "
+"в [.filename]#textproc/xmlcatmgr# для сборки и установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3515
+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 ""
+"В этом случае `innd` является исполняемым файлом; если исполняемый файл "
+"находится в месте, которое не ожидается в пути поиска, используйте полный "
+"путь."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3520
+msgid "The official search `PATH` used on the ports build cluster is"
+msgstr "Официальный путь поиска `PATH`, используемый в кластере сборки портов"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3524
+#, no-wrap
+msgid "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+msgstr "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3531
+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 ""
+"Зависимость проверяется внутри цели `install`. Также имя зависимости "
+"добавляется в пакет, чтобы команда `pkg install` (см. man:pkg-install[8]) "
+"автоматически установила её, если она отсутствует в системе пользователя. "
+"Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3534
+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 ""
+"Довольно распространённая ситуация, когда `RUN_DEPENDS` буквально совпадает "
+"с `BUILD_DEPENDS`, особенно если портируемое программное обеспечение "
+"написано на скриптовом языке или требует одинаковой среды для сборки и "
+"выполнения. В этом случае возникает соблазн и интуитивное желание напрямую "
+"присвоить одно другому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3538
+#, no-wrap
+msgid "RUN_DEPENDS=\t${BUILD_DEPENDS}\n"
+msgstr "RUN_DEPENDS=\t${BUILD_DEPENDS}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3545
+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 ""
+"Однако такое присваивание может загрязнить зависимости во время выполнения "
+"записями, не определёнными в оригинальном `BUILD_DEPENDS` порта. Это "
+"происходит из-за ленивого вычисления присваивания переменных в man:make[1]. "
+"Рассмотрим [.filename]#Makefile# с `USE_*`, которые обрабатываются "
+"[.filename]#ports/Mk/bsd.*.mk# для добавления начальных зависимостей сборки. "
+"Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. "
+"Чтобы предотвратить попадание таких дополнительных зависимостей в "
+"`RUN_DEPENDS`, создайте другую переменную с текущим содержимым "
+"`BUILD_DEPENDS` и присвойте её как `BUILD_DEPENDS`, так и `RUN_DEPENDS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3552
+#, 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 ""
+"MY_DEPENDS=\tsome:devel/some \\\n"
+"\t\tother:lang/other\n"
+"BUILD_DEPENDS=\t${MY_DEPENDS}\n"
+"RUN_DEPENDS=\t${MY_DEPENDS}\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3558
+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 ""
+"_Не используйте_ `:=` для присваивания `BUILD_DEPENDS` в `RUN_DEPENDS` или "
+"наоборот. Все переменные раскрываются немедленно, что является совершенно "
+"неправильным и почти всегда приводит к ошибке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3561
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4829
+#, no-wrap
+msgid "`BUILD_DEPENDS`"
+msgstr "`BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3566
+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 ""
+"Эта переменная указывает исполняемые файлы или файлы, необходимые для сборки "
+"данного порта. Как и `RUN_DEPENDS`, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3570
+#, no-wrap
+msgid "BUILD_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr "BUILD_DEPENDS=\tunzip:archivers/unzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3573
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3611
+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 ""
+"проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог "
+"[.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, "
+"если он не будет найден."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3579
+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 ""
+"\"build\" здесь означает все процессы от извлечения до компиляции. "
+"Зависимость проверяется внутри цели `extract`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3582
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4828
+#, no-wrap
+msgid "`FETCH_DEPENDS`"
+msgstr "`FETCH_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3587
+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 ""
+"Эта переменная определяет исполняемые файлы или файлы, необходимые для "
+"загрузки этого порта. Как и предыдущие две, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3591
+#, no-wrap
+msgid "FETCH_DEPENDS=\tncftp2:net/ncftp2\n"
+msgstr "FETCH_DEPENDS=\tncftp2:net/ncftp2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3594
+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 ""
+"проверит наличие исполняемого файла с именем `ncftp2` и перейдет в "
+"подкаталог [.filename]#net/ncftp2# дерева портов для сборки и установки, "
+"если файл не будет найден."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3597
+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 ""
+"Зависимость проверяется внутри цели `fetch`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3599
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4826
+#, no-wrap
+msgid "`EXTRACT_DEPENDS`"
+msgstr "`EXTRACT_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3604
+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 ""
+"Эта переменная указывает исполняемые файлы или файлы, которые требуются для "
+"извлечения данного порта. Как и предыдущая, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3608
+#, no-wrap
+msgid "EXTRACT_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr "EXTRACT_DEPENDS=\tunzip:archivers/unzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3614
+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 ""
+"Зависимость проверяется внутри цели `extract`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3618
+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 ""
+"Используйте эту переменную только если извлечение уже не работает (по "
+"умолчанию предполагается `tar`) и не может быть исправлено с помощью "
+"`USES=tar`, `USES=lha` или `USES=zip`, как описано в "
+"crossref:uses[uses,Использование макросов `USES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3621
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4827
+#, no-wrap
+msgid "`PATCH_DEPENDS`"
+msgstr "`PATCH_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3625
+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 ""
+"Эта переменная указывает исполняемые файлы или файлы, которые требуются "
+"этому порту для применения патчей. Как и предыдущая, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3629
+#, no-wrap
+msgid "PATCH_DEPENDS=\t${NONEXISTENT}:java/jfc:extract\n"
+msgstr "PATCH_DEPENDS=\t${NONEXISTENT}:java/jfc:extract\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3632
+msgid ""
+"will descend into the [.filename]#java/jfc# subdirectory of the ports tree "
+"to extract it."
+msgstr ""
+"будет спускаться в подкаталог [.filename]#java/jfc# дерева портов для его "
+"извлечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3635
+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 ""
+"Зависимость проверяется в рамках цели `patch`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3637
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4908
+#, no-wrap
+msgid "`USES`"
+msgstr "`USES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3641
+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 ""
+"Параметры могут быть добавлены для определения различных функций и "
+"зависимостей, используемых портом. Они указываются путем добавления этой "
+"строки в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3645
+#, no-wrap
+msgid "USES= feature[:arguments]\n"
+msgstr "USES= feature[:arguments]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3648
+msgid ""
+"For the complete list of values, please see crossref:uses[uses,Using `USES` "
+"Macros]."
+msgstr ""
+"Для полного списка значений обратитесь к crossref:uses[uses,Использование "
+"макросов `USES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3652
+msgid ""
+"`USES` cannot be assigned after inclusion of [.filename]#bsd.port.pre.mk#."
+msgstr "`USES` нельзя назначать после включения [.filename]#bsd.port.pre.mk#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3655
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3677
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4205
+#, no-wrap
+msgid "`USE_*`"
+msgstr "`USE_*`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3662
+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 ""
+"Существует несколько переменных для определения общих зависимостей, "
+"используемых многими портами. Их использование необязательно, но помогает "
+"сократить многословность [.filename]##Makefile## портов. Каждая из них "
+"оформлена как `USE_*`. Эти переменные могут использоваться только в "
+"[.filename]##Makefile## портов и [.filename]#ports/Mk/bsd.*.mk#. Они не "
+"предназначены для настраиваемых пользователем опций — для этой цели "
+"используйте `PORT_OPTIONS`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3667
+msgid ""
+"It is _always_ incorrect to set any `USE_*` in [.filename]#/etc/make.conf#. "
+"For instance, setting"
+msgstr ""
+"Всегда неправильно устанавливать любые `USE_*` в [.filename]#/etc/"
+"make.conf#. Например, установка"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3671
+#, no-wrap
+msgid "USE_GCC=X.Y\n"
+msgstr "USE_GCC=X.Y\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3674
+msgid ""
+"(where X.Y is version number) would add a dependency on gccXY for every "
+"port, including `lang/gccXY` itself!"
+msgstr ""
+"(где X.Y — номер версии) добавит зависимость от gccXY для каждого порта, "
+"включая сам `lang/gccXY`!"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3683
+#, no-wrap
+msgid "Means"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3684
+#, no-wrap
+msgid "`USE_GCC`"
+msgstr "`USE_GCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3709
+#, 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 ""
+"Порт требует GCC (`gcc` или `{g-plus-plus}`) для сборки.\n"
+"Некоторые порты нуждаются в определённой, старой версии GCC, другие требуют современных, актуальных версий.\n"
+"Обычно устанавливается в `yes` (означает всегда использовать стабильную, современную версию GCC из портов, согласно `GCC_DEFAULT` в [.filename]#Mk/bsd.default-versions.mk#).\n"
+"Это также значение по умолчанию.\n"
+"Точная версия также может быть указана, например, значением `10`.\n"
+"GCC из базовой системы используется, если он удовлетворяет запрашиваемой версии, в противном случае подходящий компилятор собирается из портов, а `CC` и `CXX` корректируются соответствующим образом.\n"
+"Аргумент `:build`, следующий за указанием версии, добавляет только зависимость во время сборки порта.\n"
+"\n"
+"Например:\n"
+"[example]\n"
+"====\n"
+"[.programlisting]\n"
+"....\n"
+"USE_GCC=yes\t\t# порт требует текущей версии GCC\n"
+"USE_GCC=11:build\t# порт требует GCC 11 только во время сборки\n"
+"....\n"
+"====\n"
+"\n"
+"[NOTE]\n"
+"====\n"
+"`USE_GCC=any` устарел и не должен использоваться в новых портах\n"
+"===="
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3718
+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 ""
+"Переменные, связанные с gmake и [.filename]#configure#, описаны в "
+"crossref:special[building,Механизмы сборки], тогда как autoconf, automake и "
+"libtool описаны в crossref:special[using-autotools,Использование GNU "
+"Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-"
+"perl,Использование Perl]. Переменные X11 перечислены в "
+"crossref:special[using-x11,Использование X11]. crossref:special[using-"
+"gnome,Использование GNOME] посвящено GNOME, а crossref:special[using-"
+"kde,Использование KDE] — переменным, связанным с KDE. crossref:special[using-"
+"java,Использование Java] документирует переменные Java, тогда как "
+"crossref:special[using-php,Веб-приложения, Apache и PHP] содержит информацию "
+"о модулях Apache, PHP и PEAR. Python обсуждается в crossref:special[using-"
+"python,Использование Python], а Ruby — в crossref:special[using-"
+"ruby,Использование Ruby]. crossref:special[using-sdl,Использование SDL] "
+"предоставляет переменные, используемые для приложений SDL, и, наконец, "
+"crossref:special[using-xfce,Использование Xfce] содержит информацию о Xfce."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3720
+#, no-wrap
+msgid "Minimal Version of a Dependency"
+msgstr "Минимальная версия зависимого пакета"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3723
+msgid ""
+"A minimal version of a dependency can be specified in any `*_DEPENDS` except "
+"`LIB_DEPENDS` using this syntax:"
+msgstr ""
+"Минимальная версия зависимого пакета может быть указана в любом `*_DEPENDS`, "
+"кроме `LIB_DEPENDS`, используя следующий синтаксис:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3727
+#, no-wrap
+msgid "p5-Spiffy>=0.26:devel/p5-Spiffy\n"
+msgstr "p5-Spiffy>=0.26:devel/p5-Spiffy\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3731
+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 ""
+"Первое поле содержит имя зависимого пакета, которое должно соответствовать "
+"записи в базе данных пакетов, знак сравнения и версию пакета. Зависимость "
+"считается удовлетворённой, если на машине установлен p5-Spiffy-0.26 или "
+"новее."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3733
+#, no-wrap
+msgid "Notes on Dependencies"
+msgstr "Заметки о зависимостях"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3739
+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 ""
+"Как упомянуто выше, цель по умолчанию, вызываемая при необходимости "
+"зависимости, — это `DEPENDS_TARGET`. По умолчанию она установлена в "
+"`install`. Это пользовательская переменная; она никогда не определяется в "
+"[.filename]#Makefile# порта. Если порту требуется особый способ обработки "
+"зависимости, используйте часть `:target` в `*_DEPENDS` вместо "
+"переопределения `DEPENDS_TARGET`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3743
+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 ""
+"При выполнении `make clean` зависимости портов также автоматически "
+"очищаются. Если это нежелательно, определите переменную `NOCLEANDEPENDS` в "
+"окружении. Это может быть особенно полезно, если среди зависимостей порта "
+"есть что-то, что требует много времени для пересборки, например KDE, GNOME "
+"или Mozilla."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3748
+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 ""
+"Для безусловной зависимости от другого порта используйте переменную `$"
+"{NONEXISTENT}` в качестве первого поля `BUILD_DEPENDS` или `RUN_DEPENDS`. "
+"Используйте это только в случае, когда необходим исходный код другого порта. "
+"Время компиляции можно сократить, указав также цель. Например"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3752
+#, no-wrap
+msgid "BUILD_DEPENDS=\t${NONEXISTENT}:graphics/jpeg:extract\n"
+msgstr "BUILD_DEPENDS=\t${NONEXISTENT}:graphics/jpeg:extract\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3755
+msgid "will always descend to the `jpeg` port and extract it."
+msgstr "всегда будет переходить к порту `jpeg` и извлекать его."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3757
+#, no-wrap
+msgid "Circular Dependencies Are Fatal"
+msgstr "Циклические зависимости фатальны"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3762
+msgid "Do not introduce any circular dependencies into the ports tree!"
+msgstr "Не создавайте циклических зависимостей в дереве портов!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3769
+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 ""
+"Технология сборки портов не допускает циклических зависимостей. Если такая "
+"зависимость будет добавлена, у кого-то в мире почти сразу окажется сломанной "
+"установка FreeBSD, а за этим последуют многие другие. Подобные проблемы "
+"бывает очень сложно обнаружить. Если есть сомнения, перед внесением "
+"изменений обязательно выполните: `cd /usr/ports; make index`. Этот процесс "
+"может быть довольно медленным на старых машинах, но он способен избавить "
+"множество людей, включая вас, от серьёзных проблем."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3771
+#, no-wrap
+msgid "Problems Caused by Automatic Dependencies"
+msgstr "Проблемы, вызванные автоматическими зависимостями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3776
+msgid ""
+"Dependencies must be declared either explicitly or by using the "
+"crossref:makefiles[makefile-options,OPTIONS framework]. Using other methods "
+"like automatic detection complicates indexing, which causes problems for "
+"port and package management."
+msgstr ""
+"Зависимости должны быть объявлены явно или с использованием "
+"crossref:makefiles[makefile-options,OPTIONS framework]. Использование других "
+"методов, таких как автоматическое обнаружение, усложняет индексацию, что "
+"вызывает проблемы для управления портами и пакетами."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3778
+#, no-wrap
+msgid "Wrong Declaration of an Optional Dependency"
+msgstr "Неправильное объявление необязательной зависимости"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3785
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3789
+#, no-wrap
+msgid ""
+".if exists(${LOCALBASE}/bin/foo)\n"
+"LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+".endif\n"
+msgstr ""
+".if exists(${LOCALBASE}/bin/foo)\n"
+"LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3798
+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:3800
+#, no-wrap
+msgid "Correct Declaration of an Optional Dependency"
+msgstr "Правильное объявление необязательной зависимости"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3808
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tBAR\n"
+"BAR_DESC=\tCalling cellphones via bar\n"
+msgstr ""
+"OPTIONS_DEFINE=\tBAR\n"
+"BAR_DESC=\tCalling cellphones via bar\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3810
+#, no-wrap
+msgid "BAR_LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+msgstr "BAR_LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3817
+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:3819
+#, no-wrap
+msgid "Slave Ports and `MASTERDIR`"
+msgstr "Подчиненные порты и `MASTERDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3826
+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 "
+"crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`] so the packages will "
+"have different names."
+msgstr ""
+"Если порту необходимо собирать немного разные версии пакетов, используя "
+"переменную (например, разрешение или размер бумаги) с разными значениями, "
+"создайте по одному подкаталогу для каждого пакета, чтобы пользователям было "
+"проще понять, что делать, но старайтесь максимально использовать общие файлы "
+"между портами. Обычно, при грамотном использовании переменных, во всех "
+"каталогах, кроме одного, требуется лишь очень короткий "
+"[.filename]#Makefile#. В единственном [.filename]#Makefile# укажите "
+"директорию с остальными файлами с помощью `MASTERDIR`. Также используйте "
+"переменную как часть crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`], "
+"чтобы пакеты имели разные имена."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3829
+msgid ""
+"This will be best demonstrated by an example. This is part of "
+"[.filename]#print/pkfonts300/Makefile#;"
+msgstr ""
+"Это лучше всего продемонстрировать на примере. Это часть файла "
+"[.filename]#print/pkfonts300/Makefile#;"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3835
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkfonts${RESOLUTION}\n"
+"PORTVERSION=\t1.0\n"
+"DISTFILES=\tpk${RESOLUTION}.tar.gz\n"
+msgstr ""
+"PORTNAME=\tpkfonts${RESOLUTION}\n"
+"PORTVERSION=\t1.0\n"
+"DISTFILES=\tpk${RESOLUTION}.tar.gz\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3837
+#, no-wrap
+msgid "PLIST=\t\t${PKGDIR}/pkg-plist.${RESOLUTION}\n"
+msgstr "PLIST=\t\t${PKGDIR}/pkg-plist.${RESOLUTION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3850
+#, 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 ""
+".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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3854
+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 ""
+"Пакет `package:print/pkfonts300[]` также содержит все обычные исправления, "
+"файлы пакетов и т.д. При запуске `make` в этом месте будет взято значение "
+"разрешения по умолчанию (300), и порт будет собран в обычном режиме."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3856
+msgid ""
+"As for other resolutions, this is the _entire_ [.filename]#print/pkfonts360/"
+"Makefile#:"
+msgstr ""
+"Что касается других разрешений, это _полный_ [.filename]#print/pkfonts360/"
+"Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3861
+#, no-wrap
+msgid ""
+"RESOLUTION=\t360\n"
+"MASTERDIR=\t${.CURDIR}/../pkfonts300\n"
+msgstr ""
+"RESOLUTION=\t360\n"
+"MASTERDIR=\t${.CURDIR}/../pkfonts300\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3863
+#, no-wrap
+msgid ".include\t\"${MASTERDIR}/Makefile\"\n"
+msgstr ".include\t\"${MASTERDIR}/Makefile\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3868
+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 ""
+"([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/"
+"Makefile# и все остальные аналогичны). Определение `MASTERDIR` указывает "
+"[.filename]#bsd.port.mk#, что стандартный набор подкаталогов, таких как "
+"`FILESDIR` и `SCRIPTDIR`, следует искать в [.filename]#pkfonts300#. Строка "
+"`RESOLUTION=360` переопределит строку `RESOLUTION=300` в "
+"[.filename]#pkfonts300/Makefile#, и порт будет собран с разрешением, "
+"установленным на 360."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3870
+#, no-wrap
+msgid "Man Pages"
+msgstr "Страницы Cправочника"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3875
+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 ""
+"Если порт размещает дерево man в другом месте, отличном от `PREFIX`, "
+"используйте `MANDIRS` для указания этих каталогов. Обратите внимание, что "
+"файлы, соответствующие страницам руководства, должны быть добавлены в "
+"[.filename]#pkg-plist# вместе с остальными файлами. Назначение `MANDIRS` — "
+"обеспечить автоматическое сжатие страниц руководства, поэтому имена файлов "
+"имеют суффикс [.filename]#.gz#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3877
+#, no-wrap
+msgid "Info Files"
+msgstr "Файлы информации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3884
+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 ""
+"Если пакету требуется установить файлы GNU info, перечислите их в `INFO` "
+"(без завершающего `.info`), по одному документу на строку. Предполагается, "
+"что эти файлы будут установлены в [.filename]#PREFIX/INFO_PATH#. Измените "
+"`INFO_PATH`, если пакет использует другое расположение. Однако это не "
+"рекомендуется. Эти записи содержат только путь относительно "
+"[.filename]#PREFIX/INFO_PATH#. Например, пакет package:lang/gcc34[] "
+"устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и `INFO` "
+"будет выглядеть примерно так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3888
+#, no-wrap
+msgid "INFO=\tgcc34/cpp gcc34/cppinternals gcc34/g77 ...\n"
+msgstr "INFO=\tgcc34/cpp gcc34/cppinternals gcc34/g77 ...\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3891
+msgid ""
+"Appropriate installation/de-installation code will be automatically added to "
+"the temporary [.filename]#pkg-plist# before package registration."
+msgstr ""
+"Соответствующий код установки/удаления будет автоматически добавлен во "
+"временный файл [.filename]#pkg-plist# перед регистрацией пакета."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3893
+#, no-wrap
+msgid "Makefile Options"
+msgstr "Параметры Makefile"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3898
+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:3900
+#, no-wrap
+msgid "`OPTIONS`"
+msgstr "`OPTIONS`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3903
+#, no-wrap
+msgid "Background"
+msgstr "Пояснения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3909
+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 ""
+"`OPTIONS_*` предоставляют пользователю, устанавливающему порт, диалоговое "
+"окно с доступными опциями, после чего сохраняют выбранные опции в "
+"[.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. При следующей сборке "
+"порта эти опции будут использованы повторно. `PORT_DBDIR` по умолчанию имеет "
+"значение [.filename]#/var/db/ports#. `OPTIONS_NAME` соответствует имени "
+"порта (origin) с заменой разделителя на подчёркивания, например, для "
+"package:dns/bind99[] это будет `dns_bind99`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3913
+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 ""
+"Когда пользователь запускает `make config` (или впервые запускает `make "
+"build`), система проверяет наличие файла [.filename]#${PORT_DBDIR}/$"
+"{OPTIONS_NAME}/options#. Если этот файл не существует, используются значения "
+"`OPTIONS_*`, и отображается диалоговое окно, где можно включить или "
+"отключить опции. Затем файл [.filename]#options# сохраняется, а настроенные "
+"переменные используются при сборке порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3915
+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 ""
+"Если новая версия порта добавляет новые `OPTIONS`, пользователю будет "
+"показан диалог с сохранёнными значениями старых `OPTIONS`, заполненными "
+"заранее."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3918
+msgid ""
+"`make showconfig` shows the saved configuration. Use `make rmconfig` to "
+"remove the saved configuration."
+msgstr ""
+"`make showconfig` показывает сохранённую конфигурацию. Используйте `make "
+"rmconfig` для удаления сохранённой конфигурации."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3920
+#, no-wrap
+msgid "Syntax"
+msgstr "Синтаксис"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3924
+msgid ""
+"`OPTIONS_DEFINE` contains a list of `OPTIONS` to be used. These are "
+"independent of each other and are not grouped:"
+msgstr ""
+"`OPTIONS_DEFINE` содержит список `OPTIONS`, которые будут использоваться. "
+"Они независимы друг от друга и не сгруппированы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3928
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4357
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4654
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4711
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4775
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1 OPT2\n"
+msgstr "OPTIONS_DEFINE=\tOPT1 OPT2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3931
+msgid ""
+"Once defined, `OPTIONS` are described (optional, but strongly recommended):"
+msgstr ""
+"После определения `OPTIONS` описываются (необязательно, но настоятельно "
+"рекомендуется):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3940
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3944
+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 ""
+"[.filename]#ports/Mk/bsd.options.desc.mk# содержит описания для многих "
+"распространённых `OPTIONS`. Хотя они часто полезны, переопределите их, если "
+"описание недостаточно для порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3950
+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 ""
+"При описании параметров рассматривайте их с точки зрения пользователя: "
+"«Какую функциональность это изменяет?» и «Зачем мне включать этот параметр?» "
+"Не просто повторяйте название. Например, описание параметра `NLS` как "
+"«включить поддержку NLS» не помогает пользователю, который уже видит "
+"название параметра, но может не знать, что оно означает. Описание вроде "
+"«Поддержка родного языка с помощью утилиты gettext» гораздо полезнее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3956
+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:3959
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where only one choice from each "
+"group is allowed:"
+msgstr ""
+"`OPTIONS` могут быть сгруппированы как переключаемые варианты, где "
+"допускается только один выбор из каждой группы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3964
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tSG1\n"
+"OPTIONS_SINGLE_SG1=\tOPT3 OPT4\n"
+msgstr ""
+"OPTIONS_SINGLE=\t\tSG1\n"
+"OPTIONS_SINGLE_SG1=\tOPT3 OPT4\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3970
+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 ""
+"В каждый момент времени _должна_ быть выбрана одна опция из каждой группы "
+"`OPTIONS_SINGLE`, чтобы параметры были действительными. Один вариант из "
+"каждой группы _должен_ быть добавлен в `OPTIONS_DEFAULT`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3973
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where none or only one choice "
+"from each group is allowed:"
+msgstr ""
+"`OPTIONS` могут быть сгруппированы как переключаемые варианты, где ни один "
+"или только один вариант из каждой группы разрешён:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3978
+#, no-wrap
+msgid ""
+"OPTIONS_RADIO=\t\tRG1\n"
+"OPTIONS_RADIO_RG1=\tOPT7 OPT8\n"
+msgstr ""
+"OPTIONS_RADIO=\t\tRG1\n"
+"OPTIONS_RADIO_RG1=\tOPT7 OPT8\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3981
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where _at least "
+"one_ option must be enabled:"
+msgstr ""
+"`OPTIONS` также могут быть сгруппированы в виде списков \"множественного "
+"выбора\", где _хотя бы одна_ опция должна быть включена:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3986
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tMG1\n"
+"OPTIONS_MULTI_MG1=\tOPT5 OPT6\n"
+msgstr ""
+"OPTIONS_MULTI=\t\tMG1\n"
+"OPTIONS_MULTI_MG1=\tOPT5 OPT6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3989
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where none or "
+"any option can be enabled:"
+msgstr ""
+"`OPTIONS` также могут быть сгруппированы в виде списков \"множественного "
+"выбора\", где ни одна или любые опции могут быть включены:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3994
+#, no-wrap
+msgid ""
+"OPTIONS_GROUP=\t\tGG1\n"
+"OPTIONS_GROUP_GG1=\tOPT9 OPT10\n"
+msgstr ""
+"OPTIONS_GROUP=\t\tGG1\n"
+"OPTIONS_GROUP_GG1=\tOPT9 OPT10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3997
+msgid ""
+"`OPTIONS` are unset by default, unless they are listed in `OPTIONS_DEFAULT`:"
+msgstr ""
+"`OPTIONS` по умолчанию не установлены, если они не перечислены в "
+"`OPTIONS_DEFAULT`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4001
+#, no-wrap
+msgid "OPTIONS_DEFAULT=\tOPT1 OPT3 OPT6\n"
+msgstr "OPTIONS_DEFAULT=\tOPT1 OPT3 OPT6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4007
+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 ""
+"Определения `OPTIONS` должны быть указаны до включения файла "
+"[.filename]#bsd.port.options.mk#. Значения `PORT_OPTIONS` можно проверять "
+"только после включения [.filename]#bsd.port.options.mk#. Включение "
+"[.filename]#bsd.port.pre.mk# также может использоваться и до сих пор широко "
+"применяется в портах, написанных до введения "
+"[.filename]#bsd.port.options.mk#. Однако следует учитывать, что некоторые "
+"переменные не будут работать как ожидается после включения "
+"[.filename]#bsd.port.pre.mk#, обычно это некоторые флаги `USE_*`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4009
+#, no-wrap
+msgid "Simple Use of `OPTIONS`"
+msgstr "Простое использование `OPTIONS`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4017
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO BAR\n"
+"OPTIONS_DEFAULT=FOO\n"
+msgstr ""
+"OPTIONS_DEFINE=\tFOO BAR\n"
+"OPTIONS_DEFAULT=FOO\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4020
+#, no-wrap
+msgid ""
+"FOO_DESC=\tOption foo support\n"
+"BAR_DESC=\tFeature bar support\n"
+msgstr ""
+"FOO_DESC=\tOption foo support\n"
+"BAR_DESC=\tFeature bar support\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4024
+#, no-wrap
+msgid ""
+"# Will add --with-foo / --without-foo\n"
+"FOO_CONFIGURE_WITH=\tfoo\n"
+"BAR_RUN_DEPENDS=\tbar:bar/bar\n"
+msgstr ""
+"# Will add --with-foo / --without-foo\n"
+"FOO_CONFIGURE_WITH=\tfoo\n"
+"BAR_RUN_DEPENDS=\tbar:bar/bar\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4026
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4090
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4031
+#, no-wrap
+msgid "Check for Unset Port `OPTIONS`"
+msgstr "Проверка неустановленных `OPTIONS` порта"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4040
+#, no-wrap
+msgid ""
+".if ! ${PORT_OPTIONS:MEXAMPLES}\n"
+"CONFIGURE_ARGS+=--without-examples\n"
+".endif\n"
+msgstr ""
+".if ! ${PORT_OPTIONS:MEXAMPLES}\n"
+"CONFIGURE_ARGS+=--without-examples\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4044
+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 ""
+"Приведённая выше форма не рекомендуется. Предпочтительный метод — "
+"использование параметра configure для фактического включения и отключения "
+"функции в соответствии с опцией:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4049
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4086
+#, no-wrap
+msgid ""
+"# Will add --with-examples / --without-examples\n"
+"EXAMPLES_CONFIGURE_WITH=\texamples\n"
+msgstr ""
+"# Will add --with-examples / --without-examples\n"
+"EXAMPLES_CONFIGURE_WITH=\texamples\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4054
+#, no-wrap
+msgid "Practical Use of `OPTIONS`"
+msgstr "Пример реального использования `OPTIONS`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4062
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tEXAMPLES\n"
+"OPTIONS_DEFAULT=\tPGSQL LDAP SSL\n"
+msgstr ""
+"OPTIONS_DEFINE=\t\tEXAMPLES\n"
+"OPTIONS_DEFAULT=\tPGSQL LDAP SSL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4065
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tBACKEND\n"
+"OPTIONS_SINGLE_BACKEND=\tMYSQL PGSQL BDB\n"
+msgstr ""
+"OPTIONS_SINGLE=\t\tBACKEND\n"
+"OPTIONS_SINGLE_BACKEND=\tMYSQL PGSQL BDB\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4068
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tAUTH\n"
+"OPTIONS_MULTI_AUTH=\tLDAP PAM SSL\n"
+msgstr ""
+"OPTIONS_MULTI=\t\tAUTH\n"
+"OPTIONS_MULTI_AUTH=\tLDAP PAM SSL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4076
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4081
+#, 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 ""
+"# Will add USE_PGSQL=yes\n"
+"PGSQL_USE=\tpgsql=yes\n"
+"# Will add --enable-postgres / --disable-postgres\n"
+"PGSQL_CONFIGURE_ENABLE=\tpostgres\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4083
+#, no-wrap
+msgid "ICU_LIB_DEPENDS=\tlibicuuc.so:devel/icu\n"
+msgstr "ICU_LIB_DEPENDS=\tlibicuuc.so:devel/icu\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4088
+#, no-wrap
+msgid "# Check other OPTIONS\n"
+msgstr "# Check other OPTIONS\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4095
+#, no-wrap
+msgid "Default Options"
+msgstr "Опции по умолчанию"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4098
+msgid "These options are always on by default."
+msgstr "Эти опции всегда включены по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4100
+msgid "`DOCS` - build and install documentation."
+msgstr "`DOCS` — сборка и установка документации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4101
+msgid "`NLS` - Native Language Support."
+msgstr "`NLS` — Поддержка родного языка."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4102
+msgid "`EXAMPLES` - build and install examples."
+msgstr "`EXAMPLES` — сборка и установка примеров."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4103
+msgid "`IPV6` - IPv6 protocol support."
+msgstr "`IPV6` — Поддержка протокола IPv6."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4108
+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 ""
+"Нет необходимости добавлять их в `OPTIONS_DEFAULT`. Однако, чтобы они были "
+"активны и отображались в диалоге выбора опций, их необходимо добавить в "
+"`OPTIONS_DEFINE`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4111
+#, no-wrap
+msgid "Feature Auto-Activation"
+msgstr "Автоматическая активация функций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4115
+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 ""
+"При использовании скрипта GNU configure следите за тем, какие дополнительные "
+"функции активируются автоматическим определением. Явно отключите ненужные "
+"дополнительные функции, добавив `--without-xxx` или `--disable-xxx` в "
+"`CONFIGURE_ARGS`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4117
+#, no-wrap
+msgid "Wrong Handling of an Option"
+msgstr "Неправильная обработка опции"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4127
+#, 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 ""
+".if ${PORT_OPTIONS:MFOO}\n"
+"LIB_DEPENDS+=\t\tlibfoo.so:devel/foo\n"
+"CONFIGURE_ARGS+=\t--enable-foo\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4135
+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 ""
+"В приведённом выше примере представьте, что библиотека libfoo установлена в "
+"системе. Пользователь не хочет, чтобы это приложение использовало libfoo, "
+"поэтому он отключил соответствующую опцию в диалоге `make config`. Однако "
+"скрипт configure приложения обнаруживает библиотеку в системе и включает её "
+"поддержку в итоговом исполняемом файле. Теперь, когда пользователь решает "
+"удалить libfoo из системы, система портов не протестует (зависимость от "
+"libfoo не была записана), но приложение перестаёт работать."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4137
+#, no-wrap
+msgid "Correct Handling of an Option"
+msgstr "Правильная обработка опции"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4146
+#, 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 ""
+"FOO_LIB_DEPENDS=\t\tlibfoo.so:devel/foo\n"
+"# Will add --enable-foo / --disable-foo\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4154
+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 ""
+"В некоторых случаях сокращенный синтаксис условных выражений может вызывать "
+"проблемы со сложными конструкциями. Ошибки обычно имеют вид `Malformed "
+"conditional`, тогда можно использовать альтернативный синтаксис."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4158
+#, no-wrap
+msgid ".if !empty(VARIABLE:MVALUE)\n"
+msgstr ".if !empty(VARIABLE:MVALUE)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4161
+msgid "as an alternative to"
+msgstr "в качестве альтернативы"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4165
+#, no-wrap
+msgid ".if ${VARIABLE:MVALUE}\n"
+msgstr ".if ${VARIABLE:MVALUE}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4170
+#, no-wrap
+msgid "Options Helpers"
+msgstr "Помощники параметров"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4174
+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:4175
+#, no-wrap
+msgid "`PLIST_SUB`, `SUB_LIST`"
+msgstr "`PLIST_SUB`, `SUB_LIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4177
+msgid ""
+"For automatic `%%_OPT_%%` and `%%NO__OPT__%%` generation, see "
+"crossref:makefiles[options_sub, `OPTIONS_SUB`]."
+msgstr ""
+"Для автоматической генерации `%%_OPT_%%` и `%%NO__OPT__%%` см. "
+"crossref:makefiles[options_sub, `OPTIONS_SUB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4179
+msgid ""
+"For more complex usage, see crossref:makefiles[options-variables, Generic "
+"Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`]."
+msgstr ""
+"Для более сложных случаев использования см. crossref:makefiles[options-"
+"variables, Замена общих переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4180
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr "`CONFIGURE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4182
+msgid ""
+"For `--enable-_x_` and `--disable-_x_`, see crossref:makefiles[options-"
+"configure_enable, `OPT_CONFIGURE_ENABLE`]."
+msgstr ""
+"Для информации о `--enable-_x_` и `--disable-_x_` см. "
+"crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4184
+msgid ""
+"For `--with-_x_` and `--without-_x_`, see crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`]."
+msgstr ""
+"О `--with-_x_` и `--without-_x_` см. crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4186
+msgid ""
+"For all other cases, see crossref:makefiles[options-configure_on, "
+"`OPT_CONFIGURE_ON` and `OPT_CONFIGURE_OFF`]."
+msgstr ""
+"Во всех остальных случаях см. crossref:makefiles[options-configure_on, "
+"`OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4187
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr "`CMAKE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4190
+msgid ""
+"For arguments that are booleans (`on`, `off`, `true`, `false`, `0`, `1`) see "
+"crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`]."
+msgstr ""
+"Для аргументов, которые являются булевыми значениями (`on`, `off`, `true`, "
+"`false`, `0`, `1`), см. crossref:makefiles[options-cmake_bool, "
+"`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4192
+msgid ""
+"For all other cases, see crossref:makefiles[options-cmake_on, `OPT_CMAKE_ON` "
+"and `OPT_CMAKE_OFF`]."
+msgstr ""
+"Для всех остальных случаев см. crossref:makefiles[options-cmake_on, "
+"`OPT_CMAKE_ON` и `OPT_CMAKE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4193
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr "`MESON_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4195
+msgid ""
+"For arguments that take `true` or `false`, see crossref:makefiles[options-"
+"meson_true, `OPT_MESON_TRUE` and `OPT_MESON_FALSE`]."
+msgstr ""
+"Для аргументов, принимающих `true` или `false`, см. "
+"crossref:makefiles[options-meson_true, `OPT_MESON_TRUE` и `OPT_MESON_FALSE`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4197
+msgid ""
+"For arguments that take `yes` or `no`, use crossref:makefiles[options-"
+"meson_yes, `OPT_MESON_YES` and `OPT_MESON_NO`]."
+msgstr ""
+"Для аргументов, принимающих `yes` или `no`, используйте "
+"crossref:makefiles[options-meson_yes, `OPT_MESON_YES` и `OPT_MESON_NO`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4199
+msgid ""
+"For arguments that take `enabled` or `disabled`, see "
+"crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` and "
+"`OPT_MESON_DISABLED`]."
+msgstr ""
+"Для аргументов, принимающих `enabled` или `disabled`, см. "
+"crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` и "
+"`OPT_MESON_DISABLED`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4201
+msgid ""
+"For all other cases, use crossref:makefiles[options-meson_on, `OPT_MESON_ON` "
+"and `OPT_MESON_OFF`]."
+msgstr ""
+"Во всех остальных случаях используйте crossref:makefiles[options-meson_on, "
+"`OPT_MESON_ON` и `OPT_MESON_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4202
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr "`QMAKE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4204
+msgid ""
+"See crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` and `OPT_QMAKE_OFF`]."
+msgstr ""
+"См. crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4207
+msgid "See crossref:makefiles[options-use, `OPT_USE` and `OPT_USE_OFF`]."
+msgstr "См. crossref:makefiles[options-use, `OPT_USE` и `OPT_USE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4208
+#, no-wrap
+msgid "`*_DEPENDS`"
+msgstr "`*_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4210
+msgid ""
+"See crossref:makefiles[options-dependencies, Dependencies, `OPT_DEPTYPE` and "
+"`OPT_DEPTYPE_OFF`]."
+msgstr ""
+"См. crossref:makefiles[options-dependencies, Зависимости, `OPT_DEPTYPE` и "
+"`OPT_DEPTYPE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4211
+#, no-wrap
+msgid "`*` (Any variable)"
+msgstr "`*` (Любая переменная)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4214
+msgid ""
+"The most used variables have direct helpers, see crossref:makefiles[options-"
+"variables, Generic Variables Replacement, `OPT_VARIABLE` and "
+"`OPT_VARIABLE_OFF`]."
+msgstr ""
+"Наиболее используемые переменные имеют своих помощников, см. "
+"crossref:makefiles[options-variables, Замена Общих Переменных, "
+"`OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4216
+msgid ""
+"For any variable without a specific helper, see crossref:makefiles[options-"
+"vars, `OPT_VARS` and `OPT_VARS_OFF`]."
+msgstr ""
+"Для любой переменной без специального помощника см. "
+"crossref:makefiles[options-vars, `OPT_VARS` и `OPT_VARS_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4217
+#, no-wrap
+msgid "Options dependencies"
+msgstr "Зависимости параметров"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4220
+msgid ""
+"When an option need another option to work, see crossref:makefiles[options-"
+"implies, `OPT_IMPLIES`]."
+msgstr ""
+"Когда для работы опции требуется другая опция, см. "
+"crossref:makefiles[options-implies, `OPT_IMPLIES`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4221
+#, no-wrap
+msgid "Options conflicts"
+msgstr "Конфликты опций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4224
+msgid ""
+"When an option cannot work if another is also enabled, see "
+"crossref:makefiles[options-prevents, `OPT_PREVENTS` and `OPT_PREVENTS_MSG`]."
+msgstr ""
+"Когда опция не может работать, если включена другая, см. "
+"crossref:makefiles[options-prevents, `OPT_PREVENTS` и `OPT_PREVENTS_MSG`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4225
+#, no-wrap
+msgid "Build targets"
+msgstr "Цели сборки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4228
+msgid ""
+"When an option need some extra processing, see crossref:makefiles[options-"
+"targets, Additional Build Targets, `_target_-_OPT_-on` and `_target_-_OPT_-"
+"off`]."
+msgstr ""
+"Когда для опции требуется дополнительная обработка, см. "
+"crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-"
+"_OPT_-on` и `_target_-_OPT_-off`]."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4230
+#, no-wrap
+msgid "`OPTIONS_SUB`"
+msgstr "`OPTIONS_SUB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4233
+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 ""
+"Если `OPTIONS_SUB` установлен в `yes`, то каждая из опций, добавленных в "
+"`OPTIONS_DEFINE`, будет добавлена в `PLIST_SUB` и `SUB_LIST`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4238
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPTIONS_SUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4241
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4280
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4316
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4353
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4388
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4425
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4461
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4495
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4525
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4557
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4589
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4618
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4771
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4844
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4921
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5011
+msgid "is equivalent to:"
+msgstr "эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4245
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4284
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4320
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4392
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4429
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4465
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4499
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4529
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4561
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4593
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4622
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4848
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4925
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5002
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5015
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1\n"
+msgstr "OPTIONS_DEFINE=\tOPT1\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4247
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4286
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4322
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4359
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4394
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4431
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4467
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4501
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4531
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4563
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4595
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4624
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4656
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4713
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4779
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4850
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4927
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5017
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4255
+#, 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 ""
+".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"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4261
+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 ""
+"Значение `OPTIONS_SUB` игнорируется. Установка любого значения добавит "
+"записи `PLIST_SUB` и `SUB_LIST` для _всех_ опций."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4264
+#, no-wrap
+msgid "`OPT_USE` and `OPT_USE_OFF`"
+msgstr "`OPT_USE` и `OPT_USE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4270
+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 ""
+"Когда выбрана опция _OPT_, для каждой пары `_ключ=значение_` в ``OPT_USE``, "
+"_значение_ добавляется к соответствующему `USE_KEY`. Если _значение_ "
+"содержит пробелы, замените их запятыми, и они будут преобразованы обратно в "
+"пробелы во время обработки. `OPT_USE_OFF` работает аналогично, но когда "
+"`OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4277
+#, 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 ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\txorg\n"
+"OPT1_USE=\tmysql=yes xorg=x11,xextproto,xext,xrandr\n"
+"OPT1_USE_OFF=\topenssl=yes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4294
+#, 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 ""
+".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"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4297
+#, no-wrap
+msgid "`CONFIGURE_ARGS` Helpers"
+msgstr "Помощники `CONFIGURE_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4300
+#, no-wrap
+msgid "`OPT_CONFIGURE_ENABLE`"
+msgstr "`OPT_CONFIGURE_ENABLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4307
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CONFIGURE_ENABLE` к "
+"`CONFIGURE_ARGS` добавляется `--enable-_элемент_`. Если опция _OPT_ _не_ "
+"выбрана, к `CONFIGURE_ARGS` добавляется `--disable-_элемент_`. "
+"Необязательный аргумент может быть указан с помощью символа `=`. Этот "
+"аргумент добавляется только к опции конфигурации `--enable-_элемент_`. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4313
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_ENABLE=\ttest1 test2\n"
+"OPT2_CONFIGURE_ENABLE=\ttest2=exhaustive\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_ENABLE=\ttest1 test2\n"
+"OPT2_CONFIGURE_ENABLE=\ttest2=exhaustive\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4328
+#, 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 ""
+".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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4334
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--enable-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4337
+#, no-wrap
+msgid "`OPT_CONFIGURE_WITH`"
+msgstr "`OPT_CONFIGURE_WITH`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4344
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `_OPT_CONFIGURE_WITH` к "
+"`CONFIGURE_ARGS` добавляется `--with-_элемент_`. Если опция _OPT_ _не_ "
+"выбрана, к `CONFIGURE_ARGS` добавляется `--without-_элемент_`. "
+"Необязательный аргумент можно указать с помощью символа `=`. Этот аргумент "
+"добавляется только к опции конфигурации `--with-_элемент_`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4350
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_WITH=\ttest1\n"
+"OPT2_CONFIGURE_WITH=\ttest2=exhaustive\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_WITH=\ttest1\n"
+"OPT2_CONFIGURE_WITH=\ttest2=exhaustive\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4365
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--with-test1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4371
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--with-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4374
+#, no-wrap
+msgid "`OPT_CONFIGURE_ON` and `OPT_CONFIGURE_OFF`"
+msgstr "`OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4379
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_CONFIGURE_ON`, если оно определено, "
+"добавляется к `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` работает аналогично, но "
+"когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4385
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CONFIGURE_ON=\t--add-test\n"
+"OPT1_CONFIGURE_OFF=\t--no-test\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CONFIGURE_ON=\t--add-test\n"
+"OPT1_CONFIGURE_OFF=\t--no-test\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4400
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--add-test\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--no-test\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4406
+msgid ""
+"Most of the time, the helpers in crossref:makefiles[options-"
+"configure_enable, `OPT_CONFIGURE_ENABLE`] and crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`] provide a shorter and more "
+"comprehensive functionality."
+msgstr ""
+"В большинстве случаев помощники crossref:makefiles[options-configure_enable, "
+"`OPT_CONFIGURE_ENABLE`] и crossref:makefiles[options-configure_with, "
+"`OPT_CONFIGURE_WITH`] предоставляют более короткий и понятный функционал."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4409
+#, no-wrap
+msgid "`CMAKE_ARGS` Helpers"
+msgstr "Помощники `CMAKE_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4412
+#, no-wrap
+msgid "`OPT_CMAKE_ON` and `OPT_CMAKE_OFF`"
+msgstr "`OPT_CMAKE_ON` и `OPT_CMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4416
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_CMAKE_ON`, если оно определено, "
+"добавляется к `CMAKE_ARGS`. `OPT_CMAKE_OFF` работает аналогично, но когда "
+"`OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4422
+#, 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 ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_ON=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+"OPT1_CMAKE_OFF=\t-DOPTIMIZE:BOOL=true\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4437
+#, 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 ""
+".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"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4443
+msgid ""
+"See crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`] for a shorter helper when the value is boolean."
+msgstr ""
+"См. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и "
+"`OPT_CMAKE_BOOL_OFF`] для более краткой записи, когда значение является "
+"булевым."
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4446
+#, no-wrap
+msgid "`OPT_CMAKE_BOOL` and `OPT_CMAKE_BOOL_OFF`"
+msgstr "`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4452
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CMAKE_BOOL` "
+"добавляется `-D_элемент_:BOOL=true` к `CMAKE_ARGS`. Если опция _OPT_ _не_ "
+"выбрана, `-D_элемент_:BOOL=false` добавляется к `CONFIGURE_ARGS`. "
+"`OPT_CMAKE_BOOL_OFF` работает наоборот: `-D_элемент_:BOOL=false` добавляется "
+"к `CMAKE_ARGS`, когда опция выбрана, и `-D_элемент_:BOOL=true`, когда опция "
+"_не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4458
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_BOOL=\tTEST DEBUG\n"
+"OPT1_CMAKE_BOOL_OFF=\tOPTIMIZE\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_BOOL=\tTEST DEBUG\n"
+"OPT1_CMAKE_BOOL_OFF=\tOPTIMIZE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4475
+#, 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 ""
+".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"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4478
+#, no-wrap
+msgid "`MESON_ARGS` Helpers"
+msgstr "Помощники `MESON_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4481
+#, no-wrap
+msgid "`OPT_MESON_ON` and `OPT_MESON_OFF`"
+msgstr "`OPT_MESON_ON` и `OPT_MESON_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4486
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_MESON_ON`, если оно определено, "
+"добавляется к `MESON_ARGS`. `OPT_MESON_OFF` работает аналогичным образом, "
+"но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4492
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ON=\t-Dopt=1\n"
+"OPT1_MESON_OFF=\t-Dopt=2\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ON=\t-Dopt=1\n"
+"OPT1_MESON_OFF=\t-Dopt=2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4507
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dopt=1\n"
+".else\n"
+"MESON_ARGS+=\t-Dopt=2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4510
+#, no-wrap
+msgid "`OPT_MESON_TRUE` and `OPT_MESON_FALSE`"
+msgstr "`OPT_MESON_TRUE` и `OPT_MESON_FALSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4516
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_TRUE` "
+"добавляется `-D_элемент_=true` в `MESON_ARGS`. Если опция _OPT_ _не_ "
+"выбрана, добавляется `-D_элемент_=false` в `MESON_ARGS`. `OPT_MESON_FALSE` "
+"работает противоположным образом: `-D_элемент_=false` добавляется в "
+"`MESON_ARGS`, когда опция выбрана, и `-D_элемент_=true`, когда опция _не_ "
+"выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4522
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_TRUE=\ttest debug\n"
+"OPT1_MESON_FALSE=\toptimize\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_TRUE=\ttest debug\n"
+"OPT1_MESON_FALSE=\toptimize\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4539
+#, 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 ""
+".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"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4542
+#, no-wrap
+msgid "`OPT_MESON_YES` and `OPT_MESON_NO`"
+msgstr "`OPT_MESON_YES` и `OPT_MESON_NO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4548
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_YES` "
+"добавляется `-D_элемент_=yes` к `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, "
+"добавляется `-D_элемент_=no` к `MESON_ARGS`. `OPT_MESON_NO` работает "
+"противоположным образом: `-D_элемент_=no` добавляется к `MESON_ARGS`, когда "
+"опция выбрана, и `-D_элемент_=yes`, когда опция _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4554
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_YES=\ttest debug\n"
+"OPT1_MESON_NO=\toptimize\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_YES=\ttest debug\n"
+"OPT1_MESON_NO=\toptimize\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4571
+#, 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 ""
+".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"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4574
+#, no-wrap
+msgid "`OPT_MESON_ENABLED` and `OPT_MESON_DISABLED`"
+msgstr "`OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4580
+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 ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_ENABLED` "
+"добавляется `-D_элемент_=enabled` к `MESON_ARGS`. Когда опция _OPT_ _не_ "
+"выбрана, добавляется `-D_элемент_=disabled` к `MESON_ARGS`. "
+"`OPT_MESON_DISABLED` работает противоположным образом: `-"
+"D_элемент_=disabled` добавляется к `MESON_ARGS`, когда опция выбрана, и `-"
+"D_элемент_=enabled`, когда опция _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4586
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ENABLED=\ttest\n"
+"OPT1_MESON_DISABLED=\tdebug\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ENABLED=\ttest\n"
+"OPT1_MESON_DISABLED=\tdebug\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4601
+#, 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 ""
+".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"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4604
+#, no-wrap
+msgid "`OPT_QMAKE_ON` and `OPT_QMAKE_OFF`"
+msgstr "`OPT_QMAKE_ON` и `OPT_QMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4609
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_QMAKE_ON`, если оно определено, "
+"добавляется к `QMAKE_ARGS`. `OPT_QMAKE_OFF` работает аналогичным образом, "
+"но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4615
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_QMAKE_ON=\t-DTEST:BOOL=true\n"
+"OPT1_QMAKE_OFF=\t-DPRODUCTION:BOOL=true\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_QMAKE_ON=\t-DTEST:BOOL=true\n"
+"OPT1_QMAKE_OFF=\t-DPRODUCTION:BOOL=true\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4630
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"QMAKE_ARGS+=\t-DTEST:BOOL=true\n"
+".else\n"
+"QMAKE_ARGS+=\t-DPRODUCTION:BOOL=true\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4633
+#, no-wrap
+msgid "`OPT_IMPLIES`"
+msgstr "`OPT_IMPLIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4636
+msgid "Provides a way to add dependencies between options."
+msgstr "Предоставляет способ добавления зависимостей между опциями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4639
+msgid ""
+"When _OPT_ is selected, all the options listed in this variable will be "
+"selected too. Using the crossref:makefiles[options-"
+"configure_enable,`OPT_CONFIGURE_ENABLE`] described earlier to illustrate:"
+msgstr ""
+"При выборе _OPT_ все перечисленные в этой переменной опции также будут "
+"выбраны. В качестве примера можно использовать описанный ранее "
+"crossref:makefiles[options-configure_enable,`OPT_CONFIGURE_ENABLE`]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4644
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_IMPLIES=\tOPT2\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_IMPLIES=\tOPT2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4647
+#, no-wrap
+msgid ""
+"OPT1_CONFIGURE_ENABLE=\topt1\n"
+"OPT2_CONFIGURE_ENABLE=\topt2\n"
+msgstr ""
+"OPT1_CONFIGURE_ENABLE=\topt1\n"
+"OPT2_CONFIGURE_ENABLE=\topt2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4650
+msgid "Is equivalent to:"
+msgstr "Эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4662
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4668
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt2\n"
+".endif\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4671
+#, no-wrap
+msgid "Simple Use of `OPT_IMPLIES`"
+msgstr "Простое использование `OPT_IMPLIES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4676
+msgid ""
+"This port has a `X11` option, and a `GNOME` option that needs the `X11` "
+"option to be selected to build."
+msgstr ""
+"Этот порт имеет опцию `X11` и опцию `GNOME`, для сборки которой необходимо "
+"выбрать опцию `X11`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4681
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11 GNOME\n"
+"OPTIONS_DEFAULT=\tX11\n"
+msgstr ""
+"OPTIONS_DEFINE=\tX11 GNOME\n"
+"OPTIONS_DEFAULT=\tX11\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4686
+#, no-wrap
+msgid ""
+"X11_USES=\txorg\n"
+"X11_USE=\txorg=xi,xextproto\n"
+"GNOME_USE=\tgnome=gtk30\n"
+"GNOME_IMPLIES=\tX11\n"
+msgstr ""
+"X11_USES=\txorg\n"
+"X11_USE=\txorg=xi,xextproto\n"
+"GNOME_USE=\tgnome=gtk30\n"
+"GNOME_IMPLIES=\tX11\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4691
+#, no-wrap
+msgid "`OPT_PREVENTS` and `OPT_PREVENTS_MSG`"
+msgstr "`OPT_PREVENTS` и `OPT_PREVENTS_MSG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4694
+msgid "Provides a way to add conflicts between options."
+msgstr "Предоставляет способ добавления конфликтов между опциями."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4698
+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 ""
+"Когда выбрана _OPT_, все опции, перечисленные в `OPT_PREVENTS`, должны быть "
+"сняты. Если задано `OPT_PREVENTS_MSG` и возникает конфликт, его содержимое "
+"будет показано с объяснением причины конфликта. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4704
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_PREVENTS=\tOPT2\n"
+"OPT1_PREVENTS_MSG=\tOPT1 and OPT2 enable conflicting options\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_PREVENTS=\tOPT2\n"
+"OPT1_PREVENTS_MSG=\tOPT1 and OPT2 enable conflicting options\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4707
+msgid "Is roughly equivalent to:"
+msgstr "Примерно эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4717
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}\n"
+"BROKEN=\tOption OPT1 conflicts with OPT2 (select only one)\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}\n"
+"BROKEN=\tOption OPT1 conflicts with OPT2 (select only one)\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4720
+msgid ""
+"The only difference is that the first one will write an error after running "
+"`make config`, suggesting changing the selected options."
+msgstr ""
+"Единственное отличие заключается в том, что первый вариант выведет ошибку "
+"после выполнения `make config`, предлагая изменить выбранные настройки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4722
+#, no-wrap
+msgid "Simple Use of `OPT_PREVENTS`"
+msgstr "Простое использование `OPT_PREVENTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4728
+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 ""
+"Этот порт имеет опции `X509` и `SCTP`. Обе опции добавляют патчи, но патчи "
+"конфликтуют друг с другом, поэтому их нельзя выбрать одновременно."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4732
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tX509 SCTP\n"
+msgstr "OPTIONS_DEFINE=\tX509 SCTP\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4735
+#, no-wrap
+msgid ""
+"SCTP_PATCHFILES=\t${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1\n"
+"SCTP_CONFIGURE_WITH=\tsctp\n"
+msgstr ""
+"SCTP_PATCHFILES=\t${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1\n"
+"SCTP_CONFIGURE_WITH=\tsctp\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4740
+#, 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 ""
+"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"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4745
+#, no-wrap
+msgid "`OPT_VARS` and `OPT_VARS_OFF`"
+msgstr "`OPT_VARS` и `OPT_VARS_OFF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4748
+msgid "Provides a generic way to set and append to variables."
+msgstr ""
+"Предоставляет универсальный способ установки и добавления значений "
+"переменным."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4753
+msgid ""
+"Before using `OPT_VARS` and `OPT_VARS_OFF`, see if there is already a more "
+"specific helper available in crossref:makefiles[options-variables, Generic "
+"Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`]."
+msgstr ""
+"Перед использованием `OPT_VARS` и `OPT_VARS_OFF` проверьте, доступен ли "
+"более специфичный вспомогательный инструмент в crossref:makefiles[options-"
+"variables, Универсальная замена переменных, `OPT_VARIABLE` и "
+"`OPT_VARIABLE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4758
+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 ""
+"Когда выбрана опция _OPT_ и определены `OPT_VARS`, пары `_key_=_value_` и "
+"`_key_+=_value_` обрабатываются из `OPT_VARS`. Оператор `=` приводит к "
+"перезаписи существующего значения `KEY`, а `+=` добавляет к значению. "
+"`OPT_VARS_OFF` работает аналогично, но когда `OPT` _не_ выбрана."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4766
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4768
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4777
+#, no-wrap
+msgid "MAKE_ARGS=\tALSO_BUILD=\"${ALSO_BUILD}\" BIN3_BUILD=\"${BIN3_BUILD}\"\n"
+msgstr "MAKE_ARGS=\tALSO_BUILD=\"${ALSO_BUILD}\" BIN3_BUILD=\"${BIN3_BUILD}\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4783
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"ALSO_BUILD+=\tbin1\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"ALSO_BUILD+=\tbin1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4787
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"ALSO_BUILD+=\tbin2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"ALSO_BUILD+=\tbin2\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4793
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"BIN3_BUILD=\tyes\n"
+".else\n"
+"BIN3_BUILD=\tno\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"BIN3_BUILD=\tyes\n"
+".else\n"
+"BIN3_BUILD=\tno\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4798
+msgid "Values containing whitespace must be enclosed in quotes:"
+msgstr "Значения, содержащие пробелы, должны быть заключены в кавычки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4802
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\"bar baz\"\n"
+msgstr "OPT_VARS=\tfoo=\"bar baz\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4808
+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 ""
+"Это связано с тем, как man:make[1] обрабатывает пробелы при раскрытии "
+"переменных. Когда `OPT_VARS= foo=bar baz` раскрывается, переменная в итоге "
+"содержит две строки: `foo=bar` и `baz`. Однако отправитель, вероятно, "
+"предполагал, что должна быть только одна строка — `foo=bar baz`. Заключение "
+"значения в кавычки предотвращает использование пробела в качестве "
+"разделителя."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4811
+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 ""
+"Также _не_ добавляйте лишние пробелы после знака `_var_=` и перед значением, "
+"это также разобьёт строку на две части. _Это не сработает_:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4815
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\tbar\n"
+msgstr "OPT_VARS=\tfoo=\tbar\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4820
+#, no-wrap
+msgid "Dependencies, `OPT_DEPTYPE` and `OPT_DEPTYPE_OFF`"
+msgstr "Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4823
+msgid "For any of these dependency types:"
+msgstr "Для любого из этих типов зависимостей:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4825
+msgid "`PKG_DEPENDS`"
+msgstr "`PKG_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4835
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_DEPTYPE`, если оно определено, "
+"добавляется к `DEPTYPE`. `OPT_DEPTYPE_OFF` работает аналогично, но когда "
+"_не_ выбрана `OPT`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4841
+#, 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 ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_LIB_DEPENDS=\tliba.so:devel/a\n"
+"OPT1_LIB_DEPENDS_OFF=\tlibb.so:devel/b\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4856
+#, 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 ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"LIB_DEPENDS+=\tliba.so:devel/a\n"
+".else\n"
+"LIB_DEPENDS+=\tlibb.so:devel/b\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4859
+#, no-wrap
+msgid "Generic Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`"
+msgstr "Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4862
+msgid "For any of these variables:"
+msgstr "Для любой из этих переменных:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4864
+msgid "`ALL_TARGET`"
+msgstr "`ALL_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4865
+msgid "`BINARY_ALIAS`"
+msgstr "`BINARY_ALIAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4866
+msgid "`BROKEN`"
+msgstr "`BROKEN`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4868
+msgid "`CFLAGS`"
+msgstr "`CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4869
+msgid "`CONFIGURE_ENV`"
+msgstr "`CONFIGURE_ENV`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4870
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5109
+#, no-wrap
+msgid "`CONFLICTS`"
+msgstr "`CONFLICTS`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4871
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5104
+#, no-wrap
+msgid "`CONFLICTS_BUILD`"
+msgstr "`CONFLICTS_BUILD`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4872
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5099
+#, no-wrap
+msgid "`CONFLICTS_INSTALL`"
+msgstr "`CONFLICTS_INSTALL`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4873
+msgid "`CPPFLAGS`"
+msgstr "`CPPFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4874
+msgid "`CXXFLAGS`"
+msgstr "`CXXFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4875
+msgid "`DESKTOP_ENTRIES`"
+msgstr "`DESKTOP_ENTRIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4878
+msgid "`EXTRA_PATCHES`"
+msgstr "`EXTRA_PATCHES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4890
+msgid "`IGNORE`"
+msgstr "`IGNORE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4891
+msgid "`INFO`"
+msgstr "`INFO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4892
+msgid "`INSTALL_TARGET`"
+msgstr "`INSTALL_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4893
+msgid "`LDFLAGS`"
+msgstr "`LDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4894
+msgid "`LIBS`"
+msgstr "`LIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4895
+msgid "`MAKE_ARGS`"
+msgstr "`MAKE_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4896
+msgid "`MAKE_ENV`"
+msgstr "`MAKE_ENV`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4899
+msgid "`PATCH_SITES`"
+msgstr "`PATCH_SITES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4900
+msgid "`PLIST_DIRS`"
+msgstr "`PLIST_DIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4901
+msgid "`PLIST_FILES`"
+msgstr "`PLIST_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4902
+msgid "`PLIST_SUB`"
+msgstr "`PLIST_SUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4903
+msgid "`PORTDOCS`"
+msgstr "`PORTDOCS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4904
+msgid "`PORTEXAMPLES`"
+msgstr "`PORTEXAMPLES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4905
+msgid "`SUB_FILES`"
+msgstr "`SUB_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4906
+msgid "`SUB_LIST`"
+msgstr "`SUB_LIST`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4907
+msgid "`TEST_TARGET`"
+msgstr "`TEST_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4912
+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 ""
+"Когда выбрана опция _OPT_, значение `OPT_ABOVEVARIABLE`, если оно "
+"определено, добавляется к `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` "
+"работает аналогично, но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4918
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\tgmake\n"
+"OPT1_CFLAGS_OFF=\t-DTEST\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\tgmake\n"
+"OPT1_CFLAGS_OFF=\t-DTEST\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4933
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USES+=\t\tgmake\n"
+".else\n"
+"CFLAGS+=\t-DTEST\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USES+=\t\tgmake\n"
+".else\n"
+"CFLAGS+=\t-DTEST\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4940
+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 ""
+"Некоторые переменные отсутствуют в этом списке, в частности `PKGNAMEPREFIX` "
+"и `PKGNAMESUFFIX`. Это сделано намеренно. Порт _не должен_ изменять своё имя "
+"при изменении набора опций."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4945
+msgid ""
+"Some of these variables, at least `ALL_TARGET`, `DISTFILES` and "
+"`INSTALL_TARGET`, have their default values set _after_ the options are "
+"processed."
+msgstr ""
+"Некоторые из этих переменных, по крайней мере `ALL_TARGET`, `DISTFILES` и "
+"`INSTALL_TARGET`, получают свои значения по умолчанию _после_ обработки "
+"опций."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4947
+msgid "With these lines in the [.filename]#Makefile#:"
+msgstr "С такими строками в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4951
+#, no-wrap
+msgid "ALL_TARGET=\tall\n"
+msgstr "ALL_TARGET=\tall\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4953
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4962
+#, no-wrap
+msgid "DOCS_ALL_TARGET=\tdoc\n"
+msgstr "DOCS_ALL_TARGET=\tdoc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4956
+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 ""
+"Если опция `DOCS` включена, `ALL_TARGET` будет иметь конечное значение `all "
+"doc`; если опция отключена, значение будет `all`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4958
+msgid "With only the options helper line in the [.filename]#Makefile#:"
+msgstr "Только со строкой помощника опций в [.filename]#Makefile#:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4965
+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 ""
+"Если опция `DOCS` включена, `ALL_TARGET` будет иметь окончательное значение "
+"`doc`; если опция отключена, значение будет `all`."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4968
+#, no-wrap
+msgid "Additional Build Targets, `_target_-_OPT_-on` and `_target_-_OPT_-off`"
+msgstr "Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4971
+msgid ""
+"These [.filename]#Makefile# targets can accept optional extra build targets:"
+msgstr ""
+"Эти цели в [.filename]#Makefile# могут принимать дополнительные опциональные "
+"цели сборки:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4973
+msgid "`pre-fetch`"
+msgstr "`pre-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4974
+msgid "`do-fetch`"
+msgstr "`do-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4975
+msgid "`post-fetch`"
+msgstr "`post-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4976
+msgid "`pre-extract`"
+msgstr "`pre-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4977
+msgid "`do-extract`"
+msgstr "`do-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4978
+msgid "`post-extract`"
+msgstr "`post-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4979
+msgid "`pre-patch`"
+msgstr "`pre-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4980
+msgid "`do-patch`"
+msgstr "`do-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4981
+msgid "`post-patch`"
+msgstr "`post-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4982
+msgid "`pre-configure`"
+msgstr "`pre-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4983
+msgid "`do-configure`"
+msgstr "`do-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4984
+msgid "`post-configure`"
+msgstr "`post-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4985
+msgid "`pre-build`"
+msgstr "`pre-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4986
+msgid "`do-build`"
+msgstr "`do-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4987
+msgid "`post-build`"
+msgstr "`post-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4988
+msgid "`pre-install`"
+msgstr "`pre-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4989
+msgid "`do-install`"
+msgstr "`do-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4990
+msgid "`post-install`"
+msgstr "`post-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4991
+msgid "`post-stage`"
+msgstr "`post-stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4992
+msgid "`pre-package`"
+msgstr "`pre-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4993
+msgid "`do-package`"
+msgstr "`do-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4994
+msgid "`post-package`"
+msgstr "`post-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4998
+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 ""
+"Когда выбрана опция _OPT_, цель `_TARGET_-_OPT_-on`, если она определена, "
+"выполняется после `_TARGET_`. `_TARGET_-_OPT_-off` работает аналогично, но "
+"когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5005
+#, no-wrap
+msgid ""
+"post-patch-OPT1-on:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch-OPT1-on:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5008
+#, no-wrap
+msgid ""
+"post-patch-OPT1-off:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch-OPT1-off:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5024
+#, 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 ""
+"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"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5027
+#, no-wrap
+msgid "Specifying the Working Directory"
+msgstr "Указание рабочего каталога"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5032
+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 ""
+"Каждый порт извлекается в рабочий каталог, который должен быть доступен для "
+"записи. Система портов по умолчанию распаковывает `DISTFILES` в каталог с "
+"именем `${DISTNAME}`. Другими словами, если в [.filename]#Makefile# указано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5037
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5040
+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 ""
+"то файлы дистрибутива порта содержат каталог верхнего уровня "
+"[.filename]#foo-1.0#, и остальные файлы находятся в этом каталоге."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5042
+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:5044
+#, no-wrap
+msgid "`WRKSRC`"
+msgstr "`WRKSRC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5048
+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 ""
+"Переменная указывает имя каталога, который создается при распаковке "
+"distfiles приложения. Чтобы в нашем предыдущем примере распаковка "
+"происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), "
+"напишите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5052
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/foo\n"
+msgstr "WRKSRC=\t${WRKDIR}/foo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5055
+msgid "or possibly"
+msgstr "или можно"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5059
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/${PORTNAME}\n"
+msgstr "WRKSRC=\t${WRKDIR}/${PORTNAME}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5062
+#, no-wrap
+msgid "`WRKSRC_SUBDIR`"
+msgstr "`WRKSRC_SUBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5065
+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 ""
+"Если исходные файлы, необходимые для порта, находятся в подкаталоге "
+"распакованного дистрибутива, присвойте `WRKSRC_SUBDIR` имя этого каталога."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5069
+#, no-wrap
+msgid "WRKSRC_SUBDIR=\tsrc\n"
+msgstr "WRKSRC_SUBDIR=\tsrc\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5072
+#, no-wrap
+msgid "`NO_WRKSUBDIR`"
+msgstr "`NO_WRKSUBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5075
+msgid ""
+"If the port does not extract in to a subdirectory at all, then set "
+"`NO_WRKSUBDIR` to indicate that."
+msgstr ""
+"Если порт не распаковывается в подкаталог вообще, установите `NO_WRKSUBDIR`, "
+"чтобы указать это."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5079
+#, no-wrap
+msgid "NO_WRKSUBDIR=\tyes\n"
+msgstr "NO_WRKSUBDIR=\tyes\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5084
+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 ""
+"Поскольку `WRKDIR` является единственной директорией, которая должна быть "
+"доступна для записи во время сборки, и используется для хранения многих "
+"файлов, фиксирующих состояние сборки, извлечение порта будет принудительно "
+"выполнено в поддиректорию."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5087
+#, no-wrap
+msgid "Conflict Handling"
+msgstr "Обработка конфликтов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5090
+msgid ""
+"There are three different variables to register a conflict between packages "
+"and ports: `CONFLICTS`, `CONFLICTS_INSTALL` and `CONFLICTS_BUILD`."
+msgstr ""
+"Существует три различные переменные для регистрации конфликтов между "
+"пакетами и портами: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5094
+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 ""
+"Эти переменные автоматически устанавливают переменную `IGNORE`, более "
+"подробно описанную в crossref:porting-dads[dads-noinstall,Пометка порта как "
+"неустанавливаемого с помощью `BROKEN`, `FORBIDDEN` или `IGNORE`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5097
+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 ""
+"При удалении одного из нескольких конфликтующих портов рекомендуется "
+"оставлять `CONFLICTS` в тех других портах на несколько месяцев, чтобы учесть "
+"пользователей, которые обновляются лишь время от времени."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5102
+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 ""
+"Если пакет не может сосуществовать с другими пакетами (из-за конфликтов "
+"файлов, несовместимости во время выполнения и т.д.). Проверка "
+"`CONFLICTS_INSTALL` выполняется после этапа сборки и перед этапом установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5107
+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:5112
+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 ""
+"Если порт не может быть собран, когда определённый порт уже установлен и "
+"итоговый пакет не может сосуществовать с другим пакетом. Проверка "
+"`CONFLICTS` выполняется до этапа сборки и до этапа установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5116
+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 ""
+"Каждый элемент, разделённый пробелами, в значениях переменных `CONFLICTS*` "
+"сопоставляется с пакетами(кроме того, который собирается) с использованием "
+"правил раскрытия шаблонов имен файлов в оболочке shell. Это позволяет "
+"перечислить все варианты порта в списке конфликтов вместо необходимости "
+"исключать собираемый вариант из этого списка. Например, если установлен git-"
+"lite, `CONFLICTS_INSTALL=git git-lite` позволит выполнить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5119
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=lite all deinstall install\n"
+msgstr "% make -C devel/git FLAVOR=lite all deinstall install\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5122
+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 ""
+"Но следующая команда сообщит о конфликте, так как установленное имя базового "
+"пакета — `git-lite`, а `git` будет собран, но не может быть установлен "
+"вместе с `git-lite`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5125
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=default all deinstall install\n"
+msgstr "% make -C devel/git FLAVOR=default all deinstall install\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5128
+msgid ""
+"Without that feature, the Makefile would need one "
+"`_flavor__CONFLICTS_INSTALL` for each flavor, listing every other flavor."
+msgstr ""
+"Без этой функции Makefile потребовал бы по одному "
+"`_flavor__CONFLICTS_INSTALL` для каждого варианта, перечисляя все остальные "
+"варианты."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5131
+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 ""
+"Наиболее распространённым содержимым одной из этих переменных является база "
+"пакета другого порта. База пакета — это имя пакета без указания версии, её "
+"можно получить, выполнив команду `make -V PKGBASE`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5133
+#, no-wrap
+msgid "Basic usage of `CONFLICTS*`"
+msgstr "Простой пример использования `CONFLICTS*`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5139
+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 ""
+"Пакет package:dns/bind99[] не может быть установлен, если присутствует пакет "
+"package:dns/bind910[], так как они устанавливают одинаковые файлы. Сначала "
+"соберите базовый пакет для использования:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5146
+#, no-wrap
+msgid ""
+"% make -C dns/bind99 -V PKGBASE\n"
+"bind99\n"
+"% make -C dns/bind910 -V PKGBASE\n"
+"bind910\n"
+msgstr ""
+"% make -C dns/bind99 -V PKGBASE\n"
+"bind99\n"
+"% make -C dns/bind910 -V PKGBASE\n"
+"bind910\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5149
+msgid "Then add to the [.filename]#Makefile# of package:dns/bind99[]:"
+msgstr "Затем добавьте в [.filename]#Makefile# пакета package:dns/bind99[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5153
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind910\n"
+msgstr "CONFLICTS_INSTALL=\tbind910\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5156
+msgid "And add to the [.filename]#Makefile# of package:dns/bind910[]:"
+msgstr "И добавьте в [.filename]#Makefile# пакета package:dns/bind910[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5160
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind99\n"
+msgstr "CONFLICTS_INSTALL=\tbind99\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5167
+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:5169
+#, no-wrap
+msgid "Using `CONFLICTS*` With Globs."
+msgstr "Использование `CONFLICTS*` с шаблонами имён файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5174
+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 ""
+"В версиях с 2.0 по 2.4.1_2 пакет package:deskutils/gnotime[] устанавливал "
+"встроенную версию пакета package:databases/qof[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5176
+msgid ""
+"To reflect this past, the [.filename]#Makefile# of package:databases/qof[] "
+"contains:"
+msgstr ""
+"Чтобы отразить это прошлое, [.filename]#Makefile# пакета package:databases/"
+"qof[] содержит:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5182
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5185
+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 ""
+"Первый элемент соответствует версиям `2.0`–`2.3`, второй — всем редакциям "
+"`2.4.0`, третий — точно версии `2.4.1`, а последний — первой и второй "
+"редакциям версии `2.4.1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5187
+msgid ""
+"package:deskutils/gnotime[] does not have any conflicts line because its "
+"current version does not conflict with anything else."
+msgstr ""
+"package:deskutils/gnotime[] не имеет строки конфликтов, потому что его "
+"текущая версия не конфликтует ни с чем другим."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5191
+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 ""
+"Переменная `DISABLE_CONFLICTS` может быть временно установлена при "
+"выполнении целей, на которые не влияют конфликты. Эту переменную не следует "
+"устанавливать в Makefiles портов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5195
+#, no-wrap
+msgid "% make -DDISABLE_CONFLICTS patch\n"
+msgstr "% make -DDISABLE_CONFLICTS patch\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5198
+#, no-wrap
+msgid "Installing Files"
+msgstr "Установка файлов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5205
+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 ""
+"Фаза `install` очень важна для конечного пользователя, так как она добавляет "
+"файлы в его систему. Все дополнительные команды, выполняемые в целях `*-"
+"install` [.filename]#Makefile# порта, должны выводиться на экран. _Не_ "
+"заглушайте эти команды с помощью `@` или `.SILENT`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5208
+#, no-wrap
+msgid "`INSTALL_*` Macros"
+msgstr "Макросы `INSTALL_*`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5215
+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 ""
+"Используйте макросы, предоставленные в [.filename]#bsd.port.mk#, чтобы "
+"обеспечить корректные режимы файлов в целях `*-install` порта. "
+"Устанавливайте владельца напрямую в [.filename]#pkg-plist# в соответствующих "
+"записях, таких как `@(_владелец_,_группа_,)`, `@owner _владелец_` и `@group "
+"_группа_`. Эти операторы действуют до переопределения или до конца "
+"[.filename]#pkg-plist#, поэтому не забудьте сбросить их, когда они больше не "
+"нужны. Владелец по умолчанию — `root:wheel`. Дополнительную информацию см. в "
+"crossref:plist[plist-keywords-base,Базовые Ключевые Слова]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5217
+msgid "`INSTALL_PROGRAM` is a command to install binary executables."
+msgstr "`INSTALL_PROGRAM` — команда для установки бинарных исполняемых файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5218
+msgid "`INSTALL_SCRIPT` is a command to install executable scripts."
+msgstr "`INSTALL_SCRIPT` — команда для установки исполняемых скриптов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5219
+msgid ""
+"`INSTALL_LIB` is a command to install shared libraries (but not static "
+"libraries)."
+msgstr ""
+"`INSTALL_LIB` — это команда для установки общих библиотек (но не статических "
+"библиотек)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5220
+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 ""
+"`INSTALL_KLD` — это команда для установки загружаемых модулей ядра. "
+"Некоторые архитектуры не поддерживают удаление символов из модулей, поэтому "
+"используйте эту команду вместо `INSTALL_PROGRAM`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5221
+msgid ""
+"`INSTALL_DATA` is a command to install sharable data, including static "
+"libraries."
+msgstr ""
+"`INSTALL_DATA` — это команда для установки общих данных, включая статические "
+"библиотеки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5222
+msgid ""
+"`INSTALL_MAN` is a command to install manpages and other documentation (it "
+"does not compress anything)."
+msgstr ""
+"`INSTALL_MAN` — это команда для установки man-страниц и другой документации "
+"(она ничего не сжимает)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5224
+msgid ""
+"These variables are set to the man:install[1] command with the appropriate "
+"flags for each situation."
+msgstr ""
+"Эти переменные передаются команде man:install[1] с соответствующими флагами "
+"для каждой ситуации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5228
+msgid ""
+"Do not use `INSTALL_LIB` to install static libraries, because stripping them "
+"renders them useless. Use `INSTALL_DATA` instead."
+msgstr ""
+"Не используйте `INSTALL_LIB` для установки статических библиотек, так как их "
+"удаление делает их бесполезными. Вместо этого используйте `INSTALL_DATA`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5231
+#, no-wrap
+msgid "Stripping Binaries and Shared Libraries"
+msgstr "Удаление символов из бинарных файлов и разделяемых библиотек"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5236
+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 ""
+"Установленные бинарные файлы должны быть очищены от отладочной информации. "
+"Не очищайте бинарные файлы вручную, если это не является абсолютно "
+"необходимым. Макрос `INSTALL_PROGRAM` устанавливает и очищает бинарный файл "
+"одновременно. Макрос `INSTALL_LIB` делает то же самое с разделяемыми "
+"библиотеками."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5239
+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 ""
+"Когда файл необходимо очистить, но ни макросы `INSTALL_PROGRAM`, ни "
+"`INSTALL_LIB` не подходят, `${STRIP_CMD}` очищает программу или разделяемую "
+"библиотеку. Обычно это делается в цели `post-install`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5244
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl\n"
+msgstr ""
+"post-install:\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5247
+msgid "When multiple files need to be stripped:"
+msgstr "Когда необходимо удалить отладочную информацию из нескольких файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5254
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5259
+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 ""
+"Используйте man:file[1] для файла, чтобы определить, был ли он подвергнут "
+"удалению символов. man:file[1] сообщает, что бинарные файлы либо `stripped` "
+"(удалены символы), либо `not stripped` (символы не удалены). Кроме того, "
+"man:strip[1] обнаружит программы, которые уже были подвергнуты удалению "
+"символов, и завершит работу без ошибок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5263
+msgid "When `WITH_DEBUG` is defined, elf files _must not_ be stripped."
+msgstr "Когда определён `WITH_DEBUG`, elf-файлы _не должны_ быть очищены."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5265
+msgid ""
+"The variables (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) and "
+"crossref:uses[uses,`USES`] provided by the framework handle this "
+"automatically."
+msgstr ""
+"Переменные (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) и "
+"crossref:uses[uses,`USES`], предоставляемые фреймворком, обрабатывают это "
+"автоматически."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5267
+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 ""
+"Некоторое программное обеспечение добавляет `-s` к своим `LDFLAGS`. В этом "
+"случае либо удалите `-s`, если установлен `WITH_DEBUG`, либо удалите его "
+"безусловно и используйте `STRIP_CMD` в `post-install`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5270
+#, no-wrap
+msgid "Installing a Whole Tree of Files"
+msgstr "Установка целого дерева файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5275
+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 ""
+"Иногда необходимо установить большое количество файлов с сохранением их "
+"иерархической структуры. Например, копирование всего дерева каталогов из "
+"`WRKSRC` в целевой каталог под `PREFIX`. Обратите внимание, что `PREFIX`, "
+"`EXAMPLESDIR`, `DATADIR` и другие переменные путей всегда должны "
+"предваряться `STAGEDIR` для соблюдения процедуры промежуточной установки "
+"(см. crossref:special[staging,Промежуточная установка])."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5280
+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 ""
+"Для этой ситуации существуют два макроса. Преимущество использования этих "
+"макросов вместо `cp` заключается в том, что они гарантируют целевым файлам "
+"правильные значения владельца и разрешений. Первый макрос, `COPYTREE_BIN`, "
+"устанавливает все установленные файлы как исполняемые, что делает его "
+"подходящим для установки в [.filename]#PREFIX/bin#. Второй макрос, "
+"`COPYTREE_SHARE#, не устанавливает исполняемые разрешения для файлов и, "
+"следовательно, подходит для установки файлов в [.filename]#PREFIX/share#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5286
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5289
+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 ""
+"Этот пример установит содержимое каталога [.filename]#examples# из "
+"дистрибутива вендора в соответствующее расположение примеров порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5295
+#, 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 ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DATADIR}/summer\n"
+"\t(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} \"June July August\" ${STAGEDIR}${DATADIR}/summer)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5298
+msgid ""
+"And this example will install the data of summer months to the "
+"[.filename]#summer# subdirectory of a [.filename]#DATADIR#."
+msgstr ""
+"И этот пример установит данные летних месяцев в подкаталог "
+"[.filename]#summer# каталога [.filename]#DATADIR#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5301
+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 ""
+"Дополнительные аргументы `find` могут быть переданы через третий аргумент "
+"макросов `COPYTREE_*`. Например, чтобы установить все файлы из первого "
+"примера, кроме Makefiles, можно использовать следующие команды."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5308
+#, 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 ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && \\\n"
+"\t${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} \"! -name Makefile\")\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5314
+msgid ""
+"These macros do not add the installed files to [.filename]#pkg-plist#. They "
+"must be added manually. For optional documentation (`PORTDOCS`, see "
+"crossref:makefiles[install-documentation, Install Additional Documentation]) "
+"and examples (`PORTEXAMPLES`), the `%%PORTDOCS%%` or `%%PORTEXAMPLES%%` "
+"prefixes must be prepended in [.filename]#pkg-plist#."
+msgstr ""
+"Эти макросы не добавляют установленные файлы в [.filename]#pkg-plist#. Их "
+"необходимо добавлять вручную. Для дополнительной документации (`PORTDOCS`, "
+"см. crossref:makefiles[install-documentation, Установка дополнительной "
+"документации]) и примеров (`PORTEXAMPLES`), префиксы `%%PORTDOCS%%` или `%"
+"%PORTEXAMPLES%%` должны быть добавлены в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5316
+#, no-wrap
+msgid "Install Additional Documentation"
+msgstr "Установка дополнительной документации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5320
+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 ""
+"Если у программного обеспечения есть документация, помимо стандартных "
+"страниц man и info, которая может быть полезна пользователю, установите её в "
+"`DOCSDIR`. Это можно сделать, как и в предыдущем пункте, в цели `post-"
+"install`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5325
+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 ""
+"Создайте новый каталог для порта. Имя каталога — `DOCSDIR`. Обычно оно равно "
+"`PORTNAME`. Однако, если пользователю может потребоваться установка разных "
+"версий порта одновременно, можно использовать полное имя `PKGNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5328
+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 ""
+"Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-"
+"plist#, можно безопасно всегда устанавливать документацию в `STAGEDIR` (см. "
+"crossref:special[staging,Staging]). Поэтому блоки `.if` требуются только в "
+"тех случаях, когда устанавливаемые файлы достаточно велики, чтобы вызвать "
+"значительные накладные расходы на ввод-вывод."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5334
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+"\t${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+"\t${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5338
+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 crossref:makefiles[options-targets, Additional Build Targets, "
+"`_target_-_OPT_-on` and `_target_-_OPT_-off`]."
+msgstr ""
+"С другой стороны, если в порте есть опция DOCS, установите документацию в "
+"цели `post-install-DOCS-on`. Эти цели описаны в crossref:makefiles[options-"
+"targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-"
+"off`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5340
+msgid ""
+"Here are some handy variables and how they are expanded by default when used "
+"in the [.filename]#Makefile#:"
+msgstr ""
+"Вот несколько полезных переменных и их стандартное раскрытие при "
+"использовании в [.filename]#Makefile#:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5342
+msgid "`DATADIR` gets expanded to [.filename]#PREFIX/share/PORTNAME#."
+msgstr "`DATADIR` раскрывается в [.filename]#PREFIX/share/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5343
+msgid "`DATADIR_REL` gets expanded to [.filename]#share/PORTNAME#."
+msgstr "`DATADIR_REL` раскрывается в [.filename]#share/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5344
+msgid "`DOCSDIR` gets expanded to [.filename]#PREFIX/share/doc/PORTNAME#."
+msgstr "`DOCSDIR` раскрывается в [.filename]#PREFIX/share/doc/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5345
+msgid "`DOCSDIR_REL` gets expanded to [.filename]#share/doc/PORTNAME#."
+msgstr "`DOCSDIR_REL` раскрывается в [.filename]#share/doc/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5346
+msgid ""
+"`EXAMPLESDIR` gets expanded to [.filename]#PREFIX/share/examples/PORTNAME#."
+msgstr ""
+"`EXAMPLESDIR` раскрывается в [.filename]#PREFIX/share/examples/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5347
+msgid ""
+"`EXAMPLESDIR_REL` gets expanded to [.filename]#share/examples/PORTNAME#."
+msgstr "`EXAMPLESDIR_REL` раскрывается в [.filename]#share/examples/PORTNAME#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5353
+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 ""
+"Опция `DOCS` управляет только дополнительной документацией, устанавливаемой "
+"в `DOCSDIR`. Она не применяется к стандартным man-страницам и info-"
+"страницам. Содержимое, устанавливаемое в `EXAMPLESDIR`, контролируется "
+"опцией `EXAMPLES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5359
+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 ""
+"Эти переменные экспортируются в `PLIST_SUB`. Их значения будут представлены "
+"там в виде путей относительно [.filename]#PREFIX#, если это возможно. То "
+"есть, [.filename]#share/doc/PORTNAME# будет заменено на `%%DOCSDIR%%` в "
+"списке упаковки по умолчанию и так далее. (Подробнее о подстановках в "
+"[.filename]#pkg-plist# см. crossref:plist[plist-sub,здесь].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5361
+msgid ""
+"All conditionally installed documentation files and directories are included "
+"in [.filename]#pkg-plist# with the `%%PORTDOCS%%` prefix, for example:"
+msgstr ""
+"Все условно устанавливаемые файлы и каталоги документации включаются в "
+"[.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5366
+#, no-wrap
+msgid ""
+"%%PORTDOCS%%%%DOCSDIR%%/AUTHORS\n"
+"%%PORTDOCS%%%%DOCSDIR%%/CONTACT\n"
+msgstr ""
+"%%PORTDOCS%%%%DOCSDIR%%/AUTHORS\n"
+"%%PORTDOCS%%%%DOCSDIR%%/CONTACT\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5375
+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 ""
+"В качестве альтернативы перечислению файлов документации в [.filename]#pkg-"
+"plist#, порт может установить переменную `PORTDOCS` в список имён файлов и "
+"шаблонов имен файлов shell для добавления в итоговый список упаковки. Имена "
+"будут относительны к `DOCSDIR`. Поэтому порт, использующий `PORTDOCS` и "
+"нестандартное расположение документации, должен соответствующим образом "
+"установить `DOCSDIR`. Если в `PORTDOCS` указан каталог или он соответствует "
+"шаблону из этой переменной, всё поддерево содержащихся файлов и каталогов "
+"будет зарегистрировано в итоговом списке упаковки. Если опция `DOCS` "
+"отключена, файлы и каталоги, перечисленные в `PORTDOCS`, не будут "
+"установлены или добавлены в список упаковки порта. Установка документации в "
+"`PORTDOCS`, как показано выше, остаётся на усмотрение самого порта. Типичный "
+"пример использования `PORTDOCS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5379
+#, no-wrap
+msgid "PORTDOCS=\tREADME.* ChangeLog docs/*\n"
+msgstr "PORTDOCS=\tREADME.* ChangeLog docs/*\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5384
+msgid ""
+"The equivalents of `PORTDOCS` for files installed under `DATADIR` and "
+"`EXAMPLESDIR` are `PORTDATA` and `PORTEXAMPLES`, respectively."
+msgstr ""
+"Эквивалентами `PORTDOCS` для файлов, установленных в `DATADIR` и "
+"`EXAMPLESDIR`, являются `PORTDATA` и `PORTEXAMPLES` соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5388
+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 ""
+"Содержимое файла [.filename]#pkg-message# отображается при установке. "
+"Подробности см. в разделе crossref:pkg-files[porting-message,использование "
+"файла [.filename]#pkg-message#]. Файл [.filename]#pkg-message# не нужно "
+"добавлять в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5391
+#, no-wrap
+msgid "Subdirectories Under `PREFIX`"
+msgstr "Подкаталоги в `PREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5400
+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 ""
+"Попробуйте сделать так, чтобы порт размещал файлы в правильных подкаталогах "
+"`PREFIX`. Некоторые порты собирают всё в кучу и помещают в подкаталог с "
+"именем порта, что неверно. Также многие порты размещают все файлы, кроме "
+"бинарников, заголовочных файлов и страниц руководства, в подкаталоге "
+"[.filename]#lib#, что плохо согласуется с парадигмой BSD. Многие из этих "
+"файлов должны быть перемещены в один из следующих каталогов: "
+"[.filename]#etc# (файлы настройки/конфигурации), [.filename]#libexec# "
+"(исполняемые файлы для внутреннего использования), [.filename]#sbin# "
+"(исполняемые файлы для суперпользователей/администраторов), "
+"[.filename]#info# (документация для браузера info) или [.filename]#share# "
+"(архитектурно-независимые файлы). Подробности см. в man:hier[7]; правила, "
+"действующие для [.filename]#/usr#, в основном применимы и к [.filename]#/usr/"
+"local#. Исключение составляют порты, связанные с USENET \"news\". Они могут "
+"использовать [.filename]#PREFIX/news# в качестве места назначения для своих "
+"файлов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5402
+#, no-wrap
+msgid "Use `BINARY_ALIAS` to Rename Commands Instead of Patching the Build"
+msgstr "Используйте `BINARY_ALIAS` для переименования команд вместо исправления сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5405
+msgid ""
+"When `BINARY_ALIAS` is defined it will create symlinks of the given commands "
+"in a directory which will be prepended to `PATH`."
+msgstr ""
+"Когда определена переменная `BINARY_ALIAS`, будут созданы символьные ссылки "
+"на указанные команды в каталоге, который будет добавлен в начало переменной "
+"`PATH`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5407
+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:5409
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Make `gsed` Available as `sed`"
+msgstr "Использование `BINARY_ALIAS` для предоставления `gsed` в качестве `sed`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5414
+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 ""
+"Некоторые порты ожидают, что `sed` будет вести себя как GNU sed и используют "
+"возможности, которые man:sed[1] не предоставляет. GNU sed доступен в пакете "
+"package:textproc/gsed[] на FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5416
+msgid ""
+"Use `BINARY_ALIAS` to substitute `sed` with `gsed` for the duration of the "
+"build:"
+msgstr "Используйте `BINARY_ALIAS` для замены `sed` на `gsed` на время сборки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5422
+#, no-wrap
+msgid ""
+"BUILD_DEPENDS=\tgsed:textproc/gsed\n"
+"...\n"
+"BINARY_ALIAS=\tsed=gsed\n"
+msgstr ""
+"BUILD_DEPENDS=\tgsed:textproc/gsed\n"
+"...\n"
+"BINARY_ALIAS=\tsed=gsed\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5427
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Provide Aliases for Hardcoded `python3` Commands"
+msgstr "Использование `BINARY_ALIAS` для создания псевдонимов жестко заданных команд `python3`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5432
+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 ""
+"Порт, в котором есть жёсткая ссылка на `python3` в скриптах сборки, требует "
+"его наличия в `PATH` во время сборки. Используйте `BINARY_ALIAS` для "
+"создания псевдонима, указывающего на нужный бинарный файл Python 3:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5438
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+,build\n"
+"...\n"
+"BINARY_ALIAS=\tpython3=${PYTHON_CMD}\n"
+msgstr ""
+"USES=\tpython:3.4+,build\n"
+"...\n"
+"BINARY_ALIAS=\tpython3=${PYTHON_CMD}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5441
+msgid ""
+"See crossref:special[using-python,Using Python] for more information about "
+"`USES=python`."
+msgstr ""
+"См. crossref:special[using-python,Использование Python] для получения "
+"дополнительной информации о `USES=python`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5448
+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 ""
+"Бинарные псевдонимы создаются после обработки зависимостей, указанных через "
+"`BUILD_DEPENDS` и `LIB_DEPENDS`, но до цели `configure`. Это приводит к "
+"различным ограничениям. Например, программы, установленные через "
+"`TEST_DEPENDS`, нельзя использовать для создания бинарного псевдонима, так "
+"как тестовые зависимости, указанные таким образом, обрабатываются после "
+"создания бинарных псевдонимов."
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 fc44c12e37..dc7350143a 100644
--- a/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
@@ -1,15 +1,17 @@
---
-title: Глава 2. Как самому сделать новый порт
-prev: books/porters-handbook/porting-why
+description: 'Как сделать новый порт'
next: books/porters-handbook/quick-porting
+params:
+ path: /books/porters-handbook/new-port/
+prev: books/porters-handbook/porting-why
showBookMenu: true
+tags: ["new port", "upgrading", "guidelines", "ports"]
+title: 'Глава 2. Как самому сделать новый порт'
weight: 2
-params:
- path: "/books/porters-handbook/new-port/"
---
[[own-port]]
-= Making a New Port
+= Как самому сделать новый порт
:doctype: book
:toc: macro
:toclevels: 1
@@ -57,4 +59,4 @@ endif::[]
Только часть переменных (`_VAR_`), которые могут быть переопределены, описаны в этом документе. Большинство (если не все) описаны в начале файла [.filename]#/usr/ports/Mk/bsd.port.mk#; остальные, скорее всего, тоже там описаны. Заметьте, что в этом файле используется нестандартная настройка шага табуляции: Emacs и Vim должны распознать это при загрузке файла. Как man:vi[1], так и man:ex[1] могут быть настроены на использование правильного значения выдачей команды `:set tabstop=4` после загрузки файла.
====
-Ищете, с чего бы начать попроще? Посмотрите на http://wiki.freebsd.org/WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы можете работать.
+Ищете, с чего бы начать попроще? Посмотрите на https://wiki.freebsd.org/WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы можете работать.
diff --git a/documentation/content/ru/books/porters-handbook/new-port/_index.po b/documentation/content/ru/books/porters-handbook/new-port/_index.po
new file mode 100644
index 0000000000..8908fe56d6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/new-port/_index.po
@@ -0,0 +1,101 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooknew-port_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 Hash Value: title
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Making a New Port"
+msgstr "Глава 2. Как самому сделать новый порт"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:14
+#, no-wrap
+msgid "Making a New Port"
+msgstr "Как самому сделать новый порт"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:52
+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:55
+msgid ""
+"What follows are some guidelines for creating a new port for FreeBSD. To "
+"upgrade an existing port, read this, then read crossref:upgrading[port-"
+"upgrading,Upgrading a Port]."
+msgstr ""
+"Ниже находятся некоторые указания по созданию нового порта для FreeBSD. Если "
+"вы хотите обновить существующий порт, вы должны прочесть их, а затем "
+"crossref:upgrading[port-upgrading, Обновление отдельного порта]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:59
+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 ""
+"Если этот документ недостаточно подробен, вы должны обратиться к файлу "
+"[.filename]#/usr/ports/Mk/bsd.port.mk#, который включается в make-файл "
+"каждого порта. Он хорошо прокомментирован, и даже если вы не занимаетесь "
+"хакингом make-файлов каждодневно, из него вы сможете узнать много нового. "
+"Кроме того, конкретные вопросы можно задать, послав письмо на адрес {freebsd-"
+"ports}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:66
+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 ""
+"Только часть переменных (`_VAR_`), которые могут быть переопределены, "
+"описаны в этом документе. Большинство (если не все) описаны в начале файла "
+"[.filename]#/usr/ports/Mk/bsd.port.mk#; остальные, скорее всего, тоже там "
+"описаны. Заметьте, что в этом файле используется нестандартная настройка "
+"шага табуляции: Emacs и Vim должны распознать это при загрузке файла. Как "
+"man:vi[1], так и man:ex[1] могут быть настроены на использование правильного "
+"значения выдачей команды `:set tabstop=4` после загрузки файла."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:68
+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 ""
+"Ищете, с чего бы начать попроще? Посмотрите на https://wiki.freebsd.org/"
+"WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы "
+"можете работать."
diff --git a/documentation/content/ru/books/porters-handbook/order/_index.adoc b/documentation/content/ru/books/porters-handbook/order/_index.adoc
new file mode 100644
index 0000000000..82869f5a85
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/order/_index.adoc
@@ -0,0 +1,260 @@
+---
+description: 'Порядок переменных в Makefile портов FreeBSD'
+next: books/porters-handbook/keeping-up
+params:
+ path: /books/porters-handbook/order/
+prev: books/porters-handbook/porting-samplem
+showBookMenu: true
+tags: ["order", "PORTNAME", "PATCHFILES", "MAINTAINER", "LICENSE", "dependencies", "USES"]
+title: 'Глава 15. Порядок переменных в Makefile портов'
+weight: 15
+---
+
+[[porting-order]]
+= Порядок переменных в Makefile портов
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 15
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/porters-handbook/
+
+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::[]
+
+Первые разделы [.filename]#Makefile# всегда должны идти в одном и том же порядке. Это стандартное правило позволяет любому легко читать любой порт, не тратя время на поиск переменных в произвольном порядке.
+
+[NOTE]
+====
+Описаные здесь разделы и переменные являются обязательными в обычном порте. В подчиненном порте многие разделы и переменные могут быть пропущены.
+====
+
+[IMPORTANT]
+====
+Каждый следующий блок должен быть отделен от предыдущего одним пустым пробелом.
+
+В следующих блоках устанавливайте только переменные, которые требуются для порта. Определяйте эти переменные в порядке, указанном здесь.
+====
+
+[[porting-order-portname]]
+== Блок `PORTNAME`
+
+Этот блок является наиболее важным. Он определяет имя порта, версию, расположение файла дистрибутива и категорию. Переменные должны быть в следующем порядке:
+
+* crossref:makefiles[makefile-portname,`PORTNAME`] * crossref:makefiles[makefile-versions,`PORTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * crossref:makefiles[makefile-versions,`DISTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]
+* crossref:makefiles[makefile-portrevision,`PORTREVISION`]
+* crossref:makefiles[makefile-portepoch,`PORTEPOCH`]
+* crossref:makefiles[makefile-categories,`CATEGORIES`]
+* crossref:makefiles[makefile-master_sites,`MASTER_SITES`]
+* crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] (устарело)
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]
+* crossref:makefiles[makefile-distname,`DISTNAME`]
+* crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]
+* crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]
+* crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]
+* crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]
+
+[[portversion-footnote]]
+[IMPORTANT]
+====
+Может быть использован только один из параметров — PORTVERSION или DISTVERSION.
+====
+
+[[porting-order-patch]]
+== Блок `PATCHFILES`
+
+Этот блок является необязательным. Переменные:
+
+* crossref:makefiles[porting-patchfiles,`PATCH_SITES`]
+* crossref:makefiles[porting-patchfiles,`PATCHFILES`]
+* crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]
+
+[[porting-order-maintainer]]
+== Блок `MAINTAINER`
+
+Этот блок является обязательным. Переменные следующие:
+
+* crossref:makefiles[makefile-maintainer,`MAINTAINER`]
+* crossref:makefiles[makefile-comment,`COMMENT`]
+* crossref:makefiles[makefile-www,`WWW`]
+
+[[porting-order-license]]
+== Блок `LICENSE`
+
+Этот блок является необязательным, хотя настоятельно рекомендуется. Переменные:
+
+* crossref:makefiles[licenses-license,`LICENSE`]
+* crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]
+* crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] или `LICENSE_GROUPS_NAME`
+* crossref:makefiles[licenses-license_name,`LICENSE_NAME`] или `LICENSE_NAME_NAME`
+* crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] или `LICENSE_TEXT_NAME`
+* crossref:makefiles[licenses-license_file,`LICENSE_FILE`] или `LICENSE_FILE_NAME`
+* crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] или `LICENSE_PERMS_NAME_`
+* crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] или `LICENSE_DISTFILES_NAME`
+
+Если имеется несколько лицензий, отсортируйте различные переменные LICENSE_VAR_NAME по названию лицензии.
+
+[[porting-order-broken]]
+== Общие сообщения `BROKEN`/`IGNORE`/`DEPRECATED`
+
+Этот блок необязателен. Переменные:
+
+* crossref:porting-dads[dads-deprecated,`DEPRECATED`]
+* crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]
+* crossref:porting-dads[dads-noinstall,`FORBIDDEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN_*`]
+* crossref:porting-dads[dads-noinstall,`IGNORE`]
+* crossref:porting-dads[dads-noinstall,`IGNORE_*`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]
+
+[NOTE]
+====
+`BROKEN_*` и `IGNORE_*` могут быть любыми общими переменными, например, `IGNORE_amd64`, `BROKEN_FreeBSD_10` и т.д. За исключением переменных, которые зависят от crossref:uses[uses,`USES`], их следует размещать в crossref:order[porting-order-uses, `USES` и `USE_x`]. Например, `IGNORE_WITH_PHP` работает только если установлен crossref:uses[uses-php,`php`], а `BROKEN_SSL` — только если установлен crossref:uses[uses-ssl,`ssl`].
+
+Если порт помечен как BROKEN при выполнении определённых условий, и эти условия можно проверить только после включения [.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk#, то такие переменные должны быть установлены позже, в crossref:order[porting-order-rest, Остальные Переменные].
+====
+
+[[porting-order-depends]]
+== Блок зависимостей
+
+Этот блок необязателен. Переменные:
+
+* crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]
+* crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]
+* crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]
+* crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]
+* crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]
+* crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]
+* `TEST_DEPENDS`
+
+[[porting-order-flavors]]
+== Флейворы
+
+Этот блок необязателен.
+
+Начните этот раздел с определения `FLAVORS`. Затем рассмотрите возможные вспомогательные инструменты флейворов. Дополнительную информацию см. в разделе crossref:flavors[flavors-using,Использование флейворов (FLAVORS)].
+
+Конструкции, устанавливающие переменные, недоступные в виде помощников, с использованием `.if ${FLAVOR:U} == foo`, должны быть размещены в соответствующих разделах ниже.
+
+[[porting-order-uses]]
+== `USES` и `USE_x`
+
+Начните этот раздел с определения `USES`, а затем возможных `USE_x`.
+
+Держите связанные переменные рядом. Например, если используется crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], всегда размещайте переменные `GH_*` сразу после неё.
+
+[[porting-order-variables]]
+== Стандартные переменные bsd.port.mk
+
+Этот блок раздела предназначен для переменных, которые могут быть определены в [.filename]#bsd.port.mk# и не принадлежат ни к одному из предыдущих блоков разделов.
+
+Порядок не важен, однако старайтесь держать схожие переменные вместе. Например, переменные uid и gid `USERS` и `GROUPS`. Конфигурационные переменные `CONFIGURE_*` и `*_CONFIGURE`. Списки файлов и директорий `PORTDOCS` и `PORTEXAMPLES`.
+
+[[porting-order-options]]
+== Параметры и помощники
+
+Если порт использует crossref:makefiles[makefile-options,фреймворк опций], сначала определите `OPTIONS_DEFINE` и `OPTIONS_DEFAULT`, затем остальные переменные `OPTIONS_*`, далее описания `*_DESC`, а затем вспомогательные опции. Старайтесь сортировать их все в алфавитном порядке.
+
+[[porting-order-options-ex1]]
+.Пример порядка переменных-опций
+[example]
+====
+Опции `FOO` и `BAR` не имеют стандартного описания, поэтому его необходимо написать. Остальные опции уже имеют описание в [.filename]#Mk/bsd.options.desc.mk#, поэтому его создание не требуется. Переменные `DOCS` и `EXAMPLES` используют вспомогательные цели для установки своих файлов, они приведены здесь для полноты, хотя относятся к разделу crossref:order[porting-order-targets, Цели], поэтому перед ними могут быть вставлены другие переменные и цели.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= DOCS EXAMPLES FOO BAR
+OPTIONS_DEFAULT= FOO
+OPTIONS_RADIO= SSL
+OPTIONS_RADIO_SSL= OPENSSL GNUTLS
+OPTIONS_SUB= yes
+
+BAR_DESC= Enable bar support
+FOO_DESC= Enable foo support
+
+BAR_CONFIGURE_WITH= bar=${LOCALBASE}
+FOO_CONFIGURE_ENABLE= foo
+GNUTLS_CONFIGURE_ON= --with-ssl=gnutls
+OPENSSL_CONFIGURE_ON= --with-ssl=openssl
+
+post-install-DOCS-on:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}
+
+post-install-EXAMPLES-on:
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}
+....
+
+====
+
+[[porting-order-rest]]
+== Остальные переменные
+
+И затем, остальные переменные, которые не упоминались в предыдущих блоках.
+
+[[porting-order-targets]]
+== Цели
+
+После определения всех переменных можно определить дополнительные цели man:make[1]. Следует располагать `pre-*` перед `post-*` и в том же порядке, в котором выполняются различные этапы:
+
+* `fetch`
+* `extract`
+* `patch`
+* `configure`
+* `build`
+* `install`
+* `test`
+
+[TIP]
+====
+При использовании опций `helpers` для цели `target` сохраняйте их в алфавитном порядке, но оставляйте `*-on` перед `*-off`. Если также используется основная цель, размещайте её перед дополнительными:
+
+[.programlisting]
+....
+post-install:
+ # install generic bits
+
+post-install-DOCS-on:
+ # Install documentation
+
+post-install-X11-on:
+ # Install X11 related bits
+
+post-install-X11-off:
+ # Install bits that should be there if X11 is disabled
+....
+====
diff --git a/documentation/content/ru/books/porters-handbook/order/_index.po b/documentation/content/ru/books/porters-handbook/order/_index.po
new file mode 100644
index 0000000000..0492f69f9a
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/order/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-16 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookorder_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Order of Variables in FreeBSD Port Makefiles"
+msgstr "Порядок переменных в Makefile портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. Order of Variables in Port Makefiles"
+msgstr "Глава 15. Порядок переменных в Makefile портов"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:14
+#, no-wrap
+msgid "Order of Variables in Port Makefiles"
+msgstr "Порядок переменных в Makefile портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:53
+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 ""
+"Первые разделы [.filename]#Makefile# всегда должны идти в одном и том же "
+"порядке. Это стандартное правило позволяет любому легко читать любой порт, "
+"не тратя время на поиск переменных в произвольном порядке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:58
+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:63
+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:66
+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:69
+#, no-wrap
+msgid "`PORTNAME` Block"
+msgstr "Блок `PORTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:73
+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:77
+msgid ""
+"crossref:makefiles[makefile-portname,`PORTNAME`] * "
+"crossref:makefiles[makefile-versions,`PORTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+msgstr ""
+"crossref:makefiles[makefile-portname,`PORTNAME`] * "
+"crossref:makefiles[makefile-versions,`PORTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:80
+msgid ""
+"crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * "
+"crossref:makefiles[makefile-versions,`DISTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+msgstr ""
+"crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * "
+"crossref:makefiles[makefile-versions,`DISTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:81
+msgid "crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]"
+msgstr "crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:82
+msgid "crossref:makefiles[makefile-portrevision,`PORTREVISION`]"
+msgstr "crossref:makefiles[makefile-portrevision,`PORTREVISION`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:83
+msgid "crossref:makefiles[makefile-portepoch,`PORTEPOCH`]"
+msgstr "crossref:makefiles[makefile-portepoch,`PORTEPOCH`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:84
+msgid "crossref:makefiles[makefile-categories,`CATEGORIES`]"
+msgstr "crossref:makefiles[makefile-categories,`CATEGORIES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:85
+msgid "crossref:makefiles[makefile-master_sites,`MASTER_SITES`]"
+msgstr "crossref:makefiles[makefile-master_sites,`MASTER_SITES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:86
+msgid ""
+"crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] "
+"(deprecated)"
+msgstr ""
+"crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] "
+"(устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:87
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]"
+msgstr "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:88
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]"
+msgstr "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:89
+msgid "crossref:makefiles[makefile-distname,`DISTNAME`]"
+msgstr "crossref:makefiles[makefile-distname,`DISTNAME`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:90
+msgid "crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]"
+msgstr "crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:91
+msgid "crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]"
+msgstr "crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:92
+msgid "crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]"
+msgstr "crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:93
+msgid "crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]"
+msgstr "crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:98
+msgid "Only one of PORTVERSION and DISTVERSION can be used."
+msgstr ""
+"Может быть использован только один из параметров — PORTVERSION или "
+"DISTVERSION."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:101
+#, no-wrap
+msgid "`PATCHFILES` Block"
+msgstr "Блок `PATCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:105
+msgid "This block is optional. The variables are:"
+msgstr "Этот блок является необязательным. Переменные:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:107
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_SITES`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCH_SITES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:108
+msgid "crossref:makefiles[porting-patchfiles,`PATCHFILES`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCHFILES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:109
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:111
+#, no-wrap
+msgid "`MAINTAINER` Block"
+msgstr "Блок `MAINTAINER`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:115
+msgid "This block is mandatory. The variables are:"
+msgstr "Этот блок является обязательным. Переменные следующие:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:117
+msgid "crossref:makefiles[makefile-maintainer,`MAINTAINER`]"
+msgstr "crossref:makefiles[makefile-maintainer,`MAINTAINER`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:118
+msgid "crossref:makefiles[makefile-comment,`COMMENT`]"
+msgstr "crossref:makefiles[makefile-comment,`COMMENT`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:119
+msgid "crossref:makefiles[makefile-www,`WWW`]"
+msgstr "crossref:makefiles[makefile-www,`WWW`]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:121
+#, no-wrap
+msgid "`LICENSE` Block"
+msgstr "Блок `LICENSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:125
+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:127
+msgid "crossref:makefiles[licenses-license,`LICENSE`]"
+msgstr "crossref:makefiles[licenses-license,`LICENSE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:128
+msgid "crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]"
+msgstr "crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:129
+msgid ""
+"crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] or "
+"`LICENSE_GROUPS_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] или "
+"`LICENSE_GROUPS_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:130
+msgid ""
+"crossref:makefiles[licenses-license_name,`LICENSE_NAME`] or "
+"`LICENSE_NAME_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_name,`LICENSE_NAME`] или "
+"`LICENSE_NAME_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:131
+msgid ""
+"crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] or "
+"`LICENSE_TEXT_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] или "
+"`LICENSE_TEXT_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:132
+msgid ""
+"crossref:makefiles[licenses-license_file,`LICENSE_FILE`] or "
+"`LICENSE_FILE_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_file,`LICENSE_FILE`] или "
+"`LICENSE_FILE_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:133
+msgid ""
+"crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] or "
+"`LICENSE_PERMS_NAME_`"
+msgstr ""
+"crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] или "
+"`LICENSE_PERMS_NAME_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:134
+msgid ""
+"crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] or "
+"`LICENSE_DISTFILES_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] или "
+"`LICENSE_DISTFILES_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:136
+msgid ""
+"If there are multiple licenses, sort the different LICENSE_VAR_NAME "
+"variables by license name."
+msgstr ""
+"Если имеется несколько лицензий, отсортируйте различные переменные "
+"LICENSE_VAR_NAME по названию лицензии."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:138
+#, no-wrap
+msgid "Generic `BROKEN`/`IGNORE`/`DEPRECATED` Messages"
+msgstr "Общие сообщения `BROKEN`/`IGNORE`/`DEPRECATED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:141
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:171
+msgid "This block is optional. The variables are:"
+msgstr "Этот блок необязателен. Переменные:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:143
+msgid "crossref:porting-dads[dads-deprecated,`DEPRECATED`]"
+msgstr "crossref:porting-dads[dads-deprecated,`DEPRECATED`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:144
+msgid "crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]"
+msgstr "crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:145
+msgid "crossref:porting-dads[dads-noinstall,`FORBIDDEN`]"
+msgstr "crossref:porting-dads[dads-noinstall,`FORBIDDEN`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:146
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN`]"
+msgstr "crossref:porting-dads[dads-noinstall,`BROKEN`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:147
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN_*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`BROKEN_*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:148
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE`]"
+msgstr "crossref:porting-dads[dads-noinstall,`IGNORE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:149
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE_*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`IGNORE_*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:150
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]"
+msgstr "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:151
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:152
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]"
+msgstr "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:153
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:160
+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 "
+"crossref:order[porting-order-uses, `USES` and `USE_x`]. For instance, "
+"`IGNORE_WITH_PHP` only works if crossref:uses[uses-php,`php`] is set, and "
+"`BROKEN_SSL` only if crossref:uses[uses-ssl,`ssl`] is set."
+msgstr ""
+"`BROKEN_*` и `IGNORE_*` могут быть любыми общими переменными, например, "
+"`IGNORE_amd64`, `BROKEN_FreeBSD_10` и т.д. За исключением переменных, "
+"которые зависят от crossref:uses[uses,`USES`], их следует размещать в "
+"crossref:order[porting-order-uses, `USES` и `USE_x`]. Например, "
+"`IGNORE_WITH_PHP` работает только если установлен crossref:uses[uses-"
+"php,`php`], а `BROKEN_SSL` — только если установлен crossref:uses[uses-"
+"ssl,`ssl`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:165
+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 crossref:order[porting-order-rest, The "
+"Rest of the Variables]."
+msgstr ""
+"Если порт помечен как BROKEN при выполнении определённых условий, и эти "
+"условия можно проверить только после включения "
+"[.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk#, то такие "
+"переменные должны быть установлены позже, в crossref:order[porting-order-"
+"rest, Остальные Переменные]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:168
+#, no-wrap
+msgid "The Dependencies Block"
+msgstr "Блок зависимостей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:173
+msgid "crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:174
+msgid "crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:175
+msgid "crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:176
+msgid "crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:177
+msgid "crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:178
+msgid "crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:179
+msgid "`TEST_DEPENDS`"
+msgstr "`TEST_DEPENDS`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:181
+#, no-wrap
+msgid "Flavors"
+msgstr "Флейворы"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:184
+msgid "This block is optional."
+msgstr "Этот блок необязателен."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:188
+msgid ""
+"Start this section with defining `FLAVORS`. Continue with the possible "
+"Flavors helpers. See crossref:flavors[flavors-using,Using FLAVORS] for more "
+"Information."
+msgstr ""
+"Начните этот раздел с определения `FLAVORS`. Затем рассмотрите возможные "
+"вспомогательные инструменты флейворов. Дополнительную информацию см. в "
+"разделе crossref:flavors[flavors-using,Использование флейворов (FLAVORS)]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:190
+msgid ""
+"Constructs setting variables not available as helpers using `.if ${FLAVOR:U} "
+"== foo` should go in their respective sections below."
+msgstr ""
+"Конструкции, устанавливающие переменные, недоступные в виде помощников, с "
+"использованием `.if ${FLAVOR:U} == foo`, должны быть размещены в "
+"соответствующих разделах ниже."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:192
+#, no-wrap
+msgid "`USES` and `USE_x`"
+msgstr "`USES` и `USE_x`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:195
+msgid "Start this section with defining `USES`, and then possible `USE_x`."
+msgstr "Начните этот раздел с определения `USES`, а затем возможных `USE_x`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:198
+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 ""
+"Держите связанные переменные рядом. Например, если используется "
+"crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], всегда "
+"размещайте переменные `GH_*` сразу после неё."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:200
+#, no-wrap
+msgid "Standard bsd.port.mk Variables"
+msgstr "Стандартные переменные bsd.port.mk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:203
+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 ""
+"Этот блок раздела предназначен для переменных, которые могут быть определены "
+"в [.filename]#bsd.port.mk# и не принадлежат ни к одному из предыдущих блоков "
+"разделов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:208
+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 ""
+"Порядок не важен, однако старайтесь держать схожие переменные вместе. "
+"Например, переменные uid и gid `USERS` и `GROUPS`. Конфигурационные "
+"переменные `CONFIGURE_*` и `*_CONFIGURE`. Списки файлов и директорий "
+"`PORTDOCS` и `PORTEXAMPLES`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:210
+#, no-wrap
+msgid "Options and Helpers"
+msgstr "Параметры и помощники"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:215
+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 ""
+"Если порт использует crossref:makefiles[makefile-options,фреймворк опций], "
+"сначала определите `OPTIONS_DEFINE` и `OPTIONS_DEFAULT`, затем остальные "
+"переменные `OPTIONS_*`, далее описания `*_DESC`, а затем вспомогательные "
+"опции. Старайтесь сортировать их все в алфавитном порядке."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:217
+#, no-wrap
+msgid "Options Variables Order Example"
+msgstr "Пример порядка переменных-опций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:224
+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 crossref:order[porting-order-"
+"targets, The Targets], so other variables and targets could be inserted "
+"before them."
+msgstr ""
+"Опции `FOO` и `BAR` не имеют стандартного описания, поэтому его необходимо "
+"написать. Остальные опции уже имеют описание в [.filename]#Mk/"
+"bsd.options.desc.mk#, поэтому его создание не требуется. Переменные `DOCS` и "
+"`EXAMPLES` используют вспомогательные цели для установки своих файлов, они "
+"приведены здесь для полноты, хотя относятся к разделу crossref:order[porting-"
+"order-targets, Цели], поэтому перед ними могут быть вставлены другие "
+"переменные и цели."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:232
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:235
+#, no-wrap
+msgid ""
+"BAR_DESC=\t\tEnable bar support\n"
+"FOO_DESC=\t\tEnable foo support\n"
+msgstr ""
+"BAR_DESC=\t\tEnable bar support\n"
+"FOO_DESC=\t\tEnable foo support\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:240
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:244
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+" ${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+" cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+"post-install-DOCS-on:\n"
+" ${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+" cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:248
+#, no-wrap
+msgid ""
+"post-install-EXAMPLES-on:\n"
+" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+" cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}\n"
+msgstr ""
+"post-install-EXAMPLES-on:\n"
+" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+" cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:253
+#, no-wrap
+msgid "The Rest of the Variables"
+msgstr "Остальные переменные"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:256
+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:258
+#, no-wrap
+msgid "The Targets"
+msgstr "Цели"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:262
+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 ""
+"После определения всех переменных можно определить дополнительные цели "
+"man:make[1]. Следует располагать `pre-*` перед `post-*` и в том же порядке, "
+"в котором выполняются различные этапы:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:264
+msgid "`fetch`"
+msgstr "`fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:265
+msgid "`extract`"
+msgstr "`extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:266
+msgid "`patch`"
+msgstr "`patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:267
+msgid "`configure`"
+msgstr "`configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:268
+msgid "`build`"
+msgstr "`build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:269
+msgid "`install`"
+msgstr "`install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:270
+msgid "`test`"
+msgstr "`test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:275
+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 ""
+"При использовании опций `helpers` для цели `target` сохраняйте их в "
+"алфавитном порядке, но оставляйте `*-on` перед `*-off`. Если также "
+"используется основная цель, размещайте её перед дополнительными:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:280
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t# install generic bits\n"
+msgstr ""
+"post-install:\n"
+"\t# install generic bits\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:283
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+"\t# Install documentation\n"
+msgstr ""
+"post-install-DOCS-on:\n"
+"\t# Install documentation\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:286
+#, no-wrap
+msgid ""
+"post-install-X11-on:\n"
+"\t# Install X11 related bits\n"
+msgstr ""
+"post-install-X11-on:\n"
+"\t# Install X11 related bits\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:289
+#, no-wrap
+msgid ""
+"post-install-X11-off:\n"
+"\t# Install bits that should be there if X11 is disabled\n"
+msgstr ""
+"post-install-X11-off:\n"
+"\t# Install bits that should be there if X11 is disabled\n"
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 f68daf0dd9..dc1f0d89a5 100644
--- a/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 8. Файлы pkg-*
-prev: books/porters-handbook/plist
+description: 'Хитрости с файлами pkg-*'
next: books/porters-handbook/testing
-showBookMenu: true
-weight: 8
params:
- path: "/books/porters-handbook/pkg-files/"
+ path: /books/porters-handbook/pkg-files/
+prev: books/porters-handbook/plist
+showBookMenu: true
+tags: ["pkg", "pkg-message", "UCL", "pkg-install", "pkg-deinstall"]
+title: 'Глава 9. Файлы pkg-*'
+weight: 9
---
[[pkg-files]]
-= Файлы pkg-*
+= pkg-*
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 8
+:sectnumoffset: 9
:partnums:
:source-highlighter: rouge
:experimental:
@@ -49,48 +51,212 @@ endif::[]
Есть несколько приёмов работы с файлами [.filename]#pkg-*#, которые мы ещё не описали, но они иногда могут быть очень кстати.
[[porting-message]]
-== [.filename]#pkg-message#
+== pkg-message
Если вам нужно вывести сообщение для человека, устанавливающего приложение, то вы можете поместить сообщение в файл [.filename]#pkg-message#. Эта возможность часто оказывается полезной для вывода дополнительных шагов установки, которые нужно предпринять после выполнения команды `pkg install`, или для вывода информации о лицензировании.
-Если должны выводиться некоторые строки о knobs времени построения или предупреждения, используйте `ECHO_MSG`. Файл [.filename]#pkg-message# только для послеустановочных шагов. Также следует иметь в виду различие между `ECHO_MSG` и `ECHO_CMD`. Первое предназначено для вывода на экран информационного текста, а второе для конвейера команд:
+[IMPORTANT]
+====
+* Файл [.filename]#pkg-message# должен содержать только информацию, _критически важную_ для настройки и работы в FreeBSD, а также уникальную для данного порта.
+* Информация по настройке должна отображаться только при первоначальной установке. Инструкции по обновлению должны показываться только при обновлении с соответствующей версии.
+* Не обрамляйте сообщения ни пробелами, ни строками символов (такими как `----------`, `**********` или `==========`). Оставьте форматирование man:pkg[8].
+* Коммиттеры имеют полное право ограничивать существующие сообщения диапазонами установки или обновления, используя спецификации формата UCL.
+* Пожалуйста, убедитесь, что используете соответствующие инструменты для управления службами.
+** Используйте `service имя start` для запуска службы вместо `/usr/local/etc/rc.d/имя start`
+** Используйте `sysrc name_enable=YES` для изменения параметров в rc.conf
+
+====
+
+pkg-message поддерживает два формата:
+
+raw::
+Обычный текстовый файл. Его сообщение отображается только при установке.
+
+UCL::
+Если файл начинается с символа "`[`", то он считается файлом в формате UCL. Формат UCL описан на странице https://github.com/vstakhov/libucl[libucl's GitHub page].
+
+[NOTE]
+====
+Не добавляйте запись для [.filename]#pkg-message# в [.filename]#pkg-plist#.
+====
+
+[[porting-message-ucl]]
+=== UCL в pkg-message
+
+Формат следующий. Это должен быть массив объектов. Сами объекты могут содержать следующие ключевые слова:
+
+`message`::
+Отображаемое сообщение. Этот ключевой параметр является обязательным.
+
+`type`::
+Когда сообщение должно быть отображено.
+
+`maximum_version`::
+Только если `type` имеет значение `upgrade`. Отображается, если обновление выполняется с версии строго ниже указанной.
+
+`minimum_version`::
+Только если `type` имеет значение `upgrade`. Отображается, если обновление выполняется с версии, строго большей, чем указанная.
+
+Ключевые слова `maximum_version` и `minimum_version` можно комбинировать.
+
+Ключевое слово `type` может иметь три значения:
+
+`install`::
+Сообщение должно отображаться только при установке пакета.
+
+`remove`::
+Сообщение должно отображаться только при удалении пакета.
+
+`upgrade`::
+сообщение должно отображаться только во время обновления пакета.
+
+[IMPORTANT]
+====
+Для сохранения совместимости с файлами [.filename]#pkg-message#, не использующими UCL, первая строка UCL [.filename]#pkg-message# _ДОЛЖНА быть_ одиночным символом "`[`", а последняя строка _ДОЛЖНА быть_ одиночным символом "`]`".
+====
+
+[[porting-message-ucl-short-ex]]
+.Короткие строки UCL
+[example]
+====
+
+Сообщение ограничено двойными кавычками `"`, это используется для простых однострочных строк:
[.programlisting]
....
-update-etc-shells:
- @${ECHO_MSG} "updating /etc/shells"
- @${CP} /etc/shells /etc/shells.bak
- @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
- ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells
- @${RM} /etc/shells.bak
+[
+{ type: install
+ message: "Simple message"
+}
+]
....
-[NOTE]
====
-Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
+
+[[porting-message-ucl-multiline-ex]]
+.Многострочные строки UCL
+[example]
+====
+
+Многострочные строки используют стандартную нотацию heredoc. Разделитель многострочной строки _должен_ начинаться сразу после символов `<<` без пробелов и _должен_ состоять только из заглавных букв. Чтобы завершить многострочную строку, добавьте строку-разделитель на отдельной строке без пробелов. Сообщение из раздела crossref:pkg-files[porting-message-ucl-short-ex,Короткие строки UCL] может быть записано как:
+
+[.programlisting]
+....
+[
+{ type: install
+ message: <<EOM
+Simple message
+EOM
+}
+]
+....
+
+====
+
+[[porting-message-ucl-ex2]]
+.Показать сообщение при установке/удалении
+[example]
+====
+
+Когда сообщение нужно отображать только при установке или удалении, укажите тип:
+
+[.programlisting]
+....
+[
+{
+ type: remove
+ message: "package being removed."
+}
+{ type: install, message: "package being installed."}
+]
+....
+
+====
+
+[[porting-message-ucl-ex3]]
+.Показать сообщение при обновлении
+[example]
+====
+
+При обновлении порта отображаемое сообщение может быть ещё более адаптировано к потребностям порта.
+
+[.programlisting]
+....
+[
+{
+ type: upgrade
+ message: "Package is being upgraded."
+}
+{
+ type: upgrade
+ maximum_version: "1.0"
+ message: "Upgrading from before 1.0 need to do this."
+}
+{
+ type: upgrade
+ minimum_version: "1.0"
+ message: "Upgrading from after 1.0 should do that."
+}
+{
+ type: upgrade
+ maximum_version: "3.0"
+ minimum_version: "1.0"
+ message: "Upgrading from > 1.0 and < 3.0 remove that file."
+}
+]
+....
+
+[IMPORTANT]
+****
+При отображении сообщения во время обновления важно ограничить случаи, когда оно показывается пользователю. Чаще всего это делается с помощью `maximum_version`, чтобы ограничить его использование обновлениями до определенной версии, когда требуется выполнить конкретное действие.
+****
+
====
[[pkg-install]]
-== [.filename]#pkg-install#
+== pkg-install, pkg-pre-install и pkg-post-install
-Если при установке бинарного пакета по команде `pkg add` или `pkg install` вашему порту нужно выполнить какие-то команды, то вы можете это сделать с помощью скрипта [.filename]#pkg-install#. Этот скрипт будет автоматически добавлен к пакету и будет дважды запускаться командой `pkg`: первый раз в виде `${SH} pkg-install ${PKGNAME} PRE-INSTALL`, а второй раз как `${SH} {PKGNAME} POST-INSTALL`. Для распознавания того, в каком режиме запущен скрипт, можно использовать параметр `$2`. Переменная окружения `PKG_PREFIX` будет принимать значение, соответствующее каталогу, в который устанавливается пакет.
+Если порту необходимо выполнять команды при установке бинарного пакета с помощью `pkg add` или `pkg install`, используйте [.filename]#pkg-install#. Он запускается дважды через `pkg`: первый раз как `${SH} pkg-install ${PKGNAME} PRE-INSTALL` перед установкой пакета и второй раз как `${SH} pkg-install ${PKGNAME} POST-INSTALL` после его установки. Переменная `$2` может быть проверена, чтобы определить, в каком режиме выполняется скрипт. Переменная окружения `PKG_PREFIX` устанавливается равной имени каталога установки пакета.
+
+Если используется [.filename]#pkg-pre-install# или [.filename]#pkg-post-install#, скрипт выполняется только один раз (до или после установки пакета), с единственным аргументом `${PKGNAME}`. Использование [.filename]#pkg-pre-install.lua# или [.filename]#pkg-post-install.lua# запускает скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые `pkg`, предоставляют некоторые расширения и несколько ограничений, которые описаны в man:pkg-lua-script[5].
[NOTE]
====
-Этот скрипт не запускается автоматически, если вы устанавливаете порт командой `make install`. Если же вам действительно необходимо его запустить, то запустите его явно из файла [.filename]#Makefile# порта строкой вида `PKG_PREFIX=${PREFIX} ${SH} $ {PKGINSTALL}${PKGNAME} PRE-INSTALL`.
+Использование [.filename]#pkg-pre-install# (или [.filename]#pkg-pre-install.lua#) и [.filename]#pkg-post-install# (или [.filename]#pkg-post-install.lua#) предпочтительнее, чем использование [.filename]#pkg-install#.
+====
+
+Эти скрипты автоматически добавляются в список упаковки.
+
+[IMPORTANT]
+====
+Эти скрипты предназначены для упрощения настройки пакетов после установки. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
====
[[pkg-deinstall]]
-== [.filename]#pkg-deinstall#
+== pkg-deinstall, pkg-pre-deinstall и pkg-post-deinstall
-Этот скрипт вызывается при удалении пакета.
+Эти скрипты выполняются при удалении пакета.
-Этот скрипт будет дважды запускаться командой `pkg delete`. Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL`, а второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL`.
+Скрипт [.filename]#pkg-deinstall# выполняется дважды командой `pkg delete`. Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` до удаления порта и второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` после удаления порта. Переменная `$2` может быть проверена для определения режима, в котором выполняется скрипт. Переменная окружения `PKG_PREFIX` устанавливается в каталог установки пакета.
+
+Если используется [.filename]#pkg-pre-deinstall# или [.filename]#pkg-post-deinstall#, скрипт выполняется только один раз (до или после удаления пакета) с единственным аргументом `${PKGNAME}`. Использование [.filename]#pkg-pre-deinstall.lua# или [.filename]#pkg-post-deinstall.lua# запустит скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые `pkg`, предоставляют некоторые расширения и ограничения, которые описаны в man:pkg-lua-script[5].
+
+[NOTE]
+====
+Использование [.filename]#pkg-pre-deinstall# (или [.filename]#pkg-pre-deinstall.lua#) и [.filename]#pkg-post-deinstall# (или [.filename]#pkg-post-deinstall.lua#) предпочтительнее, чем использование [.filename]#pkg-deinstall#.
+====
+
+Эти скрипты автоматически добавляются в список упаковки.
+
+[IMPORTANT]
+====
+Эти скрипты предназначены для упрощения очистки после удаления пакетов. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
+====
[[pkg-names]]
== Изменение имён файлов [.filename]#pkg-*#
-Все имена файлов [.filename]#pkg-\*# определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле [.filename]#Makefile#. Это особенно полезно, если вы используете одни и те же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о <<porting-wrkdir,"записи в каталоги, отличные от ``WRKDIR``">> объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-*#.
+Все имена файлов [.filename]#pkg-\*# определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле [.filename]#Makefile#. Это особенно полезно, если вы используете одни и те же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о crossref:porting-dads[porting-wrkdir,"записи в каталоги, отличные от ``WRKDIR``"] объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-*#).
Вот список имён переменных и их значений по умолчанию. (Значение `PKGDIR` по умолчанию равно `${MASTERDIR}`.)
@@ -109,15 +275,25 @@ update-etc-shells:
|`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`
|===
-Пожалуйста, изменяйте значения этих переменных, а не переопределяйте `PKG_ARGS`. Если вы измените значение переменных `PKG_ARGS`, то эти файлы при установке из порта будут установлены в каталог [.filename]#/var/db/pkg# некорректно.
-
[[using-sub-files]]
== Использование `SUB_FILES` и `SUB_LIST`
diff --git a/documentation/content/ru/books/porters-handbook/pkg-files/_index.po b/documentation/content/ru/books/porters-handbook/pkg-files/_index.po
new file mode 100644
index 0000000000..245b823d41
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/pkg-files/_index.po
@@ -0,0 +1,873 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-16 22:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookpkg-files_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Tricks about the pkg-* files"
+msgstr "Хитрости с файлами pkg-*"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. pkg-*"
+msgstr "Глава 9. Файлы pkg-*"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:14
+#, no-wrap
+msgid "pkg-*"
+msgstr "pkg-*"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:52
+msgid ""
+"There are some tricks we have not mentioned yet about the [.filename]#pkg-*# "
+"files that come in handy sometimes."
+msgstr ""
+"Есть несколько приёмов работы с файлами [.filename]#pkg-*#, которые мы ещё "
+"не описали, но они иногда могут быть очень кстати."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:54
+#, no-wrap
+msgid "pkg-message"
+msgstr "pkg-message"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:58
+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 ""
+"Если вам нужно вывести сообщение для человека, устанавливающего приложение, "
+"то вы можете поместить сообщение в файл [.filename]#pkg-message#. Эта "
+"возможность часто оказывается полезной для вывода дополнительных шагов "
+"установки, которые нужно предпринять после выполнения команды `pkg install`, "
+"или для вывода информации о лицензировании."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:62
+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 ""
+"Файл [.filename]#pkg-message# должен содержать только информацию, "
+"_критически важную_ для настройки и работы в FreeBSD, а также уникальную для "
+"данного порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:63
+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:64
+msgid ""
+"Do not surround the messages with either whitespace or lines of symbols "
+"(like `----------`, `**********`, or `==========`). Leave the formatting to "
+"man:pkg[8]."
+msgstr ""
+"Не обрамляйте сообщения ни пробелами, ни строками символов (такими как "
+"`----------`, `**********` или `==========`). Оставьте форматирование "
+"man:pkg[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:65
+msgid ""
+"Committers have blanket approval to constrain existing messages to install "
+"or upgrade ranges using the UCL format specifications."
+msgstr ""
+"Коммиттеры имеют полное право ограничивать существующие сообщения "
+"диапазонами установки или обновления, используя спецификации формата UCL."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:66
+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:67
+msgid ""
+"Use `service name start` to start a service rather than using `/usr/local/"
+"etc/rc.d/name start`"
+msgstr ""
+"Используйте `service имя start` для запуска службы вместо `/usr/local/etc/"
+"rc.d/имя start`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:68
+msgid "Use `sysrc name_enable=YES` to change options in rc.conf"
+msgstr "Используйте `sysrc name_enable=YES` для изменения параметров в rc.conf"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:72
+msgid "pkg-message supports two formats:"
+msgstr "pkg-message поддерживает два формата:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:73
+#, no-wrap
+msgid "raw"
+msgstr "raw"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:76
+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:77
+#, no-wrap
+msgid "UCL"
+msgstr "UCL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:80
+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 ""
+"Если файл начинается с символа \"`[`\", то он считается файлом в формате "
+"UCL. Формат UCL описан на странице https://github.com/vstakhov/"
+"libucl[libucl's GitHub page]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:84
+msgid ""
+"Do not add an entry for [.filename]#pkg-message# in [.filename]#pkg-plist#."
+msgstr ""
+"Не добавляйте запись для [.filename]#pkg-message# в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:87
+#, no-wrap
+msgid "UCL in pkg-message"
+msgstr "UCL в pkg-message"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:92
+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:93
+#, no-wrap
+msgid "`message`"
+msgstr "`message`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:96
+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:97
+#, no-wrap
+msgid "`type`"
+msgstr "`type`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:99
+msgid "When the message should be displayed."
+msgstr "Когда сообщение должно быть отображено."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:100
+#, no-wrap
+msgid "`maximum_version`"
+msgstr "`maximum_version`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:103
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"lower than the version specified."
+msgstr ""
+"Только если `type` имеет значение `upgrade`. Отображается, если обновление "
+"выполняется с версии строго ниже указанной."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:104
+#, no-wrap
+msgid "`minimum_version`"
+msgstr "`minimum_version`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:107
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"greater than the version specified."
+msgstr ""
+"Только если `type` имеет значение `upgrade`. Отображается, если обновление "
+"выполняется с версии, строго большей, чем указанная."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:109
+msgid "The `maximum_version` and `minimum_version` keywords can be combined."
+msgstr ""
+"Ключевые слова `maximum_version` и `minimum_version` можно комбинировать."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:111
+msgid "The `type` keyword can have three values:"
+msgstr "Ключевое слово `type` может иметь три значения:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:112
+#, no-wrap
+msgid "`install`"
+msgstr "`install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:114
+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:115
+#, no-wrap
+msgid "`remove`"
+msgstr "`remove`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:117
+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:118
+#, no-wrap
+msgid "`upgrade`"
+msgstr "`upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:120
+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:125
+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 ""
+"Для сохранения совместимости с файлами [.filename]#pkg-message#, не "
+"использующими UCL, первая строка UCL [.filename]#pkg-message# _ДОЛЖНА быть_ "
+"одиночным символом \"`[`\", а последняя строка _ДОЛЖНА быть_ одиночным "
+"символом \"`]`\"."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:128
+#, no-wrap
+msgid "UCL Short Strings"
+msgstr "Короткие строки UCL"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:133
+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:141
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: \"Simple message\"\n"
+"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{ type: install\n"
+" message: \"Simple message\"\n"
+"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:146
+#, no-wrap
+msgid "UCL Multiline Strings"
+msgstr "Многострочные строки UCL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:154
+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 crossref:pkg-files[porting-message-ucl-short-ex,UCL Short "
+"Strings] can be written as:"
+msgstr ""
+"Многострочные строки используют стандартную нотацию heredoc. Разделитель "
+"многострочной строки _должен_ начинаться сразу после символов `<<` без "
+"пробелов и _должен_ состоять только из заглавных букв. Чтобы завершить "
+"многострочную строку, добавьте строку-разделитель на отдельной строке без "
+"пробелов. Сообщение из раздела crossref:pkg-files[porting-message-ucl-short-"
+"ex,Короткие строки UCL] может быть записано как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:164
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: <<EOM\n"
+"Simple message\n"
+"EOM\n"
+"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{ type: install\n"
+" message: <<EOM\n"
+"Simple message\n"
+"EOM\n"
+"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:169
+#, no-wrap
+msgid "Display a Message on Install/Deinstall"
+msgstr "Показать сообщение при установке/удалении"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:174
+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:184
+#, no-wrap
+msgid ""
+"[\n"
+"{\n"
+" type: remove\n"
+" message: \"package being removed.\"\n"
+"}\n"
+"{ type: install, message: \"package being installed.\"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{\n"
+" type: remove\n"
+" message: \"package being removed.\"\n"
+"}\n"
+"{ type: install, message: \"package being installed.\"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:189
+#, no-wrap
+msgid "Display a Message on Upgrade"
+msgstr "Показать сообщение при обновлении"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:194
+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:219
+#, 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 ""
+"[\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"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:225
+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 ""
+"При отображении сообщения во время обновления важно ограничить случаи, когда "
+"оно показывается пользователю. Чаще всего это делается с помощью "
+"`maximum_version`, чтобы ограничить его использование обновлениями до "
+"определенной версии, когда требуется выполнить конкретное действие."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:230
+#, no-wrap
+msgid "pkg-install, pkg-pre-install, and pkg-post-install"
+msgstr "pkg-install, pkg-pre-install и pkg-post-install"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:236
+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 ""
+"Если порту необходимо выполнять команды при установке бинарного пакета с "
+"помощью `pkg add` или `pkg install`, используйте [.filename]#pkg-install#. "
+"Он запускается дважды через `pkg`: первый раз как `${SH} pkg-install $"
+"{PKGNAME} PRE-INSTALL` перед установкой пакета и второй раз как `${SH} pkg-"
+"install ${PKGNAME} POST-INSTALL` после его установки. Переменная `$2` может "
+"быть проверена, чтобы определить, в каком режиме выполняется скрипт. "
+"Переменная окружения `PKG_PREFIX` устанавливается равной имени каталога "
+"установки пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:240
+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 ""
+"Если используется [.filename]#pkg-pre-install# или [.filename]#pkg-post-"
+"install#, скрипт выполняется только один раз (до или после установки "
+"пакета), с единственным аргументом `${PKGNAME}`. Использование "
+"[.filename]#pkg-pre-install.lua# или [.filename]#pkg-post-install.lua# "
+"запускает скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые "
+"`pkg`, предоставляют некоторые расширения и несколько ограничений, которые "
+"описаны в man:pkg-lua-script[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:244
+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 ""
+"Использование [.filename]#pkg-pre-install# (или [.filename]#pkg-pre-"
+"install.lua#) и [.filename]#pkg-post-install# (или [.filename]#pkg-post-"
+"install.lua#) предпочтительнее, чем использование [.filename]#pkg-install#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:247
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:274
+msgid "These scripts are automatically added to the packing list."
+msgstr "Эти скрипты автоматически добавляются в список упаковки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:252
+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:255
+#, no-wrap
+msgid "pkg-deinstall, pkg-pre-deinstall, and pkg-post-deinstall"
+msgstr "pkg-deinstall, pkg-pre-deinstall и pkg-post-deinstall"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:258
+msgid "These scripts execute when a package is removed."
+msgstr "Эти скрипты выполняются при удалении пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:263
+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 ""
+"Скрипт [.filename]#pkg-deinstall# выполняется дважды командой `pkg delete`. "
+"Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` до удаления порта "
+"и второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` после "
+"удаления порта. Переменная `$2` может быть проверена для определения режима, "
+"в котором выполняется скрипт. Переменная окружения `PKG_PREFIX` "
+"устанавливается в каталог установки пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:267
+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 ""
+"Если используется [.filename]#pkg-pre-deinstall# или [.filename]#pkg-post-"
+"deinstall#, скрипт выполняется только один раз (до или после удаления "
+"пакета) с единственным аргументом `${PKGNAME}`. Использование "
+"[.filename]#pkg-pre-deinstall.lua# или [.filename]#pkg-post-deinstall.lua# "
+"запустит скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые "
+"`pkg`, предоставляют некоторые расширения и ограничения, которые описаны в "
+"man:pkg-lua-script[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:271
+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 ""
+"Использование [.filename]#pkg-pre-deinstall# (или [.filename]#pkg-pre-"
+"deinstall.lua#) и [.filename]#pkg-post-deinstall# (или [.filename]#pkg-post-"
+"deinstall.lua#) предпочтительнее, чем использование [.filename]#pkg-"
+"deinstall#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:279
+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:282
+#, no-wrap
+msgid "Changing the Names of pkg-*"
+msgstr "Изменение имён файлов [.filename]#pkg-*#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:287
+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 ""
+"Все имена файлов [.filename]#pkg-\\*# определяются с помощью переменных, так "
+"что вы можете изменить их, если это нужно, в вашем файле "
+"[.filename]#Makefile#. Это особенно полезно, если вы используете одни и те "
+"же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в "
+"один из вышеперечисленных файлов (в главе о crossref:porting-dads[porting-"
+"wrkdir,\"записи в каталоги, отличные от ``WRKDIR``\"] объяснено, почему не "
+"рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-"
+"*#)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:290
+msgid ""
+"Here is a list of variable names and their default values. (`PKGDIR` "
+"defaults to `${MASTERDIR}`.)"
+msgstr ""
+"Вот список имён переменных и их значений по умолчанию. (Значение `PKGDIR` по "
+"умолчанию равно `${MASTERDIR}`.)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:295
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:297
+#, no-wrap
+msgid "Default value"
+msgstr "Значение по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:298
+#, no-wrap
+msgid "`DESCR`"
+msgstr "`DESCR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:300
+#, no-wrap
+msgid "`${PKGDIR}/pkg-descr`"
+msgstr "`${PKGDIR}/pkg-descr`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:301
+#, no-wrap
+msgid "`PLIST`"
+msgstr "`PLIST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:303
+#, no-wrap
+msgid "`${PKGDIR}/pkg-plist`"
+msgstr "`${PKGDIR}/pkg-plist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:304
+#, no-wrap
+msgid "`PKGINSTALL`"
+msgstr "`PKGINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:306
+#, no-wrap
+msgid "`${PKGDIR}/pkg-install`"
+msgstr "`${PKGDIR}/pkg-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:307
+#, no-wrap
+msgid "`PKGPREINSTALL`"
+msgstr "`PKGPREINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:309
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-install`"
+msgstr "`${PKGDIR}/pkg-pre-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:310
+#, no-wrap
+msgid "`PKGPOSTINSTALL`"
+msgstr "`PKGPOSTINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:312
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-install`"
+msgstr "`${PKGDIR}/pkg-post-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:313
+#, no-wrap
+msgid "`PKGDEINSTALL`"
+msgstr "`PKGDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:315
+#, no-wrap
+msgid "`${PKGDIR}/pkg-deinstall`"
+msgstr "`${PKGDIR}/pkg-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:316
+#, no-wrap
+msgid "`PKGPREDEINSTALL`"
+msgstr "`PKGPREDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:318
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-deinstall`"
+msgstr "`${PKGDIR}/pkg-pre-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:319
+#, no-wrap
+msgid "`PKGPOSTDEINSTALL`"
+msgstr "`PKGPOSTDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:321
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-deinstall`"
+msgstr "`${PKGDIR}/pkg-post-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:322
+#, no-wrap
+msgid "`PKGMESSAGE`"
+msgstr "`PKGMESSAGE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:323
+#, no-wrap
+msgid "`${PKGDIR}/pkg-message`"
+msgstr "`${PKGDIR}/pkg-message`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:326
+#, no-wrap
+msgid "Making Use of `SUB_FILES` and `SUB_LIST`"
+msgstr "Использование `SUB_FILES` и `SUB_LIST`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:329
+msgid ""
+"`SUB_FILES` and `SUB_LIST` are useful for dynamic values in port files, such "
+"as the installation `PREFIX` in [.filename]#pkg-message#."
+msgstr ""
+"Переменные `SUB_FILES` и `SUB_LIST` подходят для задания в файлах порта "
+"динамических значений, таких как `PREFIX` установки в [.filename]#pkg-"
+"message#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:335
+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 ""
+"В переменной `SUB_FILES` указывается перечень файлов для автоматического "
+"изменения. Каждый _file_ из перечня `SUB_FILES` обязан иметь соответствующий "
+"[.filename]#file.in#, присутствующий в `FILESDIR`. Измененная версия будет "
+"создана в `WRKDIR`. Файлы, определенные в качестве значения `USE_RC_SUBR` "
+"(или устаревшего `USE_RCORDER`), автоматически добавляются в `SUB_FILES`. "
+"Для файлов [.filename]#pkg-message#, [.filename]#pkg-install# и "
+"[.filename]#pkg-deinstall# устанавливается соответствующая переменная "
+"Makefile, указывающая на обработанную версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:340
+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 ""
+"Переменная `SUB_LIST` содержит перечень пар `VAR=VALUE`. В каждом файле из "
+"`SUB_FILES` для каждой пары будет произведена замена `%%VAR%%` на `VALUE`. "
+"Некоторые общие пары определяются автоматически: `PREFIX`, `LOCALBASE`, "
+"`DATADIR`, `DOCSDIR`, `EXAMPLESDIR`, `WWWDIR` и `ETCDIR`. Любая строка, "
+"начинающаяся с `@comment`, будет удалена из конечного файла после "
+"подстановки переменной."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:342
+msgid ""
+"This example replaces `%%ARCH%%` with the system architecture in a "
+"[.filename]#pkg-message#:"
+msgstr ""
+"В следующем примере в [.filename]#pkg-message# будет сделана замена `%%ARCH%"
+"%` на системную архитектуру:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:347
+#, no-wrap
+msgid ""
+"SUB_FILES=\tpkg-message\n"
+"SUB_LIST=\tARCH=${ARCH}\n"
+msgstr ""
+"SUB_FILES=\tpkg-message\n"
+"SUB_LIST=\tARCH=${ARCH}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:350
+msgid ""
+"Note that for this example, [.filename]#pkg-message.in# must exist in "
+"`FILESDIR`."
+msgstr ""
+"Обратите внимание, что в этом примере в `FILESDIR` обязательно существование "
+"файла [.filename]#pkg-message.in#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:352
+msgid "Example of a good [.filename]#pkg-message.in#:"
+msgstr "Пример хорошего [.filename]#pkg-message.in#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:358
+#, 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 ""
+"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"
diff --git a/documentation/content/ru/books/porters-handbook/plist/_index.adoc b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
index 3bd999822b..d9b93ae0fb 100644
--- a/documentation/content/ru/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 7. Продвинутые практики pkg-plist
-prev: books/porters-handbook/special
+description: 'Продвинутые практики pkg-plist'
next: books/porters-handbook/pkg-files
-showBookMenu: true
-weight: 7
params:
- path: "/books/porters-handbook/plist/"
+ path: /books/porters-handbook/plist/
+prev: books/porters-handbook/flavors
+showBookMenu: true
+tags: ["pkg-plist", "practices", "configuration"]
+title: 'Глава 8. Продвинутые практики pkg-plist'
+weight: 8
---
[[plist]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 7
+:sectnumoffset: 8
:partnums:
:source-highlighter: rouge
:experimental:
@@ -49,32 +51,31 @@ endif::[]
[[plist-sub]]
== Изменение содержимого [.filename]#pkg-plist# в зависимости от make-переменных
-Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка `perl` в случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле [.filename]#pkg-plist# будут заменяться соответствующими значениями. Значением `%%OSREL%%` является номер версии операционной системы (например, `4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии `perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к файлам документации порта, описаны в <<install-documentation,соответствующем разделе>>.
+Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка `perl` в случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле [.filename]#pkg-plist# будут заменяться соответствующими значениями. Значением `%%OSREL%%` является номер версии операционной системы (например, `4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии `perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к файлам документации порта, описаны в crossref:makefiles[install-documentation,соответствующем разделе].
Если вам нужно сделать другие подстановки, вы можете указать в переменной `PLIST_SUB` список пар `VAR=VALUE`, и все вхождения `%%VAR%%` в файле [.filename]#pkg-plist# будут заменяться на значение _VALUE_.
-Например, если у вас имеется порт, который устанавливает много файлов в каталог, зависящий от версии, вы можете задать нечто типа
+Например, если порт устанавливает множество файлов в подкаталоге, зависящем от версии, используйте заполнитель для версии, чтобы файл [.filename]#pkg-plist# не требовал перегенерации при каждом обновлении порта. Например, укажите:
[.programlisting]
....
-OCTAVE_VERSION= 2.0.13
+OCTAVE_VERSION= ${PORTREVISION}
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
....
в файле [.filename]#Makefile# и использовать `%%OCTAVE_VERSION%%` везде, где нужно указать номер версии в файле [.filename]#pkg-plist#. Таким образом, при обновлении порта вам не нужно будет менять десятки (а в некоторых случаях и сотни) строк в файле [.filename]#pkg-plist#.
-Если ваш порт устанавливает файлы в соответствии с установленными в порту опциями, то обычным способом управления является добавление префиксов `%%TAG%%` для строк [.filename]#pkg-plist# с добавлением этого `TAG` в переменную `PLIST_SUB` внутри [.filename]#Makefile# со специальным значением `@comment`, которое указывает пакетным инструментам игнорировать эти строки:
+Если файлы устанавливаются по условию в зависимости от опций, установленных в порте, обычный способ обработки — это добавление префикса `%%OPT%%` для строк в [.filename]#pkg-plist#, которые нужны при включении опции, или `%%NO_OPT%%`, когда опция отключена, а также добавление `OPTIONS_SUB=yes` в [.filename]#Makefile#. Подробнее см. crossref:makefiles[options_sub,`OPTIONS_SUB`].
+
+Например, если есть файлы, которые устанавливаются только при включении опции `X11`, и в [.filename]#Makefile# указано:
[.programlisting]
....
-.if defined(WITH_X11)
-PLIST_SUB+= X11=""
-.else
-PLIST_SUB+= X11="@comment "
-.endif
+OPTIONS_DEFINE= X11
+OPTIONS_SUB= yes
....
-и в самом [.filename]#pkg-plist#:
+В [.filename]#pkg-plist# укажите `%%X11%%` перед строками, которые устанавливаются только при включении опции, например:
[.programlisting]
....
@@ -83,7 +84,20 @@ PLIST_SUB+= X11="@comment "
Эта подстановка будет сделана между выполнением целей `pre-install` и `do-install`, посредством чтения файла [.filename]#PLIST# и записью в файл [.filename]#TMPPLIST# (по умолчанию это файл [.filename]#WRKDIR/.PLIST.mktmp#). Так что если ваш порт строит [.filename]#PLIST# на лету, делайте это во время или до выполнения цели `pre-install`. Кроме того, если вашему порту требуется отредактировать получающийся файл, делайте это в цели `post-install` изменением файла [.filename]#TMPPLIST#.
-Другой способ изменения списка сборки порта основан на определении значений переменных `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY`. Каждое из них рассматривается как перечень путей для записи в [.filename]#TMPPLIST# содержимого [.filename]#PLIST#. Имена, перечисленные в `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY` подвергаются подстановке `%%VAR%%`, как описано выше. За исключением этого, имена из `PLIST_FILES` будут появляться в окончательном варианте перечня сборки без изменений, тогда как `@dirrm` и `@dirrmtry` будут соответственно предшествовать именам из `PLIST_DIRS` и `PLIST_DIRSTRY`. Для того чтобы изменения вступили в силу, `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY` должны задаваться до того, как будет записываться [.filename]#TMPPLIST#, то есть в цели `pre-install` или ещё раньше.
+Ещё один способ изменения списка упаковки порта основан на установке переменных `PLIST_FILES` и `PLIST_DIRS`. Значение каждой переменной рассматривается как список путей для записи в [.filename]#TMPPLIST# вместе с содержимым [.filename]#PLIST#. Хотя имена, перечисленные в `PLIST_FILES` и `PLIST_DIRS`, подлежат замене `%%_VAR_%%`, как описано выше, лучше использовать `${_VAR_}` напрямую. За исключением этого, имена из `PLIST_FILES` появятся в итоговом списке упаковки без изменений, тогда как к именам из `PLIST_DIRS` будет добавлен префикс `@dir`. Чтобы вступить в силу, `PLIST_FILES` и `PLIST_DIRS` должны быть установлены до записи [.filename]#TMPPLIST#, то есть в `pre-install` или ранее.
+
+Время от времени использования `OPTIONS_SUB` недостаточно. В таких случаях добавление специфичного `_TAG_` в `PLIST_SUB` внутри [.filename]#Makefile# со специальным значением `@comment` заставляет инструменты пакетирования игнорировать строку. Например, если некоторые файлы устанавливаются только при включённой опции `X11` и архитектуре `i386`:
+
+[.programlisting]
+....
+.include <bsd.port.pre.mk>
+
+.if ${PORT_OPTIONS:MX11} && ${ARCH} == "i386"
+PLIST_SUB+= X11I386=""
+.else
+PLIST_SUB+= X11I386="@comment "
+.endif
+....
[[plist-cleaning]]
== Пустые каталоги
@@ -91,84 +105,504 @@ PLIST_SUB+= X11="@comment "
[[plist-dir-cleaning]]
=== Очистка пустых каталогов
-Заставьте ваш порты удалять пустые каталоги при удалении. Обычно это достигается добавлением строк `@dirrm` для всех каталогов, которые создаются этим портом. Вам нужно удалить подкаталоги до того, как вы сможете удалить родительские каталоги.
+При удалении порт должен удалить пустые каталоги, которые он создал. Большинство этих каталогов автоматически удаляются с помощью man:pkg[8], но для каталогов, созданных вне [.filename]#${PREFIX}#, или пустых каталогов требуется дополнительная работа. Обычно это делается добавлением строк `@dir` для таких каталогов. Подкаталоги должны быть удалены до удаления родительских каталогов.
[.programlisting]
....
- :
-lib/X11/oneko/pixmaps/cat.xpm
-lib/X11/oneko/sounds/cat.au
- :
-@dirrm lib/X11/oneko/pixmaps
-@dirrm lib/X11/oneko/sounds
-@dirrm lib/X11/oneko
+[...]
+@dir /var/games/oneko/saved-games
+@dir /var/games/oneko
....
-Однако, иногда `@dirrm` будет выдавать ошибки, потому что другие порты используют тот же самый подкаталог. Вы можете использовать `@dirrmtry` для удаления только пустых каталогов без выдачи предупреждений.
+[[plist-dir-empty]]
+=== Создание пустых каталогов
+
+Пустые каталоги, созданные во время установки порта, требуют особого внимания. Они должны присутствовать при создании пакета. Если они не созданы кодом порта, создайте их в [.filename]#Makefile#:
[.programlisting]
....
-@dirrmtry share/doc/gimp
+post-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/some/directory
....
-Эта команда не выведет никаких сообщений об ошибках и не вызовет аварийного завершения работы `pkg delete` (см. man:pkg-delete[8]), даже если каталог [.filename]#${PREFIX}/shared/doc/gimp# не пуст из-за того, что другие порты установили сюда какие-то файлы.
-
-[[plist-dir-empty]]
-=== Создание пустых каталогов
-
-Пустым каталогам, создаваемым во время установки порта, нужно особое внимание. Они не будут созданы при установке пакета, потому что пакеты содержат только файлы, а `pkg add` и `pkg install` создают для них каталоги по мере надобности. Чтобы убедиться, что пустой каталог создается при установке пакета, добавьте эту строку в [.filename]#pkg-plist# перед соответствующей строкой `@dirrm`:
+Добавьте директорию в [.filename]#pkg-plist# так же, как и любую другую. Например:
[.programlisting]
....
-@exec mkdir -p %D/shared/foo/templates
+@dir some/directory
....
[[plist-config]]
-== Конфигурационные файлы
-
-Если ваш порт устанавливает конфигурационные файлы в каталог [.filename]#PREFIX/etc# (или куда-то еще), _не_ делайте их простого перечисления в файле [.filename]#pkg-plist#. Это приведёт к тому, что по команде `pkg delete` или при новой установке файлы, тщательно отредактированные и настроенные пользователем, будут уничтожены.
+== Файлы конфигурации
-Вместо этого установите файл(ы) с примерами с расширением [.filename]#filename.sample#. Затем скопируйте файл с примером на место настоящего файла конфигурации, если таковой ещё не существует. При деинсталляции удаляйте файл конфигурации только в том случае, если он идентичен файлу с расширением [.filename]#.sample#. Вам нужно управлять этим в [.filename]#Makefile# и в [.filename]#pkg-plist# (для установки из пакета).
+Если порт устанавливает файлы конфигурации в [.filename]#PREFIX/etc# (или в другое место), _не_ указывайте их в [.filename]#pkg-plist#. Это приведёт к тому, что `pkg delete` удалит файлы, которые были тщательно отредактированы пользователем, а повторная установка перезапишет их.
-Пример части [.filename]#Makefile#:
+Вместо этого устанавливайте образцы файлов с расширением [.filename]#filename.sample#. Макрос `@sample` автоматизирует этот процесс; подробности его работы см. в разделе crossref:plist[plist-keywords-sample, Расширение списка пакетов с помощью ключевых слов]. Для каждого образца файла добавьте строку в [.filename]#pkg-plist#:
[.programlisting]
....
-post-install:
- @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
- ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${STAGEDIR}${PREFIX}/etc/orbit.conf ; \
- fi
+@sample etc/orbit.conf.sample
....
-Добавьте по три строки в [.filename]#pkg-plist# для каждого конфигурационного файла, как показано ниже:
+Если существует очень веская причина не устанавливать рабочий файл конфигурации по умолчанию, укажите только имя примера файла в [.filename]#pkg-plist#, без части `@sample` с последующим пробелом, и добавьте crossref:pkg-files[porting-message,сообщение], указывающее, что пользователь должен скопировать и отредактировать файл перед тем, как программа заработает.
+
+[TIP]
+====
+Когда порт устанавливает свою конфигурацию в подкаталоге [.filename]#${PREFIX}/etc#, используйте `ETCDIR`, который по умолчанию равен `${PREFIX}/etc/${PORTNAME}`. Это значение может быть переопределено в [.filename]#Makefile# порта, если для порта принято использовать другой каталог. Макрос `%%ETCDIR%%` будет использоваться вместо этого в [.filename]#pkg-plist#.
+====
+
+[NOTE]
+====
+Примеры конфигурационных файлов всегда должны иметь суффикс [.filename]#.sample#. Если по каким-то историческим причинам использование стандартного суффикса невозможно, или если примеры файлов взяты из другого каталога, используйте эту конструкцию:
[.programlisting]
....
-@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
-etc/orbit.conf.sample
-@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi
+@sample etc/orbit.conf-dist etc/orbit.conf
....
-Данные строки являются упорядоченными. На этапе удаления файл с примером сравнивается с рабочим конфигурационным файлом. Полное совпадение означает отсутствие каких-либо изменений в рабочем файле со стороны пользователя, и следовательно этот файл может быть безопасно удалён. Так как файл с примером всё ещё должен существовать для сравнения, строка `@unexec` следует перед именем файла с примером конфигурации. На этапе установки, если рабочий файл конфигурации отсутствует, он копируется из файла с примером. Файл с примером обязательно должен быть установлен до операции копирования, поэтому строка `@exec` следует после имени файла с примером конфигурации.
+или
-Для получения дополнительного отладочного вывода на экран можно временно удалить параметр `-s` из команды man:cmp[1].
-
-Для получения дополнительной инфорации по использованию `%D` и прочих маркеров подстановки обратитесь к странице Справочника man:pkg-create[8].
+[.programlisting]
+....
+@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf
+....
-Если существует действительно стоящая причина не устанавливать рабочий файл конфигурации по умолчанию, уберите строку `@exec` из [.filename]#pkg-plist# и добавьте <<porting-message,сообщение>>, указывающее на то, что пользователь обязан скопировать и отредактировать этот файл перед тем, как программное обеспечение начнёт работать.
+Формат: `@sample _файл-образец фактический-конфигурационный-файл_`.
+====
[[plist-dynamic]]
== Динамический или статический список упаковки
-_Статический список упаковки_ - это список упаковки, который доступен в Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой переменных или без неё), или как встроенный в [.filename]#Makefile# посредством `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY`. Даже если содержимое является автоматически порождаемым при помощи инструмента или в результате выполнения цели в Makefile _до_ включения в Коллекцию Портов коммиттером, то список всё ещё будет считаться статическим, поскольку его можно узнать без необходимости скачивания или компиляции дистрибутива.
+_Статический список упаковки_ — это список упаковки, который доступен в Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой переменных или без неё), или как встроенный в [.filename]#Makefile# через `PLIST_FILES` и `PLIST_DIRS`. Даже если содержимое было автоматически сгенерировано инструментом или целью в Makefile _до_ включения в Коллекцию портов коммиттером (например, с использованием `make makeplist`), такой список всё равно считается статическим, поскольку его можно посмотреть без необходимости загрузки или компиляции distfile.
-_Динамический список упаковки_ это список упаковки, который получается во время компиляции порта и строится на основе устанавливаемых файлов и каталогов. Узнать такой список невозможно до того, как исходный код портируемого приложения будет скачен и скомпилирован, или после запуска `make clean`.
+_Динамический список упаковки_ — это список упаковки, который генерируется во время компиляции порта на основе установленных файлов и каталогов. Невозможно изучить его до загрузки и компиляции исходного кода портированного приложения или после выполнения команды `make clean`.
-Хотя использование динамических список упаковки не запрещено, сопровождающие должны использовать статические списки упаковки везде, где это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по доступным портам для обнаружения, например, который порт устанавливает определенный файл. Динамические списки должны быть использованы в основном для сложных портов, для которых изменения в списке упаковки кардинальным образом основаны на необязательных возможностях порта (и, таким образом, делая сопровождение статических списков упаковки невозможным), или портов, которые изменяют список упаковки на основе версии используемого им программного обеспечения (например, порты, которые порождают документы при помощи Javadoc).
+Хотя использование динамических списков упаковки не запрещено, сопровождающие должны использовать статические списки упаковки везде, где это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по доступным портам для обнаружения, например, какой порт устанавливает определенный файл. Динамические списки должны быть использованы в основном для сложных портов, для которых изменения в списке упаковки кардинальным образом основаны на возможностях порта, настраиваемых параметрами, (и, таким образом, делая сопровождение статических списков упаковки невозможным), или портов, которые изменяют список упаковки на основе версии используемого им программного обеспечения (например, порты, которые порождают документы при помощи Javadoc).
[[plist-autoplist]]
== Автоматическое создание списка упаковки
-Первым делом убедитесь, что ваш порт практически полностью завершён и осталось создать только [.filename]#pkg-plist#. После этого вы можете запустить `make makeplist` для автоматического создания [.filename]#pkg-plist#. Содержимое этого файла должно быть дважды перепроверено.
+Сначала убедитесь, что порт почти готов, и отсутствует только файл [.filename]#pkg-plist#. Запуск команды `make makeplist` покажет пример для файла [.filename]#pkg-plist#. Вывод `makeplist` необходимо дважды перепроверять на корректность, так как он пытается автоматически угадать некоторые вещи и может ошибаться.
+
+Файлы конфигурации пользователя должны устанавливаться как [.filename]#filename.sample#, как описано в разделе crossref:plist[plist-config,Файлы конфигурации]. [.filename]#info/dir# не должен быть указан, а соответствующие строки [.filename]#install-info# должны быть добавлены, как указано в разделе crossref:makefiles[makefile-info,info-файлы]. Любые библиотеки, устанавливаемые портом, должны быть перечислены, как указано в разделе crossref:special[porting-shlibs,общие библиотеки].
+
+[[plist-autoplist-regex]]
+=== Расширение `PLIST_SUB` с помощью регулярных выражений
+
+Строки, которые нужно заменить, иногда должны быть очень конкретными, чтобы избежать нежелательных замен. Это распространённая проблема с короткими значениями.
+
+Для решения этой проблемы для каждого `_PLACEHOLDER_=_значение_` можно задать `PLACEHOLDER_regex=регулярное_выражение`, где часть `_regex_` более точно соответствует _значению_.
+
+[[plist-autoplist-regex-ex1]]
+.Использование PLIST_SUB с регулярными выражениями
+[example]
+====
+
+Порты Perl могут устанавливать архитектурно-зависимые файлы в специальное дерево. В FreeBSD для упрощения портирования это дерево называется `mach`. Например, порт, который устанавливает файл, чей путь содержит `mach`, может иметь эту часть строки пути заменённой неправильными значениями. Рассмотрим этот [.filename]#Makefile#:
+
+[.programlisting]
+....
+PORTNAME= Machine-Build
+DISTVERSION= 1
+CATEGORIES= devel perl5
+MASTER_SITES= CPAN
+PKGNAMEPREFIX= p5-
+
+MAINTAINER= perl@FreeBSD.org
+COMMENT= Building machine
+WWW= https://search.cpan.org/dist/Machine-Build
+
+USES= perl5
+USE_PERL5= configure
+
+PLIST_SUB= PERL_ARCH=mach
+....
+
+Файлы, установленные портом:
+
+[.programlisting]
+....
+/usr/local/bin/machine-build
+/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz
+/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz
+/usr/local/lib/perl5/site_perl/Machine/Build.pm
+/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so
+....
+
+Запуск `make makeplist` ошибочно создает:
+
+[.programlisting]
+....
+bin/%%PERL_ARCH%%ine-build
+%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz
+%%PERL5_MAN3%%/Machine::Build.3.gz
+%%SITE_PERL%%/Machine/Build.pm
+%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so
+....
+
+Измените строку `PLIST_SUB` в [.filename]#Makefile# на:
+
+[.programlisting]
+....
+PLIST_SUB= PERL_ARCH=mach \
+ PERL_ARCH_regex=\bmach\b
+....
+
+Теперь `make makeplist` правильно генерирует:
+
+[.programlisting]
+....
+bin/machine-build
+%%PERL5_MAN1%%/machine-build.1.gz
+%%PERL5_MAN3%%/Machine::Build.3.gz
+%%SITE_PERL%%/Machine/Build.pm
+%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so
+....
+
+====
+
+[[plist-keywords]]
+== Расширение списка пакетов используя ключевые слова
+
+Все ключевые слова также могут принимать необязательные аргументы в скобках. Аргументами являются владелец, группа и режим доступа. Этот аргумент применяется к файлу или каталогу, на который ссылаются. Чтобы изменить владельца, группу и режим доступа конфигурационного файла, используйте:
+
+[.programlisting]
+....
+@sample(games,games,640) etc/config.sample
+....
+
+Аргументы являются необязательными. Если необходимо изменить только группу и режим, используйте:
+
+[.programlisting]
+....
+@sample(,games,660) etc/config.sample
+....
+
+[WARNING]
+====
+
+Если ключевое слово используется в crossref:makefiles[makefile-options,необязательной записи], оно должно быть добавлено после помощника:
+
+[.programlisting]
+....
+%%FOO%%@sample etc/orbit.conf.sample
+....
+
+Это происходит потому, что вспомогательные функции plist для опций используются для закомментирования строки, поэтому они должны быть указаны первыми. Дополнительную информацию см. в crossref:makefiles[options_sub,`OPTIONS_SUB`].
+====
+
+[[plist-keywords-desktop-file-utils]]
+=== `@desktop-file-utils`
+
+Будет выполнять `update-desktop-database -q` после установки и удаления. _Никогда_ не используйте напрямую, добавьте crossref:uses[uses-desktop-file-utils,`USES=desktop-file-utils`] в [.filename]#Makefile#.
+
+[[plist-keywords-fc]]
+=== `@fc` _каталог_
+
+Добавить запись `@dir` для каталога, переданного в качестве аргумента, и выполнить `fc-cache -fs` для этого каталога после установки и удаления.
+
+[[plist-keywords-fontsdir]]
+=== `@fontsdir` _каталог_
+
+Добавить запись `@dir` для каталога, переданного в качестве аргумента, и запустить `mkfontscale` и `mkfontdir` в этом каталоге после установки и удаления. Кроме того, при удалении удаляются кэш-файлы [.filename]#fonts.scale# и [.filename]#fonts.dir#, если они пусты.
+
+[[plist-keywords-info]]
+=== `@info` _файл_
+
+Добавляет файл, переданный в качестве аргумента, в plist и обновляет индекс документа info при установке и удалении. Кроме того, удаляет индекс, если он пуст, при удалении. Это никогда не следует использовать вручную, а только через `INFO`. Подробнее см. в crossref:makefiles[makefile-info,Файлы Info].
+
+[[plist-keywords-kld]]
+=== `@kld` _каталог_
+
+Выполняет `kldxref` для каталога при установке и удалении. Дополнительно при удалении каталог будет удалён, если он пуст.
+
+[[plist-keywords-rmtry]]
+=== `@rmtry` _файл_
+
+Удаляет файл при удалении и не выдает ошибку, если файл отсутствует.
+
+[[plist-keywords-sample]]
+=== `@sample` _файл_ [_файл_]
+
+Это используется для обработки установки файлов конфигурации, используя примеры файлов, поставляемых с пакетом. "Реальный" файл (не пример) — это либо второе имя файла, если оно присутствует, либо первое имя файла без расширения [.filename]#.sample#.
+
+Это делает три вещи. Во-первых, добавляет первый переданный файл в качестве аргумента, образец файла, в plist. Затем, при установке, если фактический файл не найден, копирует образец файла в фактический файл. И наконец, при удалении, удаляет фактический файл, если он не был изменён. Дополнительную информацию см. в crossref:plist[plist-config, Файлы конфигурации].
+
+[[plist-keywords-shared-mime-info]]
+=== `@shared-mime-info` _каталог_
+
+Выполняет `update-mime-database` для указанного каталога при установке и удалении.
+
+[[plist-keywords-shell]]
+=== `@shell` _файл_
+
+Добавить файл, переданный в качестве аргумента, в plist.
+
+При установке добавить полный путь к _file_ в [.filename]#/etc/shells#, убедившись, что он не добавлен повторно. При удалении удалите его из [.filename]#/etc/shells#.
+
+[[plist-keywords-terminfo]]
+=== `@terminfo`
+
+Не использовать самостоятельно. Если порт устанавливает файлы [.filename]#*.terminfo#, добавьте crossref:uses[uses-terminfo,`USES=terminfo`] в его [.filename]#Makefile#.
+
+При установке и удалении, если присутствует `tic`, обновить [.filename]#${PREFIX}/shared/misc/terminfo.db# из файлов [.filename]#*.terminfo# в [.filename]#${PREFIX}/shared/misc#.
+
+[[plist-keywords-base]]
+=== Основные ключевые слова
+
+Есть несколько ключевых слов, которые жестко закодированы и документированы в man:pkg-create[8]. Для полноты изложения они также документированы здесь.
+
+[[plist-keywords-base-empty]]
+==== `@` [_файл_]
+
+Ключевое слово `empty` является заполнителем, используемым, когда необходимо изменить владельца, группу или права доступа к файлу. Например, чтобы установить группу файла в `games` и добавить бит setgid, добавьте:
+
+[.programlisting]
+....
+@(,games,2755) sbin/daemon
+....
+
+[[plist-keywords-base-exec]]
+==== `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_
+
+Выполнить _комманду_ как часть процесса установки или удаления пакета.
+
+`@preexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#pre-install#.
+
+`@postexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#post-install#.
+
+`@preunexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#pre-deinstall#.
+
+`@postunexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#post-deinstall#.
+
+Если в _команде_ содержится любая из этих последовательностей, они раскрываются непосредственно. Для следующих примеров предположим, что `@cwd` установлен в [.filename]#/usr/local#, а последним извлечённым файлом был [.filename]#bin/emacs#.
+
+`%F`::
+Раскрывается до последнего извлеченного имени файла (как указано). В примере [.filename]#bin/emacs#.
+
+`%D`::
+Раскрыть до текущего префикса директории, установленного с помощью `@cwd`. В этом примере [.filename]#/usr/local#.
+
+`%B`::
+Раскрыть до базового имени полного имени файла, то есть префикс текущего каталога плюс последняя спецификация файла, за вычетом имени файла в конце спецификации. В данном примере это будет [.filename]#/usr/local/bin#.
+
+`%f`::
+Раскрывается до части имени файла в полном квалифицированном имени, или противоположный случай для `%B`. В примере, [.filename]#emacs#.
+
+[IMPORTANT]
+====
+Эти ключевые слова предназначены для помощи в настройке пакета, чтобы он был максимально готов к использованию. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
+====
+
+[[plist-keywords-base-mode]]
+==== `@mode` _режим_
+
+Установить разрешения по умолчанию для всех последующих извлекаемых файлов в _режим_. Формат такой же, как используется в man:chmod[1]. Использование без аргумента вернёт разрешения по умолчанию (режим файла при упаковке).
+
+[IMPORTANT]
+====
+Это должен быть числовой режим, например `644`, `4755` или `600`. Нельзя использовать относительный режим, например `u+s`.
+====
+
+[[plist-keywords-base-owner]]
+==== `@owner` _пользователь_
+
+Установить владельца по умолчанию для всех последующих файлов в _пользователь_. Использование без аргумента вернёт владельца по умолчанию (`root`).
+
+[[plist-keywords-base-group]]
+==== `@group` _группа_
+
+Установить группу-владельца по умолчанию для всех последующих файлов в _группу_. Использование без аргумента вернёт группу-владельца по умолчанию (`wheel`).
+
+[[plist-keywords-base-comment]]
+==== `@comment` _строка_
+
+Эта строка игнорируется при упаковке.
+
+[[plist-keywords-base-dir]]
+==== `@dir` _каталог_
+
+Объявить имя каталога. По умолчанию каталоги, созданные в `PREFIX` при установке пакета, автоматически удаляются. Используйте эту опцию, если необходимо создать пустой каталог в `PREFIX` или если каталогу требуется нестандартный владелец, группа или права. Каталоги за пределами `PREFIX` необходимо регистрировать. Например, [.filename]#/var/db/${PORTNAME}# требует записи `@dir`, тогда как [.filename]#${PREFIX}/shared/${PORTNAME}# — нет, если он содержит файлы или использует стандартные владельца, группу и права.
+
+[[plist-keywords-base-exec-deprecated]]
+==== `@exec` _команда_, `@unexec` _команда_ (Устарело)
+
+Выполнить _команду_ как часть процесса установки или удаления. Рекомендуется использовать crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_] вместо этого.
+
+[[plist-keywords-base-dirrm]]
+==== `@dirrm` _каталог_ (Устарело)
+
+Объявить имя каталога для удаления при деинсталляции. По умолчанию каталоги, созданные в `PREFIX` при установке пакета, удаляются при его деинсталляции.
+
+[[plist-keywords-base-dirrmtry]]
+==== `@dirrmtry` _каталог_ (Устарело)
+
+Объявить имя каталога для удаления, аналогично `@dirrm`, но не выводить предупреждение, если каталог не может быть удален.
+
+[[plist-keywords-creating-new]]
+=== Создание новых ключевых слов
+
+Файлы списка пакетов могут быть расширены ключевыми словами, которые определены в каталоге [.filename]#${PORTSDIR}/Keywords#. Настройки каждого ключевого слова хранятся в файле UCL с именем [.filename]#keyword.ucl#. Файл должен содержать как минимум один из следующих разделов:
+
+* `attributes`
+* `action`
+* `pre-install`
+* `post-install`
+* `pre-deinstall`
+* `post-deinstall`
+* `pre-upgrade`
+* `post-upgrade`
+
+[[plist-keywords-attributes]]
+==== `attributes`
+
+Изменяет владельца, группу или режим доступа, используемые ключевым словом. Содержит ассоциативный массив, в котором возможными ключами являются `owner`, `group` и `mode`. Значениями являются, соответственно, имя пользователя, имя группы и режим доступа к файлу. Например:
+
+[.programlisting]
+....
+attributes: { owner: "games", group: "games", mode: 0555 }
+....
+
+[[plist-keywords-action]]
+==== `action`
+
+Определяет, что происходит с параметром ключевого слова. Содержит массив, где возможные значения:
+
+`setprefix`::
+Установите префикс для следующих записей в plist.
+
+`dir`::
+Зарегистрировать каталог для создания при установке и удаления при деинсталляции.
+
+`dirrm`::
+Зарегистрировать каталог для удаления при деинсталляции. Устарело.
+
+`dirrmtry`::
+Зарегистрировать каталог для попытки удаления при деинсталляции. Устарело.
+
+`file`::
+Зарегистрировать файл.
+
+`setmode`::
+Установить режим для следующих записей plist.
+
+`setowner`::
+Установить владельца для следующих записей plist.
+
+`setgroup`::
+Установить группу для следующих записей в plist.
+
+`comment`::
+Не выполняет никаких действий, эквивалентно отсутствию раздела `action`.
+
+`ignore_next`::
+Игнорировать следующую запись в plist.
+
+[[plist-keywords-arguments]]
+==== `arguments`
+
+Если установлено значение `true`, добавляется обработка аргументов, разделяя всю строку, `%@`, на нумерованные аргументы, `%1`, `%2`, и так далее. Например, для такой строки:
+
+[.programlisting]
+....
+@foo some.content other.content
+....
+
+`%1` и `%2` будут содержать:
+
+[.programlisting]
+....
+some.content
+other.content
+....
+
+Это также влияет на работу записи crossref:plist[plist-keywords-action,`action`]. Если аргументов больше одного, необходимо указать номер аргумента. Например:
+
+[.programlisting]
+....
+actions: [file(1)]
+....
+
+[[plist-keywords-pre-post]]
+==== `pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`
+
+Эти ключевые слова содержат man:sh[1] скрипт, который выполняется до или после установки, удаления или обновления пакета. В дополнение к обычным заполнителям `@exec %_foo_`, описанным в crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_], существует новый заполнитель `%@`, который представляет аргумент ключевого слова.
+
+[[plist-keywords-examples]]
+==== Примеры пользовательских ключевых слов
+
+[[plist-keywords-fc-example]]
+.Пример ключевого слова `@dirrmtryecho`
+[example]
+====
+
+Это ключевое слово выполняет две функции: добавляет строку `@dirrmtry _directory_` в список упаковки и сообщает о том, что директория удаляется при деинсталляции пакета.
+
+[.programlisting]
+....
+actions: [dirrmtry]
+post-deinstall: <<EOD
+ echo "Directory %D/%@ removed."
+EOD
+....
+
+====
+
+[[plist-keywords-sample-example]]
+.Реальный пример, как реализован `@sample`
+[example]
+====
+
+Этот ключевое слово выполняет три действия. Оно добавляет первый _filename_, переданный в качестве аргумента `@sample`, в список упаковки, добавляет в скрипт `post-install` инструкции для копирования образца в фактический файл конфигурации, если он ещё не существует, и добавляет в инструкции `post-deinstall` удаление файла конфигурации, если он не был изменён.
+
+[.programlisting]
+....
+actions: [file(1)]
+arguments: true
+post-install: <<EOD
+ case "%1" in
+ /*) sample_file="%1" ;;
+ *) sample_file="%D/%1" ;;
+ esac
+ target_file="${sample_file%.sample}"
+ set -- %@
+ if [ $# -eq 2 ]; then
+ target_file=${2}
+ fi
+ case "${target_file}" in
+ /*) target_file="${target_file}" ;;
+ *) target_file="%D/${target_file}" ;;
+ esac
+ if ! [ -f "${target_file}" ]; then
+ /bin/cp -p "${sample_file}" "${target_file}" && \
+ /bin/chmod u+w "${target_file}"
+ fi
+EOD
+pre-deinstall: <<EOD
+ case "%1" in
+ /*) sample_file="%1" ;;
+ *) sample_file="%D/%1" ;;
+ esac
+ target_file="${sample_file%.sample}"
+ set -- %@
+ if [ $# -eq 2 ]; then
+ set -- %@
+ target_file=${2}
+ fi
+ case "${target_file}" in
+ /*) target_file="${target_file}" ;;
+ *) target_file="%D/${target_file}" ;;
+ esac
+ if cmp -s "${target_file}" "${sample_file}"; then
+ rm -f "${target_file}"
+ else
+ echo "You may need to manually remove ${target_file} if it is no longer needed."
+ fi
+EOD
+....
-Пользовательские конфигурационные файлы должны быть удалены или быть установлены как [.filename]#filename.sample#. Файл [.filename]#info/dir# включать в список не нужно, но должны быть добавлены соответствующие строчки [.filename]#install-info#, так, как это описано в разделе о <<makefile-info,файлах в формате info>>. Все библиотеки, устанавливаемые портом, должны быть перечислены так, как это описано в разделе о <<porting-shlibs,динамических библиотеках>>.
+====
diff --git a/documentation/content/ru/books/porters-handbook/plist/_index.po b/documentation/content/ru/books/porters-handbook/plist/_index.po
new file mode 100644
index 0000000000..ae6c7cc6b7
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/plist/_index.po
@@ -0,0 +1,1731 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookplist_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:14
+#, no-wrap
+msgid "Advanced pkg-plist Practices"
+msgstr "Продвинутые практики pkg-plist"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Advanced pkg-plist Practices"
+msgstr "Глава 8. Продвинутые практики pkg-plist"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:52
+#, no-wrap
+msgid "Changing pkg-plist Based on Make Variables"
+msgstr "Изменение содержимого [.filename]#pkg-plist# в зависимости от make-переменных"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:59
+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 ""
+"Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих "
+"файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами "
+"они были отконфигурированы (или в зависимости от версии языка `perl` в "
+"случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых "
+"слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле "
+"[.filename]#pkg-plist# будут заменяться соответствующими значениями. "
+"Значением `%%OSREL%%` является номер версии операционной системы (например, "
+"`4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии "
+"`perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к "
+"файлам документации порта, описаны в crossref:makefiles[install-"
+"documentation,соответствующем разделе]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:61
+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 ""
+"Если вам нужно сделать другие подстановки, вы можете указать в переменной "
+"`PLIST_SUB` список пар `VAR=VALUE`, и все вхождения `%%VAR%%` в файле "
+"[.filename]#pkg-plist# будут заменяться на значение _VALUE_."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:64
+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 ""
+"Например, если порт устанавливает множество файлов в подкаталоге, зависящем "
+"от версии, используйте заполнитель для версии, чтобы файл [.filename]#pkg-"
+"plist# не требовал перегенерации при каждом обновлении порта. Например, "
+"укажите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:69
+#, no-wrap
+msgid ""
+"OCTAVE_VERSION=\t${PORTREVISION}\n"
+"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
+msgstr ""
+"OCTAVE_VERSION=\t${PORTREVISION}\n"
+"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:73
+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 ""
+"в файле [.filename]#Makefile# и использовать `%%OCTAVE_VERSION%%` везде, где "
+"нужно указать номер версии в файле [.filename]#pkg-plist#. Таким образом, "
+"при обновлении порта вам не нужно будет менять десятки (а в некоторых "
+"случаях и сотни) строк в файле [.filename]#pkg-plist#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:76
+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 ""
+"Если файлы устанавливаются по условию в зависимости от опций, установленных "
+"в порте, обычный способ обработки — это добавление префикса `%%OPT%%` для "
+"строк в [.filename]#pkg-plist#, которые нужны при включении опции, или `%"
+"%NO_OPT%%`, когда опция отключена, а также добавление `OPTIONS_SUB=yes` в "
+"[.filename]#Makefile#. Подробнее см. "
+"crossref:makefiles[options_sub,`OPTIONS_SUB`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:78
+msgid ""
+"For instance, if there are files that are only installed when the `X11` "
+"option is enabled, and [.filename]#Makefile# has:"
+msgstr ""
+"Например, если есть файлы, которые устанавливаются только при включении "
+"опции `X11`, и в [.filename]#Makefile# указано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:83
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tX11\n"
+"OPTIONS_SUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:86
+msgid ""
+"In [.filename]#pkg-plist#, put `%%X11%%` in front of the lines only being "
+"installed when the option is enabled, like this :"
+msgstr ""
+"В [.filename]#pkg-plist# укажите `%%X11%%` перед строками, которые "
+"устанавливаются только при включении опции, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:90
+#, no-wrap
+msgid "%%X11%%bin/foo-gui\n"
+msgstr "%%X11%%bin/foo-gui\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:95
+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 ""
+"Эта подстановка будет сделана между выполнением целей `pre-install` и `do-"
+"install`, посредством чтения файла [.filename]#PLIST# и записью в файл "
+"[.filename]#TMPPLIST# (по умолчанию это файл "
+"[.filename]#WRKDIR/.PLIST.mktmp#). Так что если ваш порт строит "
+"[.filename]#PLIST# на лету, делайте это во время или до выполнения цели `pre-"
+"install`. Кроме того, если вашему порту требуется отредактировать "
+"получающийся файл, делайте это в цели `post-install` изменением файла "
+"[.filename]#TMPPLIST#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:101
+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 ""
+"Ещё один способ изменения списка упаковки порта основан на установке "
+"переменных `PLIST_FILES` и `PLIST_DIRS`. Значение каждой переменной "
+"рассматривается как список путей для записи в [.filename]#TMPPLIST# вместе с "
+"содержимым [.filename]#PLIST#. Хотя имена, перечисленные в `PLIST_FILES` и "
+"`PLIST_DIRS`, подлежат замене `%%_VAR_%%`, как описано выше, лучше "
+"использовать `${_VAR_}` напрямую. За исключением этого, имена из "
+"`PLIST_FILES` появятся в итоговом списке упаковки без изменений, тогда как к "
+"именам из `PLIST_DIRS` будет добавлен префикс `@dir`. Чтобы вступить в силу, "
+"`PLIST_FILES` и `PLIST_DIRS` должны быть установлены до записи "
+"[.filename]#TMPPLIST#, то есть в `pre-install` или ранее."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:105
+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 ""
+"Время от времени использования `OPTIONS_SUB` недостаточно. В таких случаях "
+"добавление специфичного `_TAG_` в `PLIST_SUB` внутри [.filename]#Makefile# "
+"со специальным значением `@comment` заставляет инструменты пакетирования "
+"игнорировать строку. Например, если некоторые файлы устанавливаются только "
+"при включённой опции `X11` и архитектуре `i386`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:109
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:115
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
+"PLIST_SUB+=\tX11I386=\"\"\n"
+".else\n"
+"PLIST_SUB+=\tX11I386=\"@comment \"\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
+"PLIST_SUB+=\tX11I386=\"\"\n"
+".else\n"
+"PLIST_SUB+=\tX11I386=\"@comment \"\n"
+".endif\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:118
+#, no-wrap
+msgid "Empty Directories"
+msgstr "Пустые каталоги"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:121
+#, no-wrap
+msgid "Cleaning Up Empty Directories"
+msgstr "Очистка пустых каталогов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:127
+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 ""
+"При удалении порт должен удалить пустые каталоги, которые он создал. "
+"Большинство этих каталогов автоматически удаляются с помощью man:pkg[8], но "
+"для каталогов, созданных вне [.filename]#${PREFIX}#, или пустых каталогов "
+"требуется дополнительная работа. Обычно это делается добавлением строк "
+"`@dir` для таких каталогов. Подкаталоги должны быть удалены до удаления "
+"родительских каталогов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:133
+#, no-wrap
+msgid ""
+"[...]\n"
+"@dir /var/games/oneko/saved-games\n"
+"@dir /var/games/oneko\n"
+msgstr ""
+"[...]\n"
+"@dir /var/games/oneko/saved-games\n"
+"@dir /var/games/oneko\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:136
+#, no-wrap
+msgid "Creating Empty Directories"
+msgstr "Создание пустых каталогов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:141
+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 ""
+"Пустые каталоги, созданные во время установки порта, требуют особого "
+"внимания. Они должны присутствовать при создании пакета. Если они не созданы "
+"кодом порта, создайте их в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:146
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:150
+msgid ""
+"Add the directory to [.filename]#pkg-plist# like any other. For example:"
+msgstr ""
+"Добавьте директорию в [.filename]#pkg-plist# так же, как и любую другую. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:154
+#, no-wrap
+msgid "@dir some/directory\n"
+msgstr "@dir some/directory\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:157
+#, no-wrap
+msgid "Configuration Files"
+msgstr "Файлы конфигурации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:161
+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 ""
+"Если порт устанавливает файлы конфигурации в [.filename]#PREFIX/etc# (или в "
+"другое место), _не_ указывайте их в [.filename]#pkg-plist#. Это приведёт к "
+"тому, что `pkg delete` удалит файлы, которые были тщательно отредактированы "
+"пользователем, а повторная установка перезапишет их."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:165
+msgid ""
+"Instead, install sample files with a [.filename]#filename.sample# "
+"extension. The `@sample` macro automates this, see crossref:plist[plist-"
+"keywords-sample, Expanding Package List with Keywords] for what it does "
+"exactly. For each sample file, add a line to [.filename]#pkg-plist#:"
+msgstr ""
+"Вместо этого устанавливайте образцы файлов с расширением "
+"[.filename]#filename.sample#. Макрос `@sample` автоматизирует этот процесс; "
+"подробности его работы см. в разделе crossref:plist[plist-keywords-sample, "
+"Расширение списка пакетов с помощью ключевых слов]. Для каждого образца "
+"файла добавьте строку в [.filename]#pkg-plist#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:169
+#, no-wrap
+msgid "@sample etc/orbit.conf.sample\n"
+msgstr "@sample etc/orbit.conf.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:173
+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 ""
+"Если существует очень веская причина не устанавливать рабочий файл "
+"конфигурации по умолчанию, укажите только имя примера файла в "
+"[.filename]#pkg-plist#, без части `@sample` с последующим пробелом, и "
+"добавьте crossref:pkg-files[porting-message,сообщение], указывающее, что "
+"пользователь должен скопировать и отредактировать файл перед тем, как "
+"программа заработает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:178
+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 ""
+"Когда порт устанавливает свою конфигурацию в подкаталоге [.filename]#$"
+"{PREFIX}/etc#, используйте `ETCDIR`, который по умолчанию равен `${PREFIX}/"
+"etc/${PORTNAME}`. Это значение может быть переопределено в "
+"[.filename]#Makefile# порта, если для порта принято использовать другой "
+"каталог. Макрос `%%ETCDIR%%` будет использоваться вместо этого в "
+"[.filename]#pkg-plist#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:184
+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 ""
+"Примеры конфигурационных файлов всегда должны иметь суффикс "
+"[.filename]#.sample#. Если по каким-то историческим причинам использование "
+"стандартного суффикса невозможно, или если примеры файлов взяты из другого "
+"каталога, используйте эту конструкцию:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:188
+#, no-wrap
+msgid "@sample etc/orbit.conf-dist etc/orbit.conf\n"
+msgstr "@sample etc/orbit.conf-dist etc/orbit.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:191
+msgid "or"
+msgstr "или"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:195
+#, no-wrap
+msgid "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
+msgstr "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:198
+msgid "The format is `@sample _sample-file actual-config-file_`."
+msgstr "Формат: `@sample _файл-образец фактический-конфигурационный-файл_`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:201
+#, no-wrap
+msgid "Dynamic Versus Static Package List"
+msgstr "Динамический или статический список упаковки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:205
+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 ""
+"_Статический список упаковки_ — это список упаковки, который доступен в "
+"Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой "
+"переменных или без неё), или как встроенный в [.filename]#Makefile# через "
+"`PLIST_FILES` и `PLIST_DIRS`. Даже если содержимое было автоматически "
+"сгенерировано инструментом или целью в Makefile _до_ включения в Коллекцию "
+"портов коммиттером (например, с использованием `make makeplist`), такой "
+"список всё равно считается статическим, поскольку его можно посмотреть без "
+"необходимости загрузки или компиляции distfile."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:208
+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 ""
+"_Динамический список упаковки_ — это список упаковки, который генерируется "
+"во время компиляции порта на основе установленных файлов и каталогов. "
+"Невозможно изучить его до загрузки и компиляции исходного кода "
+"портированного приложения или после выполнения команды `make clean`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:212
+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 ""
+"Хотя использование динамических списков упаковки не запрещено, "
+"сопровождающие должны использовать статические списки упаковки везде, где "
+"это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по "
+"доступным портам для обнаружения, например, какой порт устанавливает "
+"определенный файл. Динамические списки должны быть использованы в основном "
+"для сложных портов, для которых изменения в списке упаковки кардинальным "
+"образом основаны на возможностях порта, настраиваемых параметрами, (и, таким "
+"образом, делая сопровождение статических списков упаковки невозможным), или "
+"портов, которые изменяют список упаковки на основе версии используемого им "
+"программного обеспечения (например, порты, которые порождают документы при "
+"помощи Javadoc)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:214
+#, no-wrap
+msgid "Automated Package List Creation"
+msgstr "Автоматическое создание списка упаковки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:219
+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 ""
+"Сначала убедитесь, что порт почти готов, и отсутствует только файл "
+"[.filename]#pkg-plist#. Запуск команды `make makeplist` покажет пример для "
+"файла [.filename]#pkg-plist#. Вывод `makeplist` необходимо дважды "
+"перепроверять на корректность, так как он пытается автоматически угадать "
+"некоторые вещи и может ошибаться."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:224
+msgid ""
+"User configuration files should be installed as "
+"[.filename]#filename.sample#, as it is described in crossref:plist[plist-"
+"config, Configuration Files]. [.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 ""
+"Файлы конфигурации пользователя должны устанавливаться как "
+"[.filename]#filename.sample#, как описано в разделе crossref:plist[plist-"
+"config,Файлы конфигурации]. [.filename]#info/dir# не должен быть указан, а "
+"соответствующие строки [.filename]#install-info# должны быть добавлены, как "
+"указано в разделе crossref:makefiles[makefile-info,info-файлы]. Любые "
+"библиотеки, устанавливаемые портом, должны быть перечислены, как указано в "
+"разделе crossref:special[porting-shlibs,общие библиотеки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:226
+#, no-wrap
+msgid "Expanding `PLIST_SUB` with Regular Expressions"
+msgstr "Расширение `PLIST_SUB` с помощью регулярных выражений"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:230
+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:232
+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 ""
+"Для решения этой проблемы для каждого `_PLACEHOLDER_=_значение_` можно "
+"задать `PLACEHOLDER_regex=регулярное_выражение`, где часть `_regex_` более "
+"точно соответствует _значению_."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:234
+#, no-wrap
+msgid "Using PLIST_SUB with Regular Expressions"
+msgstr "Использование PLIST_SUB с регулярными выражениями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:242
+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 ""
+"Порты Perl могут устанавливать архитектурно-зависимые файлы в специальное "
+"дерево. В FreeBSD для упрощения портирования это дерево называется `mach`. "
+"Например, порт, который устанавливает файл, чей путь содержит `mach`, может "
+"иметь эту часть строки пути заменённой неправильными значениями. Рассмотрим "
+"этот [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:250
+#, no-wrap
+msgid ""
+"PORTNAME=\tMachine-Build\n"
+"DISTVERSION=\t1\n"
+"CATEGORIES=\tdevel perl5\n"
+"MASTER_SITES=\tCPAN\n"
+"PKGNAMEPREFIX=\tp5-\n"
+msgstr ""
+"PORTNAME=\tMachine-Build\n"
+"DISTVERSION=\t1\n"
+"CATEGORIES=\tdevel perl5\n"
+"MASTER_SITES=\tCPAN\n"
+"PKGNAMEPREFIX=\tp5-\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:254
+#, no-wrap
+msgid ""
+"MAINTAINER=\tperl@FreeBSD.org\n"
+"COMMENT=\tBuilding machine\n"
+"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
+msgstr ""
+"MAINTAINER=\tperl@FreeBSD.org\n"
+"COMMENT=\tBuilding machine\n"
+"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:257
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:259
+#, no-wrap
+msgid "PLIST_SUB=\tPERL_ARCH=mach\n"
+msgstr "PLIST_SUB=\tPERL_ARCH=mach\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:262
+msgid "The files installed by the port are:"
+msgstr "Файлы, установленные портом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:270
+#, 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 ""
+"/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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:273
+msgid "Running `make makeplist` wrongly generates:"
+msgstr "Запуск `make makeplist` ошибочно создает:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:281
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:284
+msgid "Change the `PLIST_SUB` line from the [.filename]#Makefile# to:"
+msgstr "Измените строку `PLIST_SUB` в [.filename]#Makefile# на:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:289
+#, no-wrap
+msgid ""
+"PLIST_SUB=\tPERL_ARCH=mach \\\n"
+"\t\tPERL_ARCH_regex=\\bmach\\b\n"
+msgstr ""
+"PLIST_SUB=\tPERL_ARCH=mach \\\n"
+"\t\tPERL_ARCH_regex=\\bmach\\b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:292
+msgid "Now `make makeplist` correctly generates:"
+msgstr "Теперь `make makeplist` правильно генерирует:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:300
+#, 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 ""
+"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"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:305
+#, no-wrap
+msgid "Expanding Package List with Keywords"
+msgstr "Расширение списка пакетов используя ключевые слова"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:311
+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:315
+#, no-wrap
+msgid "@sample(games,games,640) etc/config.sample\n"
+msgstr "@sample(games,games,640) etc/config.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:319
+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:323
+#, no-wrap
+msgid "@sample(,games,660) etc/config.sample\n"
+msgstr "@sample(,games,660) etc/config.sample\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:329
+msgid ""
+"If a keyword is used on an crossref:makefiles[makefile-options,optional] "
+"entry, it must to be added after the helper:"
+msgstr ""
+"Если ключевое слово используется в crossref:makefiles[makefile-"
+"options,необязательной записи], оно должно быть добавлено после помощника:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:333
+#, no-wrap
+msgid "%%FOO%%@sample etc/orbit.conf.sample\n"
+msgstr "%%FOO%%@sample etc/orbit.conf.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:337
+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 ""
+"Это происходит потому, что вспомогательные функции plist для опций "
+"используются для закомментирования строки, поэтому они должны быть указаны "
+"первыми. Дополнительную информацию см. в "
+"crossref:makefiles[options_sub,`OPTIONS_SUB`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:340
+#, no-wrap
+msgid "`@desktop-file-utils`"
+msgstr "`@desktop-file-utils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:344
+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 ""
+"Будет выполнять `update-desktop-database -q` после установки и удаления. "
+"_Никогда_ не используйте напрямую, добавьте crossref:uses[uses-desktop-file-"
+"utils,`USES=desktop-file-utils`] в [.filename]#Makefile#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:346
+#, no-wrap
+msgid "`@fc` _directory_"
+msgstr "`@fc` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:349
+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 ""
+"Добавить запись `@dir` для каталога, переданного в качестве аргумента, и "
+"выполнить `fc-cache -fs` для этого каталога после установки и удаления."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:351
+#, no-wrap
+msgid "`@fontsdir` _directory_"
+msgstr "`@fontsdir` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:355
+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 ""
+"Добавить запись `@dir` для каталога, переданного в качестве аргумента, и "
+"запустить `mkfontscale` и `mkfontdir` в этом каталоге после установки и "
+"удаления. Кроме того, при удалении удаляются кэш-файлы "
+"[.filename]#fonts.scale# и [.filename]#fonts.dir#, если они пусты."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:357
+#, no-wrap
+msgid "`@info` _file_"
+msgstr "`@info` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:363
+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 ""
+"Добавляет файл, переданный в качестве аргумента, в plist и обновляет индекс "
+"документа info при установке и удалении. Кроме того, удаляет индекс, если он "
+"пуст, при удалении. Это никогда не следует использовать вручную, а только "
+"через `INFO`. Подробнее см. в crossref:makefiles[makefile-info,Файлы Info]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:365
+#, no-wrap
+msgid "`@kld` _directory_"
+msgstr "`@kld` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:369
+msgid ""
+"Runs `kldxref` on the directory on installation and deinstallation. "
+"Additionally, on deinstallation, it will remove the directory if empty."
+msgstr ""
+"Выполняет `kldxref` для каталога при установке и удалении. Дополнительно при "
+"удалении каталог будет удалён, если он пуст."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:371
+#, no-wrap
+msgid "`@rmtry` _file_"
+msgstr "`@rmtry` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:374
+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:376
+#, no-wrap
+msgid "`@sample` _file_ [_file_]"
+msgstr "`@sample` _файл_ [_файл_]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:380
+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 ""
+"Это используется для обработки установки файлов конфигурации, используя "
+"примеры файлов, поставляемых с пакетом. \"Реальный\" файл (не пример) — это "
+"либо второе имя файла, если оно присутствует, либо первое имя файла без "
+"расширения [.filename]#.sample#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:385
+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 "
+"crossref:plist[plist-config, Configuration Files] for more information."
+msgstr ""
+"Это делает три вещи. Во-первых, добавляет первый переданный файл в качестве "
+"аргумента, образец файла, в plist. Затем, при установке, если фактический "
+"файл не найден, копирует образец файла в фактический файл. И наконец, при "
+"удалении, удаляет фактический файл, если он не был изменён. Дополнительную "
+"информацию см. в crossref:plist[plist-config, Файлы конфигурации]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:387
+#, no-wrap
+msgid "`@shared-mime-info` _directory_"
+msgstr "`@shared-mime-info` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:390
+msgid ""
+"Runs `update-mime-database` on the directory on installation and "
+"deinstallation."
+msgstr ""
+"Выполняет `update-mime-database` для указанного каталога при установке и "
+"удалении."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:392
+#, no-wrap
+msgid "`@shell` _file_"
+msgstr "`@shell` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:395
+msgid "Add the file passed as argument to the plist."
+msgstr "Добавить файл, переданный в качестве аргумента, в plist."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:398
+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 ""
+"При установке добавить полный путь к _file_ в [.filename]#/etc/shells#, "
+"убедившись, что он не добавлен повторно. При удалении удалите его из "
+"[.filename]#/etc/shells#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:400
+#, no-wrap
+msgid "`@terminfo`"
+msgstr "`@terminfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:404
+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 ""
+"Не использовать самостоятельно. Если порт устанавливает файлы "
+"[.filename]#*.terminfo#, добавьте crossref:uses[uses-"
+"terminfo,`USES=terminfo`] в его [.filename]#Makefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:406
+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 ""
+"При установке и удалении, если присутствует `tic`, обновить [.filename]#$"
+"{PREFIX}/shared/misc/terminfo.db# из файлов [.filename]#*.terminfo# в "
+"[.filename]#${PREFIX}/shared/misc#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:408
+#, no-wrap
+msgid "Base Keywords"
+msgstr "Основные ключевые слова"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:411
+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 ""
+"Есть несколько ключевых слов, которые жестко закодированы и документированы "
+"в man:pkg-create[8]. Для полноты изложения они также документированы здесь."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:413
+#, no-wrap
+msgid "`@` [_file_]"
+msgstr "`@` [_файл_]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:417
+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 ""
+"Ключевое слово `empty` является заполнителем, используемым, когда необходимо "
+"изменить владельца, группу или права доступа к файлу. Например, чтобы "
+"установить группу файла в `games` и добавить бит setgid, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:421
+#, no-wrap
+msgid "@(,games,2755) sbin/daemon\n"
+msgstr "@(,games,2755) sbin/daemon\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:424
+#, no-wrap
+msgid "`@preexec` _command_, `@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_"
+msgstr "`@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:427
+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:428
+#, no-wrap
+msgid "`@preexec` _command_"
+msgstr "`@preexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:430
+msgid "Execute _command_ as part of the [.filename]#pre-install# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#pre-install#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:431
+#, no-wrap
+msgid "`@postexec` _command_"
+msgstr "`@postexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:433
+msgid "Execute _command_ as part of the [.filename]#post-install# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#post-install#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:434
+#, no-wrap
+msgid "`@preunexec` _command_"
+msgstr "`@preunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:436
+msgid "Execute _command_ as part of the [.filename]#pre-deinstall# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#pre-deinstall#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:437
+#, no-wrap
+msgid "`@postunexec` _command_"
+msgstr "`@postunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:439
+msgid "Execute _command_ as part of the [.filename]#post-deinstall# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#post-deinstall#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:442
+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 ""
+"Если в _команде_ содержится любая из этих последовательностей, они "
+"раскрываются непосредственно. Для следующих примеров предположим, что `@cwd` "
+"установлен в [.filename]#/usr/local#, а последним извлечённым файлом был "
+"[.filename]#bin/emacs#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:443
+#, no-wrap
+msgid "`%F`"
+msgstr "`%F`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:446
+msgid ""
+"Expand to the last filename extracted (as specified). In the example case "
+"[.filename]#bin/emacs#."
+msgstr ""
+"Раскрывается до последнего извлеченного имени файла (как указано). В примере "
+"[.filename]#bin/emacs#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:447
+#, no-wrap
+msgid "`%D`"
+msgstr "`%D`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:450
+msgid ""
+"Expand to the current directory prefix, as set with `@cwd`. In the example "
+"case [.filename]#/usr/local#."
+msgstr ""
+"Раскрыть до текущего префикса директории, установленного с помощью `@cwd`. В "
+"этом примере [.filename]#/usr/local#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:451
+#, no-wrap
+msgid "`%B`"
+msgstr "`%B`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:454
+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 ""
+"Раскрыть до базового имени полного имени файла, то есть префикс текущего "
+"каталога плюс последняя спецификация файла, за вычетом имени файла в конце "
+"спецификации. В данном примере это будет [.filename]#/usr/local/bin#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:455
+#, no-wrap
+msgid "`%f`"
+msgstr "`%f`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:458
+msgid ""
+"Expand to the filename part of the fully qualified name, or the converse of "
+"`%B`. In the example case, [.filename]#emacs#."
+msgstr ""
+"Раскрывается до части имени файла в полном квалифицированном имени, или "
+"противоположный случай для `%B`. В примере, [.filename]#emacs#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:463
+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:466
+#, no-wrap
+msgid "`@mode` _mode_"
+msgstr "`@mode` _режим_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:471
+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 ""
+"Установить разрешения по умолчанию для всех последующих извлекаемых файлов в "
+"_режим_. Формат такой же, как используется в man:chmod[1]. Использование без "
+"аргумента вернёт разрешения по умолчанию (режим файла при упаковке)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:476
+msgid ""
+"This must be a numeric mode, like `644`, `4755`, or `600`. It cannot be a "
+"relative mode like `u+s`."
+msgstr ""
+"Это должен быть числовой режим, например `644`, `4755` или `600`. Нельзя "
+"использовать относительный режим, например `u+s`."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:479
+#, no-wrap
+msgid "`@owner` _user_"
+msgstr "`@owner` _пользователь_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:483
+msgid ""
+"Set default ownership for all subsequent files to _user_. Use without an "
+"argument to set back to default ownership (`root`)."
+msgstr ""
+"Установить владельца по умолчанию для всех последующих файлов в "
+"_пользователь_. Использование без аргумента вернёт владельца по умолчанию "
+"(`root`)."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:485
+#, no-wrap
+msgid "`@group` _group_"
+msgstr "`@group` _группа_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:489
+msgid ""
+"Set default group ownership for all subsequent files to _group_. Use "
+"without an arg to set back to default group ownership (`wheel`)."
+msgstr ""
+"Установить группу-владельца по умолчанию для всех последующих файлов в "
+"_группу_. Использование без аргумента вернёт группу-владельца по умолчанию "
+"(`wheel`)."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:491
+#, no-wrap
+msgid "`@comment` _string_"
+msgstr "`@comment` _строка_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:494
+msgid "This line is ignored when packing."
+msgstr "Эта строка игнорируется при упаковке."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:496
+#, no-wrap
+msgid "`@dir` _directory_"
+msgstr "`@dir` _каталог_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:502
+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 ""
+"Объявить имя каталога. По умолчанию каталоги, созданные в `PREFIX` при "
+"установке пакета, автоматически удаляются. Используйте эту опцию, если "
+"необходимо создать пустой каталог в `PREFIX` или если каталогу требуется "
+"нестандартный владелец, группа или права. Каталоги за пределами `PREFIX` "
+"необходимо регистрировать. Например, [.filename]#/var/db/${PORTNAME}# "
+"требует записи `@dir`, тогда как [.filename]#${PREFIX}/shared/${PORTNAME}# — "
+"нет, если он содержит файлы или использует стандартные владельца, группу и "
+"права."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:504
+#, no-wrap
+msgid "`@exec` _command_, `@unexec` _command_ (Deprecated)"
+msgstr "`@exec` _команда_, `@unexec` _команда_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:508
+msgid ""
+"Execute _command_ as part of the installation or deinstallation process. "
+"Please use crossref:plist[plist-keywords-base-exec, `@preexec` _command_, "
+"`@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_] "
+"instead."
+msgstr ""
+"Выполнить _команду_ как часть процесса установки или удаления. Рекомендуется "
+"использовать crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, "
+"`@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_] "
+"вместо этого."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:510
+#, no-wrap
+msgid "`@dirrm` _directory_ (Deprecated)"
+msgstr "`@dirrm` _каталог_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:514
+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 ""
+"Объявить имя каталога для удаления при деинсталляции. По умолчанию каталоги, "
+"созданные в `PREFIX` при установке пакета, удаляются при его деинсталляции."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:516
+#, no-wrap
+msgid "`@dirrmtry` _directory_ (Deprecated)"
+msgstr "`@dirrmtry` _каталог_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:519
+msgid ""
+"Declare directory name to be removed, as for `@dirrm`, but does not issue a "
+"warning if the directory cannot be removed."
+msgstr ""
+"Объявить имя каталога для удаления, аналогично `@dirrm`, но не выводить "
+"предупреждение, если каталог не может быть удален."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:521
+#, no-wrap
+msgid "Creating New Keywords"
+msgstr "Создание новых ключевых слов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:526
+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 ""
+"Файлы списка пакетов могут быть расширены ключевыми словами, которые "
+"определены в каталоге [.filename]#${PORTSDIR}/Keywords#. Настройки каждого "
+"ключевого слова хранятся в файле UCL с именем [.filename]#keyword.ucl#. Файл "
+"должен содержать как минимум один из следующих разделов:"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:528
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:537
+#, no-wrap
+msgid "`attributes`"
+msgstr "`attributes`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:550
+#, no-wrap
+msgid "`action`"
+msgstr "`action`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:530
+msgid "`pre-install`"
+msgstr "`pre-install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:531
+msgid "`post-install`"
+msgstr "`post-install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:532
+msgid "`pre-deinstall`"
+msgstr "`pre-deinstall`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:533
+msgid "`post-deinstall`"
+msgstr "`post-deinstall`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:534
+msgid "`pre-upgrade`"
+msgstr "`pre-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:535
+msgid "`post-upgrade`"
+msgstr "`post-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:543
+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 ""
+"Изменяет владельца, группу или режим доступа, используемые ключевым словом. "
+"Содержит ассоциативный массив, в котором возможными ключами являются "
+"`owner`, `group` и `mode`. Значениями являются, соответственно, имя "
+"пользователя, имя группы и режим доступа к файлу. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:547
+#, no-wrap
+msgid "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
+msgstr "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:553
+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:554
+#, no-wrap
+msgid "`setprefix`"
+msgstr "`setprefix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:556
+msgid "Set the prefix for the next plist entries."
+msgstr "Установите префикс для следующих записей в plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:557
+#, no-wrap
+msgid "`dir`"
+msgstr "`dir`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:559
+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:560
+#, no-wrap
+msgid "`dirrm`"
+msgstr "`dirrm`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:563
+msgid "Register a directory to be deleted on deinstall. Deprecated."
+msgstr "Зарегистрировать каталог для удаления при деинсталляции. Устарело."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:564
+#, no-wrap
+msgid "`dirrmtry`"
+msgstr "`dirrmtry`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:567
+msgid "Register a directory to try and deleted on deinstall. Deprecated."
+msgstr ""
+"Зарегистрировать каталог для попытки удаления при деинсталляции. Устарело."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:568
+#, no-wrap
+msgid "`file`"
+msgstr "`file`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:570
+msgid "Register a file."
+msgstr "Зарегистрировать файл."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:571
+#, no-wrap
+msgid "`setmode`"
+msgstr "`setmode`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:573
+msgid "Set the mode for the next plist entries."
+msgstr "Установить режим для следующих записей plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:574
+#, no-wrap
+msgid "`setowner`"
+msgstr "`setowner`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:576
+msgid "Set the owner for the next plist entries."
+msgstr "Установить владельца для следующих записей plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:577
+#, no-wrap
+msgid "`setgroup`"
+msgstr "`setgroup`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:579
+msgid "Set the group for the next plist entries."
+msgstr "Установить группу для следующих записей в plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:580
+#, no-wrap
+msgid "`comment`"
+msgstr "`comment`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:582
+msgid "Does not do anything, equivalent to not entering an `action` section."
+msgstr ""
+"Не выполняет никаких действий, эквивалентно отсутствию раздела `action`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:583
+#, no-wrap
+msgid "`ignore_next`"
+msgstr "`ignore_next`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:585
+msgid "Ignore the next entry in the plist."
+msgstr "Игнорировать следующую запись в plist."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:587
+#, no-wrap
+msgid "`arguments`"
+msgstr "`arguments`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:591
+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 ""
+"Если установлено значение `true`, добавляется обработка аргументов, разделяя "
+"всю строку, `%@`, на нумерованные аргументы, `%1`, `%2`, и так далее. "
+"Например, для такой строки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:595
+#, no-wrap
+msgid "@foo some.content other.content\n"
+msgstr "@foo some.content other.content\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:598
+msgid "`%1` and `%2` will contain:"
+msgstr "`%1` и `%2` будут содержать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:603
+#, no-wrap
+msgid ""
+"some.content\n"
+"other.content\n"
+msgstr ""
+"some.content\n"
+"other.content\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:608
+msgid ""
+"It also affects how the crossref:plist[plist-keywords-action,`action`] entry "
+"works. When there is more than one argument, the argument number must be "
+"specified. For example:"
+msgstr ""
+"Это также влияет на работу записи crossref:plist[plist-keywords-"
+"action,`action`]. Если аргументов больше одного, необходимо указать номер "
+"аргумента. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:612
+#, no-wrap
+msgid "actions: [file(1)]\n"
+msgstr "actions: [file(1)]\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:615
+#, no-wrap
+msgid "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
+msgstr "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:620
+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 crossref:plist[plist-keywords-"
+"base-exec, `@preexec` _command_, `@postexec` _command_, `@preunexec` "
+"_command_, `@postunexec` _command_], there is a new one, `%@`, which "
+"represents the argument of the keyword."
+msgstr ""
+"Эти ключевые слова содержат man:sh[1] скрипт, который выполняется до или "
+"после установки, удаления или обновления пакета. В дополнение к обычным "
+"заполнителям `@exec %_foo_`, описанным в crossref:plist[plist-keywords-base-"
+"exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, "
+"`@postunexec` _команда_], существует новый заполнитель `%@`, который "
+"представляет аргумент ключевого слова."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:622
+#, no-wrap
+msgid "Custom Keyword Examples"
+msgstr "Примеры пользовательских ключевых слов"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:625
+#, no-wrap
+msgid "Example of a `@dirrmtryecho` Keyword"
+msgstr "Пример ключевого слова `@dirrmtryecho`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:630
+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 ""
+"Это ключевое слово выполняет две функции: добавляет строку `@dirrmtry "
+"_directory_` в список упаковки и сообщает о том, что директория удаляется "
+"при деинсталляции пакета."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:637
+#, no-wrap
+msgid ""
+"actions: [dirrmtry]\n"
+"post-deinstall: <<EOD\n"
+" echo \"Directory %D/%@ removed.\"\n"
+"EOD\n"
+msgstr ""
+"actions: [dirrmtry]\n"
+"post-deinstall: <<EOD\n"
+" echo \"Directory %D/%@ removed.\"\n"
+"EOD\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:642
+#, no-wrap
+msgid "Real Life Example, How `@sample` is Implemented"
+msgstr "Реальный пример, как реализован `@sample`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:648
+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 ""
+"Этот ключевое слово выполняет три действия. Оно добавляет первый _filename_, "
+"переданный в качестве аргумента `@sample`, в список упаковки, добавляет в "
+"скрипт `post-install` инструкции для копирования образца в фактический файл "
+"конфигурации, если он ещё не существует, и добавляет в инструкции `post-"
+"deinstall` удаление файла конфигурации, если он не был изменён."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:693
+#, 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 ""
+"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"
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 bb5a06d72a..519a72f2e3 100644
--- a/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 12. Что делать нужно, и что делать нельзя
-prev: books/porters-handbook/security
+description: 'Список распространённых рекомендаций и ошибок, встречающихся в процессе портирования на FreeBSD'
next: books/porters-handbook/porting-samplem
-showBookMenu: true
-weight: 12
params:
- path: "/books/porters-handbook/porting-dads/"
+ path: /books/porters-handbook/porting-dads/
+prev: books/porters-handbook/security
+showBookMenu: true
+tags: "[\"dos\", \"don'ts\", \"porting\", \"ports\", \"guide\"]"
+title: 'Глава 13. Что делать нужно, и что делать нельзя'
+weight: 13
---
[[porting-dads]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 12
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,24 +53,22 @@ endif::[]
[[dads-intro]]
== Введение
-Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Проверьте порт по этому списку, и также проверьте порты в http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[базе сообщений PR], которые присланы другими людьми. Присылайте любые комментарии о портах, которые вы проверили, так, как это описано в статье о extref:{contributing}[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что вы знаете, что делаете.
+Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Проверьте порт по этому списку, и также проверьте порты в https://bugs.FreeBSD.org/search/[базе сообщений PR], которые присланы другими людьми. Присылайте любые комментарии о портах, которые вы проверили, так, как это описано в статье о extref:{contributing}[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что вы знаете, что делаете.
[[porting-wrkdir]]
== `WRKDIR`
-Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе об extref:{handbook}ports[установке портов с CDROM, PORTS-CD] за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов [.filename]##pkg-*##, сделайте это, <<porting-pkgfiles,переопределив переменную>>, но не перезаписывая их.
+Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе об extref:{handbook}[установке портов с CDROM, PORTS-CD] за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов [.filename]##pkg-*##, сделайте это, crossref:pkg-files[pkg-names,переопределив переменную], но не перезаписывая их.
[[porting-wrkdirprefix]]
== `WRKDIRPREFIX`
-Добейтесь того, чтобы ваш порт принимал во внимание значение переменной `WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/name/work#, а не [.filename]#PORTSDIR/subdir/work# или [.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное.
-
-Кроме того, если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `${WRKDIRPREFIX}${.CURDIR}`.
+Добейтесь того, чтобы ваш порт принимал во внимание значение переменной `WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/name/work#, а не [.filename]#PORTSDIR/subdir/work# или [.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное. Кроме того, если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `${WRKDIRPREFIX}${.CURDIR}`.
[[porting-versions]]
== Различение операционных систем и версий ОС
-Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. Предпочтительным способом отделения кода для версий FreeBSD является использование макросов {freebsd-version} и {freebsd}, определённых в http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup[sys/param.h]. Если этот файл не подключен, добавьте код
+Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. Предпочтительным способом отделения кода для версий FreeBSD является использование макросов {freebsd-version} и {freebsd}, определённых в https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. Если этот файл не подключен, добавьте код
[.programlisting]
....
@@ -83,17 +83,19 @@ endif::[]
....
#if __FreeBSD__ >= 9
# if __FreeBSD_version >= 901000
- /* здесь особый код для версий 9.1+ */
+ /* 9.1+ release specific code here */
# endif
#endif
....
+Полный список значений `{freebsd-version}` доступен в crossref:versions[versions,Значения __FreeBSD_version].
+
[[dads-after-port-mk]]
-== Написание чего-либо после [.filename]#bsd.port.mk#
+== Написание чего-либо после bsd.port.mk
Не пишите ничего после строки `.include <bsd.port.mk>`. Этой строки можно избежать, включив в где-то в середину вашего файла [.filename]#Makefile# файл [.filename]#bsd.port.pre.mk#, и файл [.filename]#bsd.port.post.mk# в конец.
-[NOTE]
+[IMPORTANT]
====
Вам нужно включить либо пару файлов [.filename]#bsd.port.pre.mk#/[.filename]#bsd.port.post.mk#, либо только [.filename]#bsd.port.mk#; не используйте оба этих метода одновременно.
====
@@ -118,13 +120,13 @@ endif::[]
|Версия релиза операционной системы (например, `2.1.5` или `2.2.7`)
|`OSVERSION`
-|Версия операционной системы в виде числа, та же, что и <<freebsd-versions,`__FreeBSD_version`>>.
+|Версия операционной системы в виде числа, та же, что и crossref:versions[versions,`{freebsd-version}`].
|`LOCALBASE`
|Корень дерева "local" (например, `/usr/local`)
|`PREFIX`
-|Куда, собственно, устанавливается порт (обратитесь к <<porting-prefix,подробной информации о `PREFIX`>>).
+|Куда, собственно, устанавливается порт (обратитесь к crossref:testing[porting-prefix,подробной информации о `PREFIX`]).
|===
[NOTE]
@@ -142,7 +144,7 @@ BROKEN= perl is in system
.endif
....
-Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`:-).
+Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`.
[[dads-sh-exec]]
== Использование выражения `exec` в сценариях обёртках
@@ -165,11 +167,11 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"
Если вы обнаружите, что для выполнения чего-то приходится писать много нового кода, то, пожалуйста, просмотрите файл [.filename]#bsd.port.mk# на предмет того, не содержит ли он решение именно вашей проблемы. Хотя его трудно читать, имеется много проблем, выглядящих сложными, для которых файл [.filename]#bsd.port.mk# уже содержит быстрое решение.
[[dads-cc]]
-== Работа как с `CC`, так и `CXX`
+== Относитесь внимательно как к `CC`, так и `CXX`
Порт должен принимать во внимание как переменную `CC`, так и `CXX`. Под этим мы подразумеваем, что порт ни в коем случае не должен устанавливать значения этих переменных, переопределяя имеющиеся значения; вместо этого можно добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры построения, относящиеся ко всем портам, могут быть заданы глобально.
-Если порты не учитывают значения этих переменных, добавьте строку `NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#.
+Если порт не учитывает значения этих переменных, добавьте строку `NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#.
Далее следует пример файла [.filename]#Makefile#, использующего как переменную `CC`, так и `CXX`. Обратите внимание на использование символов `?=`:
@@ -198,11 +200,11 @@ CXX= g++
В системах FreeBSD обе переменные `CC` и `CXX` могут быть определены в файле [.filename]#/etc/make.conf#. В первом примере задаётся значение, если оно ранее не было определено в [.filename]#/etc/make.conf#, что сохраняет любые определения, данные на уровне системы в целом. Второй пример переопределяет всё, что было задано ранее.
[[dads-cflags]]
-== Использование `CFLAGS`
+== Относитесь внимательно к `CFLAGS`
Порт должен учитывать переменную `CFLAGS`. Под этим мы подразумеваем, что порт ни в коем случае не должен устанавливать значения этой переменной, переопределяя имеющиеся значения; вместо этого можно добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры построения, относящиеся ко всем портам, могут быть заданы глобально.
-Если порты не учитывают значения этой переменной, добавьте строку `NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#.
+Если порт не учитывает значения этой переменной, добавьте строку `NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#.
Далее следует пример файла [.filename]#Makefile#, использующего переменную `CFLAGS`. Обратите внимание на использование символов `+=`:
@@ -234,23 +236,38 @@ CFLAGS= -O3 -funroll-loops -DHAVE_SOUND
CFLAGS+= -DHAVE_SOUND
....
-[[dads-pthread]]
-== Библиотеки потоков
+[[dads-verbose-logs]]
+== Подробные логи сборки
-Во FreeBSD библиотека потоков обязана быть скомпонована с исполняемыми файлами с использованием специального флага `-pthread`. Если порт настаивает на прямой компоновке с `-lpthread`, создайте патч для использования `-pthread`.
+Заставьте систему сборки портов отображать все команды, выполняемые на этапе сборки. Полные логи сборки критически важны для отладки проблем с портами.
-[NOTE]
-====
-Если построение порта заканчивается ошибкой `unrecognized option '-pthread'`, то может быть желательно использование `cc` в качестве компоновщика через установку `CONFIGURE_ENV` в `LD=${CC}`. Параметр `-pthread` напрямую командой `ld` не поддерживается.
-====
+Пример неинформативного лога сборки (плохой):
+
+[.programlisting]
+....
+ CC source1.o
+ CC source2.o
+ CCLD someprogram
+....
+
+Пример подробного журнала сборки (хороший):
+
+[.programlisting]
+....
+cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c
+cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c
+cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib
+....
+
+Некоторые системы сборки, такие как CMake, ninja и GNU configure, настроены на подробное ведение журнала в рамках инфраструктуры портов. В других случаях портам могут потребоваться индивидуальные изменения.
[[dads-feedback]]
-== Пожелания
+== Обратная связь
Посылайте подходящие изменения/патчи автору/сопровождающему для включения в следующий релиз. Это только сделает вашу работу гораздо легче при выходе следующего релиза.
[[dads-readme]]
-== [.filename]#README.html#
+== README.html
[.filename]#README.html# не является частью порта и генерируется при помощи `make readme`. Не включайте этот файл в патчи или коммиты.
@@ -262,79 +279,117 @@ CFLAGS+= -DHAVE_SOUND
[[dads-noinstall]]
== Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE`
-В некоторых случаях пользователи не должны допускаться к установке порта. Для того, чтобы сообщить пользователю, что порт не следует устанавливать, имеется несколько `make`-переменных, которые могут быть использованы в файле [.filename]#Makefile# порта. Значения следующих `make`-переменных будут причиной, возвращаемой пользователям, по которой порт отказывает в установке. Пожалуйста, используйте корректные `make`-переменные, так как каждая переменная make передает абсолютно различный смысл как для пользователей, так и для автоматизированных систем, которые полагаются на файлы [.filename]#Makefile#, таких как <<build-cluster,кластер построения портов>>, <<freshports,FreshPorts>> и <<portsmon,portsmon>>.
+В некоторых случаях пользователи не должны допускаться к установке порта. Для того, чтобы сообщить пользователю, что порт не следует устанавливать, имеется несколько `make`-переменных, которые могут быть использованы в файле [.filename]#Makefile# порта. Значения следующих `make`-переменных будут причиной, возвращаемой пользователям, по которой порт отказывает в установке. Пожалуйста, используйте корректные `make`-переменные, так как каждая переменная make передает абсолютно различный смысл как для пользователей, так и для автоматизированных систем, которые полагаются на файлы [.filename]#Makefile#, таких как crossref:keeping-up[build-cluster,кластер построения портов], crossref:keeping-up[freshports,FreshPorts].
[[dads-noinstall-variables]]
=== Переменные
* `BROKEN` предназначена для портов, которые в настоящее время не компилируются, не устанавливаются или не удаляются правильно. Следует использовать, когда проблема считается временной.
-+
++
В особых случаях кластер построения будет продолжать попытки собрать их, чтобы показать, решена ли основная проблема. (Однако, как правило, кластер запускается без этой возможности.)
-+
++
В частности, используйте `BROKEN`, когда порт:
** не компилируется
-** не выполняет процесс своей конфигурации или установки
-** устанавливает файлы вовне [.filename]#${LOCALBASE}#
+** выполняет со сбоем конфигурирование или процесс установки
+** устанавливает файлы вовне [.filename]#${PREFIX}#
** не удаляет полностью все свои файлы при деинсталляции (тем не менее, это может быть допустимо, и подходит для портов, оставляющих после себя файлы, измененные пользователем)
+** имеет проблемы во время выполнения на системах, где он должен работать нормально.
* `FORBIDDEN` используется для портов, которые содержат уязвимости в информационной безопасности или являются потенциально вредными в плане обеспечения информационной безопасности системы FreeBSD при установке данного порта (например: заведомо небезопасная программа или программа, которая предоставляет легко взламываемые сервисы). Порты должны помечаться как `FORBIDDEN`, как только в конкретном программном обеспечении обнаружилась уязвимость, но обновление выпущено не было. В идеальном случае порты должны обновляться максимально быстро после обнаружения уязвимости, чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь репутацию безопасной системы), однако иногда случается значительный временной разрыв между обнаружением уязвимости и выходом обновлённого релиза уязвимого программного обеспечения. Не помечайте порт как `FORBIDDEN`, если причина не вызвана соображениями информационной безопасности.
* `IGNORE` предназначена для портов, которые не должны строиться по какой-либо другой причине. Следует использовать для портов, в случае когда проблема считается структурной. Кластер построения ни при каких условиях не будет строить порты, помеченные как `IGNORE`. В частности, используйте `IGNORE`, когда порт:
-** компилируется, но работает неправильно
** не работает на установленной версии FreeBSD
-** имеет дистрибутивный файл, который не может быть автоматически извлечен из-за лицензионных ограничений
-** не работает с каким-либо другим портом, установленным в настоящее время (например, порт зависит от package:www/apache20[], но установлен package:www/apache22[])
-
+** имеет distfile, который не может быть автоматически загружен из-за ограничений лицензирования
+** не работает с некоторыми другими установленными портами (например, порт зависит от package:www/drupal7[], но установлен package:www/drupal8[])
+
[NOTE]
====
-Если порт будет конфликтовать с уже установленным портом (например, если они устанавливают файл в то же место, но с иным функциональным назначением), то <<conflicts,используйте вместо этого `CONFLICTS`>>. `CONFLICTS` сам установит значение `IGNORE`.
+Если порт будет конфликтовать с уже установленным портом (например, если они устанавливают файл в то же место, но с иным функциональным назначением), то crossref:makefiles[conflicts,используйте вместо этого `CONFLICTS`]. `CONFLICTS` сам установит значение `IGNORE`.
====
-* Если порт нужно пометить как `IGNORE` только на некоторых архитектурах, для этого есть две другие удобные переменные, которые автоматически установят для вас значения: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:
-+
+[[dads-noinstall-notes]]
+=== Заметки о реализации
+
+Не заключайте значения переменных `BROKEN`, `IGNORE` и связанных с ними в кавычки. Из-за способа отображения информации пользователю, формулировка сообщений для каждой переменной отличается:
+
[.programlisting]
....
-ONLY_FOR_ARCHS= i386 amd64
+BROKEN= fails to link with base -lcrypto
....
-+
[.programlisting]
....
-NOT_FOR_ARCHS= ia64 sparc64
+IGNORE= unsupported on recent versions
....
-+
-Собственное сообщение `IGNORE` можно задать с использованием `ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Отдельно для каждой архитектуры это возможно с использованием `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`.
-* Если порт загружает и устанавливает исполняемые файлы i386, то следует установить `IA32_BINARY_PORT`. Если эта переменная установлена, будет выполнена проверка доступности каталога [.filename]#/usr/lib32# для библиотек версии IA32 и поддержки IA32 в ядре. При невыполнении любого из этих условий будет автоматически установлена переменная `IGNORE`.
-
-[[dads-noinstall-notes]]
-=== Замечания по реализации
-
-Строки не следует брать в кавычки. Также построение строки должно несколько различаться из-за способа отображения информации пользователю. Примеры:
+и в результате `make describe` выведен информацию в таком виде :
[.programlisting]
....
-BROKEN= fails to link with base -lcrypto
+===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.
....
[.programlisting]
....
-IGNORE= unsupported on recent versions
+===> foobar-0.1 is unsupported on recent versions.
....
-получаемые в результате следующего вывода `make describe`:
+[[dads-arch]]
+== Архитектурные соображения
+
+[[dads-arch-general]]
+=== Общие замечания об архитектурах
+
+FreeBSD работает на гораздо большем количестве архитектур процессоров, чем только хорошо известные x86-совместимые. Некоторые порты имеют ограничения, характерные для одной или нескольких из этих архитектур.
+
+Для списка поддерживаемых архитектур выполните:
[.programlisting]
....
-===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.
+cd ${SRCDIR}; make targets
....
+Значения отображаются в форме `TARGET`/`TARGET_ARCH`. Переменная только для чтения `ARCH` в ports устанавливается на основе значения `TARGET_ARCH`. [.filename]##Makefile## в портах должны проверять значение этой переменной.
+
+[[dads-arch-neutral]]
+=== Пометка порта как архитектурно нейтрального
+
+Порты, которые не имеют зависимых от архитектуры файлов или требований, определяются установкой `NO_ARCH=yes`.
+
+Пакеты, собранные из таких портов, имеют строку архитектуры, оканчивающуюся на `:*` (архитектура с подстановочным символом), в отличие от, например, `freebsd:13:x86:64` (архитектура amd64).
+
+[NOTE]
+====
+`NO_ARCH` предназначен для указания того, что нет необходимости собирать пакет для каждой из поддерживаемых архитектур. Цель состоит в том, чтобы сократить количество ресурсов, затрачиваемых на сборку и распространение пакетов, таких как сетевой трафик и дисковое пространство на зеркалах и на носителях дистрибутива. Однако в настоящее время наша инфраструктура пакетов (например, менеджеры пакетов, зеркала и сборщики пакетов) не настроена для полного использования преимуществ `NO_ARCH`.
+====
+
+[[dads-arch-ignore]]
+=== Пометка порта как игнорируемого только на определенных архитектурах
+
+* Чтобы пометить порт как ``IGNORE`` только для определенных архитектур, существуют две другие удобные переменные, которые автоматически устанавливают `IGNORE`: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:
++
[.programlisting]
....
-===> foobar-0.1 is unsupported on recent versions.
+ONLY_FOR_ARCHS= i386 amd64
+....
++
+[.programlisting]
+....
+NOT_FOR_ARCHS= ia64 sparc64
....
++
+Пользовательское сообщение `IGNORE` можно задать с помощью `ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Для отдельных архитектур возможны записи с `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`.
+
+[[dads-arch-i386]]
+* Если порт загружает и устанавливает бинарные файлы i386, установите `IA32_BINARY_PORT`. Если эта переменная задана, [.filename]#/usr/lib32# должен присутствовать для IA32-версий библиотек, а ядро должно поддерживать совместимость с IA32. Если одно из этих двух условий не выполняется, `IGNORE` будет установлен автоматически.
+
+[[dads-arch-cluster]]
+=== Специфические аспекты для кластеров
+
+* Некоторые порты пытаются оптимизировать себя под конкретную машину, на которой они собираются, указывая компилятору `-march=native`. Этого следует избегать: либо добавить этот параметр в опцию, отключенную по умолчанию, либо удалить его полностью.
++
+В противном случае стандартный пакет, созданный кластером сборки, может не запускаться на каждой машине с данной `ARCH`.
[[dads-deprecated]]
== Пометка порта на удаление с `DEPRECATED` или `EXPIRATION_DATE`
@@ -345,7 +400,12 @@ IGNORE= unsupported on recent versions
Переменную `DEPRECATED` можно установить без использования `EXPIRATION_DATE` (в частности, при рекомендации новой версии порта), но обратный порядок не имеет никакого смысла.
-Не существует устоявшейся политики, как долго следует продолжать уведомления. Текущая практика дает около месяца для решения проблем безопасности и два месяца для проблем построения. Это также дает немного времени на исправление проблем любым заинтересованным коммиттерам.
+[NOTE]
+====
+При пометке порта как `DEPRECATED`, если существуют альтернативные порты, которые можно использовать вместо устаревающего, удобно упомянуть их в сообщении коммита.
+====
+
+Не существует установленного правила о том, насколько заранее нужно уведомлять. Текущая практика предполагает один месяц для проблем, связанных с безопасностью, и два месяца для проблем сборки. Это также дает заинтересованным коммиттерам немного времени на исправление проблем.
[[dads-dot-error]]
== Избегайте использования конструкции `.error`
@@ -358,6 +418,7 @@ IGNORE= unsupported on recent versions
.Как избегать использования `.error`
[example]
====
+
Из следующих двух вариантов строки файла [.filename]#Makefile# первый приведёт к неудачному завершению работы `make index`, а второй - нет:
[.programlisting]
@@ -373,7 +434,7 @@ IGNORE=option is not supported
====
[[dads-sysctl]]
-== Использование [.filename]#sysctl#
+== Использование sysctl
Использование [.filename]#sysctl# не рекомендуется, кроме как при выполнении целей. Это вызвано тем, что вычисление любых `makevar`, таких как во время команды `make index`, с необходимостью запуска этой команды, еще больше замедляет весь процесс.
@@ -382,28 +443,35 @@ man:sysctl[8] следует всегда использовать через п
[[dads-rerolling-distfiles]]
== Меняющиеся дистрибутивные файлы
-Иногда авторы программного обеспечения меняют содержимое выпущенных дистрибутивных файлов без смены названия. Вы должны проверять, что изменения являются официальными и произведены автором. В прошлом бывало, что дистрибутивный файл молча изменялся на сайтах загрузки с намерением нанести вред или скомпрометировать безопасность конечного пользователя.
+Иногда авторы программного обеспечения изменяют содержимое выпущенных дистрибутивных файлов, не меняя их названия. Убедитесь, что изменения официальны и были выполнены автором. В прошлом случалось, что дистрибутивный файл тихо изменялся на серверах загрузки с целью нанесения вреда или компрометации безопасности конечного пользователя.
-Отложите старый файл с дистрибутивом в сторону, загрузите новый, распакуйте его и сравните содержимое при помощи man:diff[1]. Если вы не видите ничего подозрительного, то можете обновить файл [.filename]#distinfo#. Убедитесь, что вы подытожили различия в вашем PR или описании коммита, чтобы другие люди были в курсе, что вы позаботились о том, что ничего плохого не случилось.
+Отложите старый distfile в сторону, загрузите новый, распакуйте их и сравните содержимое с помощью man:diff[1]. Если ничего подозрительного нет, обновите [.filename]#distinfo#.
-Возможно вы также захотите связаться с автором этого программного обеспечения для подтверждения изменений.
+[IMPORTANT]
+====
+Убедитесь, что вы выделили основные различия в PR и журнале коммитов, чтобы другие люди знали, что ничего плохого не произошло.
+====
-[[dads-avoiding-linuxisms]]
-== Избегание линуксизмов
+Связжитесь с автором этого программного обеспечения для подтверждения изменений.
-Не используйте [.filename]#/proc#, если доступны любые другие источники получения информации, например, `setprogname(argv[0])` в `main()` и man:getprogname[3], в случае если вы хотите "знать своё имя".
+[[dads-use-posix-standards]]
+== Используйте стандарты POSIX
-Не полагайтесь на поведение, не регламентированное POSIX.
+В большинстве случаев порты FreeBSD ожидают соответствия стандарту POSIX. Некоторые программы и системы сборки делают предположения, основанные на конкретной операционной системе или окружении, что может вызывать проблемы при использовании в порте.
-Не выполняйте запись временных меток в критических путях выполнения приложения, если можно обойтись без этого. Получение временных меток может быть медленным, в зависимости от степени точности используемых часов в операционной системе. Если временные метки действительно нужны, определите степень требуемой точности и используйте тот API, в котором документируется получение достаточной точности.
+Не используйте [.filename]#/proc#, если есть другие способы получить информацию. Например, `setprogname(argv[0])` в `main()`, а затем man:getprogname[3] для получения имени исполняемого файла.
-Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) работают намного быстрее в Linux(R) по сравнению с любой другой операционной системой из-за кеширования и используемой оптимизации vsyscall. Не полагайтесь на их дешевизну в критичных к производительности приложениях. В целом, старайтесь избегать системных вызовов там, где это возможно.
+Не полагайтесь на поведение, не документированное в POSIX.
+
+Не записывайте метки времени в критическом пути приложения, если оно работает и без них. Получение меток времени может быть медленным в зависимости от точности меток времени в ОС. Если метки времени действительно необходимы, определите, насколько точными они должны быть, и используйте API, которое, согласно документации, предоставляет только необходимую точность.
+
+Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) работают намного быстрее в Linux(R) по сравнению с любой другой операционной системой из-за кэширования и используемой оптимизации vsyscall. Не полагайтесь на их дешевизну в критичных к производительности приложениях. В целом, старайтесь избегать системных вызовов там, где это возможно.
Не полагайтесь на специфичное для Linux(R) поведение сокета. В частности, отличаются размеры буфера сокета по умолчанию (выполните вызов man:setsockopt[2] с `SO_SNDBUF` и `SO_RCVBUF`, и в то время как в Linux(R) при заполнении буфера сокета man:send[2] блокируется, FreeBSD возвращает ошибку и устанавливает `ENOBUFS` в качестве значения errno.
Если требуется рассчитывать на нестандартное поведение, инкапсулируйте это должным образом в общий для всех API с проверкой поведения на этапе конфигурации, и если требуемое поведение не найдено, прекращайте выполнение.
-Используйте http://www.freebsd.org/cgi/man.cgi[страницы справочника] для проверки, относится ли функция к интерфейсу POSIX (ищите раздел "STANDARDS" на странице справочника).
+Используйте https://www.freebsd.org/cgi/man.cgi[страницы справочника] для проверки, относится ли функция к интерфейсу POSIX (ищите раздел "STANDARDS" на странице справочника).
Не рассчитывайте на то, что в качестве [.filename]#/bin/sh# используется bash. Убедитесь, что командная строка, переданная в man:system[3], будет работать в POSIX-совместимой оболочке.
@@ -411,13 +479,9 @@ man:sysctl[8] следует всегда использовать через п
Проверьте, что используемые заголовочные файлы включены в POSIX или список, рекомендуемый страницей справочника, т.к. например, забыть подключить [.filename]#sys/types.h# - не такая уж проблема в Linux(R), однако это не так во FreeBSD.
-Компилируйте многопоточные приложения с ключом "-pthread", а не "-lpthread" или как-либо ещё.
-
[[dads-misc]]
== Разное
Файлы [.filename]#pkg-descr# и [.filename]#pkg-plist# должны проверяться дважды. Если вы пересматриваете порт и думаете, что его можно описать иначе, сделайте это.
-Пожалуйста, не создавайте дополнительных копий лицензии GNU General Public License в нашей системе.
-
Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных распространителей ПО!
diff --git a/documentation/content/ru/books/porters-handbook/porting-dads/_index.po b/documentation/content/ru/books/porters-handbook/porting-dads/_index.po
new file mode 100644
index 0000000000..d277972fb0
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-dads/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-26 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-dads_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Список распространённых рекомендаций и ошибок, встречающихся в процессе портирования на FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. Dos and Don'ts"
+msgstr "Глава 13. Что делать нужно, и что делать нельзя"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:14
+#, no-wrap
+msgid "Dos and Don'ts"
+msgstr "Что делать нужно, и что делать нельзя"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:60
+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 ""
+"Вот список часто встречающихся действий, которые нужно и которые нельзя "
+"делать во время процесса портирования. Проверьте порт по этому списку, и "
+"также проверьте порты в https://bugs.FreeBSD.org/search/[базе сообщений PR], "
+"которые присланы другими людьми. Присылайте любые комментарии о портах, "
+"которые вы проверили, так, как это описано в статье о extref:{contributing}"
+"[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов "
+"в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что "
+"вы знаете, что делаете."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:62
+#, no-wrap
+msgid "`WRKDIR`"
+msgstr "`WRKDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:66
+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 ""
+"Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является "
+"единственным местом, которое гарантированно будет доступно для записи во "
+"время построения порта (обратитесь к главе об extref:{handbook}[установке "
+"портов с CDROM, PORTS-CD] за примером построения портов из дерева, "
+"доступного только для чтения). Если вам нужно изменить какой-либо из файлов "
+"[.filename]##pkg-*##, сделайте это, crossref:pkg-files[pkg-"
+"names,переопределив переменную], но не перезаписывая их."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:68
+#, no-wrap
+msgid "`WRKDIRPREFIX`"
+msgstr "`WRKDIRPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:73
+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 ""
+"Добейтесь того, чтобы ваш порт принимал во внимание значение переменной "
+"`WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если "
+"вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его "
+"правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/"
+"name/work#, а не [.filename]#PORTSDIR/subdir/work# или "
+"[.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное. Кроме того, "
+"если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `$"
+"{WRKDIRPREFIX}${.CURDIR}`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:75
+#, no-wrap
+msgid "Differentiating Operating Systems and OS Versions"
+msgstr "Различение операционных систем и версий ОС"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:79
+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 ""
+"Вы можете встретиться с кодом, который требует модификаций или условной "
+"компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. "
+"Предпочтительным способом отделения кода для версий FreeBSD является "
+"использование макросов {freebsd-version} и {freebsd}, определённых в https://"
+"cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. Если этот файл не "
+"подключен, добавьте код"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:83
+#, no-wrap
+msgid "#include <sys/param.h>\n"
+msgstr "#include <sys/param.h>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:86
+msgid "to the proper place in the [.filename]#.c# file."
+msgstr "в нужном месте файла [.filename]#.c#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:89
+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 ""
+"{freebsd} определён во всех версиях FreeBSD в качестве старшего номера "
+"версии системы. Например, в FreeBSD 9.x {freebsd} определён со значением `9`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:97
+#, 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 ""
+"#if __FreeBSD__ >= 9\n"
+"# if __FreeBSD_version >= 901000\n"
+"\t /* 9.1+ release specific code here */\n"
+"# endif\n"
+"#endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:100
+msgid ""
+"A complete list of `{freebsd-version}` values is available in "
+"crossref:versions[versions,__FreeBSD_version Values]."
+msgstr ""
+"Полный список значений `{freebsd-version}` доступен в "
+"crossref:versions[versions,Значения __FreeBSD_version]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:102
+#, no-wrap
+msgid "Writing Something After bsd.port.mk"
+msgstr "Написание чего-либо после bsd.port.mk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:106
+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 ""
+"Не пишите ничего после строки `.include <bsd.port.mk>`. Этой строки можно "
+"избежать, включив в где-то в середину вашего файла [.filename]#Makefile# "
+"файл [.filename]#bsd.port.pre.mk#, и файл [.filename]#bsd.port.post.mk# в "
+"конец."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:110
+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 ""
+"Вам нужно включить либо пару файлов [.filename]#bsd.port.pre.mk#/"
+"[.filename]#bsd.port.post.mk#, либо только [.filename]#bsd.port.mk#; не "
+"используйте оба этих метода одновременно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:113
+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 ""
+"В файле [.filename]#bsd.port.pre.mk# определяются лишь несколько переменных, "
+"которые могут быть использованы в тестах из файла [.filename]#Makefile#, в "
+"файле [.filename]#bsd.port.post.mk# заданы остальные."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:115
+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 ""
+"Вот некоторые важные переменные, определенные в файле "
+"[.filename]#bsd.port.pre.mk# (это не полный список, для выяснения полного "
+"списка прочтите, пожалуйста, сам файл [.filename]#bsd.port.mk#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:120
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:122
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:123
+#, no-wrap
+msgid "`ARCH`"
+msgstr "`ARCH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:125
+#, no-wrap
+msgid "The architecture as returned by `uname -m` (for example, `i386`)"
+msgstr "Архитектура машины в виде, получаемом по команде `uname -m` (например, `i386`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:126
+#, no-wrap
+msgid "`OPSYS`"
+msgstr "`OPSYS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:128
+#, no-wrap
+msgid "The operating system type, as returned by `uname -s` (for example, `FreeBSD`)"
+msgstr "Тип операционной системы, получаемый по команде `uname -s` (например, `FreeBSD`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:129
+#, no-wrap
+msgid "`OSREL`"
+msgstr "`OSREL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:131
+#, no-wrap
+msgid "The release version of the operating system (for example, `2.1.5` or `2.2.7`)"
+msgstr "Версия релиза операционной системы (например, `2.1.5` или `2.2.7`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:132
+#, no-wrap
+msgid "`OSVERSION`"
+msgstr "`OSVERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:134
+#, no-wrap
+msgid "The numeric version of the operating system; the same as crossref:versions[versions,`{freebsd-version}`]."
+msgstr "Версия операционной системы в виде числа, та же, что и crossref:versions[versions,`{freebsd-version}`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:135
+#, no-wrap
+msgid "`LOCALBASE`"
+msgstr "`LOCALBASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:137
+#, no-wrap
+msgid "The base of the \"local\" tree (for example, `/usr/local`)"
+msgstr "Корень дерева \"local\" (например, `/usr/local`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:138
+#, no-wrap
+msgid "`PREFIX`"
+msgstr "`PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:139
+#, no-wrap
+msgid "Where the port installs itself (see crossref:testing[porting-prefix,more on `PREFIX`])."
+msgstr "Куда, собственно, устанавливается порт (обратитесь к crossref:testing[porting-prefix,подробной информации о `PREFIX`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:144
+msgid ""
+"When `MASTERDIR` is needed, always define it before including "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Если вы задаете переменную `MASTERDIR`, делайте это до подключения "
+"[.filename]#bsd.port.pre.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:147
+msgid ""
+"Here are some examples of things that can be added after "
+"[.filename]#bsd.port.pre.mk#:"
+msgstr ""
+"Вот несколько примеров того, что вы можете написать после "
+"[.filename]#bsd.port.pre.mk#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:154
+#, 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 ""
+"# 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:157
+msgid "Always use tab instead of spaces after `BROKEN=`."
+msgstr ""
+"Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:159
+#, no-wrap
+msgid "Use the `exec` Statement in Wrapper Scripts"
+msgstr "Использование выражения `exec` в сценариях обёртках"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:164
+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 ""
+"Если порт устанавливает сценарий на языке shell, который служит для запуска "
+"другой программы, и если запуск этой программы является последним действием "
+"сценария, убедитесь, что запуск программы производится с использованием "
+"выражения `exec`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:169
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar \"$@\"\n"
+msgstr ""
+"#!/bin/sh\n"
+"exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar \"$@\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:174
+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 ""
+"Выражение `exec` заменяет процесс сценария на указанную программу. Если "
+"`exec` опущен, то процесс сценария во время работы программы остается в "
+"памяти, бесполезно потребляя системные ресурсы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:176
+#, no-wrap
+msgid "Do Things Rationally"
+msgstr "Поступайте разумно"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:181
+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 ""
+"Файл [.filename]#Makefile# должен выполнять действия просто и небеспричинно. "
+"Если вы можете сделать что-то на несколько строк короче или более "
+"читабельно, сделайте это. В качестве примеров можно привести использование "
+"конструкций `.if` утилиты make вместо соответствующей конструкции `if` "
+"командного процессора, ненужность переопределения цели `do-extract` при "
+"возможности переопределения `EXTRACT*` и использование `GNU_CONFIGURE` "
+"вместо `CONFIGURE_ARGS += --prefix=${PREFIX}`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:184
+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 ""
+"Если вы обнаружите, что для выполнения чего-то приходится писать много "
+"нового кода, то, пожалуйста, просмотрите файл [.filename]#bsd.port.mk# на "
+"предмет того, не содержит ли он решение именно вашей проблемы. Хотя его "
+"трудно читать, имеется много проблем, выглядящих сложными, для которых файл "
+"[.filename]#bsd.port.mk# уже содержит быстрое решение."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:186
+#, no-wrap
+msgid "Respect Both `CC` and `CXX`"
+msgstr "Относитесь внимательно как к `CC`, так и `CXX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:192
+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 ""
+"Порт должен принимать во внимание как переменную `CC`, так и `CXX`. Под этим "
+"мы подразумеваем, что порт ни в коем случае не должен устанавливать значения "
+"этих переменных, переопределяя имеющиеся значения; вместо этого можно "
+"добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры "
+"построения, относящиеся ко всем портам, могут быть заданы глобально."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:194
+msgid ""
+"If the port does not respect these variables, please add `NO_PACKAGE=ignores "
+"either cc or cxx` to the [.filename]#Makefile#."
+msgstr ""
+"Если порт не учитывает значения этих переменных, добавьте строку "
+"`NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:197
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting both `CC` and "
+"`CXX`. Note the `?=`:"
+msgstr ""
+"Далее следует пример файла [.filename]#Makefile#, использующего как "
+"переменную `CC`, так и `CXX`. Обратите внимание на использование символов `?"
+"=`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:201
+#, no-wrap
+msgid "CC?= gcc\n"
+msgstr "CC?= gcc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:206
+#, no-wrap
+msgid "CXX?= g++\n"
+msgstr "CXX?= g++\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:209
+msgid "Here is an example which respects neither `CC` nor `CXX`:"
+msgstr "Вот пример, в котором не принимаются во внимание ни `CC`, ни `CXX`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:213
+#, no-wrap
+msgid "CC= gcc\n"
+msgstr "CC= gcc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:218
+#, no-wrap
+msgid "CXX= g++\n"
+msgstr "CXX= g++\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:223
+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 ""
+"В системах FreeBSD обе переменные `CC` и `CXX` могут быть определены в файле "
+"[.filename]#/etc/make.conf#. В первом примере задаётся значение, если оно "
+"ранее не было определено в [.filename]#/etc/make.conf#, что сохраняет любые "
+"определения, данные на уровне системы в целом. Второй пример переопределяет "
+"всё, что было задано ранее."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:225
+#, no-wrap
+msgid "Respect `CFLAGS`"
+msgstr "Относитесь внимательно к `CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:231
+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 ""
+"Порт должен учитывать переменную `CFLAGS`. Под этим мы подразумеваем, что "
+"порт ни в коем случае не должен устанавливать значения этой переменной, "
+"переопределяя имеющиеся значения; вместо этого можно добавлять нужные "
+"значения к уже имеющимся. Это связано с тем, что параметры построения, "
+"относящиеся ко всем портам, могут быть заданы глобально."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:233
+msgid ""
+"If it does not, please add `NO_PACKAGE=ignores cflags` to the "
+"[.filename]#Makefile#."
+msgstr ""
+"Если порт не учитывает значения этой переменной, добавьте строку "
+"`NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:235
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting `CFLAGS`. Note the "
+"`+=`:"
+msgstr ""
+"Далее следует пример файла [.filename]#Makefile#, использующего переменную "
+"`CFLAGS`. Обратите внимание на использование символов `+=`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:239
+#, no-wrap
+msgid "CFLAGS+= -Wall -Werror\n"
+msgstr "CFLAGS+= -Wall -Werror\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:242
+msgid "Here is an example which does not respect `CFLAGS`:"
+msgstr "А вот пример, в котором не учитывается значение переменной `CFLAGS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:246
+#, no-wrap
+msgid "CFLAGS= -Wall -Werror\n"
+msgstr "CFLAGS= -Wall -Werror\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:251
+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 ""
+"В системе FreeBSD переменная `CFLAGS` определена в файле [.filename]#/etc/"
+"make.conf#. В первом примере к переменной `CFLAGS` добавляются "
+"дополнительные флаги, при этом сохраняются все определения, данные ранее на "
+"уровне системы. Во втором примере всё, что было задано ранее, игнорируется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:255
+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 ""
+"Из сторонних файлов [.filename]#Makefile# следует удалить флаги оптимизации. "
+"Общесистемные флаги оптимизации находятся в системной переменной `CFLAGS`. "
+"Пример из немодифицированного [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:259
+#, no-wrap
+msgid "CFLAGS= -O3 -funroll-loops -DHAVE_SOUND\n"
+msgstr "CFLAGS= -O3 -funroll-loops -DHAVE_SOUND\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:262
+msgid ""
+"Using system optimization flags, the [.filename]#Makefile# would look "
+"similar to this example:"
+msgstr ""
+"При использовании системных флагов оптимизации [.filename]#Makefile# станет "
+"похожим на следующий пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:266
+#, no-wrap
+msgid "CFLAGS+= -DHAVE_SOUND\n"
+msgstr "CFLAGS+= -DHAVE_SOUND\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:269
+#, no-wrap
+msgid "Verbose Build Logs"
+msgstr "Подробные логи сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:273
+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:275
+msgid "Non-informative build log example (bad):"
+msgstr "Пример неинформативного лога сборки (плохой):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:281
+#, no-wrap
+msgid ""
+" CC source1.o\n"
+" CC source2.o\n"
+" CCLD someprogram\n"
+msgstr ""
+" CC source1.o\n"
+" CC source2.o\n"
+" CCLD someprogram\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:284
+msgid "Verbose build log example (good):"
+msgstr "Пример подробного журнала сборки (хороший):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:290
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:294
+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 ""
+"Некоторые системы сборки, такие как CMake, ninja и GNU configure, настроены "
+"на подробное ведение журнала в рамках инфраструктуры портов. В других "
+"случаях портам могут потребоваться индивидуальные изменения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:296
+#, no-wrap
+msgid "Feedback"
+msgstr "Обратная связь"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:300
+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:302
+#, no-wrap
+msgid "README.html"
+msgstr "README.html"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:306
+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 ""
+"[.filename]#README.html# не является частью порта и генерируется при помощи "
+"`make readme`. Не включайте этот файл в патчи или коммиты."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:310
+msgid ""
+"If `make readme` fails, make sure that the default value of `ECHO_MSG` has "
+"not been modified by the port."
+msgstr ""
+"Если не удается выполнить `make readme`, убедитесь, что значение по "
+"умолчанию `ECHO_MSG` не изменено внутри порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:313
+#, no-wrap
+msgid "Marking a Port Not Installable with `BROKEN`, `FORBIDDEN`, or `IGNORE`"
+msgstr "Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:320
+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 ""
+"В некоторых случаях пользователи не должны допускаться к установке порта. "
+"Для того, чтобы сообщить пользователю, что порт не следует устанавливать, "
+"имеется несколько `make`-переменных, которые могут быть использованы в файле "
+"[.filename]#Makefile# порта. Значения следующих `make`-переменных будут "
+"причиной, возвращаемой пользователям, по которой порт отказывает в "
+"установке. Пожалуйста, используйте корректные `make`-переменные, так как "
+"каждая переменная make передает абсолютно различный смысл как для "
+"пользователей, так и для автоматизированных систем, которые полагаются на "
+"файлы [.filename]#Makefile#, таких как crossref:keeping-up[build-"
+"cluster,кластер построения портов], crossref:keeping-"
+"up[freshports,FreshPorts]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:322
+#, no-wrap
+msgid "Variables"
+msgstr "Переменные"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:325
+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 ""
+"`BROKEN` предназначена для портов, которые в настоящее время не "
+"компилируются, не устанавливаются или не удаляются правильно. Следует "
+"использовать, когда проблема считается временной."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:328
+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:330
+msgid "For instance, use `BROKEN` when a port:"
+msgstr "В частности, используйте `BROKEN`, когда порт:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:332
+msgid "does not compile"
+msgstr "не компилируется"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:333
+msgid "fails its configuration or installation process"
+msgstr "выполняет со сбоем конфигурирование или процесс установки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:334
+msgid "installs files outside of [.filename]#${PREFIX}#"
+msgstr "устанавливает файлы вовне [.filename]#${PREFIX}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:335
+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:336
+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:338
+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 ""
+"`FORBIDDEN` используется для портов, которые содержат уязвимости в "
+"информационной безопасности или являются потенциально вредными в плане "
+"обеспечения информационной безопасности системы FreeBSD при установке "
+"данного порта (например: заведомо небезопасная программа или программа, "
+"которая предоставляет легко взламываемые сервисы). Порты должны помечаться "
+"как `FORBIDDEN`, как только в конкретном программном обеспечении "
+"обнаружилась уязвимость, но обновление выпущено не было. В идеальном случае "
+"порты должны обновляться максимально быстро после обнаружения уязвимости, "
+"чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь репутацию "
+"безопасной системы), однако иногда случается значительный временной разрыв "
+"между обнаружением уязвимости и выходом обновлённого релиза уязвимого "
+"программного обеспечения. Не помечайте порт как `FORBIDDEN`, если причина не "
+"вызвана соображениями информационной безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:339
+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 ""
+"`IGNORE` предназначена для портов, которые не должны строиться по какой-либо "
+"другой причине. Следует использовать для портов, в случае когда проблема "
+"считается структурной. Кластер построения ни при каких условиях не будет "
+"строить порты, помеченные как `IGNORE`. В частности, используйте `IGNORE`, "
+"когда порт:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:341
+msgid "does not work on the installed version of FreeBSD"
+msgstr "не работает на установленной версии FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:342
+msgid ""
+"has a distfile which may not be automatically fetched due to licensing "
+"restrictions"
+msgstr ""
+"имеет distfile, который не может быть автоматически загружен из-за "
+"ограничений лицензирования"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:343
+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 ""
+"не работает с некоторыми другими установленными портами (например, порт "
+"зависит от package:www/drupal7[], но установлен package:www/drupal8[])"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:348
+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 ""
+"Если порт будет конфликтовать с уже установленным портом (например, если они "
+"устанавливают файл в то же место, но с иным функциональным назначением), то "
+"crossref:makefiles[conflicts,используйте вместо этого `CONFLICTS`]. "
+"`CONFLICTS` сам установит значение `IGNORE`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:351
+#, no-wrap
+msgid "Implementation Notes"
+msgstr "Заметки о реализации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:355
+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 ""
+"Не заключайте значения переменных `BROKEN`, `IGNORE` и связанных с ними в "
+"кавычки. Из-за способа отображения информации пользователю, формулировка "
+"сообщений для каждой переменной отличается:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:359
+#, no-wrap
+msgid "BROKEN=\tfails to link with base -lcrypto\n"
+msgstr "BROKEN=\tfails to link with base -lcrypto\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:364
+#, no-wrap
+msgid "IGNORE=\tunsupported on recent versions\n"
+msgstr "IGNORE=\tunsupported on recent versions\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:367
+msgid "resulting in this output from `make describe`:"
+msgstr "и в результате `make describe` выведен информацию в таком виде :"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:371
+#, no-wrap
+msgid "===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.\n"
+msgstr "===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:376
+#, no-wrap
+msgid "===> foobar-0.1 is unsupported on recent versions.\n"
+msgstr "===> foobar-0.1 is unsupported on recent versions.\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:379
+#, no-wrap
+msgid "Architectural Considerations"
+msgstr "Архитектурные соображения"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:382
+#, no-wrap
+msgid "General Notes on Architectures"
+msgstr "Общие замечания об архитектурах"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:386
+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 ""
+"FreeBSD работает на гораздо большем количестве архитектур процессоров, чем "
+"только хорошо известные x86-совместимые. Некоторые порты имеют ограничения, "
+"характерные для одной или нескольких из этих архитектур."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:388
+msgid "For the list of supported architectures, run:"
+msgstr "Для списка поддерживаемых архитектур выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:392
+#, no-wrap
+msgid "cd ${SRCDIR}; make targets\n"
+msgstr "cd ${SRCDIR}; make targets\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:397
+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 ""
+"Значения отображаются в форме `TARGET`/`TARGET_ARCH`. Переменная только для "
+"чтения `ARCH` в ports устанавливается на основе значения `TARGET_ARCH`. "
+"[.filename]##Makefile## в портах должны проверять значение этой переменной."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:399
+#, no-wrap
+msgid "Marking a Port as Architecture Neutral"
+msgstr "Пометка порта как архитектурно нейтрального"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:402
+msgid ""
+"Ports that do not have any architecture-dependent files or requirements are "
+"identified by setting `NO_ARCH=yes`."
+msgstr ""
+"Порты, которые не имеют зависимых от архитектуры файлов или требований, "
+"определяются установкой `NO_ARCH=yes`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:404
+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 ""
+"Пакеты, собранные из таких портов, имеют строку архитектуры, оканчивающуюся "
+"на `:*` (архитектура с подстановочным символом), в отличие от, например, "
+"`freebsd:13:x86:64` (архитектура amd64)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:410
+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 ""
+"`NO_ARCH` предназначен для указания того, что нет необходимости собирать "
+"пакет для каждой из поддерживаемых архитектур. Цель состоит в том, чтобы "
+"сократить количество ресурсов, затрачиваемых на сборку и распространение "
+"пакетов, таких как сетевой трафик и дисковое пространство на зеркалах и на "
+"носителях дистрибутива. Однако в настоящее время наша инфраструктура пакетов "
+"(например, менеджеры пакетов, зеркала и сборщики пакетов) не настроена для "
+"полного использования преимуществ `NO_ARCH`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:413
+#, 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:416
+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 ""
+"Чтобы пометить порт как ``IGNORE`` только для определенных архитектур, "
+"существуют две другие удобные переменные, которые автоматически "
+"устанавливают `IGNORE`: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:420
+#, no-wrap
+msgid "ONLY_FOR_ARCHS=\ti386 amd64\n"
+msgstr "ONLY_FOR_ARCHS=\ti386 amd64\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:425
+#, no-wrap
+msgid "NOT_FOR_ARCHS=\tia64 sparc64\n"
+msgstr "NOT_FOR_ARCHS=\tia64 sparc64\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:429
+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 ""
+"Пользовательское сообщение `IGNORE` можно задать с помощью "
+"`ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Для отдельных архитектур "
+"возможны записи с `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:432
+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 ""
+"Если порт загружает и устанавливает бинарные файлы i386, установите "
+"`IA32_BINARY_PORT`. Если эта переменная задана, [.filename]#/usr/lib32# "
+"должен присутствовать для IA32-версий библиотек, а ядро должно поддерживать "
+"совместимость с IA32. Если одно из этих двух условий не выполняется, "
+"`IGNORE` будет установлен автоматически."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:434
+#, no-wrap
+msgid "Cluster-Specific Considerations"
+msgstr "Специфические аспекты для кластеров"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:437
+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 ""
+"Некоторые порты пытаются оптимизировать себя под конкретную машину, на "
+"которой они собираются, указывая компилятору `-march=native`. Этого следует "
+"избегать: либо добавить этот параметр в опцию, отключенную по умолчанию, "
+"либо удалить его полностью."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:439
+msgid ""
+"Otherwise, the default package produced by the build cluster might not run "
+"on every single machine of that `ARCH`."
+msgstr ""
+"В противном случае стандартный пакет, созданный кластером сборки, может не "
+"запускаться на каждой машине с данной `ARCH`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:441
+#, no-wrap
+msgid "Marking a Port for Removal with `DEPRECATED` or `EXPIRATION_DATE`"
+msgstr "Пометка порта на удаление с `DEPRECATED` или `EXPIRATION_DATE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:445
+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 ""
+"Помните, что `BROKEN` и `FORBIDDEN` будут использованы как временное "
+"средство, если порт не является работающим. Постоянно неработоспособные "
+"порты должны полностью удаляться из дерева."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:449
+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 ""
+"В подходящих ситуациях пользователи могут быть оповещены о предстоящем "
+"удалении через переменные `DEPRECATED` и `EXPIRATION_DATE`. Первое - это "
+"просто строка, сообщающая причину запланированного удаления порта; вторая "
+"является строкой в формате ISO 8601 (YYYY-MM-DD). Обе будут показаны "
+"пользователю."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:451
+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 ""
+"Переменную `DEPRECATED` можно установить без использования `EXPIRATION_DATE` "
+"(в частности, при рекомендации новой версии порта), но обратный порядок не "
+"имеет никакого смысла."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:457
+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 ""
+"При пометке порта как `DEPRECATED`, если существуют альтернативные порты, "
+"которые можно использовать вместо устаревающего, удобно упомянуть их в "
+"сообщении коммита."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:462
+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:464
+#, no-wrap
+msgid "Avoid Use of the `.error` Construct"
+msgstr "Избегайте использования конструкции `.error`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:468
+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 ""
+"Правильным способом подать сигнал для [.filename]#Makefile# о том, что порт "
+"не может быть установлен из-за какого-то внешнего фактора (например, "
+"пользователь указал недопустимую комбинацию опций построения), является "
+"установка непустого значения для `IGNORE`. Это значение будет сформатировано "
+"и показано пользователю во время `make install`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:474
+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 ""
+"Использование для этих целей `.error` является распространенной ошибкой. "
+"Проблема в том, что в этой ситуации будут повреждены многие инструменты "
+"автоматизации, работающие с деревом портов. Наибольшим образом это "
+"распространено при попытке построить [.filename]#/usr/ports/INDEX# (смотрите "
+"crossref:testing[make-describe, Запуск `make describe`]). Тем не менее, даже "
+"более простые команды, такие как `make maintainer`, в этом случае также "
+"вернут ошибку. Это не является приемлемым."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:476
+#, no-wrap
+msgid "How to Avoid Using `.error`"
+msgstr "Как избегать использования `.error`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:481
+msgid ""
+"The first of the next two [.filename]#Makefile# snippets will cause `make "
+"index` to fail, while the second one will not:"
+msgstr ""
+"Из следующих двух вариантов строки файла [.filename]#Makefile# первый "
+"приведёт к неудачному завершению работы `make index`, а второй - нет:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:485
+#, no-wrap
+msgid ".error \"option is not supported\"\n"
+msgstr ".error \"option is not supported\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:490
+#, no-wrap
+msgid "IGNORE=option is not supported\n"
+msgstr "IGNORE=option is not supported\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:495
+#, no-wrap
+msgid "Usage of sysctl"
+msgstr "Использование sysctl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:500
+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 ""
+"Использование [.filename]#sysctl# не рекомендуется, кроме как при выполнении "
+"целей. Это вызвано тем, что вычисление любых `makevar`, таких как во время "
+"команды `make index`, с необходимостью запуска этой команды, еще больше "
+"замедляет весь процесс."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:502
+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 ""
+"man:sysctl[8] следует всегда использовать через переменную `SYSCTL`, "
+"поскольку она содержит полностью заданный путь, и при необходимости может "
+"быть переопределена."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:504
+#, no-wrap
+msgid "Rerolling Distfiles"
+msgstr "Меняющиеся дистрибутивные файлы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:509
+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:512
+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 ""
+"Отложите старый distfile в сторону, загрузите новый, распакуйте их и "
+"сравните содержимое с помощью man:diff[1]. Если ничего подозрительного нет, "
+"обновите [.filename]#distinfo#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:516
+msgid ""
+"Be sure to summarize the differences in the PR and commit log, so that other "
+"people know that nothing bad has happened."
+msgstr ""
+"Убедитесь, что вы выделили основные различия в PR и журнале коммитов, чтобы "
+"другие люди знали, что ничего плохого не произошло."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:519
+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:521
+#, no-wrap
+msgid "Use POSIX Standards"
+msgstr "Используйте стандарты POSIX"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:525
+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 ""
+"В большинстве случаев порты FreeBSD ожидают соответствия стандарту POSIX. "
+"Некоторые программы и системы сборки делают предположения, основанные на "
+"конкретной операционной системе или окружении, что может вызывать проблемы "
+"при использовании в порте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:528
+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 ""
+"Не используйте [.filename]#/proc#, если есть другие способы получить "
+"информацию. Например, `setprogname(argv[0])` в `main()`, а затем "
+"man:getprogname[3] для получения имени исполняемого файла."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:530
+msgid "Do not rely on behavior that is undocumented by POSIX."
+msgstr "Не полагайтесь на поведение, не документированное в POSIX."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:534
+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 ""
+"Не записывайте метки времени в критическом пути приложения, если оно "
+"работает и без них. Получение меток времени может быть медленным в "
+"зависимости от точности меток времени в ОС. Если метки времени действительно "
+"необходимы, определите, насколько точными они должны быть, и используйте "
+"API, которое, согласно документации, предоставляет только необходимую "
+"точность."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:538
+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 ""
+"Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) "
+"работают намного быстрее в Linux(R) по сравнению с любой другой операционной "
+"системой из-за кэширования и используемой оптимизации vsyscall. Не "
+"полагайтесь на их дешевизну в критичных к производительности приложениях. В "
+"целом, старайтесь избегать системных вызовов там, где это возможно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:541
+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 ""
+"Не полагайтесь на специфичное для Linux(R) поведение сокета. В частности, "
+"отличаются размеры буфера сокета по умолчанию (выполните вызов "
+"man:setsockopt[2] с `SO_SNDBUF` и `SO_RCVBUF`, и в то время как в Linux(R) "
+"при заполнении буфера сокета man:send[2] блокируется, FreeBSD возвращает "
+"ошибку и устанавливает `ENOBUFS` в качестве значения errno."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:543
+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 ""
+"Если требуется рассчитывать на нестандартное поведение, инкапсулируйте это "
+"должным образом в общий для всех API с проверкой поведения на этапе "
+"конфигурации, и если требуемое поведение не найдено, прекращайте выполнение."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:545
+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 ""
+"Используйте https://www.freebsd.org/cgi/man.cgi[страницы справочника] для "
+"проверки, относится ли функция к интерфейсу POSIX (ищите раздел "
+"\"STANDARDS\" на странице справочника)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:548
+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 ""
+"Не рассчитывайте на то, что в качестве [.filename]#/bin/sh# используется "
+"bash. Убедитесь, что командная строка, переданная в man:system[3], будет "
+"работать в POSIX-совместимой оболочке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:550
+msgid ""
+"A list of common bashisms is available https://wiki.ubuntu.com/"
+"DashAsBinSh[here]."
+msgstr ""
+"Список основных bash-измов расположен https://wiki.ubuntu.com/"
+"DashAsBinSh[здесь]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:553
+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 ""
+"Проверьте, что используемые заголовочные файлы включены в POSIX или список, "
+"рекомендуемый страницей справочника, т.к. например, забыть подключить "
+"[.filename]#sys/types.h# - не такая уж проблема в Linux(R), однако это не "
+"так во FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:555
+#, no-wrap
+msgid "Miscellanea"
+msgstr "Разное"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:559
+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 ""
+"Файлы [.filename]#pkg-descr# и [.filename]#pkg-plist# должны проверяться "
+"дважды. Если вы пересматриваете порт и думаете, что его можно описать иначе, "
+"сделайте это."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:560
+msgid ""
+"Please be careful to note any legal issues! Do not let us illegally "
+"distribute software!"
+msgstr ""
+"Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных "
+"распространителей ПО!"
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 c5c89e657d..d4dd67a440 100644
--- a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 13. Примерный Makefile
+description: 'Образец Makefile, который можно использовать для создания нового порта FreeBSD'
+next: books/porters-handbook/order
+params:
+ path: /books/porters-handbook/porting-samplem/
prev: books/porters-handbook/porting-dads
-next: books/porters-handbook/keeping-up
showBookMenu: true
-weight: 13
-params:
- path: "/books/porters-handbook/porting-samplem/"
+tags: ["sample", "makefile"]
+title: 'Глава 14. Примерный Makefile'
+weight: 14
---
[[porting-samplem]]
-= Примерный [.filename]#Makefile#
+= Примерный Makefile
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 13
+:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
@@ -46,86 +48,55 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Вот примерный [.filename]#Makefile#, который можно использовать при создании нового порта. Обязательно удалите все дополнительные комментарии (те, которые в скобках)!
+Образец Makefile, который можно использовать для создания нового порта.
-Вам рекомендуется следовать этому формату (соблюдая порядок следования переменных, пустые строки между разделами, и так далее). Этот формат разработан для того, чтобы важная информация была легко найдена. Мы рекомендуем вам воспользоваться утилитой <<porting-portlint,portlint>> для проверки файла [.filename]#Makefile#.
+Вам рекомендуется следовать этому формату (соблюдая crossref:order[,порядок] следования переменных, пустые строки между разделами, и так далее). Этот формат разработан для того, чтобы важная информация была легко найдена. Обратитесь crossref:testing[, главе о тестировании], чтобы узнать больше о lint, утилитах для форматирования и проверки файла [.filename]#Makefile#.
[.programlisting]
....
-[заголовок...просто чтобы нам было легче идентифицировать порт.]
-# Created by: Satoshi Asami <asami@FreeBSD.org>
-[Необязательная строка Created by: содержит имя
-человека, создавшего первоначальную версию порта. Следует отметить,
-что за : следует пробел, но не символ табуляции. Если
-эта строка присутствует, будущие сопровождающие не должны её менять
-или удалять, кроме как по запросу первоначального автора.]
-
-# $FreeBSD$
-[ ^^^^^^^^^ Эта строка будет автоматически заменена на строчку RCS ID
-системой SVN при выполнении операции коммита в наше хранилище. При
-обновлении порта не приводите эту строку обратно к виду
-"$FreeBSD$". SVN сделает это автоматически.]
-
-[секция описания собственно порта и основного сервера - сначала всегда
- PORTNAME и PORTVERSION, за ним следует CATEGORIES, а затем
- MASTER_SITES, за которым может идти MASTER_SITE_SUBDIR.
- PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними.
- Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно,
- EXTRACT_ONLY.]
-PORTNAME= xdvi
-PORTVERSION= 18.2
+PORTNAME= xdvi <1>
+DISTVERSION= 18.2
CATEGORIES= print
-[не забывайте про завершающую косую черту ("/")!
- если вы не используете макросы MASTER_SITE_*]
-MASTER_SITES= ${MASTER_SITE_XCONTRIB}
-MASTER_SITE_SUBDIR= applications
+MASTER_SITES= ${MASTER_SITE_XCONTRIB} <2>
+MASTER_SITE_SUBDIR= applications
PKGNAMEPREFIX= ja-
DISTNAME= xdvi-pl18
-[задайте это, если исходный код поставляется не в виде
- стандартного файла ".tar.gz"]
-EXTRACT_SUFX= .tar.Z
+EXTRACT_SUFX= .tar.Z <3>
-[секция патчей -- может быть пустой]
-PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
+PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ <4>
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
+PATCH_DIST_STRIP= -p1 <5>
-[сопровождающий; *обязательное поле*! Это человек, который добровольно
- занимается обновлениями порта и неисправностями при построении, и которому
- пользователь может направлять вопросы и сообщения об ошибках. Для
- сохранения как можно более высокого качества Коллекции Портов мы больше
- не принимаем новые порты, назначенные на "ports@FreeBSD.org".]
-MAINTAINER= asami@FreeBSD.org
+MAINTAINER= asami@FreeBSD.org <6>
COMMENT= DVI Previewer for the X Window System
+WWW= http://xdvi.sourceforge.net/
+
+LICENSE= BSD2CLAUSE <7>
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= gs:print/ghostscript <8>
+
+USES= gmake <9>
-[зависимости -- могут быть пустыми]
-RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
-
-[этот раздел для остальных стандартных переменных из bsd.port.mk, кроме
- тех, что перечислены выше]
-[Если порт задает вопросы во время этапов настройки, построения,
- установки...]
-IS_INTERACTIVE= yes
-[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]
-WRKSRC= ${WRKDIR}/xdvi-new
-[Если патчи делались не относительно ${WRKSRC}, вам, может быть, не
- придется изменять эту переменную]
-PATCH_DIST_STRIP= -p1
-[Если порт требует скрипта "configure", генерируемого GNU-версией программы
- autoconf]
-GNU_CONFIGURE= yes
-[Если для построения порту требуется GNU-версия утилиты make, а не
- /usr/bin/make...]
-USES= gmake
-[Если это приложение X и требует запуска "xmkmf -a"...]
-USES= imake
-[и так далее]
-
-[В правилах ниже используются нестандартные переменные]
+<10>
+IS_INTERACTIVE= yes <11>
+WRKSRC= ${WRKDIR}/xdvi-new <12>
+GNU_CONFIGURE= yes <13>
+
+<14>
+OPTIONS_DEFINE= DOCS EXAMPLES FOO
+OPTIONS_DEFAULT=FOO
+OPTIONS_SUB= yes <15>
+
+FOO_DESC= Enable foo support
+FOO_CONFIGURE_ENABLE= foo
+
+<16>
MY_FAVORITE_RESPONSE= "yeah, right"
-[теперь специальные правила, в порядке их вызова]
+<17>
pre-fetch:
- я что-то выкачиваю, точно
+ i go fetch something, yeah
post-patch:
мне кое-что сделать после применения патча, великолепно
@@ -133,7 +104,24 @@ post-patch:
pre-install:
и потом еще кое-что перед установкой, ого
-[и, наконец, эпилог]
-
-.include <bsd.port.mk>
+.include <bsd.port.mk> <18>
....
+
+<1> Секция для описания самого порта и его главного сайта: первыми идут переменные PORTNAME и PORTVERSION или DISTVERSION*, на ними CATEGORIES, затем MASTER_SITES, после которой идет MASTER_SITE_SUBDIR. Если нужно, то после нее идут PKGNAMEPREFIX и PKGNAMESUFFIX. Затем следуют DISTNAME, EXTRACT_SUFX и/или DISTFILES, и уже потом, если нужно, EXTRACT_ONLY.
+<2> Не забывайте про завершающую косую черту (`/`), если вы не используете макросы MASTER_SITE_*.
+<3> Задайте это, если исходный код поставляется не в виде стандартного файла ".tar.gz".
+<4> Секция патчей — может быть пустой.
+<5> Если распространяемые патчи не были созданы относительно ${WRKSRC},возможно, это потребуется исправить вручную.
+<6> Сопровождающий; *обязательное поле*! Это человек, который добровольно занимается обновлениями порта и неисправностями при построении, и которому пользователь может направлять вопросы и сообщения об ошибках. Для сохранения как можно более высокого качества Коллекции Портов мы больше не принимаем новые порты, назначенные на "ports@FreeBSD.org".
+<7> Лицензия — не следует оставлять пустым.
+<8> Зависимости — могут быть пустыми.
+<9> Если порт требует GNU make вместо стандартного FreeBSD `make` (man:make[1]) для сборки. Например, некоторым приложениям X требуется выполнение `xmkmf -a`, в этом случае порту понадобится `USES=imake`.
+<10> Этот раздел посвящён другим стандартным переменным [.filename]#bsd.port.mk#, которые не относятся ни к одной из вышеперечисленных категорий.
+<11> Если порты задают интерактивные вопросы во время настройки, сборки, установки.
+<12> Если извлечение происходит в каталог, отличный от `DISTNAME`.
+<13> Если требуется запустить скрипт `configure`, сгенерированный GNU autoconf.
+<14> Этот раздел предназначен для настройки параметров портов.
+<15> Установите `OPTIONS_SUB`, если параметры изменят список файлов в crossref:plist[plist-sub, plist].
+<16> В правилах ниже используются нестандартные переменные.
+<17> Специальные правила, в порядке их вызова фреймворком портов.
+<18> Наконец, эпилог.
diff --git a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po
new file mode 100644
index 0000000000..9f10c99918
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po
@@ -0,0 +1,412 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-20 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-samplem_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Образец Makefile, который можно использовать для создания нового порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. A Sample Makefile"
+msgstr "Глава 14. Примерный Makefile"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:14
+#, no-wrap
+msgid "A Sample Makefile"
+msgstr "Примерный Makefile"
+
+#. 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."
+msgstr ""
+"Образец Makefile, который можно использовать для создания нового порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:56
+msgid ""
+"The format shown is the recommended one for crossref:order[, ordering] "
+"variables, empty lines between sections, and so on. This format is designed "
+"so that the most important information is easy to locate. Refer to "
+"crossref:testing[, the chapter about testing] to learn more about tools for "
+"linting, formatting, and checking the [.filename]#Makefile#."
+msgstr ""
+"Вам рекомендуется следовать этому формату (соблюдая crossref:order[,порядок] "
+"следования переменных, пустые строки между разделами, и так далее). Этот "
+"формат разработан для того, чтобы важная информация была легко найдена. "
+"Обратитесь crossref:testing[, главе о тестировании], чтобы узнать больше о "
+"lint, утилитах для форматирования и проверки файла [.filename]#Makefile#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:67
+#, no-wrap
+msgid ""
+"PORTNAME=\txdvi <1>\n"
+"DISTVERSION=\t18.2\n"
+"CATEGORIES=\tprint\n"
+"MASTER_SITES=\t${MASTER_SITE_XCONTRIB} <2>\n"
+"MASTER_SITE_SUBDIR=\tapplications\n"
+"PKGNAMEPREFIX=\tja-\n"
+"DISTNAME=\txdvi-pl18\n"
+"EXTRACT_SUFX=\t.tar.Z <3>\n"
+msgstr ""
+"PORTNAME=\txdvi <1>\n"
+"DISTVERSION=\t18.2\n"
+"CATEGORIES=\tprint\n"
+"MASTER_SITES=\t${MASTER_SITE_XCONTRIB} <2>\n"
+"MASTER_SITE_SUBDIR=\tapplications\n"
+"PKGNAMEPREFIX=\tja-\n"
+"DISTNAME=\txdvi-pl18\n"
+"EXTRACT_SUFX=\t.tar.Z <3>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:71
+#, no-wrap
+msgid ""
+"PATCH_SITES=\tftp://ftp.sra.co.jp/pub/X11/japanese/ <4>\n"
+"PATCHFILES=\txdvi-18.patch1.gz xdvi-18.patch2.gz\n"
+"PATCH_DIST_STRIP=\t-p1 <5>\n"
+msgstr ""
+"PATCH_SITES=\tftp://ftp.sra.co.jp/pub/X11/japanese/ <4>\n"
+"PATCHFILES=\txdvi-18.patch1.gz xdvi-18.patch2.gz\n"
+"PATCH_DIST_STRIP=\t-p1 <5>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:75
+#, no-wrap
+msgid ""
+"MAINTAINER=\tasami@FreeBSD.org <6>\n"
+"COMMENT=\tDVI Previewer for the X Window System\n"
+"WWW=\t\thttp://xdvi.sourceforge.net/\n"
+msgstr ""
+"MAINTAINER=\tasami@FreeBSD.org <6>\n"
+"COMMENT=\tDVI Previewer for the X Window System\n"
+"WWW=\t\thttp://xdvi.sourceforge.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:78
+#, no-wrap
+msgid ""
+"LICENSE=\tBSD2CLAUSE <7>\n"
+"LICENSE_FILE=\t${WRKSRC}/LICENSE\n"
+msgstr ""
+"LICENSE=\tBSD2CLAUSE <7>\n"
+"LICENSE_FILE=\t${WRKSRC}/LICENSE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:80
+#, no-wrap
+msgid "RUN_DEPENDS=\tgs:print/ghostscript <8>\n"
+msgstr "RUN_DEPENDS=\tgs:print/ghostscript <8>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:82
+#, no-wrap
+msgid "USES=\t\tgmake <9>\n"
+msgstr "USES=\t\tgmake <9>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:87
+#, no-wrap
+msgid ""
+"<10>\n"
+"IS_INTERACTIVE=\tyes <11>\n"
+"WRKSRC=\t\t${WRKDIR}/xdvi-new <12>\n"
+"GNU_CONFIGURE=\tyes <13>\n"
+msgstr ""
+"<10>\n"
+"IS_INTERACTIVE=\tyes <11>\n"
+"WRKSRC=\t\t${WRKDIR}/xdvi-new <12>\n"
+"GNU_CONFIGURE=\tyes <13>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:92
+#, no-wrap
+msgid ""
+"<14>\n"
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+"OPTIONS_DEFAULT=FOO\n"
+"OPTIONS_SUB=\tyes <15>\n"
+msgstr ""
+"<14>\n"
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+"OPTIONS_DEFAULT=FOO\n"
+"OPTIONS_SUB=\tyes <15>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:95
+#, no-wrap
+msgid ""
+"FOO_DESC=\t\tEnable foo support\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+msgstr ""
+"FOO_DESC=\t\tEnable foo support\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:98
+#, no-wrap
+msgid ""
+"<16>\n"
+"MY_FAVORITE_RESPONSE=\t\"yeah, right\"\n"
+msgstr ""
+"<16>\n"
+"MY_FAVORITE_RESPONSE=\t\"yeah, right\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:102
+#, no-wrap
+msgid ""
+"<17>\n"
+"pre-fetch:\n"
+"\ti go fetch something, yeah\n"
+msgstr ""
+"<17>\n"
+"pre-fetch:\n"
+"\ti go fetch something, yeah\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:105
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\ti need to do something after patch, great\n"
+msgstr ""
+"post-patch:\n"
+"\tмне кое-что сделать после применения патча, великолепно\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:108
+#, no-wrap
+msgid ""
+"pre-install:\n"
+"\tand then some more stuff before installing, wow\n"
+msgstr ""
+"pre-install:\n"
+"\tи потом еще кое-что перед установкой, ого\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:110
+#, no-wrap
+msgid ".include <bsd.port.mk> <18>\n"
+msgstr ".include <bsd.port.mk> <18>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:115
+msgid ""
+"Section to describe the port itself and the master site -- `PORTNAME` and "
+"`PORTVERSION` or the `DISTVERSION*` variables are always first, followed by "
+"`CATEGORIES`, and then `MASTER_SITES`, which can be followed by "
+"`MASTER_SITE_SUBDIR`. `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, if needed, will "
+"be after that. Then comes `DISTNAME`, `EXTRACT_SUFX` and/or `DISTFILES`, "
+"and then `EXTRACT_ONLY`, as necessary."
+msgstr ""
+"Секция для описания самого порта и его главного сайта: первыми идут "
+"переменные PORTNAME и PORTVERSION или DISTVERSION*, на ними CATEGORIES, "
+"затем MASTER_SITES, после которой идет MASTER_SITE_SUBDIR. Если нужно, то "
+"после нее идут PKGNAMEPREFIX и PKGNAMESUFFIX. Затем следуют DISTNAME, "
+"EXTRACT_SUFX и/или DISTFILES, и уже потом, если нужно, EXTRACT_ONLY."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:116
+msgid ""
+"Do not forget the trailing slash (`/`) if not using `MASTER_SITE_*` macros."
+msgstr ""
+"Не забывайте про завершающую косую черту (`/`), если вы не используете "
+"макросы MASTER_SITE_*."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:117
+msgid "Set this if the source is not in the standard \".tar.gz\" form."
+msgstr ""
+"Задайте это, если исходный код поставляется не в виде стандартного файла "
+"\".tar.gz\"."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:118
+msgid "Section for distributed patches -- can be empty."
+msgstr "Секция патчей — может быть пустой."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:119
+msgid ""
+"If the distributed patches were not made relative to `WRKSRC`, this may need "
+"to be tweaked."
+msgstr ""
+"Если распространяемые патчи не были созданы относительно ${WRKSRC},возможно, "
+"это потребуется исправить вручную."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:122
+msgid ""
+"Maintainer; *mandatory*! This is the person who is volunteering to handle "
+"port updates, build breakages, and to whom a users can direct questions and "
+"bug reports. To keep the quality of the Ports Collection as high as "
+"possible, we do not accept new ports that are assigned to "
+"\"ports@FreeBSD.org\"."
+msgstr ""
+"Сопровождающий; *обязательное поле*! Это человек, который добровольно "
+"занимается обновлениями порта и неисправностями при построении, и которому "
+"пользователь может направлять вопросы и сообщения об ошибках. Для сохранения "
+"как можно более высокого качества Коллекции Портов мы больше не принимаем "
+"новые порты, назначенные на \"ports@FreeBSD.org\"."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:123
+msgid "License -- should not be empty."
+msgstr "Лицензия — не следует оставлять пустым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:124
+msgid "Dependencies -- can be empty."
+msgstr "Зависимости — могут быть пустыми."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:126
+msgid ""
+"If the port requires GNU make instead of the default FreeBSD `make` "
+"(man:make[1]) to build. For example, some X applications require `xmkmf -a` "
+"to run, in which case the port would need `USES=imake`."
+msgstr ""
+"Если порт требует GNU make вместо стандартного FreeBSD `make` (man:make[1]) "
+"для сборки. Например, некоторым приложениям X требуется выполнение `xmkmf "
+"-a`, в этом случае порту понадобится `USES=imake`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:127
+msgid ""
+"This section is for other standard [.filename]#bsd.port.mk# variables that "
+"do not belong to any of the above."
+msgstr ""
+"Этот раздел посвящён другим стандартным переменным [.filename]#bsd.port.mk#, "
+"которые не относятся ни к одной из вышеперечисленных категорий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:128
+msgid ""
+"If the ports asks interactive questions during configure, build, install."
+msgstr ""
+"Если порты задают интерактивные вопросы во время настройки, сборки, "
+"установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:129
+msgid "If it extracts to a directory other than `DISTNAME`."
+msgstr "Если извлечение происходит в каталог, отличный от `DISTNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:130
+msgid ""
+"If it requires a `configure` script generated by GNU autoconf to be run."
+msgstr ""
+"Если требуется запустить скрипт `configure`, сгенерированный GNU autoconf."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:131
+msgid "This section is for handling ports options."
+msgstr "Этот раздел предназначен для настройки параметров портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:132
+msgid ""
+"Set `OPTIONS_SUB` if options will change the list of files in the "
+"crossref:plist[plist-sub, plist]."
+msgstr ""
+"Установите `OPTIONS_SUB`, если параметры изменят список файлов в "
+"crossref:plist[plist-sub, plist]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:133
+msgid "Non-standard variables to be used in the rules below."
+msgstr "В правилах ниже используются нестандартные переменные."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:134
+msgid "Special rules, in the order they are called by the ports framework."
+msgstr "Специальные правила, в порядке их вызова фреймворком портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:134
+msgid "Finally, the epilogue."
+msgstr "Наконец, эпилог."
+
+#~ 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 ""
+#~ "Вот примерный [.filename]#Makefile#, который можно использовать при "
+#~ "создании нового порта. Обязательно удалите все дополнительные комментарии "
+#~ "(те, которые в скобках)."
+
+#, 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 ""
+#~ "[Если для сборки требуется GNU make, а не /usr/bin/make...]\n"
+#~ "USES= gmake\n"
+#~ "[Если это приложение для X и требует выполнения команды \"xmkmf -a\"...]\n"
+#~ "USES= imake\n"
+
+#, 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 ""
+#~ "[Этот раздел предназначен для прочих стандартных переменных bsd.port.mk,\n"
+#~ " не относящихся к указанным выше категориям]\n"
+#~ "[Если программа задаёт вопросы во время настройки (configure), сборки (build) или установки (install)...]\n"
+#~ "IS_INTERACTIVE=\tyes\n"
+#~ "[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]\n"
+#~ "WRKSRC=\t\t${WRKDIR}/xdvi-new\n"
+#~ "[Если требуется выполнение сценария \"configure\", сгенерированного GNU autoconf.]\n"
+#~ "GNU_CONFIGURE=\tyes\n"
+#~ "[и так далее.]\n"
+
+#, 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 ""
+#~ "[Если для сборки требуются параметры, этот раздел предназначен для их настройки]\n"
+#~ "OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+#~ "OPTIONS_DEFAULT=\tFOO\n"
+#~ "[Если параметры влияют на список файлов в plist]\n"
+#~ "OPTIONS_SUB=yes\n"
+
+#, no-wrap
+#~ msgid "FOO_CONFIGURE_ENABLE=\tfoo\n"
+#~ msgstr "FOO_CONFIGURE_ENABLE=\tfoo\n"
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 9b04d921da..83be752dab 100644
--- a/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 1. Введение
-prev: books/porters-handbook/
+description: 'Почему добавляют программы в коллекцию портов FreeBSD'
next: books/porters-handbook/new-port
+params:
+ path: /books/porters-handbook/porting-why/
+prev: books/porters-handbook
showBookMenu: true
+tags: ["ports", "why porting"]
+title: 'Глава 1. Введение'
weight: 1
-params:
- path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/ru/books/porters-handbook/porting-why/_index.po b/documentation/content/ru/books/porters-handbook/porting-why/_index.po
new file mode 100644
index 0000000000..7cdf3c5595
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-why/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 12:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-why_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Почему добавляют программы в коллекцию портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Introduction"
+msgstr "Глава 1. Введение"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:14
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:54
+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 ""
+"Коллекция портов FreeBSD является способом, используемым практически каждым "
+"для установки приложений (\"портов\") на FreeBSD. Как и почти всё остальное "
+"во FreeBSD, эта система в основном является добровольно поддерживаемым "
+"начинанием. Важно иметь это в виду при чтении данного документа."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:56
+msgid ""
+"In FreeBSD, anyone may submit a new port, or volunteer to maintain an "
+"existing unmaintained port. No special commit privilege is needed."
+msgstr ""
+"Во FreeBSD каждый может прислать новый порт либо изъявить желание "
+"поддерживать существующий порт, если его никто ещё никто не поддерживает-вам "
+"не нужно иметь никаких особых привилегий на внесение изменений, чтобы это "
+"делать."
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 ea91baf3f8..27cbe1b0ec 100644
--- a/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 3. Быстрое портирование
-prev: books/porters-handbook/new-port
+description: 'Как быстро создать новый порт FreeBSD'
next: books/porters-handbook/slow-porting
+params:
+ path: /books/porters-handbook/quick-porting/
+prev: books/porters-handbook/new-port
showBookMenu: true
+tags: ["quick porting", "guide", "port", "ports collection", "how-to"]
+title: 'Глава 3. Быстрое портирование'
weight: 3
-params:
- path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
@@ -46,20 +48,20 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-В этом разделе описано, как создать новый порт на скорую руку. Во многих случаях этого бывает не достаточно, так что вам нужно будет прочитать документ дальше.
+В этом разделе описано, как быстро создать новый порт. Для случаев, когда этот быстрый метод не подходит, полный процесс "Медленного портирования" описан в разделе crossref:slow-porting[slow-porting,Медленное портирование].
Во-первых, скачайте оригинальный tar-файл и поместите его в каталог `DISTDIR`, который по умолчанию есть не что иное, как [.filename]#/usr/ports/distfiles#.
[NOTE]
====
-Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу.
+Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу — crossref:slow-porting[slow-porting,Медленное портирование].
====
[NOTE]
====
Перед началом портирования рекомендуется установить переменную man:make[1] `DEVELOPER` в [.filename]#/etc/make.conf#.
-[source,shell]
+[source, shell]
....
# echo DEVELOPER=yes >> /etc/make.conf
....
@@ -74,64 +76,48 @@ endif::[]
[.programlisting]
....
-# $FreeBSD$
-
PORTNAME= oneko
-PORTVERSION= 1.1b
+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>
....
-[NOTE]
-====
-В некоторых случаях в заголовке [.filename]#Makefile# существующего порта могут содержаться дополнительные строки, такие как название порта и дата его создания. Эта дополнительная информация была объявлена устаревшей и находится в процессе удаления.
-====
-
-Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки `$FreeBSD$`, она будет заполнена автоматически системой Subversion, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе <<porting-samplem,пример Makefile>>.
+Посмотрим, сможете ли вы его понять. Более подробный пример приведен в секции crossref:porting-samplem[porting-samplem,пример Makefile].
[[porting-desc]]
== Создание информационных файлов
Имеется два информационных файла, которые требуются для любого порта, вне зависимости от того, является ли он пакетом или нет. Это [.filename]#pkg-descr# и [.filename]#pkg-plist#. Префикс [.filename]#pkg-# отличает их от других файлов.
+[[porting-pkg-descr]]
=== [.filename]#pkg-descr#
Это более подробное краткое описание порта. От одного до нескольких абзацев, кратко описывающих, что представляет собой порт, будет достаточно.
[NOTE]
====
-Это _не_ руководство и не подробнейшее описание того, как использовать или компилировать порт! _Пожалуйста, будьте внимательны при копировании текста из [.filename]#README# или страниц справочника_; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы справочника выровнены пробелами, что особенно плохо смотрится с моноширинными шрифтами).
+Это _не_ руководство и не подробное описание того, как использовать или компилировать порт! _Пожалуйста, будьте осторожны при копировании из [.filename]#README# или manpage_. Очень часто они не содержат краткого описания порта или имеют неудобный формат. Например, manpages используют выравнивание по ширине, что особенно плохо выглядит с моноширинными шрифтами.
+
+С другой стороны, содержимое файла [.filename]#pkg-descr# должно быть длиннее, чем crossref:makefiles[makefile-comment,строка `COMMENT` из Makefile]. Оно должно более подробно объяснять, что собой представляет данный порт.
====
Хорошо составленный [.filename]#pkg-descr# описывает порт достаточно полно, чтобы пользователю не приходилось сверяться с документацией или посещать вебсайт для понимания того, что делает данное программное обеспечение, чем оно может быть полезно или какие хорошие функции у него имеются. Упоминание про определённые требования, такие как используемый графический инструментарий, тяжёлые зависимости, окружение для запуска или используемый язык программирования помогут пользователям определиться, будет ли этот порт для них работать.
-Включите сюда URL официальной домашней страницы Интернет. Перед _одним_ из сайтов (выберите основной) добавьте `WWW:` (с последующим единичным пробелом) для того, чтобы вспомогательные утилиты работали правильно. Если URI является корнем сайта или каталогом, то значение должно быть дополнено косой чертой.
-
[NOTE]
====
-Если указанная для порта веб-страница не доступна, попытайтесь сперва поискать, был ли официальный сайт перемещён, переименован или размещён в другом месте.
+URL, который ранее включался в последнюю строку файла [.filename]#pkg-descr#, был перемещен в [.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#
-Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "списком для упаковки", потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно [.filename]#/usr/local#). Если порт во время установки создает каталоги, убедитесь, что добавлены строки `@dirrm` для удаления каталогов при удалении пакета.
+Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "списком для упаковки", потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно [.filename]#/usr/local#).
Вот маленький пример:
@@ -143,19 +129,18 @@ lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
-@dirrm lib/X11/oneko
....
Обратитесь к странице справочной системы по команде man:pkg-create[8] с подробным описанием формата списка упаковки.
[NOTE]
====
-Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта.
+Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта. Фреймворк делает это корректно, когда список пакета crossref:plist[plist-autoplist,сгенерирован автоматически].
====
-[NOTE]
+[TIP]
====
-Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об <<plist-autoplist,автоматическом построении списка упаковки>> может помочь сэкономить время.
+Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об crossref:plist[plist-autoplist,автоматическом построении списка упаковки] может помочь сэкономить время.
====
Существует только одно исключение, когда у порта может отсутствовать [.filename]#pkg-plist#. Если порт устанавливает лишь несколько файлов, а возможно, и каталогов, то они могут быть перечислены в переменных `PLIST_FILES` и `PLIST_DIRS`, соответственно, внутри файла [.filename]#Makefile# порта. К примеру, мы можем обойтись без файла [.filename]#pkg-plist# у приведённого выше порта [.filename]#oneko#, добавив следующие строки в [.filename]#Makefile#:
@@ -168,80 +153,127 @@ PLIST_FILES= bin/oneko \
lib/X11/oneko/cat1.xpm \
lib/X11/oneko/cat2.xpm \
lib/X11/oneko/mouse.xpm
-PLIST_DIRS= lib/X11/oneko
....
-Конечно, переменная `PLIST_DIRS` не должна задаваться, если порт не устанавливает никаких каталогов.
-
[NOTE]
====
-Несколько портов могут совместно использовать общий каталог. В этом случае `PLIST_DIRS` следует заменить на `PLIST_DIRSTRY`, так чтобы каталог удалялся только если он пуст, а иначе игнорировался. Использование `PLIST_DIRS` и `PLIST_DIRSTRY` аналогично `@dirrm` и `@dirrmtry` в [.filename]#pkg-plist#, описание которых входит в crossref:plist[plist-dir-cleaning,Очистка пустых каталогов].
+Использование `PLIST_FILES` не должно быть чрезмерным. При поиске происхождения файла обычно просматривают файлы [.filename]#pkg-plist# в дереве портов с помощью grep. Указание файлов в `PLIST_FILES` в [.filename]#Makefile# усложняет этот поиск.
====
-Обратной стороной такого способа перечисления файлов и каталогов порта является невозможность использования последовательностей команд, описанных в man:pkg-create[8]. Поэтому он подходит для простых портов, что делает их ещё более простыми. Одновременно с этим положительным моментом является уменьшение количества файлов в коллекции портов. Пожалуйста, подумайте над использованием этой техники, прежде чем создавать [.filename]#pkg-plist#.
+[TIP]
+====
+Если порту требуется создать пустой каталог или он создает каталоги вне [.filename]#${PREFIX}# во время установки, обратитесь к разделу crossref:plist[plist-dir-cleaning,Очистка пустых каталогов] для получения дополнительной информации.
+====
-Далее мы увидим, как можно использовать файлы [.filename]#pkg-plist# и `PLIST_FILES` выполнения crossref:plist[plist,более сложных задач].
+[TIP]
+====
+Поскольку `PLIST_FILES` является переменной man:make[1], любая запись с пробелами должна быть заключена в кавычки. Например, при использовании ключевых слов, описанных в man:pkg-create[8] и crossref:plist[plist-keywords,Расширение списка пакетов с помощью ключевых слов], запись должна быть заключена в кавычки.
+
+[.programlisting]
+....
+PLIST_FILES= "@sample ${ETCDIR}/oneko.conf.sample"
+....
+====
+
+Позже мы увидим, как [.filename]#pkg-plist# и `PLIST_FILES` могут использоваться для выполнения crossref:plist[plist,более сложных задач].
[[porting-checksum]]
== Создание файла с контрольной суммой
-Просто введите команду `make makesum`. Правила утилиты make автоматически сгенерируют файл [.filename]#distinfo#.
-
-Если у извлекаемого файла регулярно меняется контрольная сумма и вы не сомневаетесь в надежности источника (т.е. он получен из CD производителя, либо ежедневно обновляется документация), то вы должны указать эти файлы в переменной `IGNOREFILES`. Тогда контрольная сумма при выполнении `make makesum` для этого файла создаваться не будет, а вместо этого для него будет установлено значение `IGNORE`.
+Просто введите команду `make makesum`. Правила утилиты make автоматически сгенерируют файл [.filename]#distinfo#. Не пытайтесь создавать этот файл вручную.
[[porting-testing]]
== Тестирование порта
-Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакета для порта. Вот те важные вещи, которые вы должны проверить.
+Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакета для порта. Вот те важные вещи, которые вы должны проверить:
-* [.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается портом
-* [.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом
+* [.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается портом.
+* [.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом.
* Порт может быть установлен с помощью указания цели `install`. Это позволяет убедиться в правильной работе сценария установки.
* Порт может быть правильным образом удалён с помощью указания цели `deinstall`. Это позволяет убедиться в правильной работе сценария удаления.
-* Следует убедиться, что `make package` можно запустить из-под обычного пользователя (то есть, не из-под `root`). Если это не так, в [.filename]#Makefile# порта должно быть добавлено `NEED_ROOT=yes`.
+* Порт имеет доступ к сетевым ресурсам только во время фазы цели `fetch`. Это важно для сборщиков пакетов, таких как package:ports-mgmt/poudriere[].
+* Убедитесь, что команду `make package` можно выполнить от имени обычного пользователя (то есть не от `root`). Если это не работает, возможно, потребуется исправить программное обеспечение. См. также crossref:uses[uses-fakeroot,`fakeroot`] и crossref:uses[uses-uidfix,`uidfix`].
[.procedure]
-====
-*Procedure: Рекомендуемый порядок проверки*
-
+.*Procedure: Рекомендуемый порядок проверки*
. `make stage`
. `make check-orphans`
. `make package`
. `make install`
. `make deinstall`
-. `pkg add package-filename`
-. `make package` (из-под пользователя)
-====
+. `make package` (как пользователь)
Убедитесь, что на любом из этапов не выдается никаких предупреждений.
-Основательное автоматизированное тестирование может быть выполнено при помощи package:ports-mgmt/tinderbox[] или package:ports-mgmt/poudriere[] из Коллекции Портов. Эти приложения используют `jails`, в которых проверяются все перечисленные выше этапы без изменения состояния основной системы.
+Тщательное автоматизированное тестирование можно выполнить с помощью package:ports-mgmt/poudriere[] из коллекции портов, дополнительную информацию см. в crossref:testing[testing-poudriere,poudriere]. Он поддерживает `клетки`, в которых можно протестировать все указанные выше шаги без воздействия на состояние основной системы.
[[porting-portlint]]
== Проверка вашего порта утилитой `portlint`
-Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш порт соответствует нашим рекомендациям. Программа package:ports-mgmt/portlint[] является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл <<porting-samplem,Makefile>> и соответствующим ли образом именован <<porting-pkgname,пакет>>.
+Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш порт соответствует нашим рекомендациям. Программа package:ports-mgmt/portlint[] является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл crossref:porting-samplem[porting-samplem,Makefile] и соответствующим ли образом именован crossref:porting-pkgname[porting-pkgname,пакет].
+
+[IMPORTANT]
+====
+Не следуйте слепо выводу `portlint`. Это статический инструмент для проверки, и иногда он ошибается.
+====
[[porting-submitting]]
== Посылка нового порта
Перед посылкой нового порта прочитайте раздел о том, что crossref:porting-dads[porting-dads,можно и нельзя] делать.
-Когда вы наконец довольны своим первым портом, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных. Нам не нужен ни каталог [.filename]#work#, ни пакет [.filename]#pkgname.tgz#, так что удалите их прямо сейчас.
+Когда вы наконец довольны своим первым портом, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных.
+
+[IMPORTANT]
+====
+Нам не нужны каталог [.filename]#work# или пакет [.filename]#pkgname.txz#, поэтому их можно удалить.
+====
+
+Далее создайте файл man:patch[1]. Предположим, что порт называется `oneko` и находится в категории `games`.
+
+[[porting-submitting-diff]]
+.Создание [.filename]#.diff# для нового порта
+[example]
+====
+Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с помощью `git diff`. Например:
+
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
-Затем получите файл man:shar[1]. Предполагая, что порт называется oneko, перейдите в каталог выше, где находится каталог `oneko`, и наберите: `shar find oneko > oneko.shar`
+Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение в вашей локальной ветке и создайте патч с помощью `git format-patch`
+
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
-Включите [.filename]#oneko.shar# в сообщение об ошибке и пошлите его с помощью man:send-pr[1]. Обратитесь к разделу extref:{contributing}[Сообщения об ошибках и общие замечания, CONTRIB-GENERAL] для получения подробной информации о man:send-pr[1]).
+Патч, созданный с помощью `git format-patch`, будет содержать идентификатор автора и адреса электронной почты, что упрощает применение разработчиками (с помощью `git am`) и правильное указание авторства.
-Укажите в сообщении категорию `ports` и класс `change-request`. _Не_ указывайте, что сообщение имеет статус `confidential`! Добавьте краткое описание программы в поле "Description" отправляемого PR (например, содержимое `COMMENT` в сокращённом варианте) и сам файл в виде архива [.filename]#.shar# в поле "Fix".
+[IMPORTANT]
+****
+Чтобы упростить применение патча для коммиттеров в их рабочей копии дерева портов, пожалуйста, создайте файл [.filename]#.diff# из корня вашего дерева портов.
+****
+
+====
+
+Отправьте файл [.filename]#oneko.diff# через https://bugs.freebsd.org/submit/[форму отправки отчётов об ошибках]. Укажите продукт "Ports & Packages", компонент "Individual Port(s)" и следуйте приведённым там инструкциям. Добавьте краткое описание программы в поле Description PR (например, сокращённую версию `COMMENT`) и не забудьте прикрепить файл [.filename]#oneko.diff#.
[NOTE]
====
-Хорошее описание в заголовке сообщения о проблеме значительно облегчает работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "New port: <категория>/<название порта> <краткое описание порта>". Следование этой схеме упрощает и ускоряет начало работы по добавлению нового порта.
+Хорошее описание в заголовке сообщения о проблеме значительно облегчает работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "[NEW PORT] _категория/название_порта краткое описание порта_". Следование этой схеме упрощает и ускоряет начало работы по добавлению нового порта.
====
-Повторим ещё раз, что __не нужно включать ни оригинальный файл с дистрибутивом, ни каталог [.filename]#work#, ни пакет, построенный вами командой ``make package``__; для новых портов используйте man:shar[1], но не man:diff[1].
+После отправки порта, пожалуйста, потерпите. Время, необходимое для включения нового порта во FreeBSD, может занимать от нескольких дней до нескольких месяцев. https://bugs.freebsd.org/bugzilla/query.cgi[ Здесь] можно увидеть список ожидающих PR для портов.
-После отправки порта, пожалуйста, потерпите. Время, необходимое для включения нового порта во FreeBSD, может занимать от нескольких дней до нескольких месяцев. http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports[ Здесь] можно увидеть список ожидающих PR для портов.
+Чтобы получить список _открытых_ PR для портов, выберите _Open_ и _Ports & Packages_ в форме поиска, затем нажмите btn:[Search].
-После рассмотрения нового порта мы при необходимости вам ответим, а затем включим порт в наше дерево. Ваше имя также будет добавлено в список extref:{contributors}[Дополнительных контрибуторов проекта FreeBSD, contrib-additional] и другие файлы.
+После ознакомления с новым портом мы ответим, если это необходимо, и добавим его в дерево. Имя отправителя также будет добавлено в список extref:{contributors}[Дополнительных участников FreeBSD, contrib-additional] и другие файлы.
+
+[IMPORTANT]
+====
+Ранее можно было отправлять исправления для новых портов, используя файл man:shar[1]; однако с развитием man:git[1] это больше не актуально. Коммиттеры больше не принимают файлы man:shar[1], так как их использование чревато ошибками и не добавляет соответствующую запись в [.filename]#Makefile# категории.
+====
diff --git a/documentation/content/ru/books/porters-handbook/quick-porting/_index.po b/documentation/content/ru/books/porters-handbook/quick-porting/_index.po
new file mode 100644
index 0000000000..9900889410
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/quick-porting/_index.po
@@ -0,0 +1,767 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookquick-porting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "How to quickly create a new FreeBSD Port"
+msgstr "Как быстро создать новый порт FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. Quick Porting"
+msgstr "Глава 3. Быстрое портирование"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:14
+#, no-wrap
+msgid "Quick Porting"
+msgstr "Быстрое портирование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:53
+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 ""
+"В этом разделе описано, как быстро создать новый порт. Для случаев, когда "
+"этот быстрый метод не подходит, полный процесс \"Медленного портирования\" "
+"описан в разделе crossref:slow-porting[slow-porting,Медленное портирование]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:55
+msgid ""
+"First, get the original tarball and put it into `DISTDIR`, which defaults to "
+"[.filename]#/usr/ports/distfiles#."
+msgstr ""
+"Во-первых, скачайте оригинальный tar-файл и поместите его в каталог "
+"`DISTDIR`, который по умолчанию есть не что иное, как [.filename]#/usr/ports/"
+"distfiles#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:61
+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 ""
+"Здесь предполагается, что программное обеспечение компилируется без проблем "
+"как есть, то есть для работы приложения на вашей системе FreeBSD не "
+"потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, "
+"то вам придется обратиться также и к следующему разделу — crossref:slow-"
+"porting[slow-porting,Медленное портирование]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:66
+msgid ""
+"It is recommended to set the `DEVELOPER` man:make[1] variable in "
+"[.filename]#/etc/make.conf# before getting into porting."
+msgstr ""
+"Перед началом портирования рекомендуется установить переменную man:make[1] "
+"`DEVELOPER` в [.filename]#/etc/make.conf#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:70
+#, no-wrap
+msgid "# echo DEVELOPER=yes >> /etc/make.conf\n"
+msgstr "# echo DEVELOPER=yes >> /etc/make.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:73
+msgid ""
+"This setting enables the \"developer mode\" that displays deprecation "
+"warnings and activates some further quality checks on calling `make`."
+msgstr ""
+"Эта настройка включает \"режим разработчика\", в котором отображаются "
+"предупреждения при использовании устаревших конструкций и задействуются "
+"некоторые дополнительные проверки при вызове команды `make`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:76
+#, no-wrap
+msgid "Writing the Makefile"
+msgstr "Создание файла [.filename]#Makefile#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:79
+msgid "The minimal [.filename]#Makefile# would look something like this:"
+msgstr "Минимальный [.filename]#Makefile# будет выглядеть примерно так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:86
+#, 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 ""
+"PORTNAME=\toneko\n"
+"DISTVERSION=\t1.1b\n"
+"CATEGORIES=\tgames\n"
+"MASTER_SITES=\tftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:90
+#, 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 ""
+"MAINTAINER=\tyouremail@example.com\n"
+"COMMENT=\tCat chasing a mouse all over the screen\n"
+"WWW=\t\thttp://www.daidouji.com/oneko/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:92
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:96
+msgid ""
+"Try to figure it out. A more detailed example is shown in the "
+"crossref:porting-samplem[porting-samplem,sample Makefile] section."
+msgstr ""
+"Посмотрим, сможете ли вы его понять. Более подробный пример приведен в "
+"секции crossref:porting-samplem[porting-samplem,пример Makefile]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:98
+#, no-wrap
+msgid "Writing the Description Files"
+msgstr "Создание информационных файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:103
+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 ""
+"Имеется два информационных файла, которые требуются для любого порта, вне "
+"зависимости от того, является ли он пакетом или нет. Это [.filename]#pkg-"
+"descr# и [.filename]#pkg-plist#. Префикс [.filename]#pkg-# отличает их от "
+"других файлов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:105
+#, no-wrap
+msgid "[.filename]#pkg-descr#"
+msgstr "[.filename]#pkg-descr#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:109
+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:116
+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 ""
+"Это _не_ руководство и не подробное описание того, как использовать или "
+"компилировать порт! _Пожалуйста, будьте осторожны при копировании из "
+"[.filename]#README# или manpage_. Очень часто они не содержат краткого "
+"описания порта или имеют неудобный формат. Например, manpages используют "
+"выравнивание по ширине, что особенно плохо выглядит с моноширинными шрифтами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:118
+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 ""
+"С другой стороны, содержимое файла [.filename]#pkg-descr# должно быть "
+"длиннее, чем crossref:makefiles[makefile-comment,строка `COMMENT` из "
+"Makefile]. Оно должно более подробно объяснять, что собой представляет "
+"данный порт."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:122
+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 ""
+"Хорошо составленный [.filename]#pkg-descr# описывает порт достаточно полно, "
+"чтобы пользователю не приходилось сверяться с документацией или посещать "
+"вебсайт для понимания того, что делает данное программное обеспечение, чем "
+"оно может быть полезно или какие хорошие функции у него имеются. Упоминание "
+"про определённые требования, такие как используемый графический "
+"инструментарий, тяжёлые зависимости, окружение для запуска или используемый "
+"язык программирования помогут пользователям определиться, будет ли этот порт "
+"для них работать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:126
+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 ""
+"URL, который ранее включался в последнюю строку файла [.filename]#pkg-"
+"descr#, был перемещен в [.filename]#Makefile#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:129
+#, no-wrap
+msgid "[.filename]#pkg-plist#"
+msgstr "[.filename]#pkg-plist#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:134
+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 ""
+"Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "
+"\"списком для упаковки\", потому что пакет генерируется упаковкой файлов, "
+"которые здесь указаны. Имена путей указываются относительно установочного "
+"префикса (обычно [.filename]#/usr/local#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:136
+msgid "Here is a small example:"
+msgstr "Вот маленький пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:145
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:148
+msgid ""
+"Refer to the man:pkg-create[8] manual page for details on the packing list."
+msgstr ""
+"Обратитесь к странице справочной системы по команде man:pkg-create[8] с "
+"подробным описанием формата списка упаковки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:155
+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 ""
+"Рекомендуется, чтобы имена файлов в этом списке были отсортированы в "
+"алфавитном порядке. Это позволит значительно облегчить сверку изменений при "
+"обновлении порта. Фреймворк делает это корректно, когда список пакета "
+"crossref:plist[plist-autoplist,сгенерирован автоматически]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:161
+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 ""
+"Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. "
+"Если порт устанавливает большое количество файлов, раздел об "
+"crossref:plist[plist-autoplist,автоматическом построении списка упаковки] "
+"может помочь сэкономить время."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:166
+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 ""
+"Существует только одно исключение, когда у порта может отсутствовать "
+"[.filename]#pkg-plist#. Если порт устанавливает лишь несколько файлов, а "
+"возможно, и каталогов, то они могут быть перечислены в переменных "
+"`PLIST_FILES` и `PLIST_DIRS`, соответственно, внутри файла "
+"[.filename]#Makefile# порта. К примеру, мы можем обойтись без файла "
+"[.filename]#pkg-plist# у приведённого выше порта [.filename]#oneko#, добавив "
+"следующие строки в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:175
+#, 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 ""
+"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"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:182
+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 ""
+"Использование `PLIST_FILES` не должно быть чрезмерным. При поиске "
+"происхождения файла обычно просматривают файлы [.filename]#pkg-plist# в "
+"дереве портов с помощью grep. Указание файлов в `PLIST_FILES` в "
+"[.filename]#Makefile# усложняет этот поиск."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:187
+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 ""
+"Если порту требуется создать пустой каталог или он создает каталоги вне "
+"[.filename]#${PREFIX}# во время установки, обратитесь к разделу "
+"crossref:plist[plist-dir-cleaning,Очистка пустых каталогов] для получения "
+"дополнительной информации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:193
+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 ""
+"Поскольку `PLIST_FILES` является переменной man:make[1], любая запись с "
+"пробелами должна быть заключена в кавычки. Например, при использовании "
+"ключевых слов, описанных в man:pkg-create[8] и crossref:plist[plist-"
+"keywords,Расширение списка пакетов с помощью ключевых слов], запись должна "
+"быть заключена в кавычки."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:197
+#, no-wrap
+msgid "PLIST_FILES=\t\"@sample ${ETCDIR}/oneko.conf.sample\"\n"
+msgstr "PLIST_FILES=\t\"@sample ${ETCDIR}/oneko.conf.sample\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:201
+msgid ""
+"Later we will see how [.filename]#pkg-plist# and `PLIST_FILES` can be used "
+"to fulfill crossref:plist[plist,more sophisticated tasks]."
+msgstr ""
+"Позже мы увидим, как [.filename]#pkg-plist# и `PLIST_FILES` могут "
+"использоваться для выполнения crossref:plist[plist,более сложных задач]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:203
+#, no-wrap
+msgid "Creating the Checksum File"
+msgstr "Создание файла с контрольной суммой"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:208
+msgid ""
+"Just type `make makesum`. The ports framework will automatically generate "
+"[.filename]#distinfo#. Do not try to generate the file manually."
+msgstr ""
+"Просто введите команду `make makesum`. Правила утилиты make автоматически "
+"сгенерируют файл [.filename]#distinfo#. Не пытайтесь создавать этот файл "
+"вручную."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:210
+#, no-wrap
+msgid "Testing the Port"
+msgstr "Тестирование порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:214
+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:216
+msgid ""
+"[.filename]#pkg-plist# does not contain anything not installed by the port."
+msgstr ""
+"[.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается "
+"портом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:217
+msgid ""
+"[.filename]#pkg-plist# contains everything that is installed by the port."
+msgstr ""
+"[.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:218
+msgid ""
+"The port can be installed using the `install` target. This verifies that the "
+"install script works correctly."
+msgstr ""
+"Порт может быть установлен с помощью указания цели `install`. Это позволяет "
+"убедиться в правильной работе сценария установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:219
+msgid ""
+"The port can be deinstalled properly using the `deinstall` target. This "
+"verifies that the deinstall script works correctly."
+msgstr ""
+"Порт может быть правильным образом удалён с помощью указания цели "
+"`deinstall`. Это позволяет убедиться в правильной работе сценария удаления."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:220
+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 ""
+"Порт имеет доступ к сетевым ресурсам только во время фазы цели `fetch`. Это "
+"важно для сборщиков пакетов, таких как package:ports-mgmt/poudriere[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:221
+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 ""
+"Убедитесь, что команду `make package` можно выполнить от имени обычного "
+"пользователя (то есть не от `root`). Если это не работает, возможно, "
+"потребуется исправить программное обеспечение. См. также crossref:uses[uses-"
+"fakeroot,`fakeroot`] и crossref:uses[uses-uidfix,`uidfix`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:223
+#, no-wrap
+msgid "Procedure: Recommended Test Ordering"
+msgstr "*Procedure: Рекомендуемый порядок проверки*"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:225
+msgid "`make stage`"
+msgstr "`make stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:226
+msgid "`make stage-qa`"
+msgstr "`make check-orphans`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:227
+msgid "`make package`"
+msgstr "`make package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:228
+msgid "`make install`"
+msgstr "`make install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:229
+msgid "`make deinstall`"
+msgstr "`make deinstall`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:230
+msgid "`make package` (as user)"
+msgstr "`make package` (как пользователь)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:232
+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:235
+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 ""
+"Тщательное автоматизированное тестирование можно выполнить с помощью "
+"package:ports-mgmt/poudriere[] из коллекции портов, дополнительную "
+"информацию см. в crossref:testing[testing-poudriere,poudriere]. Он "
+"поддерживает `клетки`, в которых можно протестировать все указанные выше "
+"шаги без воздействия на состояние основной системы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:237
+#, no-wrap
+msgid "Checking the Port with `portlint`"
+msgstr "Проверка вашего порта утилитой `portlint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:242
+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 ""
+"Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш "
+"порт соответствует нашим рекомендациям. Программа package:ports-mgmt/"
+"portlint[] является частью Коллекции Портов. В частности, вы можете захотеть "
+"проверить, правильно ли сформирован файл crossref:porting-samplem[porting-"
+"samplem,Makefile] и соответствующим ли образом именован crossref:porting-"
+"pkgname[porting-pkgname,пакет]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:246
+msgid ""
+"Do not blindly follow the output of `portlint`. It is a static lint tool and "
+"sometimes gets things wrong."
+msgstr ""
+"Не следуйте слепо выводу `portlint`. Это статический инструмент для "
+"проверки, и иногда он ошибается."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:249
+#, no-wrap
+msgid "Submitting the New Port"
+msgstr "Посылка нового порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:252
+msgid ""
+"Before submitting the new port, read the crossref:porting-dads[porting-"
+"dads,DOs and DON'Ts] section."
+msgstr ""
+"Перед посылкой нового порта прочитайте раздел о том, что crossref:porting-"
+"dads[porting-dads,можно и нельзя] делать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:254
+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 ""
+"Когда вы наконец довольны своим первым портом, единственное, что осталось "
+"сделать, это включить его в основное дерево портов FreeBSD и осчастливить "
+"этим всех остальных."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:258
+msgid ""
+"We do not need the [.filename]#work# directory or the "
+"[.filename]#pkgname.txz# package, so delete them now."
+msgstr ""
+"Нам не нужны каталог [.filename]#work# или пакет [.filename]#pkgname.txz#, "
+"поэтому их можно удалить."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:262
+msgid ""
+"Next, create a man:patch[1], file. Assuming the port is called `oneko` and "
+"is in the `games` category."
+msgstr ""
+"Далее создайте файл man:patch[1]. Предположим, что порт называется `oneko` и "
+"находится в категории `games`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:264
+#, no-wrap
+msgid "Creating a [.filename]#.diff# for a New Port"
+msgstr "Создание [.filename]#.diff# для нового порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:268
+msgid ""
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
+msgstr ""
+"Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с "
+"помощью `git diff`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:273
+#, 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/porters-handbook/quick-porting/_index.adoc:277
+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 ""
+"Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение "
+"в вашей локальной ветке и создайте патч с помощью `git format-patch`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:282
+#, 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/porters-handbook/quick-porting/_index.adoc:286
+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 ""
+"Патч, созданный с помощью `git format-patch`, будет содержать идентификатор "
+"автора и адреса электронной почты, что упрощает применение разработчиками (с "
+"помощью `git am`) и правильное указание авторства."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:290
+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 ""
+"Чтобы упростить применение патча для коммиттеров в их рабочей копии дерева "
+"портов, пожалуйста, создайте файл [.filename]#.diff# из корня вашего дерева "
+"портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:297
+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 ""
+"Отправьте файл [.filename]#oneko.diff# через https://bugs.freebsd.org/submit/"
+"[форму отправки отчётов об ошибках]. Укажите продукт \"Ports & Packages\", "
+"компонент \"Individual Port(s)\" и следуйте приведённым там инструкциям. "
+"Добавьте краткое описание программы в поле Description PR (например, "
+"сокращённую версию `COMMENT`) и не забудьте прикрепить файл "
+"[.filename]#oneko.diff#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:303
+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 ""
+"Хорошее описание в заголовке сообщения о проблеме значительно облегчает "
+"работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "
+"\"[NEW PORT] _категория/название_порта краткое описание порта_\". Следование "
+"этой схеме упрощает и ускоряет начало работы по добавлению нового порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:308
+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 ""
+"После отправки порта, пожалуйста, потерпите. Время, необходимое для "
+"включения нового порта во FreeBSD, может занимать от нескольких дней до "
+"нескольких месяцев. https://bugs.freebsd.org/bugzilla/query.cgi[ Здесь] "
+"можно увидеть список ожидающих PR для портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:310
+msgid ""
+"To get a listing of _open_ port PRs, select _Open_ and _Ports & Packages_ in "
+"the search form, then click btn:[Search]."
+msgstr ""
+"Чтобы получить список _открытых_ PR для портов, выберите _Open_ и _Ports & "
+"Packages_ в форме поиска, затем нажмите btn:[Search]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:313
+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 ""
+"После ознакомления с новым портом мы ответим, если это необходимо, и добавим "
+"его в дерево. Имя отправителя также будет добавлено в список extref:"
+"{contributors}[Дополнительных участников FreeBSD, contrib-additional] и "
+"другие файлы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:318
+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 ""
+"Ранее можно было отправлять исправления для новых портов, используя файл "
+"man:shar[1]; однако с развитием man:git[1] это больше не актуально. "
+"Коммиттеры больше не принимают файлы man:shar[1], так как их использование "
+"чревато ошибками и не добавляет соответствующую запись в "
+"[.filename]#Makefile# категории."
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.adoc b/documentation/content/ru/books/porters-handbook/security/_index.adoc
index 6f75400cd0..77845b3b1c 100644
--- a/documentation/content/ru/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/security/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 11. Безопасность портов
-prev: books/porters-handbook/upgrading
+description: 'Инструкции по безопасности при создании порта FreeBSD'
next: books/porters-handbook/porting-dads
-showBookMenu: true
-weight: 11
params:
- path: "/books/porters-handbook/security/"
+ path: /books/porters-handbook/security/
+prev: books/porters-handbook/upgrading
+showBookMenu: true
+tags: ["security", "porting", "ports", "VuXML"]
+title: 'Глава 12. Безопасность портов'
+weight: 12
---
[[security]]
-= Безопасность портов
+= Безопасность
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 11
+:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
@@ -58,14 +60,14 @@ endif::[]
[[security-fix]]
== Исправление уязвимостей безопасности
-Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо <<dads-noinstall,пометить порт как `FORBIDDEN`>>, либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать <<port-upgrading,стандартной процедуре отправки вашего изменения>>, если вы не обладаете правами на коммит изменения непосредственно в дерево портов.
+Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо crossref:porting-dads[dads-noinstall,пометить порт как `FORBIDDEN`], либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать crossref:port-upgrading[port-upgrading,стандартной процедуре отправки вашего изменения], если вы не обладаете правами на коммит изменения непосредственно в дерево портов.
[IMPORTANT]
====
Быть коммиттером портов недостаточно для коммита произвольного порта. Помните, что обычно у портов есть сопровождающие, мнение которых вы должны учитывать.
====
-Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к <<makefile-naming-revepoch,соответствующему разделу>>.
+Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к crossref:makefiles[makefile-naming-revepoch,соответствующему разделу].
[[security-notify]]
== Обеспечение сообщества информацией
@@ -77,7 +79,7 @@ endif::[]
Учитывая огромное число портов в дереве, невозможно по каждому случаю выпускать бюллетень безопасности без создания флуда и потери внимания сообщества к моменту появления действительно серьезных причин. Поэтому уязвимости безопасности, обнаруженные в портах, записываются в http://vuxml.freebsd.org/[базу данных FreeBSD VuXML]. Члены Команды Офицеров Безопасности также отслеживают её на предмет появления вопросов, требующих их вмешательства.
-Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице http://www.freebsd.org/security/#how[информационной безопасности FreeBSD].
+Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице https://www.freebsd.org/security/#how[информационной безопасности FreeBSD].
База данных VuXML является документом XML. Его исходный файл [.filename]#vuln.xml# содержится прямо внутри порта package:security/vuxml[]. Следовательно, полное имя пути к файлу будет [.filename]#PORTSDIR/security/vuxml/vuln.xml#. Каждый раз, при обнаружении вами в порте уязвимости безопасности добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML, лучшее, что вы можете сделать, это найти существующую запись, подпадающую под ваш случай, затем скопировать ее и использовать в качестве шаблона.
@@ -122,12 +124,8 @@ endif::[]
<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> <.>
@@ -148,7 +146,9 @@ endif::[]
<.> Здесь перечислены имена затронутых пакетов. Может быть дано несколько имен, поскольку некоторые пакеты могут быть основаны на одном главном порте или программном продукте. Сюда можно включить стабильную ветвь и ветвь разработки, локализованные версии и подчиненные порты, зависящие от различного выбора важных вариантов конфигурации, указанных на этапе построения.
-<.> Здесь указаны затронутые версии пакета(-ов) как один или более диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>`, и `<gt>`. Диапазоны внесённых версий не должны пересекаться.В спецификации диапазонов `\*` (звёздочка) означает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Поэтому звездочка может быть использована в диапазоне для совпадения со всеми возможными `alpha`, `beta` и `RC` версиями. Как вариант, `<ge>2.*</ge><lt>3.*</lt>` выборочно совпадет с версией `2.x`, а `<ge>2.0</ge><lt>3.0</lt>` - нет, поскольку последнее не включает `2.r3` и совпадает с `3.b`.Пример выше указывает, что к затронутым относятся версии с `1.6` до `1.9` включительно, версии `2.x` до `2.4_1` и версия `3.0b1`.
+<.> Затронутые версии пакета(ов) указаны там как один или несколько диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>` и `<gt>`. Убедитесь, что указанные диапазоны версий не перекрываются. +
+В спецификации диапазона `\*` (звёздочка) обозначает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Таким образом, звёздочка может использоваться в диапазоне для соответствия всем возможным версиям `alpha`, `beta` и `RC`. Например, `<ge>2.*</ge><lt>3.*</lt>` выборочно соответствует каждой версии `2.x`, тогда как `<ge>2.0</ge><lt>3.0</lt>` — нет, поскольку последний пропускает `2.r3` и включает `3.b`. +
+Приведённый пример указывает, что затронуты версии `1.6` и выше, но не включая `1.9`, версии `2.x` до `2.4_1` и версия `3.0b1`.
<.> Некоторые связанные группы пакетов (в конечном счете, порты) могут быть указаны в разделе `<affected>`. Это можно использовать, если некоторые программные продукты (скажем, FooBar, FreeBar and OpenBar) являются производными от общей кодовой базы и всё еще совместно используют её ошибки и уязвимости. Имейте в виду отличие от перечисления множественных имён в одном разделе <package>.
@@ -158,112 +158,124 @@ endif::[]
<.> Этот раздел содержит ссылки на имеющие отношение документы. Приветствуется как можно большее количество ссылок.
-<.> Это http://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD].
+<.> Это https://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD].
-<.> Это http://www.freebsd.org/support/#gnats[сообщение об ошибке FreeBSD].
+<.> Это https://www.freebsd.org/support/[сообщение об ошибке FreeBSD].
-<.> Идентификатор http://www.cve.mitre.org/[MITRE CVE].
+<.> Идентификатор https://cve.mitre.org/[MITRE CVE].
-<.> Это http://www.securityfocus.com/bid[SecurityFocus Bug ID].
+<.> Это https://www.kb.cert.org/vuls/[SecurityFocus Bug ID].
-<.> Бюллетень безопасности http://www.cert.org/[US-CERT].
+<.> Бюллетень безопасности https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT].
-<.> Примечание к уязвимости http://www.cert.org/[US-CERT].
-
-<.> Уведомление системы Cyber Security Alert http://www.cert.org/[US-CERT].
+<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения.
-<.> Уведомление системы Technical Cyber Security Alert http://www.cert.org/[US-CERT].
+<.> Это общий URL. Используйте его только если ни одна из других категорий ссылок не подходит.
-<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения.
+<.> Это дата, когда проблема была раскрыта (_ГГГГ-ММ-ДД_).
-<.> Основной URL. Должен быть использован в случае, если не подходит ни одна из категорий источника.
+<.> Это дата добавления записи (_ГГГГ-ММ-ДД_).
-<.> Дата последнего изменения любой информации данной записи (_YYYY-MM-DD_). Новые записи не должны включать это поле. Поле должно быть добавлено после редактирования существующей записи.
+<.> Это дата, когда любая информация в записи была последний раз изменена (_ГГГГ-ММ-ДД_). Новые записи не должны включать это поле. Добавьте его при редактировании существующей записи.
[[security-notify-vuxml-testing]]
=== Тестирование ваших изменений в базе данных VuXML
-Предположим, что вы только что написали или заполнили запись об уязвимости в пакете `clamav`, которая была исправлена в версии `0.65_7`.
+Этот пример описывает новую запись об уязвимости в пакете `dropbear`, которая была исправлена в версии `dropbear-2013.59`.
-Прежде всего, вам нужно _установить_ последние версии портов package:ports-mgmt/portaudit[], package:ports-mgmt/portaudit-db[] и package:security/vuxml[].
+В качестве предварительного условия установите свежую версию порта package:security/vuxml[].
-[NOTE]
-====
-Для запуска `packaudit` вы должны обладать правами на запись в [.filename]#DATABASEDIR#; как правило, это [.filename]#/var/db/portaudit#.
+Сначала проверьте, есть ли уже запись об этой уязвимости. Если бы такая запись существовала, она соответствовала бы предыдущей версии пакета `2013.58`:
-Для использования другого каталога присвойте переменной окружения [.filename]#DATABASEDIR# другой путь.
-
-Если вы работаете в каталоге, отличном от [.filename]#${PORTSDIR}/security/vuxml#, присвойте переменной окружения [.filename]#VUXMLDIR# путь к каталогу, в котором находится [.filename]#vuln.xml#.
-====
+[source, shell]
+....
+% pkg audit dropbear-2013.58
+....
-Во-первых, проверьте, нет ли уже записи об этой уязвимости. Если такая запись есть, она совпадёт с предыдущей версией пакета `0.65_6`:
+Если запись не найдена, добавьте новую запись для этой уязвимости.
-[source,shell]
+[source, shell]
....
-% packaudit
-% portaudit clamav-0.65_6
+% cd ${PORTSDIR}/security/vuxml
+% make newentry
....
-Если ничего не найдено, значит вы получили зеленый свет для добавления новой записи для этой уязвимости.
+Если уязвимость имеет идентификатор https://cve.mitre.org/[MITRE CVE], можно использовать следующую команду:
-[source,shell]
+[source, shell]
....
% cd ${PORTSDIR}/security/vuxml
-% make newentry
+% make newentry CVE_ID=CVE-YYYY-XXXXX
....
-Когда вы закончите, проверьте синтаксис и форматирование.
+где `CVE-YYYYY-XXXX` является действительным идентификатором CVE.
-[source,shell]
+Если уязвимость относится к FreeBSD Security Advisory, вместо этого можно использовать следующую команду:
+
+[source, shell]
....
-% make validate
+% cd ${PORTSDIR}/security/vuxml
+% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc
....
-[NOTE]
-====
-Вам понадобится установить по крайней мере один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[].
-====
+где `FreeBSD-SA-YY-XXXXXX.asc` является опубликованным https://www.freebsd.org/security/advisories/[FreeBSD Security Advisory].
-Теперь выполните перепостроение базы данных `portaudit` из файла VuXML:
+Проверьте его синтаксис и форматирование:
-[source,shell]
+[source, shell]
....
-% packaudit
+% make validate
....
-Чтобы убедиться, что раздел `<affected>` в вашей записи совпадает с правильными пакетами, выполните следующую команду:
+Предыдущая команда создает файл [.filename]#vuln-flat.xml#. Его также можно создать с помощью:
-[source,shell]
+[source, shell]
....
-% portaudit -f /usr/ports/INDEX -r uuid
+% make vuln-flat.xml
....
[NOTE]
====
-Для лучшего понимания синтаксиса этой команды обращайтесь к man:portaudit[1].
+Должен быть установлен хотя бы один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[].
====
-Убедитесь, что ваша запись не производит ложных совпадений в выводе.
+Проверьте, что раздел `<affected>` записи соответствует правильным пакетам:
-Теперь проверьте, совпадает ли ваша запись с нужными версиями пакета:
-
-[source,shell]
+[source, shell]
+....
+% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58
....
-% portaudit clamav-0.65_6 clamav-0.65_7
-Affected package: clamav-0.65_6 (matched by clamav<0.65_7)
-Type of problem: clamav remote denial-of-service.
-Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html>
-1 problem(s) found.
+Убедитесь, что запись не создает ложных совпадений в выводе.
+
+Теперь проверьте, соответствуют ли записи правильные версии пакетов:
+
+[source, shell]
+....
+% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59
+dropbear-2012.58 is vulnerable:
+dropbear -- exposure of sensitive information, DoS
+CVE: CVE-2013-4434
+CVE: CVE-2013-4421
+WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html
+
+1 problem(s) in the installed packages found.
....
-Первая версия должна совпасть, а последняя нет.
+Предыдущая версия совпадает, а последняя — нет.
-В заключение проверьте, что веб-страница, сформированная из базы данных VuXML, выглядит как положено:
+[[security-xcheck-vuxml]]
+=== Контрольный список для новой записи в VuXML
-[source,shell]
+* Проверьте название порта. Иногда имя проекта в вышестоящем репозитории не полностью совпадает с именем порта.
+* Добавить все флейворы. Если у порта есть варианты, все имена пакетов должны быть добавлены в запись как `<package>`. Используйте следующий скрипт для генерации всех имен пакетов с вариантами:
++
+[source, shell]
....
-% mkdir -p ~/public_html/portaudit
-% packaudit
-% lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html
+% for flavor in $(make -V FLAVORS); do FLAVOR="${flavor}" make -VPKGNAME;done
....
++
+* Проверить, имеет ли порт `PORTEPOCH`. Приведённый выше фрагмент скрипта помогает в этом. Если порт использует `PORTEPOCH`, обязательно добавить его в тег `<range>`.
+* Перепроверьте диапазоны. В случае диапазонов, ограниченных с обеих сторон, убедитесь, что элементы `<ge>` и `<lt>` находятся внутри одного тега `<range>`. В противном случае запись может определить перекрывающийся диапазон.
+* Проверка производных версий. Если в вышестоящем проекте обнаружена уязвимость, проверьте, затронуты ли также производные или форки проекта, включённые в дерево портов. Например, если уязвимость обнаружена в package:www/firefox[], оцените, есть ли такая же уязвимость в производных, таких как package:www/librewolf[], package:www/waterfox[] или других подобных проектах. Включите все затронутые производные в запись VuXML, чтобы пользователи этих портов были проинформированы. Также проверьте наличие Linux-версий этого порта в дереве. Например, уязвимости в package:databases/sqlite3[] скорее всего затрагивают и пакеты вроде package:databases/linux-c7-sqlite3[].
+* Не делайте коммит записи, не запустив сначала `make validate`.
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.po b/documentation/content/ru/books/porters-handbook/security/_index.po
new file mode 100644
index 0000000000..7d28e22d9c
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/security/_index.po
@@ -0,0 +1,858 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-20 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooksecurity_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Security instructions when making a FreeBSD Port"
+msgstr "Инструкции по безопасности при создании порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Security"
+msgstr "Глава 12. Безопасность портов"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:14
+#, no-wrap
+msgid "Security"
+msgstr "Безопасность"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:52
+#, no-wrap
+msgid "Why Security is So Important"
+msgstr "Почему безопасность так важна"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:58
+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:64
+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:72
+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:74
+#, no-wrap
+msgid "Fixing Security Vulnerabilities"
+msgstr "Исправление уязвимостей безопасности"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:82
+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 ""
+"Что касается портов и пакетов, уязвимость безопасности изначально может "
+"появиться в исходном дистрибутиве или файлах порта. В первом случае, "
+"разработчик исходного программного обеспечения скорее всего сразу же "
+"выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в "
+"соответствии с исправлением автора. Если исправление по какой-то причине "
+"задерживается, вам следует либо crossref:porting-dads[dads-"
+"noinstall,пометить порт как `FORBIDDEN`], либо добавить в порт ваш "
+"собственный патч. В случае уязвимости порта просто исправьте этот порт как "
+"можно скорее. В любом случае нужно следовать crossref:port-upgrading[port-"
+"upgrading,стандартной процедуре отправки вашего изменения], если вы не "
+"обладаете правами на коммит изменения непосредственно в дерево портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:87
+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:95
+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 ""
+"Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости "
+"увеличена. Вот как пользователи, обновляющие установленные пакеты на "
+"постоянной основе, увидят, что им нужно запустить обновление. Кроме того, "
+"новый пакет будет собран и распространен через FTP и WWW зеркала, замещая "
+"уязвимый. Если в процессе исправления уязвимости не было изменено значение "
+"`PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует "
+"увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но "
+"не когда вы обновили порт до последней версии программного обеспечения, "
+"попутно затронув при этом `PORTVERSION`. За дальнейшей информацией "
+"обращайтесь к crossref:makefiles[makefile-naming-revepoch,соответствующему "
+"разделу]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:97
+#, no-wrap
+msgid "Keeping the Community Informed"
+msgstr "Обеспечение сообщества информацией"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:100
+#, no-wrap
+msgid "The VuXML Database"
+msgstr "База данных VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:108
+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:112
+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 ""
+"Учитывая огромное число портов в дереве, невозможно по каждому случаю "
+"выпускать бюллетень безопасности без создания флуда и потери внимания "
+"сообщества к моменту появления действительно серьезных причин. Поэтому "
+"уязвимости безопасности, обнаруженные в портах, записываются в http://"
+"vuxml.freebsd.org/[базу данных FreeBSD VuXML]. Члены Команды Офицеров "
+"Безопасности также отслеживают её на предмет появления вопросов, требующих "
+"их вмешательства."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:115
+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 ""
+"Если вы обладаете правами коммиттера, вы можете сам обновить базу данных "
+"VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете "
+"ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером "
+"или верите, что нашли исключительно серьезную уязвимость, то не задумываясь "
+"свяжитесь с Командой Офицеров Безопасности напрямую как это описано на "
+"странице https://www.freebsd.org/security/#how[информационной безопасности "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:121
+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 ""
+"База данных VuXML является документом XML. Его исходный файл "
+"[.filename]#vuln.xml# содержится прямо внутри порта package:security/"
+"vuxml[]. Следовательно, полное имя пути к файлу будет [.filename]#PORTSDIR/"
+"security/vuxml/vuln.xml#. Каждый раз, при обнаружении вами в порте "
+"уязвимости безопасности добавьте об этом запись в этот файл. Пока вы не "
+"знакомы с VuXML, лучшее, что вы можете сделать, это найти существующую "
+"запись, подпадающую под ваш случай, затем скопировать ее и использовать в "
+"качестве шаблона."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:123
+#, no-wrap
+msgid "A Short Introduction to VuXML"
+msgstr "Короткое вступление в VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:135
+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 ""
+"В совокупности XML является очень сложным форматом, и его описание выходит "
+"далеко за рамки этой книги. Тем не менее, для достижения основного понимания "
+"структуры записи VuXML вам понадобится всего лишь понять теги. Имена тегов "
+"XML обрамляются в угловые скобки. Каждый открывающий <tag> должен иметь "
+"совпадающий закрывающий </tag>. Теги могут быть вложенными. При вложенности "
+"внутренние теги должны быть закрыты до закрытия внешних. Существует иерархия "
+"тегов, т.е. более сложные правила вкладывания тегов. Это похоже на HTML. "
+"Основное отличие в расширяемости XML, т.е. в определении собственных тегов. "
+"Из-за своей характерной структуры XML придает форму разрозненным данным. В "
+"частности, XML подходит для разметки описаний уязвимостей безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:137
+msgid "Now consider a realistic VuXML entry:"
+msgstr "Теперь рассмотрим настоящую запись VuXML:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:184
+#, 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>CVE-2023-48795</cvename> <.>\n"
+" <certvu>740169</certvu> <.>\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 ""
+"<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>CVE-2023-48795</cvename> <.>\n"
+" <certvu>740169</certvu> <.>\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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:187
+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:190
+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 ""
+"Это тег верхнего уровня записи VuXML. У него есть обязательный атрибут "
+"`vid`, указывающий на универсальный уникальный идентификатор (UUID) для этой "
+"записи (в кавычках). Вы должны формировать UUID для каждой новой записи "
+"VuXML (и не забудьте заменить ее для шаблона UUID, если вы не пишете запись "
+"с нуля). Для получения VuXML UUID вы можете использовать man:uuidgen[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:192
+msgid "This is a one-line description of the issue found."
+msgstr "Однострочное описание найденной проблемы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:194
+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:198
+#, 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 ""
+"Затронутые версии пакета(ов) указаны там как один или несколько диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>` и `<gt>`. Убедитесь, что указанные диапазоны версий не перекрываются.\n"
+"В спецификации диапазона `\\*` (звёздочка) обозначает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Таким образом, звёздочка может использоваться в диапазоне для соответствия всем возможным версиям `alpha`, `beta` и `RC`. Например, `<ge>2.*</ge><lt>3.*</lt>` выборочно соответствует каждой версии `2.x`, тогда как `<ge>2.0</ge><lt>3.0</lt>` — нет, поскольку последний пропускает `2.r3` и включает `3.b`.\n"
+"Приведённый пример указывает, что затронуты версии `1.6` и выше, но не включая `1.9`, версии `2.x` до `2.4_1` и версия `3.0b1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:200
+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 ""
+"Некоторые связанные группы пакетов (в конечном счете, порты) могут быть "
+"указаны в разделе `<affected>`. Это можно использовать, если некоторые "
+"программные продукты (скажем, FooBar, FreeBar and OpenBar) являются "
+"производными от общей кодовой базы и всё еще совместно используют её ошибки "
+"и уязвимости. Имейте в виду отличие от перечисления множественных имён в "
+"одном разделе <package>."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:202
+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 ""
+"Диапазоны версий должны учитывать `PORTEPOCH` и `PORTREVISION`, если это "
+"применимо. Пожалуйста, помните, что в соответствии с правилами сравнения "
+"строк версия с ненулевым значением `PORTEPOCH` выше, чем любая версия без "
+"`PORTEPOCH`, например, `3.0,1` выше, чем `3.1` или даже `8.9`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:204
+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 ""
+"Сводная информация о проблеме. В этом поле используется XHTML. По крайней "
+"мере, должны быть обрамляющие `<p>` и `</p>`. Может быть использована более "
+"сложная разметка, но только в целях аккуратности и ясности: без эстетства, "
+"пожалуйста."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:206
+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:208
+msgid ""
+"This is a https://www.freebsd.org/security/#adv[FreeBSD security advisory]."
+msgstr ""
+"Это https://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:210
+msgid "This is a https://www.freebsd.org/support/[FreeBSD problem report]."
+msgstr "Это https://www.freebsd.org/support/[сообщение об ошибке FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:212
+msgid "This is a https://cve.mitre.org/[MITRE CVE] identifier."
+msgstr "Идентификатор https://cve.mitre.org/[MITRE CVE]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:214
+msgid "This is a https://www.kb.cert.org/vuls/[US-CERT] vulnerability note."
+msgstr "Это https://www.kb.cert.org/vuls/[SecurityFocus Bug ID]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:216
+msgid ""
+"This is a https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT] "
+"Technical Cyber Security Alert."
+msgstr ""
+"Бюллетень безопасности https://www.cisa.gov/news-events/cybersecurity-"
+"advisories[US-CERT]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:218
+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 ""
+"URL к архивному сообщению в списке рассылки. Атрибут `msgid` является "
+"необязательным и может указывать на message ID сообщения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:220
+msgid ""
+"This is a generic URL. Only it if none of the other reference categories "
+"apply."
+msgstr ""
+"Это общий URL. Используйте его только если ни одна из других категорий "
+"ссылок не подходит."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:222
+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:224
+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:226
+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:228
+#, no-wrap
+msgid "Testing Changes to the VuXML Database"
+msgstr "Тестирование ваших изменений в базе данных VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:231
+msgid ""
+"This example describes a new entry for a vulnerability in the package "
+"`dropbear` that has been fixed in version `dropbear-2013.59`."
+msgstr ""
+"Этот пример описывает новую запись об уязвимости в пакете `dropbear`, "
+"которая была исправлена в версии `dropbear-2013.59`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:233
+msgid ""
+"As a prerequisite, install a fresh version of package:security/vuxml[] port."
+msgstr ""
+"В качестве предварительного условия установите свежую версию порта "
+"package:security/vuxml[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:236
+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 ""
+"Сначала проверьте, есть ли уже запись об этой уязвимости. Если бы такая "
+"запись существовала, она соответствовала бы предыдущей версии пакета "
+"`2013.58`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:240
+#, no-wrap
+msgid "% pkg audit dropbear-2013.58\n"
+msgstr "% pkg audit dropbear-2013.58\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:243
+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:248
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:252
+msgid ""
+"If the vulnerability has a https://cve.mitre.org/[MITRE CVE] identifier, the "
+"following command can be used instead:"
+msgstr ""
+"Если уязвимость имеет идентификатор https://cve.mitre.org/[MITRE CVE], можно "
+"использовать следующую команду:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:257
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry CVE_ID=CVE-YYYY-XXXXX\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry CVE_ID=CVE-YYYY-XXXXX\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:260
+msgid "where `CVE-YYYYY-XXXX` is a valid CVE identifier."
+msgstr "где `CVE-YYYYY-XXXX` является действительным идентификатором CVE."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:263
+msgid ""
+"If the vulnerability is a FreeBSD Security Advisory, the following command "
+"can be used instead:"
+msgstr ""
+"Если уязвимость относится к FreeBSD Security Advisory, вместо этого можно "
+"использовать следующую команду:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:268
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:271
+msgid ""
+"where `FreeBSD-SA-YY-XXXXXX.asc` is a published https://www.freebsd.org/"
+"security/advisories/[FreeBSD Security Advisory]."
+msgstr ""
+"где `FreeBSD-SA-YY-XXXXXX.asc` является опубликованным https://"
+"www.freebsd.org/security/advisories/[FreeBSD Security Advisory]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:273
+msgid "Verify its syntax and formatting:"
+msgstr "Проверьте его синтаксис и форматирование:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:277
+#, no-wrap
+msgid "% make validate\n"
+msgstr "% make validate\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:282
+msgid ""
+"The previous command generates the [.filename]#vuln-flat.xml# file. It can "
+"also be generated with:"
+msgstr ""
+"Предыдущая команда создает файл [.filename]#vuln-flat.xml#. Его также можно "
+"создать с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:286
+#, no-wrap
+msgid "% make vuln-flat.xml\n"
+msgstr "% make vuln-flat.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:291
+msgid ""
+"At least one of these packages needs to be installed: package:textproc/"
+"libxml2[], package:textproc/jade[]."
+msgstr ""
+"Должен быть установлен хотя бы один из следующих пакетов: package:textproc/"
+"libxml2[], package:textproc/jade[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:294
+msgid ""
+"Verify that the `<affected>` section of the entry will match the correct "
+"packages:"
+msgstr ""
+"Проверьте, что раздел `<affected>` записи соответствует правильным пакетам:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:298
+#, no-wrap
+msgid "% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58\n"
+msgstr "% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:301
+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:303
+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:312
+#, 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 ""
+"% 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:314
+#, no-wrap
+msgid "1 problem(s) in the installed packages found.\n"
+msgstr "1 problem(s) in the installed packages found.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:317
+msgid "The former version matches while the latter one does not."
+msgstr "Предыдущая версия совпадает, а последняя — нет."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:319
+#, no-wrap
+msgid "VuXML new entry checklist"
+msgstr "Контрольный список для новой записи в VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:323
+msgid ""
+"Check the name of the port. Sometimes the upstream project name is not "
+"exactly the same as the port name."
+msgstr ""
+"Проверьте название порта. Иногда имя проекта в вышестоящем репозитории не "
+"полностью совпадает с именем порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:327
+msgid ""
+"Add all flavors. When a port has flavors all the package names need to be "
+"added as a `<package>` in the entry. Use the following script to generate "
+"all flavored package names:"
+msgstr ""
+"Добавить все флейворы. Если у порта есть варианты, все имена пакетов должны "
+"быть добавлены в запись как `<package>`. Используйте следующий скрипт для "
+"генерации всех имен пакетов с вариантами:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:331
+#, no-wrap
+msgid "% for flavor in $(make -V FLAVORS); do FLAVOR=\"${flavor}\" make -VPKGNAME;done\n"
+msgstr "% for flavor in $(make -V FLAVORS); do FLAVOR=\"${flavor}\" make -VPKGNAME;done\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:336
+msgid ""
+"Check if the port has `PORTEPOCH`. The above script snippet helps with "
+"that. If the port uses `PORTEPOCH` it is mandatory to add it to the "
+"`<range>` tag."
+msgstr ""
+"Проверить, имеет ли порт `PORTEPOCH`. Приведённый выше фрагмент скрипта "
+"помогает в этом. Если порт использует `PORTEPOCH`, обязательно добавить его "
+"в тег `<range>`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:340
+msgid ""
+"Double check ranges. In the case of ranges limited on both sides, make sure "
+"that the `<ge>` and `<lt>` elements are inside the same `<range>` tag. "
+"Otherwise the entry might end up defining an overlapping range."
+msgstr ""
+"Перепроверьте диапазоны. В случае диапазонов, ограниченных с обеих сторон, "
+"убедитесь, что элементы `<ge>` и `<lt>` находятся внутри одного тега "
+"`<range>`. В противном случае запись может определить перекрывающийся "
+"диапазон."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:349
+msgid ""
+"Cross-check derivatives. Check whether derivatives or forks of the project "
+"included in the ports tree are also affected. For example, if a "
+"vulnerability is discovered in package:www/firefox[], assess whether "
+"derivatives like package:www/librewolf[], package:www/waterfox[] or other "
+"similar projects share the same vulnerability. Include all affected "
+"derivatives in the VuXML entry, ensuring that users of these ports are "
+"informed. Also check if there are Linux versions of the same port in the "
+"tree. For instance, package:databases/sqlite3[] vulnerabilities most likely "
+"affect packages like package:databases/linux-c7-sqlite3[] too."
+msgstr ""
+"Проверка производных версий. Если в вышестоящем проекте обнаружена "
+"уязвимость, проверьте, затронуты ли также производные или форки проекта, "
+"включённые в дерево портов. Например, если уязвимость обнаружена в "
+"package:www/firefox[], оцените, есть ли такая же уязвимость в производных, "
+"таких как package:www/librewolf[], package:www/waterfox[] или других "
+"подобных проектах. Включите все затронутые производные в запись VuXML, чтобы "
+"пользователи этих портов были проинформированы. Также проверьте наличие "
+"Linux-версий этого порта в дереве. Например, уязвимости в package:databases/"
+"sqlite3[] скорее всего затрагивают и пакеты вроде package:databases/linux-c7-"
+"sqlite3[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:349
+msgid "Do not commit an entry without running `make validate` first."
+msgstr "Не делайте коммит записи, не запустив сначала `make validate`."
+
+#, no-wrap
+#~ msgid "Cross-checking Derivatives"
+#~ msgstr "Перекрестная проверка производных"
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 59e22915d2..a71f5e642d 100644
--- a/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 4. Медленное портирование
-prev: books/porters-handbook/quick-porting
+description: 'Описание создания порта FreeBSD, когда программа требует некоторых изменений'
next: books/porters-handbook/makefiles
+params:
+ path: /books/porters-handbook/slow-porting/
+prev: books/porters-handbook/quick-porting
showBookMenu: true
+tags: ["porting", "ports", "slow porting", "guide"]
+title: 'Глава 4. Медленное портирование'
weight: 4
-params:
- path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
@@ -51,23 +53,22 @@ endif::[]
[[slow-work]]
== Как всё это работает
-Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом окне, что сильно поможет в их понимании.
+Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом окне, что сильно поможет его понять.
-Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в [.filename]#bsd.port.mk#, не так уж много людей его понимает... _:->_
+Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в [.filename]#bsd.port.mk#, не так уж много людей его понимает... _:-)_
[.procedure]
-====
. Запускается цель `fetch`. Цель `fetch` отвечает за то, что архив исходных текстов имеется в наличии локально в каталоге `DISTDIR`. Если цель `fetch` не может найти требуемые файлы в каталоге `DISTDIR`, то они будут искаться по указателю URL `MASTER_SITES`, который устанавливается в Makefile, а также на наших FTP зеркалах, куда мы по возможности помещаем дистрибутивные файлы для архива. Затем она попытается сгрузить указанный файл с помощью `FETCH`, полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если файл скачается удачно, то он будет помещен в каталог `DISTDIR` для последующего использования и обработки.
. Выполняется цель `extract`. Она ищет дистрибутивный файл порта (как правило, tar-архив `gzip`) в каталоге `DISTDIR` и распаковывает его во временный каталог, задаваемый переменной `WRKDIR` (по умолчанию [.filename]#work#).
. Выполняется цель `patch`. Во-первых, применяются все патчи, заданные переменной `PATCHFILES`. Во-вторых, если какие-либо файлы с патчами, носящие имена [.filename]#patch-*#, имеются в подкаталоге `PATCHDIR` (по умолчанию это каталог [.filename]#files#), то они применяются в этот момент в алфавитном порядке.
. Запускается цель `configure`. Здесь может выполняться любая из многих различных вещей.
-.. Если существует скрипт [.filename]#scripts/configure#, то он запускается.
-.. Если задана переменная `HAS_CONFIGURE` или `GNU_CONFIGURE`, то запускается скрипт [.filename]#WRKSRC/configure#.
+.. Если он существует, запускается [.filename]#scripts/configure#.
+.. Если установлены `HAS_CONFIGURE` или `GNU_CONFIGURE`, запускается [.filename]#WRKSRC/configure#.
. Выполняется цель `build`. Она отвечает за переход в собственный рабочий каталог порта (`WRKSRC`) и его построение.
. Выполняется цель `stage`. Конечный набор построенных файлов помещается во временный каталог (`STAGEDIR`, смотрите crossref:special[staging,Staging]). Иерархия этого каталога отражает иерархию каталогов системы, в которую данный пакет будет устанавливаться.
-. Выполняется цель `install`. В систему копируются файлы, перечисленные в pkg-plist порта.
-====
+. Выполняется цель `package`. При этом создается пакет с использованием файлов из временного каталога, созданного во время выполнения цели `stage`, и файла [.filename]#pkg-plist# порта.
+. Выполняется цель `install`. Это устанавливает пакет, созданный во время цели `package`, в хост-систему.
Выше перечислены стандартные действия. Кроме того, вы сами можете определить цели `pre-_что-то_` или `post-_что-то_`, или создать скрипты с такими именами в подкаталоге [.filename]#scripts#, и они будут запущены до или после выполнения действий по умолчанию.
@@ -87,15 +88,15 @@ endif::[]
Получите оригинальные исходные тексты (обычно) в виде упакованного tar-архива ([.filename]#foo.tar.gz# или [.filename]#foo.tar.bz2#) и скопируйте его в каталог `DISTDIR`. Всегда используйте исходные тексты _основной ветки разработки_ везде, где это возможно.
-Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно указывало на местоположение оригинального tar-архива. В файле [.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие определения-везде, где это возможно, чтобы избежать проблем повторения одной и той же информации в базе источников. Так как эти сайты со временем меняются, для всех причастных поддержка становится настоящим кошмаром.
+Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно указывало на местоположение оригинального tar-архива. В файле [.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие определения-везде, где это возможно, чтобы избежать проблем повторения одной и той же информации в базе источников. Так как эти сайты со временем меняются, для всех причастных поддержка становится настоящим кошмаром. Для подробностей смотрите crossref:makefiles[makefile-master_sites,`MASTER_SITES`].
Если вы не можете найти FTP/HTTP сайт с хорошим подключением к сети, или находите только сайты, которые имеют раздражающе нестандартные форматы, то можете захотеть поместить копию на надежный сервер FTP или HTTP, который вам доступен (например, ваша домашняя страница).
-Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере `ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной `MASTER_SITES` значение `MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет своё имя пользователя с машины `freefall`.
+Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере `ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной `MASTER_SITES` значение `MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет логин кластера FreeBSD.
Если дистрибутивные файлы вашего порта постоянно меняются по неизвестным причинам без изменения версий со стороны автора, остаётся только поместить дистрибутив на вашу домашнюю Web-страницу и указать её первой в списке `MASTER_SITES`. Если можете, попытайтесь договориться с автором порта об этом; это действительно помогает в достижении некоторого управления исходным кодом. Размещение собственной версии поможет избежать появления ошибок у пользователей типа `checksum mismatch`, а также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер. Также, если у порта имеется только один основной сервер, то рекомендуется поместить архивную копию на свой сайт и указать его в списке `MASTER_SITES` вторым.
-Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание <<porting-patchfiles,PATCHFILES>> ниже).
+Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание crossref:makefiles[porting-patchfiles,PATCHFILES] ниже).
[[slow-modifying]]
== Модификация порта
@@ -110,61 +111,86 @@ endif::[]
====
[[slow-patch]]
-== Создание патчей
+== Работа с патчами
Файлы, которые добавлялись или изменялись в процессе создания порта, могут быть выявлены программой man:diff[1], а результат работы этой программы может быть в дальнейшем передан программе man:patch[1]. Такое действие с обычным файлом подразумевает сохранение копии файла с первоначальным содержимым перед внесением каких-либо изменений.
-[source,shell]
+[source, shell]
....
% cp file file.orig
....
Патчи сохраняются в виде файлов с именем [.filename]#patch-*#, где _*_ обозначает путь к файлу, к которому применяется патч, такой как [.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#.
-После того как файл был изменён, используется man:diff[1] для получения разницы между первоначальной и изменённой версиями. Параметр `-u` указывает man:diff[1] выводить разницу в "унифицированном" формате, который также является предпочтительным.
+[TIP]
+====
+Используйте `BINARY_ALIAS` для замены жёстко заданных команд во время сборки и избежания исправлений в файлах сборки. Подробнее см. в crossref:makefiles[binary-alias,Использование `BINARY_ALIAS` для переименования команд вместо исправления сборки].
+====
+
+[[slow-patch-rules]]
+=== Общие правила для установки патчей
-[source,shell]
+Файлы патчей хранятся в `PATCHDIR`, обычно это [.filename]#files/#, откуда они будут автоматически применены. Все исправления должны быть относительны к `WRKSRC`. Обычно `WRKSRC` является подкаталогом `WRKDIR`, каталога, в котором распаковывается distfile. Используйте `make -V WRKSRC` для просмотра фактического пути. Имена файлов патчей должны соответствовать следующим правилам:
+
+* Избегайте ситуации, когда несколько патчей изменяют один и тот же файл. Например, если и [.filename]#patch-foobar.c#, и [.filename]#patch-foobar.c2# вносят изменения в [.filename]#${WRKSRC}/foobar.c#, это делает их хрупкими и затрудняет отладку.
+* При создании имен для файлов исправлений заменяйте каждое подчеркивание (`\_`) на два подчеркивания (`\__`) и каждый слэш (`/`) на одно подчеркивание (`_`). Например, чтобы исправить файл с именем [.filename]#src/freeglut_joystick.c#, назовите соответствующий исправление [.filename]#patch-src_freeglut__joystick.c#. Не называйте исправления как [.filename]#patch-aa# или [.filename]#patch-ab#. Всегда используйте путь и имя файла в названиях исправлений. Использование `make makepatch` автоматически генерирует правильные имена.
+* Патч может изменять несколько файлов, если изменения связаны между собой и патч назван соответствующим образом. Например, [.filename]#patch-add-missing-stdlib.h#.
+* Используйте только символы `[-+.\_a-zA-Z0-9]` для именования патчей. В частности, __не используйте `::` как разделитель путей,__ вместо этого используйте `_`.
+
+Минимизируйте количество нефункциональных изменений пробелов в патчах. В мире открытого исходного кода распространена практика, когда проекты используют обширные части кодовой базы, но следуют разным правилам стиля и отступов. При переносе работоспособного функционала из одного проекта для исправления аналогичных участков в другом будьте внимательны: итоговый патч может быть переполнен нефункциональными изменениями. Это не только увеличивает размер репозитория портов, но и затрудняет понимание того, что именно вызвало проблему и какие изменения были внесены.
+
+Если файл необходимо удалить, сделайте это в цели `post-extract`, а не как часть исправления.
+
+[[slow-patch-manual]]
+=== Ручное создание патчей
+
+[NOTE]
+====
+Ручное создание патчей обычно не требуется. Предпочтительным методом является автоматическая генерация патчей, как описано ранее в этом разделе. Однако иногда может потребоваться ручное исправление.
+====
+
+Патчи сохраняются в файлы с именами [.filename]#patch-*#, где * указывает на путь к файлу, который патчится, например [.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#. Патчи с именами файлов, не начинающимися с [.filename]#patch-#, не будут применены автоматически.
+
+После изменения файла используется man:diff[1] для записи различий между оригинальной и изменённой версиями. `-u` заставляет man:diff[1] выводить различия файлов в "унифицированном" формате (unified diffs), которые являются предпочтительным форматом.
+
+[source, shell]
....
% diff -u file.orig file > patch-pathname-file
....
Для порождении патчей для новых добавляемых файлов используется параметр `-N`, который заставляет man:diff[1] трактовать несуществующие прежде файлы как если бы они существовали, но имели пустое содержимое:
-[source,shell]
+[source, shell]
....
% diff -u -N newfile.orig newfile > patch-pathname-newfile
....
-Файлы с патчами помещаются в каталоге `PATCHDIR` (как правило, это [.filename]#files/#), откуда они будут взяты автоматически. Все патчи обязаны быть сделаны относительно каталога `WRKSRC` (как правило, это каталог, в который распаковывается исходный архив и где будет выполняться построение). Для упрощения внесения изменений и обновлений избегайте наличия более чем одного патча для одного и того же файла (например, патчей [.filename]#patch-file# и [.filename]#patch-file2#, оба меняющих файл [.filename]#WRKSRC/foobar.c#). Обратите внимание, что если путь к изменяемому файлу содержит символ подчеркивания (`_`), то патч должен содержать в своем имени два подчеркивания вместо одного. Например, для применения патча на файл с именем [.filename]#src/freeglut_joystick.c# соответствующий патч следует назвать [.filename]#patch-src-freeglut__joystick.c#.
-
-Пожалуйста, используйте для именования патчей только символы `[-+._a-zA-Z0-9]`. Не используйте любые другие символы, кроме этих. Не называйте патчи как [.filename]#patch-aa# или [.filename]#patch-ab#, всегда ссылайтесь на путь и название файла в названиях самих патчей.
-
-Существует альтернативный упрощённый способ создания патчей для существующих файлов. Первые шаги те же самые: создание копии неизменённого файла с расширением [.filename]#.orig# и внесение изменений. После этого используйте `make makepatch`, чтобы обновить файлы с патчами в каталоге [.filename]#files# данного порта.
-
-Не помещайте строки RCS в патчи. Subversion будет изменять их при помещении файлов в дерево портов, и когда мы будем их оттуда извлекать, они будут уже другие, поэтому применение патчей окончится неудачей. Строчки RCS предваряются знаком доллара (`$`), и обычно начинаются с `$Id` или `$RCS`.
-
-Использование параметра рекурсии (`-r`) с командой man:diff[1] для генерации патчей - это хорошо, но всё же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в отсутствии ненужного мусора. В частности, diff-разниц между двумя резервными копиями файлов, файлы [.filename]#Makefile#, когда как порт использует `Imake` или GNU-версию программы `configure`, и так далее, не нужны, и должны быть удалены. Если было необходимо отредактировать файл [.filename]#configure.in# и запустить `autoconf` для перегенерации `configure`, не нужно включать файлы diff для `configure` (они частенько вырастают до нескольких тысяч строк!). Вместо этого задайте `USE_AUTOTOOLS=autoconf:261` и включите diff-файл для [.filename]#configure.in#.
-
-Старайтесь минимизировать в патчах объём нефункциональных изменений с пустыми символами. В мире Открытого Исходного Кода является распространенным совместное использование проектами больших объемов кодовой базы, но с различными стилями и правилами отступов. При копировании работающей функциональной части из одного проекта для исправления похожей области в другом, будьте аккуратны, пожалуйста: получаемый однострочный патч может указаться полон нефункциональных изменений. Это не только увеличивает размер репозитория Subversion, но также усложняет поиск того, что конкретно вызвало проблему и что вообще поменялось.
+Использование опции рекурсии (`-r`) в man:diff[1] для создания патчей допустимо, но пожалуйста, проверяйте полученные патчи, чтобы убедиться в отсутствии ненужных данных. В частности, различия между резервными файлами, [.filename]##Makefile##, когда порт использует `Imake` или GNU `configure`, и т.д., являются избыточными и должны быть удалены. Если потребовалось отредактировать [.filename]#configure.in# и запустить `autoconf` для перегенерации `configure`, не включайте различия в `configure` (его объем часто достигает нескольких тысяч строк!). Вместо этого определите `USES=autoreconf` и возьмите различия для [.filename]#configure.in#.
-Если нужно удалить файл, сделайте это при выполнении цели `post-extract`, вместо того чтобы оформлять это как часть патча.
+[[slow-patch-automatic-replacements]]
+=== Простая автоматическая замена
-Простые перемещения могут быть выполнены непосредственно из [.filename]#Makefile# порта с использованием man:sed[1] в режиме in-place. Это удобно, когда при изменении используется значение переменной:
+Простые замены могут быть выполнены напрямую из [.filename]#Makefile# порта, используя режим редактирования на месте утилиты man:sed[1]. Это полезно, когда изменения используют значение переменной:
[.programlisting]
....
post-patch:
- @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
+ @${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile
....
-Довольно часто в исходных файлах портируемого программного обеспечения используется конвенция CR/LF. Это может стать причиной проблем с дальнейшей упаковкой, предупреждениями компилятора или выполнением скриптов (таких как `/bin/sh^M not found`). Для быстрого преобразования всех файлов из CR/LF просто в LF добавьте в [.filename]#Makefile# порта эту запись:
+[IMPORTANT]
+====
+Используйте man:sed[1] только для замены изменяемого содержимого. Для замены статического содержимого необходимо использовать файлы исправлений вместо man:sed[1].
+====
+
+Довольно часто портируемое программное обеспечение использует соглашение CR/LF в исходных файлах. Это может вызвать проблемы с дальнейшим наложением патчей, предупреждениями компилятора или выполнением скриптов (например, `/bin/sh^M не найден`). Для быстрого преобразования всех файлов из CR/LF в просто LF добавьте следующую запись в [.filename]#Makefile# порта:
[.programlisting]
....
USES= dos2unix
....
-Может быть задан точный список преобразуемых файлов:
+Список конкретных файлов для преобразования может быть указан:
[.programlisting]
....
@@ -172,7 +198,7 @@ USES= dos2unix
DOS2UNIX_FILES= util.c util.h
....
-Используйте `DOS2UNIX_REGEX`, чтобы преобразовать группу файлов в разных подкаталогах. Его параметром является регулярное выражение, совместимое с man:find[1]. Подробнее о формате в man:re_format[7]. Такой вариант удобен для преобразования всех файлов заданного расширения. Для примера, преобразуем все исходные файлы, не затрагивая двоичные файлы:
+Используйте `DOS2UNIX_REGEX` для преобразования группы файлов во вложенных каталогах. Его аргумент — это совместимое с man:find[1] регулярное выражение. Подробнее о формате можно узнать в man:re_format[7]. Эта опция полезна для преобразования всех файлов с заданным расширением. Например, преобразовать все исходные файлы кода, оставив двоичные файлы без изменений:
[.programlisting]
....
@@ -180,7 +206,7 @@ USES= dos2unix
DOS2UNIX_REGEX= .*\.([ch]|cpp)
....
-Другим вариантом является использование `DOS2UNIX_GLOB`, который вызывает `find` для каждого из перечисленных в нём элементов.
+Аналогичной опцией является `DOS2UNIX_GLOB`, которая запускает `find` для каждого указанного в ней элемента.
[.programlisting]
....
@@ -188,6 +214,79 @@ USES= dos2unix
DOS2UNIX_GLOB= *.c *.cpp *.h
....
+Базовый каталог для преобразования может быть установлен. Это полезно, когда имеется несколько distfiles и в нескольких из них содержатся файлы, требующие преобразования окончаний строк.
+
+[.programlisting]
+....
+USES= dos2unix
+DOS2UNIX_WRKSRC= ${WRKDIR}
+....
+
+[[slow-patch-extra]]
+=== Внесение исправлений при условии
+
+Некоторые порты требуют патчей, которые применяются только для определённых версий FreeBSD или при включении или отключении конкретной опции. Условные патчи указываются путём размещения полных путей к файлам патчей в `EXTRA_PATCHES`. Имена файлов условных патчей обычно начинаются с [.filename]#extra-#, хотя это и не обязательно. Однако их имена _не должны_ начинаться с [.filename]#patch-#. Если это произойдёт, они будут применены безусловно фреймворком, что нежелательно для условных патчей.
+
+[[slow-patch-extra-ex1]]
+.Применение патча для конкретной версии FreeBSD
+[example]
+====
+[.programlisting]
+....
+.include <bsd.port.options.mk>
+
+# Patch in the iconv const qualifier before this
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-fbsd10
+.endif
+
+.include <bsd.port.mk>
+....
+
+====
+
+[[slow-patch-extra-ex2]]
+.Опциональное применение патча
+[example]
+====
+Когда для crossref:makefiles[makefile-options,опции] требуется патч, используйте ``opt_EXTRA_PATCHES`` и ``opt_EXTRA_PATCHES_OFF``, чтобы сделать исправление зависимым от опции `opt`. Дополнительные сведения см. в crossref:makefiles[options-variables,Generic Variables Replacement, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+
+[.programlisting]
+....
+OPTIONS_DEFINE= FOO BAR
+FOO_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-foo
+BAR_EXTRA_PATCHES_OFF= ${PATCHDIR}/extra-patch-bar.c \
+ ${PATCHDIR}/extra-patch-bar.h
+....
+
+====
+
+[[slow-patch-extra-ex-dirs]]
+.Использование `EXTRA_PATCHES` с директорией
+[example]
+====
+Иногда для функции требуется множество патчей, в таком случае можно указать `EXTRA_PATCHES` на директорию, и все файлы с именем [.filename]#patch-*# в ней будут применены автоматически.
+
+Создайте подкаталог в [.filename]#${PATCHDIR}# и переместите в него патчи. Например:
+
+[source, shell]
+....
+% 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.ac
+....
+
+Затем добавьте это в [.filename]#Makefile#:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= FOO
+FOO_EXTRA_PATCHES= ${PATCHDIR}/foo-patches
+....
+
+Затем фреймворк использует все файлы с именем [.filename]#patch-*# в этом каталоге.
+====
+
[[slow-configure]]
== Конфигурирование
diff --git a/documentation/content/ru/books/porters-handbook/slow-porting/_index.po b/documentation/content/ru/books/porters-handbook/slow-porting/_index.po
new file mode 100644
index 0000000000..388441324e
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/slow-porting/_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.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookslow-porting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Описание создания порта FreeBSD, когда программа требует некоторых изменений"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Slow Porting"
+msgstr "Глава 4. Медленное портирование"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:14
+#, no-wrap
+msgid "Slow Porting"
+msgstr "Медленное портирование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:53
+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:55
+#, no-wrap
+msgid "How Things Work"
+msgstr "Как всё это работает"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:59
+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 ""
+"Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, "
+"происходит целая череда событий. Во время чтения этого текста может "
+"оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом "
+"окне, что сильно поможет его понять."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:61
+msgid ""
+"But do not worry, not many people understand exactly how "
+"[.filename]#bsd.port.mk# is working... _:-)_"
+msgstr ""
+"Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в "
+"[.filename]#bsd.port.mk#, не так уж много людей его понимает... _:-)_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:64
+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 ""
+"Запускается цель `fetch`. Цель `fetch` отвечает за то, что архив исходных "
+"текстов имеется в наличии локально в каталоге `DISTDIR`. Если цель `fetch` "
+"не может найти требуемые файлы в каталоге `DISTDIR`, то они будут искаться "
+"по указателю URL `MASTER_SITES`, который устанавливается в Makefile, а также "
+"на наших FTP зеркалах, куда мы по возможности помещаем дистрибутивные файлы "
+"для архива. Затем она попытается сгрузить указанный файл с помощью `FETCH`, "
+"полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если "
+"файл скачается удачно, то он будет помещен в каталог `DISTDIR` для "
+"последующего использования и обработки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:65
+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 ""
+"Выполняется цель `extract`. Она ищет дистрибутивный файл порта (как правило, "
+"tar-архив `gzip`) в каталоге `DISTDIR` и распаковывает его во временный "
+"каталог, задаваемый переменной `WRKDIR` (по умолчанию [.filename]#work#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:66
+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 ""
+"Выполняется цель `patch`. Во-первых, применяются все патчи, заданные "
+"переменной `PATCHFILES`. Во-вторых, если какие-либо файлы с патчами, носящие "
+"имена [.filename]#patch-*#, имеются в подкаталоге `PATCHDIR` (по умолчанию "
+"это каталог [.filename]#files#), то они применяются в этот момент в "
+"алфавитном порядке."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:67
+msgid ""
+"The `configure` target is run. This can do any one of many different things."
+msgstr ""
+"Запускается цель `configure`. Здесь может выполняться любая из многих "
+"различных вещей."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:68
+msgid "If it exists, [.filename]#scripts/configure# is run."
+msgstr "Если он существует, запускается [.filename]#scripts/configure#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:69
+msgid ""
+"If `HAS_CONFIGURE` or `GNU_CONFIGURE` is set, [.filename]#WRKSRC/configure# "
+"is run."
+msgstr ""
+"Если установлены `HAS_CONFIGURE` или `GNU_CONFIGURE`, запускается "
+"[.filename]#WRKSRC/configure#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:71
+msgid ""
+"The `build` target is run. This is responsible for descending into the "
+"port's private working directory (`WRKSRC`) and building it."
+msgstr ""
+"Выполняется цель `build`. Она отвечает за переход в собственный рабочий "
+"каталог порта (`WRKSRC`) и его построение."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:72
+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 ""
+"Выполняется цель `stage`. Конечный набор построенных файлов помещается во "
+"временный каталог (`STAGEDIR`, смотрите crossref:special[staging,Staging]). "
+"Иерархия этого каталога отражает иерархию каталогов системы, в которую "
+"данный пакет будет устанавливаться."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:73
+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 ""
+"Выполняется цель `package`. При этом создается пакет с использованием файлов "
+"из временного каталога, созданного во время выполнения цели `stage`, и файла "
+"[.filename]#pkg-plist# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:74
+msgid ""
+"The `install` target is run. This installs the package created during the "
+"`package` target into the host system."
+msgstr ""
+"Выполняется цель `install`. Это устанавливает пакет, созданный во время цели "
+"`package`, в хост-систему."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:76
+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 ""
+"Выше перечислены стандартные действия. Кроме того, вы сами можете определить "
+"цели `pre-_что-то_` или `post-_что-то_`, или создать скрипты с такими "
+"именами в подкаталоге [.filename]#scripts#, и они будут запущены до или "
+"после выполнения действий по умолчанию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:82
+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 ""
+"Например, если у вас есть цель `post-extract`, определённая в вашем файле "
+"[.filename]#Makefile# и файл [.filename]#pre-build# в подкаталоге "
+"[.filename]#scripts#, то после выполнения обычных действий по распаковке, "
+"будет вызвана цель `post-extract` а скрипт [.filename]#pre-build# будет "
+"выполнен перед запуском стандартных правил построения. Рекомендуется "
+"использовать цели из [.filename]#Makefile#, если действия достаточно просты, "
+"потому что в дальнейшем будет проще определить, какие нестандартные действия "
+"требует порт."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:86
+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 ""
+"Действия по умолчанию выполняются целями `do-_что-то_` из "
+"[.filename]#bsd.port.mk#. Например, команды для распаковки порта находятся в "
+"цели `do-extract`. Если вам не хватает цели по умолчанию, вы можете ее "
+"исправить, переопределив цель `do-_something_` в вашем файле "
+"[.filename]#Makefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:92
+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 ""
+"\"Основные\" цели (к примеру, `extract`, `configure` и так далее) не делают "
+"ничего больше, чем проверяют успешность завершения всех предыдущих шагов и "
+"вызывают настоящие цели или скрипты, и их не нужно менять. Если вам нужно "
+"изменить распаковку, исправляйте `do-extract`, но никогда не меняйте способ "
+"работы `extract`! Кроме того, цель `post-deinstall` является "
+"недействительной и не выполняется инфраструктурой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:95
+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 ""
+"Теперь, когда вы представляете, что происходит, когда пользователь набирает "
+"команду `make install`, давайте пройдемся через шаги, рекомендуемые для "
+"создания настоящего порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:97
+#, no-wrap
+msgid "Getting the Original Sources"
+msgstr "Получение исходного кода"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:101
+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 ""
+"Получите оригинальные исходные тексты (обычно) в виде упакованного tar-"
+"архива ([.filename]#foo.tar.gz# или [.filename]#foo.tar.bz2#) и скопируйте "
+"его в каталог `DISTDIR`. Всегда используйте исходные тексты _основной ветки "
+"разработки_ везде, где это возможно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:108
+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 ""
+"Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно "
+"указывало на местоположение оригинального tar-архива. В файле "
+"[.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства "
+"популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие "
+"определения-везде, где это возможно, чтобы избежать проблем повторения одной "
+"и той же информации в базе источников. Так как эти сайты со временем "
+"меняются, для всех причастных поддержка становится настоящим кошмаром. Для "
+"подробностей смотрите crossref:makefiles[makefile-"
+"master_sites,`MASTER_SITES`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:110
+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 ""
+"Если вы не можете найти FTP/HTTP сайт с хорошим подключением к сети, или "
+"находите только сайты, которые имеют раздражающе нестандартные форматы, то "
+"можете захотеть поместить копию на надежный сервер FTP или HTTP, который вам "
+"доступен (например, ваша домашняя страница)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:114
+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 ""
+"Если вы не можете найти доступного и надёжного места для помещения "
+"дистрибутивного файла, то мы сами сможем разместить его на сервере "
+"`ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный "
+"файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного "
+"из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, "
+"сделать это. Этот человек также задаст переменной `MASTER_SITES` значение "
+"`MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет логин "
+"кластера FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:119
+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 ""
+"Если дистрибутивные файлы вашего порта постоянно меняются по неизвестным "
+"причинам без изменения версий со стороны автора, остаётся только поместить "
+"дистрибутив на вашу домашнюю Web-страницу и указать её первой в списке "
+"`MASTER_SITES`. Если можете, попытайтесь договориться с автором порта об "
+"этом; это действительно помогает в достижении некоторого управления исходным "
+"кодом. Размещение собственной версии поможет избежать появления ошибок у "
+"пользователей типа `checksum mismatch`, а также уменьшит нагрузку на людей, "
+"сопровождающих наш FTP-сервер. Также, если у порта имеется только один "
+"основной сервер, то рекомендуется поместить архивную копию на свой сайт и "
+"указать его в списке `MASTER_SITES` вторым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:123
+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 ""
+"Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, "
+"скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они "
+"находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем "
+"обрабатывать такие ситуации (смотрите описание crossref:makefiles[porting-"
+"patchfiles,PATCHFILES] ниже)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:125
+#, no-wrap
+msgid "Modifying the Port"
+msgstr "Модификация порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:130
+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 ""
+"Распакуйте копию дистрибутивного файла в отдельный каталог и внесите "
+"изменения, которые необходимы для того, чтобы порт компилировался нормально "
+"в текущей версии FreeBSD. _Тщательно отслеживайте_ все, что вы делаете, этот "
+"процесс вам предстоит автоматизировать. Все, включая удаление, добавление "
+"или модификацию в файлах должны будут выполняться автоматически с помощью "
+"скриптов или файлов патчей, когда вы завершите работу над портом."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:133
+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 ""
+"Если вашему порту во время компиляции, установки и настройки требуется "
+"довольно много взаимодействовать с пользователем, то посмотрите на один из "
+"классических скриптов Configure Лэрри Уолла (Larry Wall) и сделайте сами что-"
+"либо подобное. Предназначение новой коллекции портов - это сделать каждое "
+"приложение в стиле \"plug-and-play\" настолько, насколько это вообще "
+"возможно для конечного пользователя при минимальном использовании дискового "
+"пространства."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:137
+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 ""
+"Если явно не указано обратное, то патчи, скрипты и другие файлы, которые вы "
+"создали и предоставили для Коллекции Портов FreeBSD, неявно подпадают под "
+"стандартные условия лицензии BSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:140
+#, no-wrap
+msgid "Patching"
+msgstr "Работа с патчами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:144
+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 ""
+"Файлы, которые добавлялись или изменялись в процессе создания порта, могут "
+"быть выявлены программой man:diff[1], а результат работы этой программы "
+"может быть в дальнейшем передан программе man:patch[1]. Такое действие с "
+"обычным файлом подразумевает сохранение копии файла с первоначальным "
+"содержимым перед внесением каких-либо изменений."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:148
+#, no-wrap
+msgid "% cp file file.orig\n"
+msgstr "% cp file file.orig\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:152
+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 ""
+"Патчи сохраняются в виде файлов с именем [.filename]#patch-*#, где _*_ "
+"обозначает путь к файлу, к которому применяется патч, такой как "
+"[.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:157
+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 ""
+"Используйте `BINARY_ALIAS` для замены жёстко заданных команд во время сборки "
+"и избежания исправлений в файлах сборки. Подробнее см. в "
+"crossref:makefiles[binary-alias,Использование `BINARY_ALIAS` для "
+"переименования команд вместо исправления сборки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:160
+#, no-wrap
+msgid "General Rules for Patching"
+msgstr "Общие правила для установки патчей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:167
+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 ""
+"Файлы патчей хранятся в `PATCHDIR`, обычно это [.filename]#files/#, откуда "
+"они будут автоматически применены. Все исправления должны быть относительны "
+"к `WRKSRC`. Обычно `WRKSRC` является подкаталогом `WRKDIR`, каталога, в "
+"котором распаковывается distfile. Используйте `make -V WRKSRC` для просмотра "
+"фактического пути. Имена файлов патчей должны соответствовать следующим "
+"правилам:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:169
+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 ""
+"Избегайте ситуации, когда несколько патчей изменяют один и тот же файл. "
+"Например, если и [.filename]#patch-foobar.c#, и [.filename]#patch-foobar.c2# "
+"вносят изменения в [.filename]#${WRKSRC}/foobar.c#, это делает их хрупкими и "
+"затрудняет отладку."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:170
+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 ""
+"При создании имен для файлов исправлений заменяйте каждое подчеркивание "
+"(`\\_`) на два подчеркивания (`\\__`) и каждый слэш (`/`) на одно "
+"подчеркивание (`_`). Например, чтобы исправить файл с именем [.filename]#src/"
+"freeglut_joystick.c#, назовите соответствующий исправление [.filename]#patch-"
+"src_freeglut__joystick.c#. Не называйте исправления как [.filename]#patch-"
+"aa# или [.filename]#patch-ab#. Всегда используйте путь и имя файла в "
+"названиях исправлений. Использование `make makepatch` автоматически "
+"генерирует правильные имена."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:171
+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 ""
+"Патч может изменять несколько файлов, если изменения связаны между собой и "
+"патч назван соответствующим образом. Например, [.filename]#patch-add-missing-"
+"stdlib.h#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:172
+msgid ""
+"Only use characters `[-+.\\_a-zA-Z0-9]` for naming patches. In particular, "
+"__do not use `::` as a path separator,__ use `_` instead."
+msgstr ""
+"Используйте только символы `[-+.\\_a-zA-Z0-9]` для именования патчей. В "
+"частности, __не используйте `::` как разделитель путей,__ вместо этого "
+"используйте `_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:177
+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:179
+msgid ""
+"If a file must be deleted, do it in the `post-extract` target rather than as "
+"part of the patch."
+msgstr ""
+"Если файл необходимо удалить, сделайте это в цели `post-extract`, а не как "
+"часть исправления."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:181
+#, no-wrap
+msgid "Manual Patch Generation"
+msgstr "Ручное создание патчей"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:188
+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:193
+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 ""
+"Патчи сохраняются в файлы с именами [.filename]#patch-*#, где * указывает на "
+"путь к файлу, который патчится, например [.filename]#patch-Imakefile# или "
+"[.filename]#patch-src-config.h#. Патчи с именами файлов, не начинающимися с "
+"[.filename]#patch-#, не будут применены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:196
+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 ""
+"После изменения файла используется man:diff[1] для записи различий между "
+"оригинальной и изменённой версиями. `-u` заставляет man:diff[1] выводить "
+"различия файлов в \"унифицированном\" формате (unified diffs), которые "
+"являются предпочтительным форматом."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:200
+#, no-wrap
+msgid "% diff -u file.orig file > patch-pathname-file\n"
+msgstr "% diff -u file.orig file > patch-pathname-file\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:203
+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 ""
+"Для порождении патчей для новых добавляемых файлов используется параметр `-"
+"N`, который заставляет man:diff[1] трактовать несуществующие прежде файлы "
+"как если бы они существовали, но имели пустое содержимое:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:207
+#, no-wrap
+msgid "% diff -u -N newfile.orig newfile > patch-pathname-newfile\n"
+msgstr "% diff -u -N newfile.orig newfile > patch-pathname-newfile\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:213
+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 ""
+"Использование опции рекурсии (`-r`) в man:diff[1] для создания патчей "
+"допустимо, но пожалуйста, проверяйте полученные патчи, чтобы убедиться в "
+"отсутствии ненужных данных. В частности, различия между резервными файлами, "
+"[.filename]##Makefile##, когда порт использует `Imake` или GNU `configure`, "
+"и т.д., являются избыточными и должны быть удалены. Если потребовалось "
+"отредактировать [.filename]#configure.in# и запустить `autoconf` для "
+"перегенерации `configure`, не включайте различия в `configure` (его объем "
+"часто достигает нескольких тысяч строк!). Вместо этого определите "
+"`USES=autoreconf` и возьмите различия для [.filename]#configure.in#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:215
+#, no-wrap
+msgid "Simple Automatic Replacements"
+msgstr "Простая автоматическая замена"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:219
+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 ""
+"Простые замены могут быть выполнены напрямую из [.filename]#Makefile# порта, "
+"используя режим редактирования на месте утилиты man:sed[1]. Это полезно, "
+"когда изменения используют значение переменной:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:224
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:230
+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 ""
+"Используйте man:sed[1] только для замены изменяемого содержимого. Для замены "
+"статического содержимого необходимо использовать файлы исправлений вместо "
+"man:sed[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:235
+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 ""
+"Довольно часто портируемое программное обеспечение использует соглашение CR/"
+"LF в исходных файлах. Это может вызвать проблемы с дальнейшим наложением "
+"патчей, предупреждениями компилятора или выполнением скриптов (например, `/"
+"bin/sh^M не найден`). Для быстрого преобразования всех файлов из CR/LF в "
+"просто LF добавьте следующую запись в [.filename]#Makefile# порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:239
+#, no-wrap
+msgid "USES=\tdos2unix\n"
+msgstr "USES=\tdos2unix\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:242
+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:247
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_FILES=\tutil.c util.h\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_FILES=\tutil.c util.h\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:254
+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 ""
+"Используйте `DOS2UNIX_REGEX` для преобразования группы файлов во вложенных "
+"каталогах. Его аргумент — это совместимое с man:find[1] регулярное "
+"выражение. Подробнее о формате можно узнать в man:re_format[7]. Эта опция "
+"полезна для преобразования всех файлов с заданным расширением. Например, "
+"преобразовать все исходные файлы кода, оставив двоичные файлы без изменений:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:259
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_REGEX=\t.*\\.([ch]|cpp)\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_REGEX=\t.*\\.([ch]|cpp)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:262
+msgid ""
+"A similar option is `DOS2UNIX_GLOB`, which runs `find` for each element "
+"listed in it."
+msgstr ""
+"Аналогичной опцией является `DOS2UNIX_GLOB`, которая запускает `find` для "
+"каждого указанного в ней элемента."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:267
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_GLOB=\t*.c *.cpp *.h\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_GLOB=\t*.c *.cpp *.h\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:271
+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 ""
+"Базовый каталог для преобразования может быть установлен. Это полезно, когда "
+"имеется несколько distfiles и в нескольких из них содержатся файлы, "
+"требующие преобразования окончаний строк."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:276
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_WRKSRC=\t${WRKDIR}\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_WRKSRC=\t${WRKDIR}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:279
+#, no-wrap
+msgid "Patching Conditionally"
+msgstr "Внесение исправлений при условии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:286
+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 ""
+"Некоторые порты требуют патчей, которые применяются только для определённых "
+"версий FreeBSD или при включении или отключении конкретной опции. Условные "
+"патчи указываются путём размещения полных путей к файлам патчей в "
+"`EXTRA_PATCHES`. Имена файлов условных патчей обычно начинаются с "
+"[.filename]#extra-#, хотя это и не обязательно. Однако их имена _не должны_ "
+"начинаться с [.filename]#patch-#. Если это произойдёт, они будут применены "
+"безусловно фреймворком, что нежелательно для условных патчей."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:288
+#, no-wrap
+msgid "Applying a Patch for a Specific FreeBSD Version"
+msgstr "Применение патча для конкретной версии FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:294
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:299
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:301
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:306
+#, no-wrap
+msgid "Optionally Applying a Patch"
+msgstr "Опциональное применение патча"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:311
+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 ""
+"Когда для crossref:makefiles[makefile-options,опции] требуется патч, "
+"используйте ``opt_EXTRA_PATCHES`` и ``opt_EXTRA_PATCHES_OFF``, чтобы сделать "
+"исправление зависимым от опции `opt`. Дополнительные сведения см. в "
+"crossref:makefiles[options-variables,Generic Variables Replacement, "
+"`OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:318
+#, 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 ""
+"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"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:323
+#, no-wrap
+msgid "Using `EXTRA_PATCHES` With a Directory"
+msgstr "Использование `EXTRA_PATCHES` с директорией"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:328
+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 ""
+"Иногда для функции требуется множество патчей, в таком случае можно указать "
+"`EXTRA_PATCHES` на директорию, и все файлы с именем [.filename]#patch-*# в "
+"ней будут применены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:331
+msgid ""
+"Create a subdirectory in [.filename]#${PATCHDIR}#, and move the patches in "
+"it. For example:"
+msgstr ""
+"Создайте подкаталог в [.filename]#${PATCHDIR}# и переместите в него патчи. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:337
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:340
+msgid "Then add this to the [.filename]#Makefile#:"
+msgstr "Затем добавьте это в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:345
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO\n"
+"FOO_EXTRA_PATCHES=\t${PATCHDIR}/foo-patches\n"
+msgstr ""
+"OPTIONS_DEFINE=\tFOO\n"
+"FOO_EXTRA_PATCHES=\t${PATCHDIR}/foo-patches\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:348
+msgid ""
+"The framework will then use all the files named [.filename]#patch-*# in that "
+"directory."
+msgstr ""
+"Затем фреймворк использует все файлы с именем [.filename]#patch-*# в этом "
+"каталоге."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:351
+#, no-wrap
+msgid "Configuring"
+msgstr "Конфигурирование"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:355
+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 ""
+"Поместите все дополнительные команды, требуемые для настройки, в ваш скрипт "
+"[.filename]#configure# и сохраните его в подкаталоге [.filename]#scripts#. "
+"Как отмечено выше, вы можете сделать это целями в файле "
+"[.filename]#Makefile# и/или скриптами с именами [.filename]#pre-configure# "
+"или [.filename]#post-configure#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:357
+#, no-wrap
+msgid "Handling User Input"
+msgstr "Обработка пользовательского ввода"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:364
+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 ""
+"Если для построения, конфигурации или установки вашего порта требуется "
+"некоторый ввод со стороны пользователя, то вы должны задать переменную "
+"`IS_INTERACTIVE` в вашем файле [.filename]#Makefile#. В случае \"ночного "
+"построения\" это позволит пропустить ваш порт, если пользователь в своем "
+"окружении задал переменную `BATCH` (и если пользователь установил переменную "
+"`INTERACTIVE`, то будут строиться _только_ порты, которые требуют "
+"взаимодействия с пользователем. Это сэкономит значительное количество "
+"времени на части машин, которые постоянно строят порты (смотрите ниже)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:366
+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 ""
+"При наличии разумных ответов на задаваемые вопросы, подходящих по умолчанию, "
+"также рекомендуется проверять переменную `PACKAGE_BUILDING` и выключать "
+"интерактивный скрипт, если он есть. Это позволит нам строить пакеты для "
+"помещения на компакт-диски и FTP-серверы."
diff --git a/documentation/content/ru/books/porters-handbook/special/_index.adoc b/documentation/content/ru/books/porters-handbook/special/_index.adoc
index 9bfdfcc275..14f3d94db3 100644
--- a/documentation/content/ru/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/special/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 6. Особые соглашения
+description: 'Особые соображения при создании нового порта FreeBSD'
+next: books/porters-handbook/flavors
+params:
+ path: /books/porters-handbook/special/
prev: books/porters-handbook/makefiles
-next: books/porters-handbook/plist
showBookMenu: true
+tags: ["special considerations", "Handling Symbolic Links", "Bundled Libraries"]
+title: 'Глава 6. Особые соглашения'
weight: 6
-params:
- path: "/books/porters-handbook/special/"
---
[[special]]
@@ -48,17 +50,31 @@ endif::[]
Имеется ещё несколько вещей, которые вы должны иметь в виду при создании порта. Этот раздел описывает наиболее часто встречающиеся из них.
+[[splitting-long-files]]
+== Разделение длинных файлов
+
+Иногда [.filename]#Makefiles# могут быть очень длинными. Например, порты rust могут содержать очень длинный список `CARGO_CRATES`. В других случаях [.filename]#Makefile# может содержать код, который варьируется в зависимости от архитектуры. В таких ситуациях может быть удобно разделить исходный [.filename]#Makefile# на несколько файлов. [.filename]#bsd.port.mk# автоматически включает некоторые типы [.filename]#Makefiles# в основной [.filename]#Makefile# порта.
+
+Вот файлы, которые система обрабатывает автоматически, если они обнаружены:
+
+* [.filename]#Makefile.crates#. Пример можно найти в пакете package:audio/ebur128[].
+* [.filename]#Makefile.inc#. Пример можно найти в пакете package:net/ntp[].
+* [.filename]#Makefile.${ARCH}-${OPSYS}#
+* [.filename]#Makefile.${OPSYS}#. Пример можно найти в пакете package:net/cvsup-static[].
+* [.filename]#Makefile.${ARCH}#
+* [.filename]#Makefile.local#
+
+Также распространённой практикой является разделение списка пакетов порта на несколько файлов, если список сильно различается в зависимости от архитектуры или выбранного флейвора. В этом случае файл [.filename]#pkg-plist# для каждой архитектуры именуется по шаблону [.filename]#pkg-plist.${ARCH}# или [.filename]#pkg-plist.${FLAVOR}#. Фреймворк не создаёт список пакетов автоматически, если существует несколько файлов [.filename]#pkg-plist#. Ответственность за выбор подходящего файла [.filename]#pkg-plist# и его присвоение переменной `PLIST` лежит на того, кто делает порт. Примеры работы с этим можно найти в портах package:audio/logitechmediaserver[] и package:deskutils/libportal[].
+
[[staging]]
== Staging
-[.filename]#bsd.port.mk# ожидает от портов работу с "каталогом сборки". Это означает, что порт должен устанавливать файлы не напрямую в назначенные каталоги (то есть, например, под `PREFIX`), а в отдельный каталог, из которого затем собирается пакет. Во многих случаях привилегии root для этого не требуются, что делает возможным сборку пакетов из-под непривилегированного пользователя. В режиме staging порт собирается и устанавливается в каталог сборки `STAGEDIR`. Пакет создается из каталога сборки и затем устанавливается в систему. В инструментарии automake такая концепция именуется `DESTDIR`; в прочем, в FreeBSD `DESTDIR` имеет собственное значение (смотрите crossref:testing[porting-prefix, `PREFIX` и `DESTDIR`]).
-
-Если для порта всё ещё требуются системные привилегии при выполнении цели `package`, то в [.filename]#Makefile# должна быть добавлена следующая строка:
+[.filename]#bsd.port.mk# ожидает, что порты будут работать с "директорией стадии". Это означает, что порт не должен устанавливать файлы напрямую в обычные целевые директории (например, под `PREFIX`), а вместо этого в отдельную директорию, из которой затем собирается пакет. Во многих случаях это не требует прав root, что позволяет собирать пакеты от имени непривилегированного пользователя. При использовании стадии порт собирается и устанавливается в директорию стадии `STAGEDIR`. Пакет создаётся из директории стадии и затем устанавливается в систему. Инструменты Automake называют эту концепцию `DESTDIR`, но в FreeBSD `DESTDIR` имеет другое значение (см. crossref:testing[porting-prefix,`PREFIX` и `DESTDIR`]).
-[.programlisting]
-....
-NEED_ROOT= yes
-....
+[NOTE]
+====
+Ни один порт _на самом деле_ не должен работать от root. Этого в большинстве случаев можно избежать, используя crossref:uses[uses-uidfix,`USES=uidfix`]. Если порт всё ещё выполняет команды, такие как man:chown[8], man:chgrp[1], или принудительно устанавливает владельца или группу с помощью man:install[1], то используйте crossref:uses[uses-fakeroot,`USES=fakeroot`], чтобы подделать эти вызовы. Потребуется некоторая правка [.filename]#Makefiles# порта.
+====
Метапорты, то есть порты, которые не устанавливают файлы непосредственно, а только зависят от других портов, должны по возможности избегать распаковки man:mtree[8] в каталог сборки. Это основная иерархия каталогов пакета, и эти пустые каталоги будут выглядеть лишними. Для предотвращения распаковки man:mtree[8] добавьте эту строку:
@@ -67,18 +83,97 @@ NEED_ROOT= yes
NO_MTREE= yes
....
-Staging задействуется посредством добавления переменной `STAGEDIR` слева от путей, которые используются в целях `pre-install`, `do-install` и `post-install` (смотрите примеры в книге). Обычно сюда относятся `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `MANPREFIX`, `DOCSDIR` и так далее. Каталоги должны создаваться при выполнении цели `post-install`. Избегайте использования абсолютных путей, когда это возможно.
+[TIP]
+====
+Метапорты должны использовать crossref:special[uses-metaport,`USES=metaport`]. Это устанавливает значения по умолчанию для портов, которые не загружают, не собирают и не устанавливают ничего.
+====
+
+Этап подготовки включается путем добавления `STAGEDIR` к путям, используемым в целях `pre-install`, `do-install` и `post-install` (см. примеры в книге). Обычно это включает `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `DOCSDIR` и т. д. Каталоги должны создаваться как часть цели `post-install`. По возможности избегайте использования абсолютных путей.
+
+[TIP]
+====
+Порты, которые устанавливают модули ядра, должны добавлять `STAGEDIR` к пути назначения, по умолчанию это [.filename]#/boot/modules#.
+====
-При создании символический ссылки `STAGEDIR` должен ставиться только для пути назначения. Например:
+[[staging-symlink]]
+=== Обработка символических ссылок
+
+При создании символической ссылки настоятельно рекомендуется использовать относительные пути. Используйте `${RLN}` для создания относительных символических ссылок. Эта команда использует man:install[1] для автоматического определения относительной ссылки, которую нужно создать.
+
+[[staging-ex1]]
+.Автоматическое создание относительных символических ссылок
+[example]
+====
+`${RLN}` использует относительную символическую ссылку из man:install[1], что освобождает сборщика порта от вычисления относительного пути.
[.programlisting]
....
-${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
+${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
+${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar
+${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo
+....
+
+Будет создано:
+
+[source, shell]
+....
+% ls -lF ${STAGEDIR}${PREFIX}/lib
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 libfoo.so@ -> libfoo.so.42
+-rwxr-xr-x 1 nobody nobody 15 Aug 3 11:24 libfoo.so.42*
+% ls -lF ${STAGEDIR}${PREFIX}/bin
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar
+% ls -lF ${STAGEDIRDIR}${PREFIX}/share
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 foo@ -> ../../../var/cache/foo
....
-Первоначальный путь [.filename]#${PREFIX}/lib/libfoo.so.42# выглядит нормально, но по факту может быть неправильным. Абсолютные пути могут указывать на неподходящее место, например, когда удалённая файловая система смонтирована по NFS как непривилегированная точка монтирования. Относительные пути реже подвержены проблемам и часто намного короче.
+====
+
+[[bundled-libs]]
+== Встроенные библиотеки
+
+Этот раздел объясняет, почему встроенные зависимости считаются плохими и что с этим делать.
+
+[[bundled-libs-why-bad]]
+=== Почему встроенные библиотеки — это плохо
+
+Некоторое программное обеспечение требует от упаковщика найти сторонние библиотеки и добавить необходимые зависимости в порт. Другое ПО включает все необходимые библиотеки в дистрибутивный файл. Второй подход кажется проще на первый взгляд, но имеет серьёзные недостатки:
+
+Этот список частично основан на вики https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries[Fedora] и https://wiki.gentoo.org/wiki/Why_not_bundle_dependencies[Gentoo], оба распространяются по лицензии https://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0].
+
+Безопасность::
+Если уязвимости обнаружены в вышестоящей библиотеке и исправлены там, они могут остаться неисправленными в библиотеке, поставляемой с портом. Одной из причин может быть то, что автор не знает о проблеме. Это означает, что портировщик должен исправить их или обновить до не уязвимой версии и отправить исправление автору. Всё это требует времени, что приводит к тому, что программное обеспечение остаётся уязвимым дольше, чем необходимо. Это, в свою очередь, затрудняет координацию исправления без неоправданного раскрытия информации об уязвимости.
+
+Ошибки::
+Эта проблема аналогична проблеме с безопасностью в последнем абзаце, но в целом менее серьезная.
+
+Ветвление::
+Автору проще создать форк upstream-библиотеки после её включения в дистрибутив. Хотя на первый взгляд это кажется удобным, такой подход приводит к расхождению кода с исходным репозиторием, что усложняет исправление уязвимостей и других проблем в ПО. Одна из причин — затруднённое применение патчей.
++
+Еще одна проблема форкинга заключается в том, что из-за расхождения кода с основной веткой, ошибки исправляются снова и снова, вместо того чтобы быть исправленными один раз в центральном месте. Это противоречит самой идее открытого программного обеспечения.
+
+Конфликты символов::
+Когда библиотека установлена в системе, может возникнуть конфликт с встроенной в порт версией. Это может привести к немедленным ошибкам во время компиляции или компоновки. Также могут возникать ошибки при запуске программы, которые сложнее отследить. Последняя проблема может быть вызвана несовместимостью версий двух библиотек.
-Порты, устанавливающие модули ядра, должны предварять путь установки (по умолчанию [.filename]#/boot/modules#) переменной `STAGEDIR`.
+Лицензирование::
+При объединении проектов из различных источников могут возникать проблемы с лицензиями, особенно если лицензии несовместимы.
+
+Растрата ресурсов::
+Библиотеки, поставляемые в комплекте, растрачивают ресурсы на нескольких уровнях. Сборка самого приложения занимает больше времени, особенно если эти библиотеки уже присутствуют в системе. Во время выполнения они могут занимать дополнительную память, когда общесистемная библиотека уже загружена одной программой, а входящая в комплект библиотека загружена другой программой.
+
+Пустая трата усилий::
+Когда библиотеке требуются патчи для FreeBSD, эти патчи приходится дублировать в составе библиотеки. Это приводит к потере времени разработчиков, поскольку патчи могут применяться некорректно. Кроме того, бывает сложно сразу заметить, что эти патчи вообще необходимы.
+
+[[bundled-libs-practices]]
+=== Что делать со встроенными библиотеками
+
+По возможности используйте независимую версию библиотеки, добавив `LIB_DEPENDS` в порт. Если такого порта ещё не существует, рассмотрите возможность его создания.
+
+Используйте встроенные библиотеки только в том случае, если разработчик имеет хорошую репутацию в вопросах безопасности, а использование внешних версий приводит к излишне сложным исправлениям.
+
+[NOTE]
+====
+В некоторых особых случаях, например, для эмуляторов, таких как Wine, порт должен включать библиотеки, потому что они предназначены для другой архитектуры или были изменены для использования в данном программном обеспечении. В таком случае эти библиотеки не должны быть доступны для связывания с другими портами. Добавьте `BUNDLE_LIBS=yes` в [.filename]#Makefile# порта. Это укажет man:pkg[8] не учитывать предоставляемые библиотеки. Всегда спрашивайте {portmgr}, прежде чем добавлять это в порт.
+====
[[porting-shlibs]]
== Динамические библиотеки
@@ -101,7 +196,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
При установке 32-разрядных библиотек на 64-разрядной системе используйте вместо этого `USE_LDCONFIG32`.
-Постарайтесь сохранять номера версий динамических библиотек в формате [.filename]#libfoo.so.0#. Наш компоновщик позаботится только о старшем (первом) номере.
+Если программное обеспечение использует crossref:special[using-autotools,autotools], в частности `libtool`, добавьте crossref:uses[uses-libtool,`USES=libtool`].
Если при обновлении порта увеличивается старший номер версии библиотеки, то для всех портов, компонуемых с затронутой библиотекой, следует увеличить значение `PORTREVISION` для форсирования перекомпиляции с новой версией библиотеки.
@@ -117,6 +212,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В подобных ситуациях можно использовать переменные, описываемые в последующих разделах.
+[[porting-restrictions-no_package]]
=== `NO_PACKAGE`
Эта переменная указывает, что мы не можем создавать для приложения двоичный пакет. К примеру, лицензия не позволяет бинарное распространение или она может запрещать распространение пакетов, созданных из изменённых исходников.
@@ -127,6 +223,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
Значением переменной `NO_PACKAGE` должна быть строка, описывающая причину, по которой пакет не должен создаваться.
+[[porting-restrictions-no_cdrom]]
=== `NO_CDROM`
Эта переменная указывает на то, что, хотя мы имеем право создавать бинарные пакеты, мы не можем помещать эти пакеты или файлы `DISTFILES` порта на CD-ROM (или на похожие носители) для перепродажи. Однако бинарные пакеты и файлы `DISTFILES` порта будут оставаться доступными посредством FTP/HTTP.
@@ -135,12 +232,14 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В качестве значения `NO_CDROM` должна указываться строка, описывающая причины, по которым порт не может распространяться на CD-ROM. К примеру, это применяется, если лицензионное соглашение приложения предполагает только его "некоммерческое" использование.
+[[porting-restrictions-nofetchfiles]]
=== `NOFETCHFILES`
Файлы, определенные в переменной `NOFETCHFILES`, не будут извлекаться ни из одного из `MASTER_SITES`. Примером такого файла является файл, поставляемый на CD-ROM.
Инструменты, проверяющие доступность этих файлов на `MASTER_SITES`, должны игнорировать эти файлы и не сообщать о них.
+[[porting-restrictions-restricted]]
=== `RESTRICTED`
Задайте эту переменную, если лицензия на приложение не позволяет ни зеркалировать файлы `DISTFILES`, ни распространять бинарный пакет через FTP/HTTP или на CD-ROM.
@@ -149,19 +248,23 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В качестве значения `RESTRICTED` должна указываться строка, описывающая причины, по которым порт нельзя распространять. Обычно это означает, что порт использует закрытое программное обеспечение, а пользователь должен вручную сгрузить файлы `DISTFILES`, возможно, после заполнения регистрационной формы или подтверждения соглашения с условиями EULA.
+[[porting-restrictions-restricted_files]]
=== `RESTRICTED_FILES`
Если заданы `RESTRICTED` или `NO_CDROM`, то значение этой переменной по умолчанию соответствует `${DISTFILES} ${PATCHFILES}`, в противном случае она пуста. Если ограничены в распространении лишь некоторые из дистрибутивных файлов, то в этой переменной задаётся их список.
+[[porting-restrictions-legal_text]]
=== `LEGAL_TEXT`
Если порт имеет правовое обременение, которое не покрывается перечисленными выше переменными, то переменной `LEGAL_TEXT` следует присвоить строку с описанием данного обременения. Например, если было получено особое разрешение для FreeBSD на распространение двоичного файла, то эта переменная должна содержать соответствующее указание.
+[[porting-restrictions-legal]]
=== [.filename]#/usr/ports/LEGAL# и `LEGAL`
Порт, содержащий любую из перечисленных выше переменных, также должен быть добавлен в [.filename]#/usr/ports/LEGAL#. Первый столбец содержит шаблон совпадения с дистрибутивными файлами, имеющими ограничения на распространение. Второй столбец содержит корень порта. Третий столбец содержит вывод `make -VLEGAL`.
-=== Примеры использования
+[[porting-restrictions-examples]]
+=== Примеры
Предпочтительным способом реализации утверждения "архивы исходных текстов для этого порта должны загружаться самостоятельно" является следующее:
@@ -186,23 +289,19 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
Это достигается путём передачи флага `-jX` команде man:make[1]. Такое построение портов является поведением по умолчанию. К сожалению, не все порты поддерживают параллельную сборку достаточно хорошо, и поэтому может потребоваться выключить этот механизм явным образом путём добавления переменной `MAKE_JOBS_UNSAFE=yes`. Эта переменная используется в случае, когда известно, что порт ломается с `-jX`.
+[IMPORTANT]
+====
+При установке `MAKE_JOBS_UNSAFE` очень важно объяснить либо комментарием в [.filename]#Makefile#, либо хотя бы в сообщении коммита, _почему_ порт не собирается при включении. В противном случае практически невозможно ни исправить проблему, ни проверить, была ли она исправлена при коммите обновления в дальнейшем.
+====
+
[[using-make]]
=== `make`, `gmake` и `imake`
-Если ваш порт использует GNU make, то установите `USES= gmake`.
-
-.Переменные для портов, использующих gmake
-[cols="1,1", frame="none", options="header"]
-|===
-| Переменная
-| Значение
+Существует несколько различных реализаций `make`. Переносимому программному обеспечению часто требуется конкретная реализация, например GNU `make`, известная в FreeBSD как `gmake`.
-|`USES= gmake`
-|Для сборки порта требуется `gmake`.
+Если порт использует GNU make, добавьте `gmake` в `USES`.
-|`GMAKE`
-|Полный путь к команде `gmake`, если отсутствует в `PATH`.
-|===
+`MAKE_CMD` может использоваться для ссылки на конкретную команду, настроенную параметром `USES` в [.filename]#Makefile# порта. Используйте `MAKE_CMD` только внутри [.filename]##Makefile## приложения в `WRKSRC` для вызова реализации `make`, ожидаемой портируемым программным обеспечением.
Если ваш порт является приложением X, которое создает файлы [.filename]#Makefile# из [.filename]#Imakefile#, используя imake, то установите `USES= imake`. Это заставит стадию конфигурирования автоматически выполнить `xmkmf -a`. Если флаг `-a` представляет для вашего порта проблему, то установите `XMKMF=xmkmf`. Если порт использует imake, но не понимает цель `install.man`, то следует установить `NO_INSTALL_MANPAGES=yes`.
@@ -213,6 +312,7 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
Если ваш порт использует сценарий `configure` для получения файлов [.filename]#Makefile# из файлов [.filename]#Makefile.in#, то установите `GNU_CONFIGURE=yes`. Если вы хотите дать дополнительные параметры сценарию `configure` (аргументом по умолчанию является `--prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}`), установите эти параметры в `CONFIGURE_ARGS`. Дополнительные переменные окружения можно передать, используя переменную `CONFIGURE_ENV`.
+[[using-configure-variables]]
.Переменные для портов, использующих `configure`
[cols="1,1", frame="none", options="header"]
|===
@@ -238,8 +338,9 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
[[using-cmake]]
=== Использование `cmake`
-Если порт использует CMake, определите `USES= cmake` или `USES= cmake:outsource` для построения во внешнем каталоге (см. ниже).
+Если порт использует CMake, определите `USES= cmake`.
+[[using-cmake-variables]]
.Переменные для портов, использующих `cmake`
[cols="1,1", frame="none", options="header"]
|===
@@ -247,27 +348,33 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
| Значение
|`CMAKE_ARGS`
-|Специфичные для порта флаги CMake, передаваемые `cmake`.
+|Специфичные для порта флаги CMake, передаваемые в бинарный файл `cmake`.
-|`CMAKE_BUILD_TYPE`
-|Тип построения (предопределённые профили построения CMake). По умолчанию `Release`, `Debug` при использовании `WITH_DEBUG`.
+|`CMAKE_ON`
+|Для каждой записи в `CMAKE_ON` добавляется булево значение "включено" в
+`CMAKE_ARGS`. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`].
-|`CMAKE_ENV`
-|Переменные окружения для передачи `cmake`. По умолчанию `${CONFIGURE_ENV}`.
+|`CMAKE_OFF`
+|Для каждой записи в `CMAKE_OFF` в `CMAKE_ARGS` добавляется отключенное булево
+значение. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`].
+
+|`CMAKE_BUILD_TYPE`
+|Тип сборки (предопределённые профили сборки CMake). По умолчанию `Release`, или `Debug`, если установлен `WITH_DEBUG`.
|`CMAKE_SOURCE_PATH`
-|Путь к каталогу с исходным кодом. По умолчанию `${WRKSRC}`.
+|Путь к исходному каталогу. По умолчанию `${WRKSRC}`.
+
+|`CONFIGURE_ENV`
+|Дополнительные переменные окружения, которые должны быть установлены для бинарного файла `cmake`.
|===
-.Переменные построения `cmake`, устанавливаемые пользователем
+[[using-cmake-user-variables]]
+.Переменные, которые пользователи могут определить для сборок `cmake`
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
-|`CMAKE_VERBOSE`
-|Разрешает подробный вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`.
-
|`CMAKE_NOCOLOR`
|Запрещает цветной вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`.
|===
@@ -284,179 +391,765 @@ CMake поддерживает следующие профили построе
[.programlisting]
....
-USES= cmake:outsource
+USES= cmake
CMAKE_SOURCE_PATH= ${WRKSRC}/subproject
....
====
+[[using-cmake-example2]]
+.`CMAKE_ON` и `CMAKE_OFF`
+[example]
+====
+При добавлении логических значений в `CMAKE_ARGS` проще использовать переменные `CMAKE_ON` и `CMAKE_OFF` вместо этого. Это:
+
+[.programlisting]
+....
+CMAKE_ON= VAR1 VAR2
+CMAKE_OFF= VAR3
+....
+
+Эквивалентно:
+
+[.programlisting]
+....
+CMAKE_ARGS= -DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE
+....
+
+[IMPORTANT]
+======
+Это относится только к значениям по умолчанию в `CMAKE_ARGS`. Вспомогательные функции, описанные в crossref:makefiles[options-cmake_bool,`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`], используют ту же семантику, но для опциональных значений.
+======
+
+====
+
[[using-scons]]
=== Использование `scons`
-Если ваш порт использует SCons, определите `USE_SCONS=yes`.
+Если порт использует SCons, определите `USES=scons`.
-.Переменные для портов, использующих `scons`
-[cols="1,1", frame="none", options="header"]
+Чтобы сторонний [.filename]#SConstruct# учитывал все, что передается в SCons через окружение (то есть, что наиболее важно, `CC/CXX/CFLAGS/CXXFLAGS`), исправьте [.filename]#SConstruct#, чтобы сборка `Environment` создавалась следующим образом:
+
+[.programlisting]
+....
+env = Environment(**ARGUMENTS)
+....
+
+Он может быть изменён с помощью `env.Append` и `env.Replace`.
+
+[[using-cargo]]
+=== Сборка приложений на Rust с помощью `cargo`
+
+Для портов, использующих Cargo, определите `USES=cargo`.
+
+[[using-cargo-user-variables]]
+.Переменные, которые пользователи могут определить для сборок `cargo`
+[cols="1,1,1", frame="none", options="header"]
|===
| Переменная
-| Значение
+| По умолчанию
+| Описание
+
+|`CARGO_CRATES`
+|
+|Список ящиков (crates), от которых зависит порт. Каждая запись должна быть в формате `имя_ящика-семвер`, например, `libc-0.2.40`. Поддерживающие порт могут сгенерировать этот список из файла [.filename]#Cargo.lock# с помощью команды `make cargo-crates`. Вручную обновлять версии ящиков возможно, но следует учитывать транзитивные зависимости.
+Если список, сгенерированный `make cargo-crates`, слишком велик, его можно разместить в файле `Makefile.crates` в корневом каталоге порта.
+Если такой файл присутствует, фреймворк портов автоматически загружает его.
+Это помогает сохранять основной Makefile порта в удобном для работы размере.
+
+|`CARGO_FEATURES`
+|
+|Список функций приложения для сборки (список через пробел). Чтобы отключить все функции по умолчанию, добавьте специальный токен `--no-default-features` в `CARGO_FEATURES`. Вручную передавать его в `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS` и `CARGO_TEST_ARGS` не требуется.
+
+|`CARGO_CARGOTOML`
+|`${WRKSRC}/Cargo.toml`
+|Путь к файлу [.filename]#Cargo.toml#, который следует использовать.
+
+|`CARGO_CARGOLOCK`
+|`${WRKSRC}/Cargo.lock`
+|Путь к файлу [.filename]#Cargo.lock#, используемому для `make cargo-crates`. Можно указать более одного файла блокировки, если это необходимо.
+
+|`CARGO_ENV`
+|
+|Список переменных окружения, передаваемых в Cargo, аналогично `MAKE_ENV`.
-|`SCONS_ARGS`
-|Специфичные для порта флаги SCons, передаваемые окружению SCons.
+|`RUSTFLAGS`
+|
+|Флаги для передачи компилятору Rust.
-|`SCONS_BUILDENV`
-|Переменные для установки в системном окружении.
+|`CARGO_CONFIGURE`
+|`yes`
+|Используйте стандартный `do-configure`.
-|`SCONS_ENV`
-|Переменные для установки в окружении SCons.
+|`CARGO_UPDATE_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы настройки. Допустимые аргументы можно посмотреть с помощью `cargo update --help`.
-|`SCONS_TARGET`
-|Последний параметр для передачи SCons, похожий на `MAKE_TARGET`.
+|`CARGO_BUILDDEP`
+|`yes`
+|Добавить зависимость сборки на package:lang/rust[].
+
+|`CARGO_CARGO_BIN`
+|`${LOCALBASE}/bin/cargo`
+|Расположение бинарного файла `cargo`.
+
+|`CARGO_BUILD`
+|`yes`
+|Используйте значение по умолчанию `do-build`.
+
+|`CARGO_BUILD_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы сборки. Допустимые аргументы можно посмотреть с помощью `cargo build --help`.
+
+|`CARGO_INSTALL`
+|`yes`
+|Используйте настройку `do-install` по умолчанию.
+
+|`CARGO_INSTALL_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы установки. Допустимые аргументы можно посмотреть с помощью `cargo install --help`.
+
+|`CARGO_INSTALL_PATH`
+|`.`
+|Путь к пакету для установки. Этот аргумент передается в `cargo install` через параметр `--path`. Если указано несколько путей, `cargo install` запускается несколько раз.
+
+|`CARGO_TEST`
+|`yes`
+|Используйте значение по умолчанию `do-test`.
+
+|`CARGO_TEST_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время тестовой фазы. Допустимые аргументы можно посмотреть с помощью `cargo test --help`.
+
+|`CARGO_TARGET_DIR`
+|`${WRKDIR}/target`
+|Расположение выходного каталога cargo.
+
+|`CARGO_DIST_SUBDIR`
+|[.filename]#rust/crates#
+|Каталог относительно `DISTDIR`, в котором будут храниться файлы дистрибутивов пакетов (crates).
+
+|`CARGO_VENDOR_DIR`
+|`${WRKSRC}/cargo-crates`
+|Расположение каталога сторонних поставщиков ПО, в который будут извлечены все крейты. Старайтесь держать его в пределах `PATCH_WRKSRC`, чтобы упростить применение патчей.
+
+|`CARGO_USE_GITHUB`
+|`no`
+|Включить загрузку крейтов, привязанных к определённым коммитам Git на GitHub, с помощью `GH_TUPLE`. Это попытается исправить все файлы [.filename]#Cargo.toml# в `WRKDIR`, чтобы они ссылались на автономные источники вместо загрузки из репозитория Git во время сборки.
+
+|`CARGO_USE_GITLAB`
+|`no`
+|То же, что и `CARGO_USE_GITHUB`, но для экземпляров GitLab и `GL_TUPLE`.
|===
-Для того, чтобы сторонний [.filename]#SConstruct# соответствовал всему, что передается SCons в переменной `SCONS_ENV` (самое главное, это `CC/CXX/CFLAGS/CXXFLAGS`), примените патч к [.filename]#SConstruct#, так чтобы переменная построения `Environment` выглядела следующим образом:
+[[cargo-ex1]]
+.Создание порта для простого приложения на Rust
+[example]
+====
+Создание порта на основе Cargo — это процесс из трёх этапов. Сначала необходимо предоставить шаблон портов, который загружает дистрибутивный файл приложения:
[.programlisting]
....
-env = Environment(**ARGUMENTS)
+PORTNAME= tokei
+DISTVERSIONPREFIX= v
+DISTVERSION= 7.0.2
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
+
+USES= cargo
+USE_GITHUB= yes
+GH_ACCOUNT= Aaronepower
+
+.include <bsd.port.mk>
....
-В дальнейшем ее можно изменить при помощи `env.Append` и `env.Replace`.
+Сгенерировать первоначальный [.filename]#distinfo#:
-[[using-autotools]]
-== Использование GNU Autotools
+[source, shell]
+....
+% make makesum
+=> Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz
+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
+Aaronepower-tokei-v7.0.2_GH0.tar.gz 45 kB 239 kBps 00m00s
+....
-[[using-autotools-introduction]]
-=== Введение
+Теперь файл дистрибутива готов к использованию, и мы можем продолжить, извлекая зависимости пакета из встроенного файла [.filename]#Cargo.lock#:
-Различные инструменты GNU autotools предоставляют механизм абстракции для построения частей программного обеспечения на широком наборе операционных систем и аппаратных архитектур. Внутри Коллекции Портов отдельный порт может использовать эти инструменты при помощи простых конструкций:
+[source, shell]
+....
+% make cargo-crates
+CARGO_CRATES= aho-corasick-0.6.4 \
+ ansi_term-0.11.0 \
+ arrayvec-0.4.7 \
+ atty-0.2.9 \
+ bitflags-1.0.1 \
+ byteorder-1.2.2 \
+ [...]
+....
+
+Вывод этой команды необходимо вставить напрямую в Makefile:
[.programlisting]
....
-USE_AUTOTOOLS= tool:version[:operation] ...
+PORTNAME= tokei
+DISTVERSIONPREFIX= v
+DISTVERSION= 7.0.2
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
+
+USES= cargo
+USE_GITHUB= yes
+GH_ACCOUNT= Aaronepower
+
+CARGO_CRATES= aho-corasick-0.6.4 \
+ ansi_term-0.11.0 \
+ arrayvec-0.4.7 \
+ atty-0.2.9 \
+ bitflags-1.0.1 \
+ byteorder-1.2.2 \
+ [...]
+
+.include <bsd.port.mk>
+....
+
+[.filename]#distinfo# необходимо перегенерировать, чтобы включить все дистрибутивные файлы крейтов:
+
+[source, shell]
+....
+% make makesum
+=> rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> 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
+rust/crates/aho-corasick-0.6.4.tar.gz 100% of 24 kB 6139 kBps 00m00s
+=> rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> 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
+rust/crates/ansi_term-0.11.0.tar.gz 100% of 16 kB 21 MBps 00m00s
+=> rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz
+rust/crates/arrayvec-0.4.7.tar.gz 100% of 22 kB 3237 kBps 00m00s
+=> rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz
+rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s
+=> rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+[...]
....
-К моменту написания _tool_ может быть одним из `libtool`, `libltdl`, `autoconf`, `autoheader`, `automake` или `aclocal`.
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+[[cargo-ex2]]
+.Включение дополнительных возможностей приложений
+[example]
+====
+Некоторые приложения определяют дополнительные возможности в своем [.filename]#Cargo.toml#. Их можно включить при компиляции, установив `CARGO_FEATURES` в порте.
-_version_ указывает конкретную версию используемого инструмента (смотрите `devel/{automake,autoconf,libtool}[0-9]+` для получения действительных версий).
+Здесь мы включаем функции `json` и `yaml` в Tokei:
-_operation_ является необязательным расширением и указывает на способ использования инструмента.
+[.programlisting]
+....
+CARGO_FEATURES= json yaml
+....
-Одновременно может быть указано несколько инструментов, добавляя их все на одной строке или используя конструкцию Makefile `+=`.
+====
-В заключение, существует специальный инструмент по называнию `autotools`, который является удобной функцией при установке всех доступных версий autotools для возможности проведения кросс-разработки. Это также может быть достигнуто путем установки порта `devel/autotools`.
+[[cargo-ex4]]
+.Кодирование характеристик приложений как параметров порта
+[example]
+====
+Пример раздела `[features]` в [.filename]#Cargo.toml# может выглядеть так:
-[[using-libtool]]
-=== `libtool`
+[.programlisting]
+....
+[features]
+pulseaudio_backend = ["librespot-playback/pulseaudio-backend"]
+portaudio_backend = ["librespot-playback/portaudio-backend"]
+default = ["pulseaudio_backend"]
+....
-Динамические библиотеки, использующие инфраструктуру построения GNU, обычно используют libtool для настройки компиляции и установки динамических библиотек в соответствии с особенностями данной операционной системы. В типичной практике используется копирование встроенного в приложение `libtool`. Если вам нужно использовать внешнюю команду `libtool`, то вы можете использовать версию, поставляемую Коллекцией Портов:
+`pulseaudio_backend` — это функция по умолчанию. Она всегда включена, если мы явно не отключим функции по умолчанию, добавив `--no-default-features` в `CARGO_FEATURES`. Здесь мы превращаем функции `portaudio_backend` и `pulseaudio_backend` в опции порта:
[.programlisting]
....
-USE_AUTOTOOLS= libtool:version[:env]
+CARGO_FEATURES= --no-default-features
+
+OPTIONS_DEFINE= PORTAUDIO PULSEAUDIO
+
+PORTAUDIO_VARS= CARGO_FEATURES+=portaudio_backend
+PULSEAUDIO_VARS= CARGO_FEATURES+=pulseaudio_backend
....
-При отсутствии дополнительных операций, `libtool:version` сообщает инфраструктуре построения о применении патча к сценарию configure с установленной в системе копией `libtool`. Означает использование `GNU_CONFIGURE`. Более того, некоторые переменные make и оболочки shell будут назначены для дальнейшего использования этим портом. Подробности смотрите в [.filename]#bsd.autotools.mk#.
+====
-При использовании операции `:env` будет настроено только окружение.
+[[cargo-ex3]]
+.Перечисление лицензий крейтов
+[example]
+====
+Крейты имеют собственные лицензии. Важно знать, какие они, при добавлении блока `LICENSE` в порт (см. crossref:makefiles[licenses,Лицензии]). Вспомогательная цель `cargo-crates-licenses` попытается перечислить все лицензии всех ящиков, определённых в `CARGO_CRATES`.
-Наконец, `LIBTOOLFLAGS` и `LIBTOOLFILES` можно установить по желанию, чтобы переопределить наиболее вероятные аргументы для `libtool` и файлы, предназначенные для изменения. Большинству портов это скорее всего не понадобится. Для дальнейших подробностей смотрите [.filename]#bsd.autotools.mk#.
+[source, shell]
+....
+% make cargo-crates-licenses
+aho-corasick-0.6.4 Unlicense/MIT
+ansi_term-0.11.0 MIT
+arrayvec-0.4.7 MIT/Apache-2.0
+atty-0.2.9 MIT
+bitflags-1.0.1 MIT/Apache-2.0
+byteorder-1.2.2 Unlicense/MIT
+[...]
+....
-[[using-libltdl]]
-=== `libltdl`
+[NOTE]
+======
+Названия лицензий, которые выводит `make cargo-crates-licenses`, являются SPDX 2.1-совместимыми лицензионными выражениями, которые не совпадают с названиями лицензий, определёнными в фреймворке портов. Их необходимо перевести в названия из crossref:makefiles[licenses-license-list,Списка предопределённых лицензий].
+======
-Некоторые порты задействуют пакет с библиотекой `libltdl`, которая является частью комплекта `libtool`. Использование этой библиотеки не вызывает автоматическое использование самой `libtool`, и, таким образом, обеспечивается отдельная конструкция.
+====
+
+[[using-meson]]
+=== Использование `meson`
+
+Для портов, использующих Meson, определите `USES=meson`.
+
+[[using-meson-variables]]
+.Переменные для портов, использующих `meson`
+[cols="1,1", frame="none", options="header"]
+|===
+| Переменная
+| Описание
+
+|`MESON_ARGS`
+|Порт-специфичные флаги Meson, передаваемые в бинарный файл `meson`.
+
+|`MESON_BUILD_DIR`
+|Путь к директории сборки относительно `WRKSRC`. По умолчанию — `_build`.
+|===
+
+[[using-meson-example]]
+.Пример `USES=meson`
+[example]
+====
+Этот фрагмент демонстрирует использование Meson для порта.
+
+[.programlisting]
+....
+USES= meson
+MESON_ARGS= -Dfoo=enabled
+....
+
+====
+
+[[using-go]]
+=== Создание приложений на Go
+
+Для портов, использующих Go, определите `USES=go`. Обратитесь к crossref:uses[uses-go,`go`] для получения списка переменных, которые можно задать для управления процессом сборки.
+
+[[go-ex1]]
+.Создание порта для приложения на основе модулей Go
+[example]
+====
+В большинстве случаев достаточно установить переменную `GO_MODULE` в значение, указанное директивой `module` в `go.mod`:
+
+[.programlisting]
+....
+PORTNAME= hey
+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
+
+USES= go:modules
+GO_MODULE= github.com/rakyll/hey
+
+PLIST_FILES= bin/hey
+
+.include <bsd.port.mk>
+....
+
+Если «простой» способ не подходит или требуется больший контроль над зависимостями, полный процесс переноса описан ниже.
+
+Создание порта на основе Go — это процесс из пяти этапов. Сначала необходимо предоставить шаблон портов, который загружает дистрибутивный файл приложения:
+
+[.programlisting]
+....
+PORTNAME= ghq
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.12.5
+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
+GH_ACCOUNT= motemen
+
+.include <bsd.port.mk>
+....
+
+Сгенерировать первоначальный [.filename]#distinfo#:
+
+[source, shell]
+....
+% make makesum
+===> License MIT accepted by the user
+=> motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz
+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
+motemen-ghq-v0.12.5_GH0.tar.gz 32 kB 177 kBps 00s
+....
+
+Теперь файл дистрибутива готов к использованию, и мы можем извлечь необходимые зависимости модуля Go. Этот шаг требует наличия установленного пакета package:ports-mgmt/modules2tuple[]:
+
+[source, shell]
+....
+% make gomod-vendor
+[...]
+GH_TUPLE= \
+ Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
+ daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
+ go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
+ golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
+ golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
+ golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
+ motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
+ urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli
+....
+
+Вывод этой команды необходимо вставить напрямую в Makefile:
+
+[.programlisting]
+....
+PORTNAME= ghq
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.12.5
+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
+GH_ACCOUNT= motemen
+GH_TUPLE= Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
+ daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
+ go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
+ golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
+ golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
+ golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
+ motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
+ urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli
+
+.include <bsd.port.mk>
+....
+
+[.filename]#distinfo# необходимо обновить, чтобы включить все дистрибутивные файлы:
+
+[source, shell]
+....
+% make makesum
+=> Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz
+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
+Songmu-gitconfig-v0.0.2_GH0.tar.gz 5662 B 936 kBps 00s
+=> daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz
+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
+daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s
+[...]
+....
+
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+[[go-ex2]]
+.Установка имени выходного бинарного файла или пути установки
+[example]
+====
+Некоторые порты требуют установки результирующего бинарного файла под другим именем или в путь, отличный от стандартного `${PREFIX}/bin`. Это можно сделать с помощью синтаксиса кортежа `GO_TARGET`, например:
+
+[.programlisting]
+....
+GO_TARGET= ./cmd/ipfs:ipfs-go
+....
+
+установит бинарный файл `ipfs` как `${PREFIX}/bin/ipfs-go` и
+
+[.programlisting]
+....
+GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy
+....
+
+установит `dnscrypt-proxy` в `${PREFIX}/sbin`.
+====
+
+[[using-cabal]]
+=== Построение приложений на Haskell с помощью `cabal`
+
+Для портов, использующих Cabal, система сборки определяет `USES=cabal`. Обратитесь к crossref:uses[uses-cabal,`cabal`] для получения списка переменных, которые можно задать для управления процессом сборки.
+
+[[cabal-ex1]]
+.Создание порта для приложения Haskell с Hackage
+[example]
+====
+При подготовке порта Haskell Cabal требуются программы package:devel/hs-cabal-install[] и package:ports-mgmt/hs-cabal2tuple[], поэтому убедитесь, что они установлены заранее. Сначала необходимо определить общие переменные портов, которые позволяют cabal-install загрузить файл дистрибутива пакета:
[.programlisting]
....
-USE_AUTOTOOLS= libltdl:version
+PORTNAME= ShellCheck
+DISTVERSION= 0.6.0
+CATEGORIES= devel
+
+MAINTAINER= haskell@FreeBSD.org
+COMMENT= Shell script analysis tool
+WWW= https://www.shellcheck.net/
+
+USES= cabal
+
+.include <bsd.port.mk>
+....
+
+Этот минимальный Makefile загружает файл дистрибутива с помощью вспомогательной цели `cabal-extract`:
+
+[source, shell]
+....
+% make cabal-extract
+[...]
+Downloading the latest package list from hackage.haskell.org
+cabal get ShellCheck-0.6.0
+Downloading ShellCheck-0.6.0
+Downloaded ShellCheck-0.6.0
+Unpacking to ShellCheck-0.6.0/
....
-Всё, что в настоящее время она делает, это добавление `LIB_DEPENDS` для подходящего порта `libltdl`, потому она предоставляется как удобная функция для помощи в устранении всяких зависимостей от портов autotools вне инфраструктуры `USE_AUTOTOOLS`. Для этого инструмента не существует необязательных операций.
+Теперь, когда у нас есть файл описания пакета ShellCheck.cabal в `${WRKSRC}`, мы можем использовать `cabal-configure` для создания плана сборки:
-[[using-autoconf]]
-=== `autoconf` и `autoheader`
+[source, shell]
+....
+% make cabal-configure
+[...]
+Resolving dependencies...
+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)
+[...]
+....
-Вместо сценария configure некоторые порты содержат шаблон autoconf в файле [.filename]#configure.ac#. Вы можете использовать следующие присвоения, чтобы позволить `autoconf` создать сценарий configure, а `autoheader` создать заголовки шаблона для использования в сценарии configure.
+После завершения можно сгенерировать список необходимых зависимостей:
+
+[source, shell]
+....
+% make make-use-cabal
+USE_CABAL= QuickCheck-2.12.6.1 \
+ hashable-1.3.0.0 \
+ integer-logarithms-1.0.3 \
+[...]
+....
+
+Пакеты Haskell могут содержать ревизии, как и порты FreeBSD. Ревизии могут затрагивать только файлы [.filename]#.cabal#. Обратите внимание на дополнительные номера версий после символа `_`. Замените старый список `USE_CABAL` на вновь сгенерированный.
+
+Наконец, файл [.filename]#distinfo# необходимо перегенерировать, чтобы он содержал все файлы дистрибутива:
+
+[source, shell]
+....
+% make makesum
+=> ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.
+=> Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz
+ShellCheck-0.6.0.tar.gz 136 kB 642 kBps 00s
+=> 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.
+=> Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz
+QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s
+[...]
+....
+
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+Некоторые порты Haskell устанавливают различные файлы данных в `share/${PORTNAME}`. В таких случаях требуется особая обработка на стороне порта. Порт должен определить параметр `CABAL_WRAPPER_SCRIPTS`, перечислив каждый исполняемый файл, который будет использовать файлы данных. Более того, в редких случаях портируемая программа использует файлы данных других пакетов Haskell, и тогда на помощь приходит `FOO_DATADIR_VARS`.
+
+[[cabal-ex2]]
+.Обработка файлов данных в порте Haskell
+[example]
+====
+`devel/hs-profiteur` — это приложение на Haskell, которое генерирует одностраничный HTML с некоторым содержимым.
[.programlisting]
....
-USE_AUTOTOOLS= autoconf:version[:env]
+PORTNAME= profiteur
+
+[...]
+
+USES= cabal
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+.include <bsd.port.mk>
....
+Он устанавливает HTML-шаблоны в `share/profiteur`, поэтому необходимо добавить параметр `CABAL_WRAPPER_SCRIPTS`:
[.programlisting]
....
-USE_AUTOTOOLS= autoheader:version
+[...]
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+
+.include <bsd.port.mk>
+....
+
+Программа также пытается получить доступ к файлу `jquery.js`, который является частью пакета Haskell `js-jquery-3.3.1`. Чтобы этот файл был найден, необходимо, чтобы скрипт-обёртка искал файлы данных `js-jquery` также в `share/profiteur`. Для этого используется `profiteur_DATADIR_VARS`:
+
+[.programlisting]
....
+[...]
-которые также подразумевают использование `autoconf:version`.
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+profiteur_DATADIR_VARS= js-jquery
-Аналогично команде `libtool` включение необязательной операции `:env` всего лишь настраивает окружение для дальнейшего использования. Без этого выполняется наложение патчей и переконфигурирование порта.
+.include <bsd.port.mk>
+....
-Дополнительные необязательные переменные `AUTOCONF_ARGS` и `AUTOHEADER_ARGS` можно переопределить в [.filename]#Makefile# порта, если указано явным образом. Как и с эквивалентами `libtool`, большинству портов это вряд ли понадобится.
+Теперь порт установит непосредственно бинарный файл в `libexec/cabal/profiteur`, а скрипт — в `bin/profiteur`.
-[[using-automake]]
-=== `automake` и `aclocal`
+====
+
+Не существует простого способа определить подходящее значение для параметра `FOO_DATADIR_VARS`, кроме как запустить программу и проверить, что всё работает. К счастью, необходимость использовать `FOO_DATADIR_VARS` возникает очень редко.
+
+Еще один крайний случай при переносе сложных программ на Haskell — наличие зависимостей от систем контроля версий (VCS) в файле `cabal.project`.
+
+[[cabal-ex3]]
+.Портирование приложений Haskell с зависимостями от VCS
+[example]
+====
+
+`net-p2p/cardano-node` — это чрезвычайно сложное программное обеспечение. В его `cabal.project` содержится множество блоков, подобных этому:
+
+[.programlisting]
+....
+[...]
+source-repository-package
+ type: git
+ location: https://github.com/input-output-hk/cardano-crypto
+ tag: f73079303f663e028288f9f4a9e08bcca39a923e
+[...]
+....
-Некоторые пакеты содержат только файлы [.filename]#Makefile.am#. Они должны быть преобразованы в файлы [.filename]#Makefile.in# с использованием automake и дальнейшей обработкой `configure` для получения настоящего [.filename]#Makefile#.
+Зависимости типа `source-repository-package` автоматически подтягиваются `cabal` в процессе сборки. К сожалению, это приводит к использованию сети после этапа `fetch`, что запрещено в рамках системы портов. Эти исходники необходимо указать в Makefile порта. Вспомогательная цель `make-use-cabal` может упростить работу с пакетами, размещёнными на GitHub. Запуск этой цели после стандартных `cabal-extract` и `cabal-configure` позволит получить не только параметр `USE_CABAL`, но и `GH_TUPLE`:
-Аналогично, иногда пакеты не поставляются с вложенными файлами [.filename]#aclocal.m4#, снова требуемых для построения программного обеспечения. Их можно получить командой `aclocal`, которая просматривает [.filename]#configure.ac# или [.filename]#configure.in#.
+[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 \
+ [...]
+....
-`aclocal` имеет похожую связь с `automake`, как у `autoheader` с `autoconf`, что описано в предыдущей главе. `aclocal` подразумевает использование `automake`, таким образом, мы имеем:
+Может быть полезно отделить элементы `GH_TUPLE`, поступающие из `make-use-cabal`, от остальных, чтобы упростить обновление порта:
[.programlisting]
....
-USE_AUTOTOOLS= automake:version[:env]
+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-портов с зависимостями от систем контроля версий временно требует следующего обходного решения:
[.programlisting]
....
-USE_AUTOTOOLS= aclocal:version
+BINARY_ALIAS= git=true
....
-которые также подразумевают использование `automake:version`.
+====
-Также как и для `libtool` и `autoconf`, подключение необязательной операции `:env` всего лишь устанавливает окружение для дальнейшего пользования. Без этого выполняется реконфигурирование этого порта.
+[[using-autotools]]
+== Использование GNU Autotools
-Как и в случае с `autoconf` и `autoheader`, обе команды `automake` и `aclocal` соответственно имеют необязательные переменные `AUTOMAKE_ARGS` и `ACLOCAL_ARGS`, которые при необходимости можно переопределить в [.filename]#Makefile# порта.
+Если порту требуется какое-либо программное обеспечение GNU Autotools, добавьте `USES=autoreconf`. Подробнее см. в crossref:uses[uses-autoreconf,`autoreconf`].
[[using-gettext]]
== Использование GNU `gettext`
-=== Простой вариант использования
+[[using-gettext-basic]]
+=== Простые варианты использования
-Если для вашего порта требуется `gettext`, добавьте `USES= gettext`, и ваш порт унаследует зависимость от package:devel/gettext[]. crossref:makefiles[uses-makefiles, `USES`] содержит перечень других значений для использования `gettext`.
+Если порт требует `gettext`, установите `USES=gettext`, и порт унаследует зависимость от [.filename]#libintl.so# из пакета package:devel/gettext[]. Другие значения для использования `gettext` перечислены в crossref:uses[uses-gettext,`USES=gettext`].
-Довольно распространенным случаем является использование в порте `gettext` и `configure`. Как правило, GNU `configure` способен находить `gettext` автоматически. Если он все же не сможет это сделать, то подсказки для размещения `gettext` можно передать через переменные окружения `CPPFLAGS` и `LDFLAGS`:
+Довольно распространённый случай — порт, использующий `gettext` и `configure`. Обычно GNU `configure` должен автоматически находить `gettext`.
[.programlisting]
....
USES= gettext
-CPPFLAGS+= -I${LOCALBASE}/include
-LDFLAGS+= -L${LOCALBASE}/lib
-
GNU_CONFIGURE= yes
....
-Конечно же, этот код можно записать в более компактном виде, если передавать флаги в `configure` не требуется:
+Если он не сработает, можно указать расположение `gettext` через `CPPFLAGS` и `LDFLAGS`, используя `localbase` следующим образом:
[.programlisting]
....
-USES= gettext
+USES= gettext localbase:ldflags
GNU_CONFIGURE= yes
....
+[[using-gettext-optional]]
=== Оптимальное использование
Некоторые программные продукты позволяют отключать NLS, к примеру, передавая параметр `--disable-nls` сценарию `configure`. В этом случае ваш порт должен использовать `gettext`, в зависимости от значения `NLS`. Для портов небольшой или средней сложности вы можете полагаться на следующую идиому:
[.programlisting]
....
-GNU_CONFIGURE= yes
+GNU_CONFIGURE= yes
+
+OPTIONS_DEFINE= NLS
+OPTIONS_SUB= yes
+
+NLS_USES= gettext
+NLS_CONFIGURE_ENABLE= nls
+
+.include <bsd.port.mk>
+....
+
+Или используя старый способ с опциями:
+
+[.programlisting]
+....
+GNU_CONFIGURE= yes
+
+OPTIONS_DEFINE= NLS
.include <bsd.port.options.mk>
@@ -471,7 +1164,7 @@ PLIST_SUB+= NLS="@comment "
.include <bsd.port.mk>
....
-Следующий пункт в вашем списке дел разобраться, чтобы файлы каталога сообщения включались в список упаковки по условию. Часть, входящая в [.filename]#Makefile#, уже обеспечена этой идиомой. Остальное объясняется в главе <<plist-sub,продвинутые практики [.filename]#pkg-plist#>>. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет заменено на "`@comment`", если NLS выключен, или пустой строкой, если включен. В результате строки, предваряемые `%%NLS%%`, станут комментариями в итоговом листе упаковки, если NLS выключен; иначе, префикс будет просто удален. Всё, что вам нужно, это вставить `%%NLS%%` перед каждым путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:
+Следующий пункт в списке задач — организовать условное включение файлов каталогов сообщений в упаковочный список. Часть, связанная с [.filename]#Makefile#, уже предусмотрена идиомой. Это объясняется в разделе crossref:plist[plist-sub,расширенные практики работы с [.filename]#pkg-plist#]. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет заменено на "`@comment `", если NLS отключен, или на пустую строку, если NLS включен. Следовательно, строки с префиксом `%%NLS%%` станут обычными комментариями в итоговом упаковочном списке, если NLS выключен; в противном случае префикс будет просто удален. Затем вставьте `%%NLS%%` перед каждым путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:
[.programlisting]
....
@@ -479,8 +1172,9 @@ PLIST_SUB+= NLS="@comment "
%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo
....
-В особо сложных случаях вам понадобиться использовать более продвинутые техники, чем данный рецепт, такие как <<plist-dynamic,динамические списки упаковки>>.
+В особо сложных случаях вам понадобиться использовать более продвинутые техники, чем данный рецепт, такие как crossref:plist[plist-dynamic,динамические списки упаковки].
+[[using-gettext-catalog-directories]]
=== Управление каталогами сообщений
Существует момент, который следует учитывать при установке файлов каталогов сообщений. Целевые каталоги для размещения, расположенные под [.filename]#LOCALBASE/shared/locale#, редко когда должны создаваться и удаляться портом. Для наиболее популярных языков имеются собственные каталоги, перечисленные в [.filename]#PORTSDIR/Templates/BSD.local.dist#. Каталоги для множества других языков управляются с помощью порта package:devel/gettext[]. Обратите внимание на его [.filename]#pkg-plist# и посмотрите, куда данный порт собирается установить файлы каталогов сообщений для единственного в своем роде языка.
@@ -488,45 +1182,46 @@ PLIST_SUB+= NLS="@comment "
[[using-perl]]
== Использование Perl
-Если `MASTER_SITES` установлена в значение `MASTER_SITE_PERL_CPAN`, то предпочтительным значением `MASTER_SITE_SUBDIR` является имя иерархии верхнего уровня. Например, рекомендуемым значением для `p5-Module-Name` является `Module`. Иерархию верхнего уровня можно посмотреть на сайте http://cpan.org/modules/by-module/[cpan.org]. Это поддерживает порт в рабочем состоянии при изменении модуля автором.
+Если `MASTER_SITES` установлена в значение `CPAN`, то правильная поддиректория выбирается автоматически. Если подкаталог по умолчанию указан неверно, можно использовать `CPAN/Module` для его изменения. Также можно установить `MASTER_SITES` в старое значение `MASTER_SITE_PERL_CPAN`, тогда предпочтительным значением `MASTER_SITE_SUBDIR` будет имя иерархии выше уровнем. Например, рекомендуемое значение для `p5-Module-Name` - `Module`. Иерархию верхнего уровня можно посмотреть на https://cpan.org/modules/by-module/[cpan.org]. Это гарантирует работоспособность порта при смене автора модуля.
-Исключением этого правила является отсутствие соответствующего каталога или файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в этом случае разрешается использовать id автора.
+Исключением этого правила является отсутствие соответствующего каталога или файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в этом случае разрешается использовать id автора. Можно использовать макрос `CPAN:AUTHOR`, который будет преобразован в хешированный каталог автора. Например, `CPAN:AUTHOR` преобразуется в `authors/id/A/AU/AUTHOR`.
-В качестве значения все из настраиваемых knobs ниже принимают `YES` или строку с версией вида `5.8.0+`. `YES` означает, что данный порт можно использовать с любой из поддерживаемых версий Perl. Если порт работает только с некоторыми версиями Perl, то это можно обозначить при помощи строки с версией, указывающей на минимальную версию (пример: `5.7.3+`), максимальную версию (пример: `5.8.0-`) или точную версию (пример: `5.8.3`).
+Когда порту требуется поддержка Perl, он должен установить `USES=perl5` с опциональным `USE_PERL5`, как описано в crossref:uses[uses-perl5,описание USES для perl5].
-.Переменные для портов, использующих Perl
+[[using-perl-variables]]
+.Переменные (только для чтения) для портов, использующих Perl
[cols="1,1", frame="none", options="header"]
|===
-| Переменная
+| Переменные (только для чтения)
| Значение
-|`USE_PERL5`
-|Perl 5 используется для построения и работы.
+|`PERL`
+|Полный путь к интерпретатору Perl 5, будь то системный или установленный из порта, но без номера версии. Используйте это, когда программному обеспечению требуется путь к интерпретатору Perl. Для замены строк "``#!``" в скриптах используйте crossref:uses[uses-shebangfix,`shebangfix`].
-|`USE_PERL5_BUILD`
-|Perl 5 используется для построения.
+|`PERL_VERSION`
+|Полная версия Perl установлена (например, `5.8.9`).
-|`USE_PERL5_RUN`
-|Perl 5 используется во время работы.
+|`PERL_LEVEL`
+|Установленная версия Perl в виде целого числа формата `MNNNPP` (например, `500809`).
-|`PERL`
-|Полный путь к интерпретатору Perl 5, либо в системе, либо установленному из портов, но без номера версии. Используйте это, если вам нужно заменить строки "`#!`" в скриптах.
+|`PERL_ARCH`
+|Где Perl хранит архитектурно-зависимые библиотеки. По умолчанию: `${ARCH}-freebsd`.
-|`PERL_CONFIGURE`
-|Конфигурация при помощи MakeMaker языка Perl. Влечёт `USE_PERL5`.
+|`PERL_PORT`
+|Имя порта Perl, который установлен (например, `perl5`).
-|`PERL_MODBUILD`
-|Конфигурация, построение и установка с использованием Module::Build. Влечёт `PERL_CONFIGURE`.
+|`SITE_PERL`
+|Имя каталога, в котором размещаются специфичные для сайта пакеты Perl. Это значение добавляется в `PLIST_SUB`.
|===
[NOTE]
====
-Порты для модулей Perl, которые не имеют официального вебсайта, должны указывать `cpan.org` в строке WWW в файле [.filename]#pkg-descr#. Предпочтительная форма URL `http://search.cpan.org/dist/Module-Name/` (включая завершающий слэш).
+Порты Perl-модулей, у которых нет официального сайта, должны ссылаться на `cpan.org` в строке WWW файла [.filename]#Makefile#. Предпочтительный формат URL: `https://search.cpan.org/dist/Module-Name/` (включая завершающий слеш).
====
[NOTE]
====
-Не используйте `${SITE_PERL}` в объявлении зависимостей. Использование этой конструкции подразумевает наличие подключенного [.filename]#bsd.perl.mk#, что не всегда так. Порты, зависимые от этого порта, получат неправильные зависимости, если файлы этого порта будут перемещены при последующем обновлении. Правильный способ объявления зависимостей для модулей Perl показан в примере ниже.
+Не используйте `${SITE_PERL}` в объявлениях зависимостей. Это предполагает, что был включён файл [.filename]#perl5.mk#, что не всегда верно. Порты, зависящие от этого порта, будут иметь некорректные зависимости, если файлы этого порта будут перемещены во время обновления. Правильный способ объявления зависимостей модулей Perl показан в примере ниже.
====
[[use-perl-dependency-example]]
@@ -535,125 +1230,199 @@ PLIST_SUB+= NLS="@comment "
====
[.programlisting]
....
-p5-IO-Tee>=0.64:${PORTSDIR}/devel/p5-IO-Tee
+p5-IO-Tee>=0.64:devel/p5-IO-Tee
....
====
-Для портов Perl, которые устанавливают страницы справочника, в [.filename]#pkg-plist# можно использовать макрос `PERL5_MANx` (где _x_ принимает значение от `1` до `9`). Например,
+Для портов Perl, которые устанавливают страницы руководства, макросы `PERL5_MAN3` и `PERL5_MAN1` могут использоваться внутри [.filename]#pkg-plist#. Например,
[.programlisting]
....
+lib/perl5/5.14/man/man1/event.1.gz
lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz
....
-можно заменить на
+может быть заменено на
[.programlisting]
....
+%%PERL5_MAN1%%/event.1.gz
%%PERL5_MAN3%%/AnyEvent::I3.3.gz
....
+[NOTE]
+====
+Для других разделов (_x_ в `2` и `4`–`9`) макросы `PERL5_MAN_x_` отсутствуют, так как они устанавливаются в обычные каталоги.
+====
+
+[[use-perl-ex-build]]
+.Порт, требующий Perl только для сборки
+[example]
+====
+Поскольку значение USE_PERL5 по умолчанию включает build и run, установите его в:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= build
+....
+
+====
+
+[[use-perl-ex-patch]]
+.Порт, который также требует Perl для исправления
+[example]
+====
+Время от времени использования man:sed[1] для исправлений недостаточно. Когда использование man:perl[1] проще, примените:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= patch build run
+....
+
+====
+
+[[use-perl-ex-configure]]
+.Модуль Perl, для сборки которого требуется `ExtUtils::MakeMaker`
+[example]
+====
+Большинство модулей Perl поставляются с конфигурационным скриптом [.filename]#Makefile.PL#. В этом случае установите:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= configure
+....
+
+====
+
+[[use-perl-ex-modbuild]]
+.Модуль Perl, для сборки которого требуется `Module::Build`
+[example]
+====
+Когда модуль Perl поставляется с конфигурационным скриптом [.filename]#Build.PL#, он может требовать Module::Build, и в этом случае установите
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= modbuild
+....
+
+Если вместо этого требуется Module::Build::Tiny, установите
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= modbuildtiny
+....
+
+====
+
[[using-x11]]
== Использование X11
[[x11-variables]]
=== Компоненты X.Org
-X.Org является реализацией X11, доступной в Коллекции Портов. Если ваше приложение зависит от компонентов X, установите в переменную `USE_XORG` в перечень требуемых компонентов. К настоящему времени доступными компонентами являются:
-
-`bigreqsproto compositeproto damageproto dmx dmxproto dri2proto evieproto fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice inputproto kbproto libfs oldx pciaccess pixman printproto randrproto recordproto renderproto resourceproto scrnsaverproto sm trapproto videoproto x11 xau xaw xaw6 xaw7 xbitmaps xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil xprintutil xproto xproxymngproto xrandr xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm`.
-
-Всегда актуальный перечень можно найти в [.filename]#/usr/ports/Mk/bsd.xorg.mk#.
+Реализация X11, доступная в Коллекции портов, — это X.Org. Если приложение зависит от компонентов X, добавьте `USES= xorg` и укажите необходимые компоненты в `USE_XORG`. Полный список можно найти в crossref:uses[uses-xorg,`xorg`].
-Проект Mesa является попыткой обеспечить свободную реализацию OpenGL. Вы можете указать зависимость от различных компонентов этого проекта при помощи переменной `USE_GL`. Действительные опции: `glut, glu, glw, glew, gl` и `linux`. Для обратной совместимости значение `yes` соответствует `glu`.
+Проект Mesa — это инициатива по предоставлению свободной реализации OpenGL. Чтобы указать зависимость от различных компонентов этого проекта, используйте `USES=gl` и `USE_GL`. См. crossref:uses[uses-gl,`gl`] для полного списка доступных компонентов. Для обратной совместимости значение `yes` соответствует `glu`.
[[use-xorg-example]]
-.Пример для USE_XORG
+.Пример `USE_XORG`
[example]
====
[.programlisting]
....
-USE_XORG= xrender xft xkbfile xt xaw
+USES= gl xorg
USE_GL= glu
+USE_XORG= xrender xft xkbfile xt xaw
....
====
+[[using-xorg-variables]]
.Переменные для портов, использующих X
[cols="1,1", frame="none"]
|===
|`USES= imake`
-|Используется `imake`.
+|Порт использует `imake`.
|`XMKMF`
-|Задаёт маршрут до `xmkmf`, если он отсутствует в `PATH`. По умолчанию это `xmkmf -a`.
+|Установить путь к `xmkmf`, если он отсутствует в `PATH`. По умолчанию: `xmkmf -a`.
|===
[[using-x11-vars]]
-.Использование переменных X11 в порте
+.Использование переменных, связанных с X11
[example]
====
[.programlisting]
....
-# Использовать некоторые библиотеки X11
+# Use some X11 libraries
+USES= xorg
USE_XORG= x11 xpm
....
====
-[[porting-motif]]
-=== Порты, которым требуется Motif
+[[x11-motif]]
+=== Порты, требующие Motif
-Если вашему порту требуется Motif, задайте переменную `USES= motif` в файле [.filename]#Makefile#. Реализация Motif, используемая по умолчанию, находится в package:x11-toolkits/open-motif[]. Пользователи вместо этого могут выбрать package:x11-toolkits/lesstif[] через установку переменной `WANT_LESSTIF`.
+Если порт требует библиотеку Motif, определите `USES= motif` в [.filename]#Makefile#. Реализация Motif по умолчанию — это package:x11-toolkits/open-motif[]. Пользователи могут выбрать package:x11-toolkits/lesstif[] вместо этого, установив `WANT_LESSTIF` в своём [.filename]#make.conf#. Аналогично package:x11-toolkits/open-motif-devel[] можно выбрать, установив `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf#.
-Переменная `MOTIFLIB` будет установлена в [.filename]#bsd.port.mk#, чтобы ссылаться на соответствующую библиотеку Motif. Пожалуйста, измените исходные тексты вашего порта на использование `${MOTIFLIB}` везде, где упоминается библиотека Motif, в первоначальном [.filename]#Makefile# или [.filename]#Imakefile#.
+`MOTIFLIB` будет установлен в файле [.filename]#motif.mk# для ссылки на соответствующую библиотеку Motif. Пожалуйста, исправьте исходный код порта, чтобы использовать `${MOTIFLIB}` везде, где библиотека Motif упоминается в оригинальном [.filename]#Makefile# или [.filename]#Imakefile#.
-Существует два общих случая:
+Есть два распространённых случая:
-* Если порт обращается к библиотеке Motif как `-lXm` в своих файлах [.filename]#Makefile# или [.filename]#Imakefile#, просто подставьте вместо этих обращений `${MOTIFLIB}`.
-* Если порт использует `XmClientLibs` в своем файле [.filename]#Imakefile#, измените это обращение на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`.
+* Если порт ссылается на библиотеку Motif как `-lXm` в своем [.filename]#Makefile# или [.filename]#Imakefile#, замените это на `${MOTIFLIB}`.
+* Если порт использует `XmClientLibs` в своем [.filename]#Imakefile#, замените это на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`.
-Заметьте, что переменная `MOTIFLIB` (как правило) раскрывается в `-L/usr/local/lib -lXm` или `/usr/local/lib/libXm.a`, так что нет нужды впереди добавлять `-L` или `-l`.
+Обратите внимание, что `MOTIFLIB` (обычно) раскрывается в `-L/usr/local/lib -lXm -lXp` или `/usr/local/lib/libXm.a`, поэтому нет необходимости добавлять `-L` или `-l` перед этим.
-=== Шрифты для X11
+[[x11-fonts]]
+=== Шрифты X11
-Если ваш порт устанавливает шрифты для X Window System, поместите их в каталог [.filename]#LOCALBASE/lib/X11/fonts/local#.
+Если порт устанавливает шрифты для X Window System, поместите их в [.filename]#LOCALBASE/lib/X11/fonts/local#.
-=== Получение поддельного `DISPLAY`, используя Xvfb
+[[x11-fake-display]]
+=== Получение поддельного `DISPLAY` с помощью Xvfb
-Некоторые приложения для успешной компиляции требуют наличие работающего дисплея X11. Это создает проблему для машин, которые работают в режиме headless. При использовании следующего канонического хака инфраструктура построения запустит сервер X в виртуальном фреймбуфере. Затем переменная работающего `DISPLAY` передается при построении.
+Некоторые приложения требуют рабочего дисплея X11 для успешной компиляции. Это создаёт проблему для машин, работающих без монитора. При использовании этой переменной инфраструктура сборки запустит виртуальный X-сервер с буфером кадров. Рабочий `DISPLAY` затем передаётся в процесс сборки. См. crossref:uses[uses-display,`USES=display`] для возможных аргументов.
[.programlisting]
....
USES= display
....
+
[[desktop-entries]]
-=== Элементы рабочего стола
+=== Desktop Entries (пункты рабочего стола)
-Элементы рабочего стола (http://standards.freedesktop.org/desktop-entry-spec/latest/[стандарта Freedesktop]) предоставляют способ автоматической настройки функций рабочего стола при установке новой программы, не требуя вмешательства пользователя. Например, новые программы автоматически отображаются в меню приложений совместимых окружений рабочего стола. Элементы рабочего стола изначально появились в окружении рабочего стола GNOME, но в настоящее время являются стандартом и также работают с KDE и Xfce. Такая небольшая автоматизация предоставляет реальное удобство для пользователя, и посему элементы рабочего стола приветствуются в приложениях, которые можно использовать в окружении рабочего стола.
+Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/[стандарт Freedesktop]) предоставляют способ автоматической настройки функций рабочего стола при установке новой программы без вмешательства пользователя. Например, вновь установленные программы автоматически появляются в меню приложений совместимых сред рабочего стола. Desktop entries появились в среде GNOME, но теперь стали стандартом и также работают с KDE и Xfce. Эта автоматизация приносит реальную пользу пользователю, поэтому Desktop entries рекомендуются для приложений, которые могут использоваться в среде рабочего стола.
+[[desktop-entries-predefined]]
==== Использование предопределенных файлов [.filename]#.desktop#
-Порты, включающие предопределенные файлы [.filename]#*.desktop#, должны включать эти файлы в [.filename]#pkg-plist# и устанавливать их в каталог [.filename]#$LOCALBASE/shared/applications#. Для установки этих файлов используется <<install-macros,макрос `INSTALL_DATA`>>.
+Порты, включающие предопределённые файлы [.filename]#*.desktop#, должны добавлять эти файлы в [.filename]#pkg-plist# и устанавливать их в директорию [.filename]#$LOCALBASE/share/applications#. Для установки таких файлов полезен макрос crossref:makefiles[install-macros,`INSTALL_DATA`].
[[updating-desktop-database]]
==== Обновление базы данных рабочего стола
-Если в файле порта [.filename]#portname.desktop# имеется запись MimeType, то база данных рабочего стола олжна быть обновлена после установки и удаления. Для этого укажите `USES`= desktop-file-utils.
+Если порт имеет запись MimeType в файле [.filename]#portname.desktop#, базу данных рабочего стола необходимо обновить после установки и удаления. Для этого определите `USES`= desktop-file-utils.
[[desktop-entries-macro]]
-==== Создание элементов рабочего стола с использованием `DESKTOP_ENTRIES`
+==== Создание Desktop Entries с помощью `DESKTOP_ENTRIES`
-Элементы рабочего стола можно легко создавать для приложений, используя переменную `DESKTOP_ENTRIES`. Будет автоматически создан, установлен и добавлен в [.filename]#pkg-plist# файл с названием [.filename]#name.desktop#. Синтаксис:
+Desktop Entries могут быть легко созданы для приложений с использованием `DESKTOP_ENTRIES`. Файл с именем [.filename]#name.desktop# будет создан, установлен и автоматически добавлен в [.filename]#pkg-plist#. Синтаксис следующий:
[.programlisting]
....
DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify
....
-Перечень возможных категорий доступен на http://standards.freedesktop.org/menu-spec/latest/apa.html[вебсайте Freedesktop]. `StartupNotify` отобразит, поддерживает ли приложение _уведомления о запуске_. Как правило, это графический индикатор часы вместо указателя мыши, меню или панель, которые уведомляют пользователя о загрузке программы. Программа, поддерживающая уведомления о запуске, очистит этот индикатор после запуска. Программы, несовместимые с уведомлениями о запуске, не будут очищать индикатор (возможно, вызывая путаницу и приводя пользователей в бешенство), и поэтому должны иметь `StartupNotify` в выключенном состоянии `false`; тогда индикатор не будет отображаться совсем.
+Список возможных категорий доступен на https://standards.freedesktop.org/menu-spec/latest/apa.html[сайте Freedesktop]. `StartupNotify` указывает, совместимо ли приложение с _уведомлениями о запуске_. Обычно это графический индикатор, например, часы, который появляется у указателя мыши, в меню или на панели, чтобы дать пользователю понять, что программа запускается. Программа, совместимая с уведомлениями о запуске, очищает индикатор после своего старта. Программы, не совместимые с уведомлениями о запуске, никогда не очищают индикатор (что может сбивать с толку и раздражать пользователя), и у них должен быть установлен параметр `StartupNotify` в значение `false`, чтобы индикатор вообще не отображался.
Пример:
@@ -665,163 +1434,803 @@ DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \
false
....
+`DESKTOP_ENTRIES` устанавливаются в директорию, указанную переменной `DESKTOPDIR`. По умолчанию `DESKTOPDIR` имеет значение [.filename]#${PREFIX}/share/applications#
+
+
[[using-gnome]]
== Использование GNOME
-Для задания того, какие компоненты GNOME использует конкретный порт, проект FreeBSD/GNOME использует собственный набор переменных. На странице проекта FreeBSD/GNOME размещён http://www.FreeBSD.org/gnome/docs/porting/[ исчерпывающий список этих переменных].
+[[using-gnome-introduction]]
+=== Введение
-[[using-qt]]
-== Использование Qt
+Эта глава объясняет фреймворк GNOME, используемый в портах. Фреймворк можно условно разделить на базовые компоненты, компоненты рабочего стола GNOME и несколько специальных макросов, упрощающих работу сопровождающих портов.
-[[qt-common]]
-=== Порты, для которых требуется Qt
+[[use-gnome]]
+=== Использование `USE_GNOME`
-.Переменные для портов, использующих Qt
-[cols="1,1", frame="none"]
+Добавление этой переменной в порт позволяет использовать макросы и компоненты, определённые в [.filename]#bsd.gnome.mk#. Код в [.filename]#bsd.gnome.mk# добавляет необходимые зависимости для сборки, выполнения или библиотеки, а также обработку специальных файлов. Приложения GNOME в FreeBSD используют инфраструктуру `USE_GNOME`. Включите все необходимые компоненты в виде списка, разделённого пробелами. Компоненты `USE_GNOME` разделены на следующие виртуальные списки: основные компоненты, компоненты GNOME 3 и устаревшие компоненты. Если порту требуются только библиотеки GTK3, это кратчайший способ определить это:
+
+[.programlisting]
+....
+USE_GNOME= gtk30
+....
+
+`USE_GNOME` компоненты автоматически добавляют необходимые им зависимости. Подробный список всех компонентов `USE_GNOME`, а также информацию о том, какие другие компоненты они подразумевают и их зависимости, можно найти в crossref:special[gnome-components, Компоненты GNOME].
+
+Вот пример [.filename]#Makefile# для порта GNOME, в котором используются многие методы, описанные в этом документе. Пожалуйста, используйте его в качестве руководства при создании новых портов.
+
+[.programlisting]
+....
+PORTNAME= regexxer
+DISTVERSION= 0.10
+CATEGORIES= devel textproc gnome
+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
+USE_GNOME= gnomeprefix intlhack gtksourceviewmm3
+
+GLIB_SCHEMAS= org.regexxer.gschema.xml
+
+.include <bsd.port.mk>
+....
+
+[NOTE]
+====
+Макрос `USE_GNOME` без аргументов не добавляет никаких зависимостей к порту. `USE_GNOME` не может быть установлен после [.filename]#bsd.port.pre.mk#.
+====
+
+[[using-gnome-variables]]
+=== Переменные
+
+Этот раздел объясняет, какие макросы доступны и как они используются. Как, например, в приведённом выше примере. В crossref:special[gnome-components, Компоненты GNOME] содержится более подробное объяснение. Для использования этих макросов необходимо установить `USE_GNOME`.
+
+`GLIB_SCHEMAS`::
+Список всех файлов схем glib, которые устанавливает порт. Макрос добавит файлы в plist порта и обработает регистрацию этих файлов при установке и удалении.
++
+Файлы схем glib написаны в XML и имеют расширение [.filename]#gschema.xml#. Они устанавливаются в директорию [.filename]#share/glib-2.0/schemas/#. Эти файлы схем содержат все настройки конфигурации приложений со значениями по умолчанию. Фактическая база данных, используемая приложениями, создаётся с помощью glib-compile-schema, которая запускается макросом `GLIB_SCHEMAS`.
++
+[.programlisting]
+....
+GLIB_SCHEMAS=foo.gschema.xml
+....
++
+[NOTE]
+====
+Не добавляйте схемы glib в файл [.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут работать некорректно.
+====
+
+`GCONF_SCHEMAS`::
+Перечислите все файлы схем gconf. Макрос добавит файлы схем в plist порта и обеспечит их регистрацию при установке и удалении.
++
+GConf — это база данных на основе XML, которую используют практически все приложения GNOME для хранения своих настроек. Эти файлы устанавливаются в директорию [.filename]#etc/gconf/schemas#. Эта база данных определяется установленными файлами схем, которые используются для генерации ключевых файлов [.filename]#%gconf.xml#. Для каждого файла схемы, устанавливаемого портом, должна быть запись в [.filename]#Makefile#:
++
+[.programlisting]
+....
+GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas
+....
++
+[NOTE]
+====
+Схемы Gconf перечислены в макросе `GCONF_SCHEMAS`, а не в файле [.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут работать некорректно.
+====
+
+`INSTALLS_OMF`::
+Файлы Open Source Metadata Framework (OMF) часто используются приложениями GNOME 2. Эти файлы содержат информацию о файлах справки приложений и требуют специальной обработки с помощью ScrollKeeper/rarian. Для правильной регистрации файлов OMF при установке приложений GNOME из пакетов убедитесь, что файлы `omf` указаны в `pkg-plist` и что в [.filename]#Makefile# порта определено `INSTALLS_OMF`:
++
+[.programlisting]
+....
+INSTALLS_OMF=yes
+....
++
+При установке [.filename]#bsd.gnome.mk# автоматически сканирует [.filename]#pkg-plist# и добавляет соответствующие директивы `@exec` и `@unexec` для каждого файла [.filename]#.omf#, который необходимо отслеживать в базе данных регистрации OMF.
+
+[[gnome-components]]
+== Компоненты GNOME
+
+Для получения дополнительной помощи с портом GNOME, ознакомьтесь с некоторыми из link:https://ports.FreeBSD.org[существующих портов] в качестве примеров. На странице link:https://www.FreeBSD.org/gnome/[FreeBSD GNOME] указана контактная информация, если требуется дополнительная помощь. Компоненты разделены на используемые в настоящее время компоненты GNOME и устаревшие компоненты. Если компонент поддерживает аргументы, они перечислены в скобках в описании. Первый аргумент является значением по умолчанию. "Both" указывается, если компонент по умолчанию добавляется как в зависимости для сборки, так и для выполнения.
+
+[[gnome-components-list]]
+.Компоненты GNOME
+[cols="1,1,1", options="header"]
|===
-|`USE_QT4`
-|Указывает инструменты и библиотеки в качестве зависимостей для портов, которые используют Qt 4. Для получения подробностей смотрите <<qt4-components,выбор компонентов Qt 4>>.
+| Компонент
+| Связанная программа
+| Описание
-|`QT_PREFIX`
-|Устанавливается в значение, содержащее путь к установленному Qt (переменная только для чтения).
+|`atk`
+|accessibility/atk
+|Инструментарий доступности (ATK)
-|`MOC`
-|Устанавливается в значение, содержащее путь к `moc` (переменная только для чтения). По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`atkmm`
+|accessibility/atkmm
+|C++ интерфейс для atk
+
+|`cairo`
+|graphics/cairo
+|Векторная графическая библиотека с поддержкой вывода на различные устройства
-|`QTCPPFLAGS`
-|Дополнительные флаги компилятора для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`cairomm`
+|graphics/cairomm
+|C++ интерфейс для cairo
-|`QTCFGLIBS`
-|Дополнительные флаги компоновки для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`dconf`
+|devel/dconf
+|Система базы данных конфигурации (both, build, run)
-|`QTNONSTANDARD`
-|Подавляет изменение `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `CPPFLAGS` и `MAKE_ENV`.
+|`evolutiondataserver3`
+|databases/evolution-data-server
+|Бэкенды данных для интегрированного почтового клиента/PIM Evolution
+
+|`gdkpixbuf2`
+|graphics/gdk-pixbuf2
+|Графическая библиотека для GTK+
+
+|`glib20`
+|devel/glib20
+|Основная библиотека GNOME `glib20`
+
+|`glibmm`
+|devel/glibmm
+|C++ интерфейс для glib20
+
+|`gnomecontrolcenter3`
+|sysutils/gnome-control-center
+|Центр управления GNOME 3
+
+|`gnomedesktop3`
+|x11/gnome-desktop
+|Библиотека пользовательского интерфейса рабочего стола GNOME 3
+
+|`gsound`
+|audio/gsound
+|Библиотека GObject для воспроизведения системных звуков (both, build, run)
+
+|`gtk-update-icon-cache`
+|graphics/gtk-update-icon-cache
+|Утилита `gtk-update-icon-cache` из набора инструментов `Gtk+`
+
+|`gtk20`
+|x11-toolkits/gtk20
+|Набор инструментов Gtk+ 2
+
+|`gtk30`
+|x11-toolkits/gtk30
+|Набор инструментов Gtk+ 3
+
+|`gtkmm20`
+|x11-toolkits/gtkmm20
+|C++ интерфейс 2.0 для инструментария gtk20
+
+|`gtkmm24`
+|x11-toolkits/gtkmm24
+|C++ интерфейс 2.4 для инструментария gtk20
+
+|`gtkmm30`
+|x11-toolkits/gtkmm30
+|C++ интерфейс 3.0 для набора инструментов gtk30
+
+|`gtksourceview2`
+|x11-toolkits/gtksourceview2
+|Виджет, добавляющий подсветку синтаксиса в GtkTextView
+
+|`gtksourceview3`
+|x11-toolkits/gtksourceview3
+|Текстовая виджет, добавляющая подсветку синтаксиса к виджету GtkTextView
+
+|`gtksourceviewmm3`
+|x11-toolkits/gtksourceviewmm3
+|C++ интерфейс для библиотеки gtksourceview3
+
+|`gvfs`
+|devel/gvfs
+|Виртуальная файловая система GNOME
+
+|`intltool`
+|textproc/intltool
+|Инструмент для интернационализации (см. также intlhack)
+
+|`introspection`
+|devel/gobject-introspection
+|Базовые привязки (биндинги) интроспекции и инструменты для генерации привязок интроспекции. В большинстве случаев достаточно `:build`, `:both`/`:run` нужны только для приложений, использующих привязки интроспекции. (both, build, run)
+
+|`libgda5`
+|databases/libgda5
+|Обеспечивает единообразный доступ к различным типам источников данных
+
+|`libgda5-ui`
+|databases/libgda5-ui
+|Библиотека пользовательского интерфейса из библиотеки libgda5
+
+|`libgdamm5`
+|databases/libgdamm5
+|привязки C++ для библиотеки libgda5
+
+|`libgsf`
+|devel/libgsf
+|Расширяемая абстракция ввода-вывода для работы со структурированными форматами файлов
+
+|`librsvg2`
+|graphics/librsvg2
+|Библиотека для разбора и отображения SVG-файлов векторной графики
+
+|`libsigc++20`
+|devel/libsigc++20
+|Фреймворк обратных вызовов для C++
+
+|`libxml++26`
+|textproc/libxml++26
+|C++ привязки для библиотеки libxml2
+
+|`libxml2`
+|textproc/libxml2
+|Библиотека парсера XML (both, build, run)
+
+|`libxslt`
+|textproc/libxslt
+|Библиотека XSLT (сборка, выполнение)
+
+|`metacity`
+|x11-wm/metacity
+|Менеджер окон из GNOME
+
+|`nautilus3`
+|x11-fm/nautilus
+|GNOME файловый менеджер
+
+|`pango`
+|x11-toolkits/pango
+|Открытый фреймворк для разметки и отображения интернационализированного текста
+
+|`pangomm`
+|x11-toolkits/pangomm
+|C++ интерфейс для библиотеки pango
+
+|`py3gobject3`
+|devel/py3-gobject3
+|Python 3, интерфейс GObject 3.0
+
+|`pygobject3`
+|devel/py-gobject3
+|Python 2, интерфейс GObject 3.0
+
+|`vte3`
+|x11-toolkits/vte3
+|Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)
|===
-.Дополнительные переменные для портов, использующих Qt 4.x
-[cols="1,1", frame="none"]
+[[gnome-components-macro]]
+.Компоненты макросов GNOME
+[cols="1,1", options="header"]
|===
-|`UIC`
-|Устанавливает путь к `uic` (переменная только для чтения).
+| Компонент
+| Описание
-|`QMAKE`
-|Устанавливает путь к `qmake` (переменная только для чтения).
+|`gnomeprefix`
+|Предоставляет `configure` некоторые стандартные расположения.
-|`QMAKESPEC`
-|Устанавливает путь к конфигурационному файлу для `qmake` (переменная только для чтения).
+|`intlhack`
+|То же, что и `intltool`, но с патчами для гарантии использования [.filename]#share/locale/#. Используйте только в случае, когда одного `intltool` недостаточно.
-|`QMAKEFLAGS`
-|Дополнительные флаги для `qmake`.
+|`referencehack`
+|Этот макрос предназначен для помощи в разделении API или справочной документации на собственный порт.
+|===
-|`QT_INCDIR`
-|Устанавливает каталоги для заголовков Qt 4 (переменная только для чтения).
+[[gnome-components-legacy]]
+.Компоненты GNOME Legacy
+[cols="1,1,1", options="header"]
+|===
+| Компонент
+| Связанная программа
+| Описание
-|`QT_LIBDIR`
-|Устанавливает путь к библиотекам Qt 4 (переменная только для чтения).
+|`atspi`
+|accessibility/at-spi
+|Интерфейс поставщика услуг вспомогательных технологий (AT-SPI)
+
+|`esound`
+|audio/esound
+|Пакет звука Enlightenment
+
+|`gal2`
+|x11-toolkits/gal2
+|Коллекция виджетов, взятых из GNOME 2 gnumeric
+
+|`gconf2`
+|devel/gconf2
+|Система базы данных конфигурации для GNOME 2
+
+|`gconfmm26`
+|devel/gconfmm26
+|C++ привязки C++ для gconf2
+
+|`gdkpixbuf`
+|graphics/gdk-pixbuf
+|Графическая библиотека для GTK+
+
+|`glib12`
+|devel/glib12
+|Библиотека ядра glib 1.2
+
+|`gnomedocutils`
+|textproc/gnome-doc-utils
+|Утилиты документации GNOME
+
+|`gnomemimedata`
+|misc/gnome-mime-data
+|База данных MIME и приложений для GNOME 2
+
+|`gnomesharp20`
+|x11-toolkits/gnome-sharp20
+|Интерфейсы GNOME 2 для среды выполнения .NET
+
+|`gnomespeech`
+|accessibility/gnome-speech
+|GNOME 2 API преобразования текста в речь
+
+|`gnomevfs2`
+|devel/gnome-vfs
+|Виртуальная файловая система GNOME 2
+
+|`gtk12`
+|x11-toolkits/gtk12
+|Набор инструментов Gtk+ 1.2
+
+|`gtkhtml3`
+|www/gtkhtml3
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`gtkhtml4`
+|www/gtkhtml4
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`gtksharp20`
+|x11-toolkits/gtk-sharp20
+|Интерфейсы GTK+ и GNOME 2 для среды выполнения .NET
+
+|`gtksourceview`
+|x11-toolkits/gtksourceview
+|Виджет, добавляющий подсветку синтаксиса в GtkTextView
+
+|`libartgpl2`
+|graphics/libart_lgpl
+|Библиотека для высокопроизводительной 2D графики
+
+|`libbonobo`
+|devel/libbonobo
+|Система компонентов и составных документов для GNOME 2
+
+|`libbonoboui`
+|x11-toolkits/libbonoboui
+|Интерфейс для libbonobo в GNOME 2
+
+|`libgda4`
+|databases/libgda4
+|Обеспечивает единообразный доступ к различным типам источников данных
+
+|`libglade2`
+|devel/libglade2
+|Библиотека glade для GNOME 2
+
+|`libgnome`
+|x11/libgnome
+|Библиотеки для GNOME 2, GNU окружения рабочего стола
+
+|`libgnomecanvas`
+|graphics/libgnomecanvas
+|Графическая библиотека для GNOME 2
+
+|`libgnomekbd`
+|x11/libgnomekbd
+|Динамическая библиотека клавиатуры GNOME 2
+
+|`libgnomeprint`
+|print/libgnomeprint
+|Библиотека поддержки печати Gnome 2
+
+|`libgnomeprintui`
+|x11-toolkits/libgnomeprintui
+|Библиотека поддержки печати Gnome 2
+
+|`libgnomeui`
+|x11-toolkits/libgnomeui
+|Библиотеки для графического интерфейса GNOME 2, среды рабочего стола GNU
+
+|`libgtkhtml`
+|www/libgtkhtml
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`libgtksourceviewmm`
+|x11-toolkits/libgtksourceviewmm
+|C++ интерфейс GtkSourceView
+
+|`libidl`
+|devel/libIDL
+|Библиотека для создания деревьев файлов CORBA IDL
+
+|`libsigc++12`
+|devel/libsigc++12
+|Фреймворк обратных вызовов для C++
+
+|`libwnck`
+|x11-toolkits/libwnck
+|Библиотека, используемая для написания пейджеров и списков задач
-|`QT_PLUGINDIRC`
-|Устанавливает путь к плагинам Qt 4 (переменная только для чтения).
+|`libwnck3`
+|x11-toolkits/libwnck3
+|Библиотека, используемая для написания пейджеров и списков задач
+
+|`orbit2`
+|devel/ORBit2
+|Высокопроизводительный CORBA ORB с поддержкой языка C
+
+|`pygnome2`
+|x11-toolkits/py-gnome2
+|Интерфейс Python для GNOME 2
+
+|`pygobject`
+|devel/py-gobject
+|Python 2, интерфейс GObject 2.0
+
+|`pygtk2`
+|x11-toolkits/py-gtk2
+|Набор интерфейсов Python для GTK+
+
+|`pygtksourceview`
+|x11-toolkits/py-gtksourceview
+|Интерфейс Python для GtkSourceView 2
+
+|`vte`
+|x11-toolkits/vte
+|Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)
|===
-При заданной переменной `USE_QT4` применяются следующие настройки:
+[[gnome-components-deprecated]]
+.Устаревшие компоненты: не использовать
+[cols="1,1", options="header"]
+|===
+| Компонент
+| Описание
-[.programlisting]
-....
-CONFIGURE_ARGS+= --with-qt-includes=${QT_INCDIR} \
- --with-qt-libraries=${QT_LIBDIR} \
- --with-extra-libs=${LOCALBASE}/lib \
- --with-extra-includes=${LOCALBASE}/include
-CONFIGURE_ENV+= MOC="${MOC}" UIC="${UIC}" LIBS="${QTCFGLIBS}" \
- QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" QTDIR="${QT_PREFIX}"
-MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"
+|`pangox-compat`
+|pangox-compat устарел и был отделён от пакета pango.
+|===
-PLIST_SUB+= QT_INCDIR_REL=${QT_INCDIR_REL} \
- QT_LIBDIR_REL=${QT_LIBDIR_REL} \
- QT_PLUGINDIR_REL=${QT_PLUGINDIR_REL}
-....
+[[using-qt]]
+== Использование Qt
+
+[NOTE]
+====
+Для портов, которые являются частью самого Qt, см. crossref:uses[uses-qt-dist,`qt-dist`].
+====
+
+[[qt-common]]
+=== Порты, требующие Qt
+
+Коллекция портов поддерживает Qt 5 и Qt 6 с помощью `USES+=qt:5` и `USES+=qt:6` соответственно. Установите `USE_QT` в список необходимых компонентов Qt (libraries, tools, plugins - библиотеки, инструменты, плагины).
+
+Фреймворк Qt экспортирует ряд переменных, которые могут использоваться портами, некоторые из них перечислены ниже:
+
+[[using-qt-variables]]
+.Переменные, предоставляемые портам, использующим Qt
+[cols="1,1", frame="none"]
+|===
+|`QMAKE`
+|Полный путь к исполняемому файлу `qmake`.
+
+|`LRELEASE`
+|Полный путь к утилите `lrelease`.
+
+|`MOC`
+|Полный путь к `moc`.
+
+|`RCC`
+|Полный путь к `rcc`.
+
+|`UIC`
+|Полный путь к `uic`.
+
+|`QT_INCDIR`
+|Каталог включаемых файлов Qt.
+
+|`QT_LIBDIR`
+|Путь к библиотекам Qt.
+
+|`QT_PLUGINDIR`
+|Путь к плагинам Qt.
+|===
-[[qt4-components]]
+[[qt-components]]
=== Выбор компонентов
-В переменной `USE_QT4` должны указываться зависимости от отдельных инструментов и библиотек Qt 4. К каждому компоненту можно добавить суффикс, `_build` или `_run`, отражающий, когда должна быть применена зависимость, во время сборки или выполнения, соответственно. Если суффикс отсутствует, зависимость от компонента будет и для времени сборки, и для времени выполнения. Обычно, компоненты библиотек должны указываться без суффиксов, компоненты инструментов - с суффиксом `_build`, а компоненты плагинов - с суффиксом `_run`. Наиболее общие используемые компоненты перечислены ниже (все доступные компоненты перечислены в `_USE_QT4_ALL` в файле [.filename]#/usr/ports/Mk/bsd.qt.mk#):
+Отдельные зависимости инструментов и библиотек Qt должны быть указаны в `USE_QT`. Каждый компонент может иметь суффикс `_build` или `_run`, указывающий, требуется ли компонент во время сборки или выполнения. Если суффикс отсутствует, компонент будет требоваться как во время сборки, так и во время выполнения. Обычно компоненты библиотек указываются без суффикса, компоненты инструментов чаще всего указываются с суффиксом `_build`, а компоненты плагинов — с суффиксом `_run`. Наиболее часто используемые компоненты перечислены ниже (все доступные компоненты перечислены в `_USE_QT_ALL`, которая формируется из `_USE_QT_COMMON` и `_USE_QT[56]_ONLY` в [.filename]#/usr/ports/Mk/Uses/qt.mk#):
-.Доступные библиотечные компоненты Qt 4
+[[using-qt-library-list]]
+.Доступные компоненты библиотеки Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`corelib`
-|основная библиотека (можно опустить, если порт не использует ничего, кроме `corelib`)
+|`3d`
+|Модуль Qt3D
+
+|`5compat`
+|Модуль совместимости Qt 5 для Qt 6
+
+|`assistant`
+|Браузер документации Qt 5
+
+|`base`
+|Модуль Qt 6 base
+
+|`canvas3d`
+|Модуль Qt canvas3d
+
+|`charts`
+|Модуль Qt 5 charts
+
+|`concurrent`
+|Модуль многопоточности Qt
+
+|`connectivity`
+|Модуль Qt для подключения (Bluetooth/NFC)
+
+|`core`
+|Ядро Qt, неграфический модуль
+
+|`datavis3d`
+|Модуль визуализации 3D данных Qt 5
+
+|`dbus`
+|Модуль межпроцессного взаимодействия Qt D-Bus
+
+|`declarative`
+|Декларативный фреймворк Qt для динамических пользовательских интерфейсов
+
+|`designer`
+|Интерфейсный конструктор Qt 5 для графического пользовательского интерфейса
+
+|`diag`
+|Инструмент для сбора диагностической информации о Qt и его окружении
+
+|`doc`
+|Документация Qt 5
+
+|`examples`
+|Исходный код примеров Qt 5
+
+|`gamepad`
+|Модуль Qt 5 Gamepad
+
+|`graphicaleffects`
+|Графические эффекты Qt Quick
|`gui`
-|библиотека графического пользовательского интерфейса
+|Модуль графического интерфейса Qt
+
+|`help`
+|Модуль интеграции справки Qt в режиме онлайн
+
+|`l10n`
+|Локализованные сообщения Qt
+
+|`languageserver`
+|Реализация протокола Language Server Protocol в Qt 6
+
+|`linguist`
+|Инструмент перевода Qt 5
+
+|`location`
+|Модуль Qt Location
+
+|`lottie`
+|Qt 6 QML API для отрисовки графики и анимаций
+
+|`multimedia`
+|Модуль поддержки аудио, видео, радио и камеры Qt
|`network`
-|сетевая библиотека
+|Сетевой модуль Qt
+
+|`networkauth`
+|Модуль сетевой аутентификации Qt
|`opengl`
-|библиотека OpenGL
+|Модуль поддержки OpenGL, совместимый с Qt 5
+
+|`paths`
+|Клиент командной строки для QStandardPaths
+
+|`phonon4`
+|Мультимедийный фреймворк KDE
+
+|`pixeltool`
+|Увеличитель экрана Qt 5
+
+|`plugininfo`
+|Дампер метаданных плагинов Qt 5
+
+|`positioning`
+|Qt 6 API позиционирования из источников, таких как спутники, Wi-Fi или текстовые файлы.
+
+|`printsupport`
+|Модуль поддержки печати Qt
+
+|`qdbus`
+|Интерфейс командной строки Qt для D-Bus
+
+|`qdbusviewer`
+|Графический интерфейс Qt 5 для D-Bus
+
+|`qdoc`
+|Генератор документации Qt
-|`qt3support`
-|библиотека совместимости с Qt 3
+|`qdoc-data`
+|Файлы конфигурации QDoc
-|`qtestlib`
-|библиотека модульного тестирования
+|`qev`
+|Инструмент для интроспекции событий Qt QWidget
+
+|`qmake`
+|Генератор Makefile Qt
+
+|`quickcontrols`
+|Набор элементов управления для создания полных интерфейсов в Qt Quick
+
+|`quickcontrols2`
+|Набор элементов управления для создания полных интерфейсов в Qt Quick
+
+|`remoteobjects`
+|Модуль Qt 5 SXCML
|`script`
-|библиотека сценариев
+|Совместимый с Qt 4 модуль для написания сценариев
+
+|`scripttools`
+|Дополнительные компоненты Qt Script
+
+|`scxml`
+|Модуль Qt 5 SXCML
+
+|`sensors`
+|Модуль Qt sensors
+
+|`serialbus`
+|Функции Qt для доступа к промышленным шинным системам
+
+|`serialport`
+|Функции Qt для доступа к последовательным портам
+
+|`shadertools`
+|Инструменты Qt 6 для кроссплатформенного конвейера шейдеров Qt
+
+|`speech`
+|Доступность в Qt5
|`sql`
-|библиотека SQL
+|Модуль интеграции с базой данных Qt SQL
+
+|`sql-ibase`
+|Плагин Qt баз данных InterBase/Firebird
+
+|`sql-mysql`
+|Плагин Qt базы данных MySQL
+
+|`sql-odbc`
+|Плагин Qt ODBC
+
+|`sql-pgsql`
+|Плагин Qt базы данных PostgreSQL
+
+|`sql-sqlite2`
+|Плагин Qt базы данных SQLite 2
+
+|`sql-sqlite3`
+|Плагин Qt базы данных SQLite 3
+
+|`sql-tds`
+|Плагин Qt для подключение к базам данных по протоколу TDS
+
+|`svg`
+|Модуль поддержки SVG в Qt
+
+|`testlib`
+|Модуль тестирования Qt
+
+|`tools`
+|Различные инструменты Qt 6
+
+|`translations`
+|Модуль перевода Qt 6
+
+|`uiplugin`
+|Интерфейс плагина пользовательского виджета Qt для Qt Designer
+
+|`uitools`
+|Модуль поддержки форм пользовательского интерфейса Qt Designer
+
+|`virtualkeyboard`
+|Модуль виртуальной клавиатуры Qt 5
+
+|`wayland`
+|Оболочка Qt 5 для Wayland
+
+|`webchannel`
+|Библиотека Qt 5 для интеграции C++/QML с клиентами на HTML/js
+
+|`webengine`
+|Библиотека Qt 5 для отображения веб-содержимого
+
+|`webkit`
+|QtWebKit с более современной кодовой базой WebKit
+
+|`websockets`
+|Реализация протокола WebSocket на Qt
+
+|`websockets-qml`
+|Реализация протокола WebSocket на Qt (привязки QML)
+
+|`webview`
+|Компонент Qt для отображения веб-содержимого
+
+|`widgets`
+|Модуль виджетов Qt C++
+
+|`x11extras`
+|Платформо-специфичные возможности Qt для систем на основе X11
|`xml`
-|библиотека XML
+|Реализации SAX и DOM в Qt
+
+|`xmlpatterns`
+|Поддержка Qt для XPath, XQuery, XSLT и XML Schema
|===
-Вы можете определить, от каких библиотек зависит приложение, запустив `ldd` на основной исполняемый файл после успешной компиляции.
+Чтобы определить библиотеки, от которых зависит приложение, выполните `ldd` для основного исполняемого файла после успешной компиляции.
-.Доступные компоненты инструментов Qt 4
+[[using-qt-tools-list]]
+.Доступные компоненты инструментов Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`moc`
-|мета-объектный компилятор (нужен при построении почти для каждого приложения Qt)
-
-|`qmake`
-|генератор Makefile / утилита построения
+|`buildtools`
+|инструменты сборки (`moc`, `rcc`), необходимые практически для любого приложения Qt.
-|`rcc`
-|компилятор ресурсов (нужен, если приложение идет вместе с файлами [.filename]#*.rc# или [.filename]#*.qrc#)
+|`linguisttools`
+|инструменты локализации: `lrelease`, `lupdate`
-|`uic`
-|компилятор пользовательского интерфейса (нужен, если приложение идет вместе с файлами [.filename]#*.ui#, созданными при помощи Qt Designer, - на практике каждое приложение Qt с GUI)
+|`qmake`
+|Генератор Makefile/утилита сборки
|===
-.Доступные компоненты плагинов Qt 4
+[[using-qt-plugins-list]]
+.Доступные компоненты плагинов Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`iconengines`
-|плагин для движка иконок SVG (если приложение поставляется с иконками SVG)
-
|`imageformats`
-|плагины для графических форматов GIF, JPEG, MNG и SVG (если приложение поставляется с графическими файлами)
+|плагины для графических форматов TGA, TIFF и MNG
|===
-[[qt4-components-example]]
-.Выбор компонентов Qt 4
+[[qt5-components-example]]
+.Выбор компонентов Qt 5
[example]
====
-В этом примере портированное приложение использует библиотеку графического пользовательского интерфейса Qt 4, основную библиотеку Qt 4, все инструменты генерации кода Qt 4 и генератор Makefile Qt 4. Поскольку библиотека `gui` подразумевает зависимость от основной библиотеки, указывать `corelib` нет необходимости. Инструменты генерации кода Qt 4 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` нужны только для времени построения, поэтому они указаны с суффиксом `_build`:
+В этом примере портированное приложение использует библиотеку графического интерфейса Qt 5, основную библиотеку Qt 5, все инструменты генерации кода Qt 5 и генератор Makefile Qt 5. Поскольку библиотека `gui` подразумевает зависимость от основной библиотеки, `core` не нужно указывать. Инструменты генерации кода Qt 5 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` требуются только во время сборки, поэтому они указаны с суффиксом `_build`:
[.programlisting]
....
-USE_QT4= gui moc_build qmake_build rcc_build uic_build
+USES= qt:5
+USE_QT= gui buildtools_build qmake_build
....
====
@@ -829,81 +2238,444 @@ USE_QT4= gui moc_build qmake_build rcc_build uic_build
[[using-qmake]]
=== Использование `qmake`
+Если приложение предоставляет файл проекта qmake ([.filename]#*.pro#), определите `USES= qmake` вместе с `USE_QT`. `USES= qmake` уже подразумевает зависимость сборки от qmake, поэтому компонент qmake может быть опущен в `USE_QT`. Подобно crossref:special[using-cmake,CMake], qmake поддерживает сборку вне исходного дерева, которую можно включить, указав аргумент `outsource` (см. crossref:special[using-qmake-example,пример `USES= qmake`]). Также см. crossref:special[using-qmake-arguments,Возможные аргументы для `USES qmake`].
+
+[[using-qmake-arguments]]
+.Возможные аргументы для `USES= qmake`
+[cols="1,1", frame="none", options="header"]
+|===
+| Переменная
+| Описание
+
+|`no_configure`
+|Не добавлять цель configure. Это подразумевается при `HAS_CONFIGURE=yes` и `GNU_CONFIGURE=yes`. Это требуется, когда сборке нужна только настройка окружения из `USES= qmake`, но в остальном она запускает `qmake` самостоятельно.
+
+|`no_env`
+|Подавить модификацию окружения configure и make. Это требуется только когда `qmake` используется для настройки программного обеспечения и сборка не понимает окружение, установленное `USES= qmake`.
+
+|`norecursive`
+|Не передавать аргумент `-recursive` в `qmake`.
+
+|`outsource`
+|Выполнить сборку вне исходного кода.
+|===
+
+[[using-qmake-variables]]
.Переменные для портов, использующих `qmake`
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Переменная
| Описание
|`QMAKE_ARGS`
-|Спефицичные для порта флаги QMake для передачи программе `qmake`.
+|Специфичные для порта флаги qmake, передаваемые в бинарный файл `qmake`.
|`QMAKE_ENV`
-|Переменные окружения, устанавливаемые для программы `qmake`. По умолчанию соответствует значению `${CONFIGURE_ENV}`.
+|Переменные окружения, которые должны быть установлены для бинарного файла `qmake`. По умолчанию используется `${CONFIGURE_ENV}`.
-|`QMAKE_PRO`
-|Название файла проекта [.filename]#.pro#. По умолчанию имеет пустое значение (с использованием автоопределения).
+|`QMAKE_SOURCE_PATH`
+|Путь к файлам проекта qmake ([.filename]#.pro#). По умолчанию используется `${WRKSRC}`, если запрошена сборка вне исходного кода, в противном случае оставляется пустым.
|===
-Если вместе с приложением вместо [.filename]#configure# поставляется файл [.filename]#.pro#, вы можете использовать следующее:
+При использовании `USES= qmake` применяются следующие настройки:
[.programlisting]
....
-USES= qmake
-USE_QT4= qmake_build
+CONFIGURE_ARGS+= --with-qt-includes=${QT_INCDIR} \
+ --with-qt-libraries=${QT_LIBDIR} \
+ --with-extra-libs=${LOCALBASE}/lib \
+ --with-extra-includes=${LOCALBASE}/include
+
+CONFIGURE_ENV+= QTDIR="${QT_PREFIX}" QMAKE="${QMAKE}" \
+ MOC="${MOC}" RCC="${RCC}" UIC="${UIC}" \
+ QMAKESPEC="${QMAKESPEC}"
+
+PLIST_SUB+= QT_INCDIR=${QT_INCDIR_REL} \
+ QT_LIBDIR=${QT_LIBDIR_REL} \
+ QT_PLUGINDIR=${QT_PLUGINDIR_REL}
+....
+
+Некоторые скрипты configure не поддерживают указанные выше аргументы. Чтобы отключить изменение `CONFIGURE_ENV` и `CONFIGURE_ARGS`, установите `USES= qmake:no_env`.
+
+[[using-qmake-example]]
+.Пример `USES= qmake`
+[example]
+====
+Этот фрагмент демонстрирует использование qmake для порта Qt 5:
+
+[.programlisting]
+....
+USES= qmake:outsource qt:5
+USE_QT= buildtools_build
....
-`USES=qmake` указывает порту на использование `qmake` в процессе конфигурации. Обратите внимание, что `USES=qmake` не подразумевает зависимость от Qt 4 `qmake`. Для этого в значении `USE_QT4` должен присутствовать компонент `qmake_build`.
+====
-Приложения Qt часто пишутся в кроссплатформенной манере, и X11/Unix часто не является для них платформой разработки, что в свою очередь часто приводит к соответствующим упущенным моментам:
+Приложения Qt часто разрабатываются как кроссплатформенные, и зачастую X11/Unix — не та платформа, на которой они создаются. Это, в свою очередь, приводит к определённым недоработкам, таким как:
-* _Отсутствующие дополнительные пути для заголовочных файлов._ Многие приложения идут с поддержкой иконки в системном трее, но пренебрегают смотреть на наличие заголовочных файлов и/или библиотеками в каталогах X11. Вы можете сообщить `qmake`, чтобы она добавила каталоги в пути поиска заголовочных файлов и библиотек через командную строку. К примеру:
+* _Отсутствуют дополнительные пути для заголовочных файлов._ Многие приложения поддерживают значки в системном трее, но не учитывают пути для заголовочных файлов и/или библиотек в каталогах X11. Чтобы добавить каталоги в пути поиска заголовочных файлов и библиотек для `qmake` через командную строку, используйте:
+
[.programlisting]
....
-QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
- LIBS+=-L${LOCALBASE}/lib
+QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
+ LIBS+=-L${LOCALBASE}/lib
....
-* _Фиктивные пути установки._ Иногда данные, такие как иконки и файлы .desktop, устанавливаются по умолчанию в каталоги, которые не просматриваются XDG-совместимыми приложениями. Примером является package:editors/texmaker[] - взгляните на [.filename]#patch-texmaker.pro# из каталога [.filename]#files# этого порта, который можно взять в качестве шаблона исправления этого непосредственно в файле проекта `qmake`.
+* _Некорректные пути установки._ Иногда данные, такие как иконки или файлы .desktop, по умолчанию устанавливаются в каталоги, которые не сканируются приложениями, совместимыми с XDG. Например, package:editors/texmaker[] — посмотрите на файл [.filename]#patch-texmaker.pro# в директории [.filename]#files# этого порта, чтобы увидеть шаблон исправления этой проблемы напрямую в проектом файле `qmake`.
[[using-kde]]
== Использование KDE
-[[kde4-variables]]
-=== Задание переменных KDE 4
+[[kde5-variables]]
+=== Определения переменных KDE
-Если ваше приложение зависит от KDE 4.x, присвойте `USE_KDE4` список требуемых компонентов. Для переопределения типа зависимости компонента могут быть использованы суффиксы `_build` и `_run` (например, `baseapps_run`). Если суффикс не задан, будет использован тип зависимости по умолчанию. Если вы хотите использовать оба типа, добавьте компонент дважды с обоими суффиксами (например, `automoc4_build automoc4_run`). Основные наиболее используемые компоненты перечислены ниже (актуальные компоненты задокументированы в начале файла [.filename]#/usr/ports/Mk/bsd.kde4.mk#):
+Если приложение зависит от KDE, установите `USES+=kde:5` и `USE_KDE` в список необходимых компонентов. Суффиксы `_build` и `_run` можно использовать для принудительного указания типа зависимости компонентов (например, `baseapps_run`). Если суффикс не задан, будет использован тип зависимости по умолчанию. Чтобы принудительно задать оба типа, добавьте компонент дважды с обоими суффиксами (например, `ecm_build ecm_run`). Доступные компоненты перечислены ниже (актуальный список компонентов также приведён в [.filename]#/usr/ports/Mk/Uses/kde.mk#):
-.Доступные компоненты KDE 4
+[[using-kde-components]]
+.Доступные компоненты KDE
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`kdehier`
-|Иерархия основных каталогов KDE
+|`activities`
+|Среда выполнения и библиотека KF5 для организации работы в отдельных автивностях
-|`kdelibs`
-|KDE Developer Platform
+|`activities-stats`
+|KF5 статистика для активностей
-|`kdeprefix`
-|Если установлено, то порт будет установлен в `${KDE4_PREFIX}` вместо `${LOCALBASE}`
+|`activitymanagerd`
+|Системный сервис для управления активностью пользователей, отслеживания шаблонов использования
-|`sharedmime`
-|База данных MIME типов для портов KDE
+|`akonadi`
+|Хранилище данных для KDE-Pim
-|`automoc4`
-|automoc для пакетов Qt 4
+|`akonadicalendar`
+|Интеграция Akonadi с Календарем
-|`akonadi`
-|Сервер хранения KDE-Pim
+|`akonadiconsole`
+|Консоль управления и отладки Akonadi
+
+|`akonadicontacts`
+|Библиотеки и демоны для реализации управления контактами в Akonadi
+
+|`akonadiimportwizard`
+|Импорт данных из других почтовых клиентов в KMail
+
+|`akonadimime`
+|Библиотеки и демоны для реализации базовой обработки электронной почты
+
+|`akonadinotes`
+|Библиотека KDE для доступа к хранилищам почты в формате MBox
+
+|`akonadisearch`
+|Библиотеки и демоны для реализации поиска в Akonadi
+
+|`akregator`
+|Читатель лент от KDE
+
+|`alarmcalendar`
+|KDE API для будильников KAlarm
+
+|`apidox`
+|Документация API KF5
+
+|`archive`
+|Библиотека KF5, предоставляющая классы для работы с форматами архивов
+
+|`attica`
+|Библиотека API Open Collaboration Services, версия для KDE5
+
+|`attica5`
+|Библиотека API Open Collaboration Services, версия для KDE5
+
+|`auth`
+|Абстракция KF5 для системной политики и функций аутентификации
+
+|`baloo`
+|KF5 Фреймворк для поиска и управления пользовательскими метаданными
+
+|`baloo-widgets`
+|Библиотека BalooWidgets
+
+|`baloo5`
+|KF5 Фреймворк для поиска и управления пользовательскими метаданными
+
+|`blog`
+|KDE API для доступа к веб-логам
+
+|`bookmarks`
+|Библиотека KF5 для закладок и формата XBEL
+
+|`breeze`
+|Plasma5 artwork, стили и ресурсы для визуального стиля Breeze
+
+|`breeze-gtk`
+|Plasma5 Breeze визуальный стиль для Gtk
+
+|`breeze-icons`
+|Тема значков Breeze для KDE
+
+|`calendarcore`
+|Библиотека доступа к календарю KDE
+
+|`calendarsupport`
+|Библиотеки поддержки календарей для KDEPim
+
+|`calendarutils`
+|Утилита KDE и пользовательские функции интерфейса для доступа к календарю
+
+|`codecs`
+|Библиотека KF5 для работы со строками
+
+|`completion`
+|KF5 вспомогательные средства и виджеты автодополнения текста
+
+|`config`
+|Виджеты KF5 для диалогов настройки
+
+|`configwidgets`
+|Виджеты KF5 для диалогов настройки
+
+|`contacts`
+|KDE API для управления контактной информацией
+
+|`coreaddons`
+|KF5 аддоны для QtCore
+
+|`crash`
+|Библиотека KF5 для обработки анализа сбоев и отчётов об ошибках в приложениях
+
+|`dbusaddons`
+|KF5 дополнения к QtDBus
+
+|`decoration`
+|Библиотека Plasma5 для создания оформления окон
+
+|`designerplugin`
+|Интеграция KF5 виджетов Frameworks в Qt Designer/Creator
+
+|`discover`
+|Инструменты управления пакетами Plasma5
+
+|`dnssd`
+|Абстракция KF5 для системных функций DNSSD
+
+|`doctools`
+|Генерация документации KF5 из docbook
+
+|`drkonqi`
+|Обработчик сбоев Plasma5
+
+|`ecm`
+|Дополнительные модули и скрипты для CMake
+
+|`emoticons`
+|Библиотека KF5 для преобразования эмотиконов
+
+|`eventviews`
+|Библиотеки просмотра событий для KDEPim
+
+|`filemetadata`
+|Библиотека KF5 для извлечения метаданных файлов
+
+|`frameworkintegration`
+|Плагины рабочего пространства KF5 и интеграции фреймворков
+
+|`gapi`
+|Библиотека на основе KDE для доступа к сервисам Google
+
+|`globalaccel`
+|Библиотека KF5 для добавления поддержки глобальных сочетаний клавиш рабочего пространства
+
+|`grantlee-editor`
+|Редактор тем Grantlee
+
+|`grantleetheme`
+|KDE PIM grantleetheme
-|`soprano`
-|Фреймворк Qt 4 RDF
+|`gravatar`
+|Библиотека для поддержки gravatar
-|`strigi`
-|Поисковые даемон рабочего стола
+|`guiaddons`
+|KF5 аддоны для QtGui
+
+|`holidays`
+|Библиотека KDE для календарных праздников
+
+|`hotkeys`
+|Библиотека Plasma5 для горячих клавиш
+
+|`i18n`
+|KF5 — расширенная инфраструктура интернационализации
+
+|`iconthemes`
+|Библиотека KF5 для работы с иконками в приложениях
+
+|`identitymanagement`
+|KDE pim идентификации
+
+|`idletime`
+|Библиотека KF5 для мониторинга активности пользователей
+
+|`imap`
+|KDE API для поддержки IMAP
+
+|`incidenceeditor`
+|Инцидентные редакторские библиотеки для KDEPim
+
+|`infocenter`
+|Утилита Plasma5, предоставляющая системную информацию
+
+|`init`
+|Запускатель процессов KF5 для ускорения запуска приложений KDE
+
+|`itemmodels`
+|Модели KF5 для системы Qt Model/View
+
+|`itemviews`
+|KF5 виджеты-дополнения для Qt Model/View
+
+|`jobwidgets`
+|Виджеты KF5 для отслеживания экземпляра KJob
+
+|`js`
+|Библиотека KF5, предоставляющая интерпретатор ECMAScript
+
+|`jsembed`
+|Библиотека KF5 для привязки объектов JavaScript к QObjects
+
+|`kaddressbook`
+|Менеджер контактов KDE
+
+|`kalarm`
+|Планировщик персональных сигналов тревоги
+
+|`kalarm`
+|Планировщик персональных сигналов тревоги
+
+|`kate`
+|Базовая структура редактора для системы KDE
+
+|`kcmutils`
+|KF5 утилиты для работы с KCModules
+
+|`kde-cli-tools`
+|Неинтерактивные системные инструменты Plasma5
+
+|`kde-gtk-config`
+|Plasma5 конфигуратор GTK2 и GTK3
+
+|`kdeclarative`
+|Библиотека KF5, обеспечивающая интеграцию QML и KDE Frameworks
+
+|`kded`
+|KF5 расширяемый демон для предоставления системных сервисов
+
+|`kdelibs4support`
+|Помощник в портировании KF5 из KDELibs4
+
+|`kdepim-addons`
+|Дополнения KDE PIM
+
+|`kdepim-apps-libs`
+|Библиотеки KDE PIM, связанные с почтой
+
+|`kdepim-runtime5`
+|Инструменты и службы KDE PIM
+
+|`kdeplasma-addons`
+|Дополнения Plasma5 для улучшения работы с Plasma
+
+|`kdesu`
+|Интеграция KF5 с su для повышенных привилегий
+
+|`kdewebkit`
+|Библиотека KF5, обеспечивающая интеграцию QtWebKit
+
+|`kgamma5`
+|Настройки гаммы монитора Plasma5
+
+|`khtml`
+|Механизм рендеринга KF5 KTHML
+
+|`kimageformats`
+|Библиотека KF5, обеспечивающая поддержку дополнительных форматов изображений
+
+|`kio`
+|Абстракция ресурсов и сетевого доступа KF5
+
+|`kirigami2`
+|Набор компонентов на основе QtQuick
+
+|`kitinerary`
+|Модель данных и система извлечения информации о бронировании путешествий
+
+|`kmail`
+|Клиент электронной почты KDE
+
+|`kmail`
+|Клиент электронной почты KDE
+
+|`kmail-account-wizard`
+|Мастер настройки почтового аккаунта KDE
+
+|`kmenuedit`
+|Редактор меню Plasma5
+
+|`knotes`
+|Всплывающие примечания
+
+|`kontact`
+|KDE Персональный Органайзер
+
+|`kontact`
+|KDE Персональный Органайзер
+
+|`kontactinterface`
+|KDE glue для встраивания KParts в Kontact
+
+|`korganizer`
+|Программа для календаря и планирования
+
+|`kpimdav`
+|Реализация протокола DAV с KJobs
+
+|`kpkpass`
+|Библиотека для работы с файлами паролей Apple Wallet
+
+|`kross`
+|KF5 мультиязыковые прикладные скрипты
+
+|`kscreen`
+|Библиотека управления экраном Plasma5
+
+|`kscreenlocker`
+|Архитектура безопасной блокировки экрана Plasma5
+
+|`ksmtp`
+|Библиотека на основе задач для отправки электронной почты через SMTP-сервер
+
+|`ksshaskpass`
+|Plasma5 интерфейс для ssh-add
+
+|`ksysguard`
+|Утилита Plasma5 для отслеживания и управления запущенными процессами
+
+|`kwallet-pam`
+|Интеграция Plasma5 KWallet с PAM
+
+|`kwayland-integration`
+|Интеграционные плагины для рабочего стола на основе Wayland
+
+|`kwin`
+|Менеджер окон Plasma5
+
+|`kwrited`
+|Демон Plasma5, ожидающий сообщения wall и write
+
+|`ldap`
+|API доступа к LDAP для KDE
|`libkcddb`
|Библиотека KDE CDDB
@@ -911,65 +2683,259 @@ QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
|`libkcompactdisc`
|Библиотека KDE для взаимодействия с аудио-CD
-|`libkdeedu`
-|Библиотеки, используемые для образовательных приложений
-
|`libkdcraw`
-|Библиотека KDE LibRaw
+|Интерфейс LibRaw для KDE
+
+|`libkdegames`
+|Библиотеки, используемые играми KDE
+
+|`libkdepim`
+|Библиотеки KDE PIM
+
+|`libkeduvocdocument`
+|Библиотека для чтения и записи файлов словарей
|`libkexiv2`
-|Библиотека KDE Exiv2
+|Интерфейс библиотеки Exiv2 для KDE
|`libkipi`
-| KDE Image Plugin Interface
+|Интерфейс плагинов изображений KDE
-|`libkonq`
-|Основная библиотека Konqueror
+|`libkleo`
+|Менеджер сертификатов для KDE
|`libksane`
-|Библиотека KDE SANE ("Scanner Access Now Easy")
+|Интерфейс библиотеки SANE для KDE
-|`pimlibs`
-|Библиотеки KDE-Pim
+|`libkscreen`
+|Библиотека управления экраном Plasma5
-|`kate`
-|Тектовый редактор
+|`libksieve`
+|Библиотеки Sieve для KDEPim
+
+|`libksysguard`
+|Библиотека Plasma5 для отслеживания и управления запущенными процессами
+
+|`mailcommon`
+|Общие библиотеки для KDEPim
+
+|`mailimporter`
+|Импорт файлов mbox в KMail
+
+|`mailtransport`
+|Библиотека KDE для управления транспортом почты
|`marble`
-|Виртуальный глобус
+|Виртуальный глобус и мировой атлас для KDE
+
+|`mbox`
+|Библиотека KDE для доступа к хранилищам почты в формате MBox
+
+|`mbox-importer`
+|Импорт файлов mbox в KMail
+
+|`mediaplayer`
+|Интерфейс плагина KF5 для функций медиаплеера
+
+|`messagelib`
+|Библиотека для обработки сообщений
+
+|`milou`
+|Plasma5 Plasmoid для поиска
+
+|`mime`
+|Библиотека для обработки данных MIME
+
+|`newstuff`
+|Библиотека KF5 для загрузки ресурсов приложений из сети
+
+|`notifications`
+|Абстракция KF5 для системных уведомлений
+
+|`notifyconfig`
+|Система конфигурации KF5 для KNotify
|`okular`
-|Универсальный просмотрщик документов
+|Универсальная программа для просмотра документов KDE
+
+|`oxygen`
+|Стиль Plasma5 Oxygen
+
+|`oxygen-icons5`
+|Тема иконок Oxygen для KDE
+
+|`package`
+|Библиотека KF5 для загрузки и установки пакетов
+
+|`parts`
+|KF5 система плагинов для работы с документами
+
+|`people`
+|Библиотека KF5, предоставляющая доступ к контактам
+
+|`pim-data-exporter`
+|Импорт и экспорт настроек KDE PIM
+
+|`pimcommon`
+|Общие библиотеки для KDEPim
+
+|`pimtextedit`
+|Библиотека KDE для утилит редактирования текста, специфичных для PIM
+
+|`plasma-browser-integration`
+|Компоненты Plasma5 для интеграции браузеров в рабочий стол
+
+|`plasma-desktop`
+|Plasma5 рабочий стол Plasma
+
+|`plasma-framework`
+|KF5 - среда выполнения пользовательского интерфейса на основе плагинов, используемая для создания пользовательских интерфейсов
+
+|`plasma-integration`
+|Плагины интеграции Qt Platform Theme для рабочего окружения Plasma
+
+|`plasma-pa`
+|Plasma5 Микшер звука Plasma Pulse
+
+|`plasma-sdk`
+|Приложения Plasma5, полезные для разработки Plasma
+
+|`plasma-workspace`
+|Plasma5 Рабочее пространство Plasma
+
+|`plasma-workspace-wallpapers`
+|Обои Plasma5
+
+|`plotting`
+|KF5 облегченный фреймворк для построения графиков
+
+|`polkit-kde-agent-1`
+|Демон Plasma5, предоставляющий интерфейс аутентификации polkit
+
+|`powerdevil`
+|Инструмент Plasma5 для управления настройками энергопотребления
-|`korundum`
-|Привязка Ruby к KDE
+|`prison`
+|Интерфейс API для создания штрихкодов
-|`perlkde`
-|Привязка Perl к KDE
+|`pty`
+|Абстракция pty KF5
-|`pykde4`
-|Привязка Python к KDE
+|`purpose`
+|Предлагает доступные действия для конкретной цели
-|`pykdeuic4`
-|Компилятор пользовательского интерфейса PyKDE
+|`qqc2-desktop-style`
+|Стиль Qt QuickControl2 для KDE
-|`smokekde`
-|Библиотеки KDE SMOKE
+|`runner`
+|KF5 параллелизованная система запросов
+
+|`service`
+|KF5 расширенные плагины и интроспекция сервисов
+
+|`solid`
+|Интеграция и обнаружение оборудования KF5
+
+|`sonnet`
+|KF5 библиотека проверки орфографии на основе плагинов
+
+|`syndication`
+|Библиотека KDE для обработки RSS-лент
+
+|`syntaxhighlighting`
+|Движок подсветки синтаксиса KF5 для структурированного текста и кода
+
+|`systemsettings`
+|Настройки системы Plasma5
+
+|`texteditor`
+|KF5 продвинутый встраиваемый текстовый редактор
+
+|`textwidgets`
+|KF5 расширенные виджеты для редактирования текста
+
+|`threadweaver`
+|KF5 дополнения к QtDBus
+
+|`tnef`
+|KDE API для обработки данных TNEF
+
+|`unitconversion`
+|Библиотека KF5 для преобразования единиц измерения
+
+|`user-manager`
+|Пользовательский менеджер Plasma5
+
+|`wallet`
+|KF5 безопасный и унифицированный контейнер для паролей пользователей
+
+|`wayland`
+|Обёртка клиентской и серверной библиотек KF5 для библиотек Wayland
+
+|`widgetsaddons`
+|KF5 аддоны для QtWidgets
+
+|`windowsystem`
+|Библиотека KF5 для доступа к оконной системе
+
+|`xmlgui`
+|KF5 настраиваемые пользователем главные окна
+
+|`xmlrpcclient`
+|Взаимодействие KF5 с XMLRPC-сервисами
|===
-Порты KDE 4.x устанавливаются в `KDE4_PREFIX`, что в настоящее время соответствует [.filename]#/usr/local/kde4#. Это достигается путем указания компонента `kdeprefix`, который определяет значение по умолчанию для `PREFIX`. Тем не менее, порты учитывают любые `PREFIX`, установленные через переменную окружения `MAKEFLAGS` и/или параметры `make`.
+[[kde5-components-example]]
+.Пример `USE_KDE`
+[example]
+====
+Это простой пример порта для KDE. `USES= cmake` указывает порту использовать CMake, инструмент конфигурации, широко применяемый в проектах KDE (см. crossref:special[using-cmake, Использование `cmake`] для подробного описания). `USE_KDE` добавляет зависимость от библиотек KDE. Необходимые компоненты KDE и другие зависимости можно определить через лог конфигурации. `USE_KDE` не подразумевает `USE_QT`. Если порту требуются некоторые компоненты Qt, укажите их в `USE_QT`.
+
+[.programlisting]
+....
+USES= cmake kde:5 qt:5
+USE_KDE= ecm
+USE_QT= core buildtools_build qmake_build
+....
-[[kde4-components-example]]
-.Пример `USE_KDE4`
+====
+
+[[using-lxqt]]
+== Использование LXQt
+
+Приложения, зависящие от LXQt, должны устанавливать `USES+= lxqt` и задавать `USE_LXQT` списком необходимых компонентов из таблицы ниже
+
+[[using-lxqt-components]]
+.Доступные компоненты LXQt
+[cols="1,1", frame="none", options="header"]
+|===
+| Имя
+| Описание
+
+|`buildtools`
+|Помощники для дополнительных модулей CMake
+
+|`libfmqt`
+|Привязки Libfm к Qt
+
+|`lxqt`
+|Ядро библиотеки LXQt
+
+|`qtxdg`
+|Реализация Qt спецификаций freedesktop.org XDG
+|===
+
+[[lxqt-components-example]]
+.Пример `USE_LXQT`
[example]
====
-Это простой пример для порта KDE 4. `USES= cmake:outsource` указывает порту использовать CMake, конфигурационный инструмент, широко применяемый в проектах KDE 4 (подробное описание даёт <<using-cmake>>). `USE_KDE4` добавляет зависимость от библиотек KDE и заставляет порты использовать `automoc4` во время сборки. Требуемые компоненты KDE и другие зависимости можно определить в журнале configure. `USE_KDE4` не подразумевает `USE_QT4`. Если порт требует какой-либо из компонентов Qt 4, их следует указать в `USE_QT4`.
+Это простой пример, `USE_LXQT` добавляет зависимость от библиотек LXQt. Необходимые компоненты LXQt и другие зависимости можно определить из лога конфигурации.
[.programlisting]
....
-USES= cmake:outsource
-USE_KDE4= kdelibs kdeprefix automoc4
-USE_QT4= moc_build qmake_build rcc_build uic_build
+USES= cmake lxqt qt:5 tar:xz
+USE_QT= core dbus widgets buildtools_build qmake_build
+USE_LXQT= buildtools libfmqt
....
====
@@ -978,155 +2944,159 @@ USE_QT4= moc_build qmake_build rcc_build uic_build
== Использование Java
[[java-variables]]
-=== Задание переменных
+=== Определения переменных
-Если вашему порту необходимо наличие Java(TM) Development Kit (JDK(TM)) для построения, работы или даже распаковки дистрибутивного файла, то в нём должна быть задана переменная `USE_JAVA`.
+Если порту требуется Java(TM) Development Kit (JDK(TM)) для сборки, запуска или даже извлечения distfile, определите `USE_JAVA`.
-В Коллекции Портов присутствуют несколько JDK различных разработчиков и разных версий. Если ваш порт должен использовать одну из этих версий, то вы должны указать, какую именно. Самой последней версией и версией по умолчанию является package:java/openjdk6[].
+В коллекции портов доступно несколько JDK от различных поставщиков и в нескольких версиях. Если порт должен использовать определённую версию, укажите её с помощью переменной `JAVA_VERSION`. Самая актуальная версия — package:java/openjdk18[], также доступны package:java/openjdk17[], package:java/openjdk16[], package:java/openjdk15[], package:java/openjdk14[], package:java/openjdk13[], package:java/openjdk12[], package:java/openjdk11[], package:java/openjdk8[] и package:java/openjdk7[].
-.Переменные, которые которые могут задаваться портами, использующими Java
+[[using-java-variables]]
+.Переменные, которые могут быть установлены портами, использующими Java
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
|`USE_JAVA`
-|Должна быть определена для того, что последующие переменные вступили в действие.
+|Определите для остальных переменных, чтобы они имели какой-либо эффект.
|`JAVA_VERSION`
-|Список версий Java, перечисленных через пробел, подходящих для порта. Опциональный знак `"+"` позволяет вам указать диапазон версий (возможные значения: `1.5[+] 1.6[+] 1.7[+]`).
+|Список подходящих версий Java для порта, разделённых пробелами.
+Необязательный символ `\+` позволяет указать диапазон версий (допустимые значения: `8[+] 11[\+] 17[+] 18[\+] 19[+] 20[\+] 21[+]`).
|`JAVA_OS`
-|Список операционных систем, перечисленных через пробел, порты JDK для которых подходят для порта (возможные значения: `native linux`).
+|Список разделенных пробелами подходящих операционных систем портов JDK для порта (допустимые значения: `native linux`).
|`JAVA_VENDOR`
-|Список разработчиков портов JDK, перечисленных через пробел, которые подходят для порта (возможные значения: `freebsd bsdjava sun openjdk`).
+|Список подходящих поставщиков портов JDK для порта через пробел (допустимые значения: `openjdk oracle`).
|`JAVA_BUILD`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен к зависимостям порта для его построения.
+|Когда установлено, добавляет выбранный порт JDK в зависимости сборки.
|`JAVA_RUN`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен в зависимостям порта для его работы.
+|Когда установлено, добавляет выбранный порт JDK в зависимости времени выполнения.
|`JAVA_EXTRACT`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен в зависимостям порта для распаковки его дистрибутивных файлов.
+|Когда установлено, добавляет выбранный порт JDK в зависимости для извлечения.
|===
-Ниже перечисляются все значения, которые принимают переменные после задания переменной `USE_JAVA`:
+Ниже приведен список всех настроек, которые порт получит после установки `USE_JAVA`:
-.Переменные, доступные в портах, использующих Java
+[[using-java-variables2]]
+.Переменные, предоставляемые портам, использующим Java
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
|`JAVA_PORT`
-|Название порта JDK (к примеру, `'java/openjdk6'`).
+|Имя порта JDK (например, `java/openjdk6`).
|`JAVA_PORT_VERSION`
-|Полное наименовании версии порта JDK (к примеру, `'1.6.0'`). Если вам нужны только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}`.
+|Полная версия порта JDK (например, `1.6.0`). Требуются только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}`.
|`JAVA_PORT_OS`
-|Операционная система, используемая портом JDK (к примеру, `'native'`).
+|Операционная система, используемая портом JDK (например, `'native'`).
|`JAVA_PORT_VENDOR`
-|Разработчик порта JDK (к примеру, `'openjdk'`).
+|Поставщик порта JDK (например, `'openjdk'`).
|`JAVA_PORT_OS_DESCRIPTION`
-|Описание операционной системы, используемой портом JDK (к примеру, `'Native'`).
+|Описание операционной системы, используемой портом JDK (например, `'Native'`).
|`JAVA_PORT_VENDOR_DESCRIPTION`
-|Описание разработчика порта JDK (к примеру, `'OpenJDK BSD Porting Team'`).
+|Описание поставщика порта JDK (например, `'OpenJDK BSD Porting Team'`).
|`JAVA_HOME`
-|Маршрут к установочному каталогу JDK (к примеру, [.filename]#'/usr/local/openjdk6'#).
+|Путь к каталогу установки JDK (например, [.filename]#'/usr/local/openjdk6'#).
|`JAVAC`
-|Маршрут к используемому компилятору Java (к примеру, [.filename]#'/usr/local/openjdk6/bin/javac'#.
+|Путь к используемому компилятору Java (например, [.filename]#'/usr/local/openjdk6/bin/javac'#).
|`JAR`
-|Маршрут к используемой утилите `jar` (к примеру, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#).
+|Путь к инструменту `jar`, который следует использовать (например, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#).
|`APPLETVIEWER`
-|Маршрут к утилите `appletviewer` (к примеру, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#).
+|Путь к утилите `appletviewer` (например, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#).
|`JAVA`
-|Маршрут к выполняемому файлу `java`. Используйте его для запуска Java-программ (к примеру, [.filename]#'/usr/local/openjdk6/bin/java'#).
+|Путь к исполняемому файлу `java`. Используется для запуска программ на Java (например, [.filename]#'/usr/local/openjdk6/bin/java'#).
|`JAVADOC`
-|Маршрут к вспомогательной программе `javadoc`.
+|Путь к программе `javadoc`.
|`JAVAH`
-|Маршрут к программе `javah`.
+|Путь к программе `javah`.
|`JAVAP`
-|Маршрут к программе `javap`.
+|Путь к программе `javap`.
|`JAVA_KEYTOOL`
-|Маршрут к вспомогательной программе `keytool`.
+|Путь к утилите `keytool`.
|`JAVA_N2A`
-|Маршрут к утилите `native2ascii`.
+|Путь к инструменту `native2ascii`.
|`JAVA_POLICYTOOL`
-|Маршрут к программе `policytool`.
+|Путь к программе `policytool`.
|`JAVA_SERIALVER`
-|Маршрут к вспомогательной программе `serialver`.
+|Путь к утилите `serialver`.
|`RMIC`
-|Маршрут к генератору каркаса программ RMI, утилите `rmic`.
+|Путь к генератору RMI-заглушек/скелетов, `rmic`.
|`RMIREGISTRY`
-|Маршрут к программе регистрации RMI, `rmiregistry`.
+|Путь к программе реестра RMI, `rmiregistry`.
|`RMID`
-|Маршрут к программе-даемону RMI `rmid`.
+|Путь к программе демона RMI `rmid`.
|`JAVA_CLASSES`
-|Маршрут к архиву, который содержит файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
+|Путь к архиву, содержащему файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
|===
-Вы можете воспользоваться make-целью `java-debug` для получения информации, необходимой для отладки вашего порта. При её выполнении будут выданы значения многих упомянутых выше переменных.
+Используйте цель `java-debug` в make для получения информации для отладки порта. Она отобразит значения многих из перечисленных ранее переменных.
-Кроме того, для единообразия установки всех портов Java определены следующие константы:
+Кроме того, определены следующие константы, чтобы все порты Java могли быть установлены единообразно:
-.Константы, определённые для портов, использующих Java
+[[using-java-constants]]
+.Константы, определенные для портов, использующих Java
[cols="1,1", frame="none", options="header"]
|===
| Константа
| Значение
|`JAVASHAREDIR`
-|Корневой каталог для всего, что связано с Java. По умолчанию: [.filename]#${PREFIX}/shared/java#.
+|Базовый каталог для всего, связанного с Java. По умолчанию: [.filename]#${PREFIX}/share/java#.
|`JAVAJARDIR`
-|Каталог, в который должны устанавливаться JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#.
+|Каталог, в котором установлены JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#.
|`JAVALIBDIR`
-|Каталог, в который устанавливаются JAR-файлы из других портов. По умолчанию: [.filename]#${LOCALBASE}/shared/java/classes#.
+|Каталог, в котором расположены JAR-файлы, установленные другими портами. По умолчанию: [.filename]#${LOCALBASE}/share/java/classes#.
|===
-Соответствующие записи определяются в обоих переменных `PLIST_SUB` (описана в crossref:plist[plist-sub,Изменение содержимого pkg-plist в зависимости от make-переменных]) и `SUB_LIST`.
+Связанные записи определены как в `PLIST_SUB` (документировано в crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), так и в `SUB_LIST`.
[[java-building-with-ant]]
-=== Построение с Ant
+=== Сборка с Ant
-Если построение порта производится с использованием Apache Ant, то необходимо определить `USE_ANT`. Таким образом Ant становится подкомандой make. Если в порте не определена цель `do-build`, то будет установлена цель по умолчанию, которая просто запускает Ant в соответствии со значением `MAKE_ENV`, `MAKE_ARGS` и `ALL_TARGET`. Это похоже на механизм `USES= gmake`, который описан в <<building>>.
+Когда порт должен собираться с использованием Apache Ant, он должен определять `USE_ANT`. Таким образом, Ant считается командой sub-make. Если цель `do-build` не определена в порте, будет установлена цель по умолчанию, которая запускает Ant в соответствии с `MAKE_ENV`, `MAKE_ARGS` и `ALL_TARGET`. Это аналогично механизму `USES= gmake`, который документирован в crossref:special[building, Building Mechanisms].
[[java-best-practices]]
-=== Практические рекомендации
+=== Лучшие практики
-При портировании Java-библиотеки ваш порт должен устанавливать JAR-файл(ы) в каталог [.filename]#${JAVAJARDIR}#, а все остальные данные в каталог [.filename]#${JAVASHAREDIR}/${PORTNAME}# (за исключением документации, о которой пойдёт речь ниже). Для уменьшения размера упакованного файла вы можете сослаться на JAR-файл(ы) непосредственно в файле [.filename]#Makefile#. Просто воспользуйтесь следующей директивой (в которой [.filename]#myport.jar# является именем JAR-файла, устанавливаемого как часть порта):
+При переносе библиотеки Java порт должен устанавливать JAR-файл(ы) в [.filename]#${JAVAJARDIR}#, а все остальное — в [.filename]#${JAVASHAREDIR}/${PORTNAME}# (за исключением документации, см. ниже). Чтобы уменьшить размер упаковочного файла, ссылайтесь на JAR-файл(ы) напрямую в [.filename]#Makefile#. Используйте следующую инструкцию (где [.filename]#myport.jar# — имя JAR-файла, устанавливаемого как часть порта):
[.programlisting]
....
-PLIST_FILES+= %%JAVAJARDIR%%/myport.jar
+PLIST_FILES+= ${JAVAJARDIR}/myport.jar
....
-При портировании Java-приложения порт обычно устанавливает всё в один каталог (в том числе все свои JAR-зависимости). В этом отношении настоятельно рекомендуется использование [.filename]#${JAVASHAREDIR}/${PORTNAME}#. На усмотрение создателя порта остаётся решение вопроса о том, устанавливать ли дополнительные JAR-зависимости в этот каталог или напрямую использовать уже установленные (из каталога [.filename]#${JAVAJARDIR}#).
+При переносе Java-приложения порт обычно устанавливает все компоненты в единый каталог (включая зависимости в виде JAR-файлов). В этом отношении настоятельно рекомендуется использовать [.filename]#${JAVASHAREDIR}/${PORTNAME}#. Портеру предстоит решить, устанавливать ли дополнительные JAR-зависимости в этот каталог или использовать уже установленные (из [.filename]#${JAVAJARDIR}#).
-При портировании приложения Java(TM), для запуска сервиса которого требуется сервер приложений, такой как package:www/tomcat7[], для производителя в порядке вещей является распространение файла [.filename]#.war#. Файл [.filename]#.war# - это Веб-приложение АРхивированное и оно распаковывается при вызове данным приложением. Избегайте добавлять файлы [.filename]#.war# в [.filename]#pkg-plist#. Это не является наилучшим решением. Сервер приложений производит расширение архива [.filename]#war# без должной его очистки при удалении порта. Более подходящим способом работы с этим файлом будет распаковать архив, установить файлы и добавить их в [.filename]#pkg-plist#.
+При переносе Java(TM)-приложения, которое требует сервера приложений, такого как package:www/tomcat7[], для запуска службы, вендор часто распространяет файл [.filename]#.war#. [.filename]#.war# — это веб-архив приложения (Web application ARchive), который извлекается при вызове приложением. Избегайте добавления [.filename]#.war# в [.filename]#pkg-plist#. Это не считается лучшей практикой. Сервер приложений развернет архив war, но не очистит его должным образом при удалении порта. Более предпочтительный способ работы с этим файлом — извлечь архив, затем установить файлы и, наконец, добавить эти файлы в [.filename]#pkg-plist#.
[.programlisting]
....
@@ -1140,20 +3110,20 @@ post-extract:
do-install:
cd ${WRKDIR} && \
${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}
- @cd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}
+ cd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}
....
-Вне зависимости от типа вашего порта (библиотека это или приложение), дополнительная документация должна устанавливаться <<install-documentation,в тоже самое место>>, что и для других портов. Известно, что в зависимости от используемой версии JDK утилита JavaDoc генерирует различные наборы файлов. Для портов, которые не привязаны к использованию определённой версии JDK, таким образом становится проблематичным определить список файлов для упаковки ([.filename]#pkg-plist#). Это одна из причин, по которой создателям портов настоятельно рекомендуется использовать макрос `PORTDOCS`. Более того, даже если вы сможете угадать набор файлов, который будет сгенерирован утилитой `javadoc`, размер получающегося файла [.filename]#pkg-plist# голосует за использование `PORTDOCS`.
+Независимо от типа порта (библиотека или приложение), дополнительная документация устанавливается crossref:makefiles[install-documentation,в том же месте], что и для любого другого порта. Известно, что инструмент Javadoc создает разный набор файлов в зависимости от версии используемого JDK. Для портов, которые не требуют использования конкретной версии JDK, указание списка упаковки ([.filename]#pkg-plist#) становится сложной задачей. Это одна из причин, по которой разработчикам портов настоятельно рекомендуется использовать `PORTDOCS`. Более того, даже если набор файлов, генерируемых `javadoc`, можно предсказать, размер результирующего [.filename]#pkg-plist# говорит в пользу использования `PORTDOCS`.
-Значением по умолчанию для переменной `DATADIR` является [.filename]#${PREFIX}/shared/${PORTNAME}#. Хорошей идеей является переопределение для Java-портов значения `DATADIR` как [.filename]#${JAVASHAREDIR}/${PORTNAME}#. На самом деле `DATADIR` автоматически добавляется к `PLIST_SUB` (это описано в crossref:plist[plist-sub,Изменение содержимого pkg-plist в зависимости от make-переменных]), так что вы сможете использовать `%%DATADIR%%` непосредственно в [.filename]#pkg-plist#.
+Значение по умолчанию для `DATADIR` — [.filename]#${PREFIX}/share/${PORTNAME}#. Рекомендуется переопределить `DATADIR` на [.filename]#${JAVASHAREDIR}/${PORTNAME}# для портов Java. Действительно, `DATADIR` автоматически добавляется в `PLIST_SUB` (документировано в crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), поэтому используйте `%%DATADIR%%` напрямую в [.filename]#pkg-plist#.
-Что касается выбора между построением портов Java из исходных текстов или их прямой установкой из бинарных дистрибутивов, то на момент создания этого текста определённой политики на этот счёт не существует. Однако участники http://www.freebsd.org/java/[Проекта FreeBSD Java] рекомендуют создателям портов строить их из исходных текстов, если эта задача является несложной.
+Что касается выбора между сборкой портов Java из исходного кода или их непосредственной установкой из бинарного дистрибутива, на момент написания документации определённой политики не существует. Однако участники https://www.freebsd.org/java/[FreeBSD Java Project] рекомендуют сопровождающим портов по возможности собирать их из исходного кода, если это не представляет сложностей.
-Все возможности, которые были описаны в этом разделе, реализованы в файле [.filename]#bsd.java.mk#. Если вы предположите, что вашему порту требуется менее тривиальная поддержка Java, пожалуйста, взгляните сначала на http://svnweb.FreeBSD.org/ports/head/Mk/bsd.java.mk?view=markup[журнал изменений bsd.java.mk в Subversion], так как для документирования последних изменений требуется какое-то время. Затем, если вы думаете, что не хватающая вам поддержка окажется полезной для многих других портов Java, обсудите ваш вопрос в freebsd-java.
+Все функции, представленные в этом разделе, реализованы в [.filename]#bsd.java.mk#. Если порту требуется более сложная поддержка Java, сначала ознакомьтесь с https://cgit.FreeBSD.org/ports/tree/Mk/bsd.java.mk[историей изменений bsd.java.mk], так как документирование новых функций обычно занимает некоторое время. Затем, если отсутствующая поддержка будет полезна для многих других Java-портов, не стесняйтесь обсудить это на списке рассылки freebsd-java.
-Хотя в базе сообщений об ошибках для соответствующих PR имеется категория `java`, она относится к работе над портированием JDK, которые проводит Проект FreeBSD Java. Таким образом, вы должны относить свой Java-порт, как и любой другой, к категории `ports`, если решаемый вами вопрос не относится ни к реализации JDK, ни к [.filename]#bsd.java.mk#.
+Хотя существует категория `java` для PR, она относится к усилиям по портированию JDK в рамках проекта FreeBSD Java. Поэтому отправляйте порт Java в категорию `ports`, как и любой другой порт, если только проблема не связана либо с реализацией JDK, либо с [.filename]#bsd.java.mk#.
-Похожим образом определена политика по отношению к `CATEGORIES` порта Java, которая подробно описана в crossref:makefiles[makefile-categories, Разделение по категориям].
+Аналогично существует определённая политика в отношении `CATEGORIES` для портов Java, которая подробно описана в crossref:makefiles[makefile-categories,Категоризация].
[[using-php]]
== Веб-приложения, Apache и PHP
@@ -1161,315 +3131,334 @@ do-install:
[[using-apache]]
=== Apache
+[[using-apache-variables]]
.Переменные для портов, использующих Apache
[cols="1,1", frame="none"]
|===
|`USE_APACHE`
-|Порт требует Apache. Возможные значения: `yes` (берёт любую версию), `22`, `24`, `22-24`, `22+` и так далее. Версия по умолчанию `22`. Более подробная информация содержится в файле [.filename]#ports/Mk/bsd.apache.mk# и на странице http://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/].
+|Порт требует Apache. Возможные значения: `yes` (любая версия), `22`, `24`, `22-24`, `22+` и т.д. Версия APACHE по умолчанию — `22`. Подробнее см. в [.filename]#ports/Mk/bsd.apache.mk# и на https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/].
|`APXS`
-|Полный путь к исполняемому файлу `apxs`. Может быть переопределен в вашем порту.
+|Полный путь к бинарному файлу `apxs`. Может быть переопределён в порте.
|`HTTPD`
-|Полный путь к исполняемому файлу `httpd`. Может быть переопределен в вашем порту.
+|Полный путь к бинарному файлу `httpd`. Может быть переопределён в порте.
|`APACHE_VERSION`
-|Версия установленного Apache (переменная только для чтения). Эта переменная доступна только после подключения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`.
+|Версия установленной Apache (переменная только для чтения). Эта переменная доступна только после включения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`.
|`APACHEMODDIR`
-|Каталог для модулей Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для модулей Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|`APACHEINCLUDEDIR`
-|Каталог для заголовков Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для заголовков Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|`APACHEETCDIR`
-|Каталог для конфигурационных файлов Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для файлов конфигурации Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|===
-.Используемые переменные при портировании модулей Apache
+[[using-apache-modules]]
+.Полезные переменные для переноса модулей Apache
[cols="1,1", frame="none"]
|===
|`MODULENAME`
-|Название модуля. Значением по умолчанию является `PORTNAME`. Пример: `mod_hello`
+|Имя модуля. Значение по умолчанию — `PORTNAME`. Пример: `mod_hello`
|`SHORTMODNAME`
-|Краткое название модуля. Наследуется автоматически от `MODULENAME`, но может быть переопределено. Пример: `hello`
+|Короткое имя модуля. Автоматически определяется из `MODULENAME`, но может быть переопределено. Пример: `hello`
|`AP_FAST_BUILD`
-|Использовать `apxs` для компиляции и установки модуля.
+|Используйте `apxs` для компиляции и установки модуля.
|`AP_GENPLIST`
-|Также автоматически создает [.filename]#pkg-plist#.
+|Также автоматически создаёт файл [.filename]#pkg-plist#.
|`AP_INC`
-|Добавляет каталог к пути поиска заголовков во время компиляции.
+|Добавляет каталог в путь поиска заголовков во время компиляции.
|`AP_LIB`
-|Добавляет каталог к пути поиска библиотек во время компиляции.
+|Добавляет каталог в путь поиска библиотек во время компиляции.
|`AP_EXTRAS`
-|Дополнительные флаги, передаваемые `apxs`.
+|Дополнительные флаги для передачи в `apxs`.
|===
[[web-apps]]
=== Веб-приложения
-Веб-приложения следует устанавливать в [.filename]#PREFIX/www/appname#. Для вашего удобства этот путь одинаково доступен в [.filename]#Makefile# и [.filename]#pkg-plist# как переменная `WWWDIR`, а путь относительно `PREFIX` доступен в [.filename]#Makefile# как `WWWDIR_REL`.
+Веб-приложения должны быть установлены в [.filename]#PREFIX/www/appname#. Этот путь доступен как в [.filename]#Makefile#, так и в [.filename]#pkg-plist# как `WWWDIR`, а путь относительно `PREFIX` доступен в [.filename]#Makefile# как `WWWDIR_REL`.
+
+Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, если необходимо изменить владельца некоторых файлов. Значения по умолчанию для обоих — `www`. Используйте `WWWOWN?= myuser` и `WWWGRP?= mygroup`, если порту требуются другие значения. Это позволяет пользователю легко их переопределить.
-Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, в случае если вам нужно изменить владельца для некоторых файлов. Значением по умолчанию и для владельца, и для группы является `www`. Если вы хотите использовать в вашем порте другие значения, воспользуйтесь для этого нотацией `WWWOWN?= myuser`, чтобы позволить пользователю легко переопределить их.
+[IMPORTANT]
+====
+Используйте `WWWOWN` и `WWWGRP` с осторожностью. Помните, что каждый файл, доступный для записи веб-серверу, представляет собой потенциальную угрозу безопасности.
+====
-Не добавляйте зависимость от Apache, если веб-приложение явным образом не нуждается в Apache. Учитывайте, что пользователи могут пожелать запустить ваше веб-приложение на другом веб-сервере помимо Apache.
+Не зависьте от Apache, если веб-приложение явно не требует Apache. Учитывайте, что пользователи могут захотеть запускать веб-приложение на другом веб-сервере, кроме Apache.
[[php-variables]]
=== PHP
-.Переменные для портов, использующих PHP
-[cols="1,1", frame="none"]
-|===
-|`USE_PHP`
-|Порт требует PHP. Значение `yes` добавляет зависимость от PHP. Вместо этого может быть указан перечень требуемых расширений PHP. Пример: `pcre xml gettext`
+Веб-приложения PHP объявляют свою зависимость от него с помощью `USES=php`. Подробнее см. в crossref:uses[uses-php,`php`].
-|`DEFAULT_PHP_VER`
-|Выбирает старший номер версии, с которым будет установлен PHP как зависимость в случае, когда PHP еще не установлен. По умолчанию `5`. Возможные значения: `4`, `5`
+[[php-pear]]
+=== Модули PEAR
-|`IGNORE_WITH_PHP`
-|Порт не работает с PHP данной версии. Возможные значения: `4`, `5`
+Портирование модулей PEAR — это очень простой процесс.
-|`USE_PHPIZE`
-|Порт будет построен как расширение PHP.
+Добавьте `USES=pear` в [.filename]#Makefile# порта. Фреймворк установит соответствующие файлы в нужные места и автоматически сгенерирует plist во время установки.
-|`USE_PHPEXT`
-|Порт будет считаться расширением PHP, включая установку и регистрацию в реестре расширений.
+[[pear-makefile]]
+.Пример Makefile для PEAR Class
+[example]
+====
+[.programlisting]
+....
+PORTNAME= Date
+DISTVERSION= 1.4.3
+CATEGORIES= devel www pear
-|`USE_PHP_BUILD`
-|Установить PHP как зависимость времени построения.
+MAINTAINER= someone@example.org
+COMMENT= PEAR Date and Time Zone Classes
+WWW= https://pear.php.net/package/Date/
-|`WANT_PHP_CLI`
-|Хочет CLI (командная строка) версию PHP.
+USES= pear
-|`WANT_PHP_CGI`
-|Хочет CGI версию PHP.
+.include <bsd.port.mk>
+....
-|`WANT_PHP_MOD`
-|Хочет PHP как модуль Apache.
+====
-|`WANT_PHP_SCR`
-|Хочет CLI или CGI версию PHP.
+[TIP]
+====
+Модули PEAR будут автоматически преобразованы в порт с флейвором с использованием crossref:flavors[flavors-auto-php,флейворов PHP].
+====
-|`WANT_PHP_WEB`
-|Хочет модуль Apache или CGI версию PHP.
-|===
+[NOTE]
+====
+Если используется нестандартный `PEAR_CHANNEL`, зависимости для сборки и выполнения будут добавлены автоматически.
+====
-=== Модули PEAR
+[IMPORTANT]
+====
+Модули PEAR не требуют определения `PKGNAMESUFFIX`, так как он автоматически заполняется с использованием `PEAR_PKGNAMEPREFIX`. Если порту необходимо добавить к `PKGNAMEPREFIX`, он также должен использовать `PEAR_PKGNAMEPREFIX`, чтобы отличать различные флейворы.
+====
-Портирование модулей PEAR является очень простым процессом.
+[[php-horde]]
+==== Модули Horde
-Используйте переменные `FILES`, `TESTS`, `DATA`, `SQLS`, `SCRIPTFILES`, `DOCS` and `EXAMPLES` для перечисления файлов, которые вы хотите установить. Все перечисленные файлы будут автоматически установлены в подходящие места и добавлены в [.filename]#pkg-plist#.
+Также и перенос модулей Horde является простым процессом.
-Подключите [.filename]#${PORTSDIR}/devel/pear/bsd.pear.mk# на последней строке [.filename]#Makefile#.
+Добавьте `USES=horde` в [.filename]#Makefile# порта. Фреймворк установит соответствующие файлы в нужные места и автоматически сгенерирует plist во время установки.
-[[pear-makefile]]
-.Пример Makefile для классов PEAR
+Переменные `USE_HORDE_BUILD` и `USE_HORDE_RUN` могут использоваться для добавления зависимостей времени сборки и выполнения от других модулей Horde. Полный список доступных модулей можно найти в [.filename]#Mk/Uses/horde.mk#.
+
+[[horde-Makefile]]
+.Пример Makefile для модуля Horde
[example]
====
[.programlisting]
....
-PORTNAME= Date
-PORTVERSION= 1.4.3
+PORTNAME= Horde_Core
+DISTVERSION= 2.14.0
CATEGORIES= devel www pear
-MAINTAINER= example@domain.com
-COMMENT= PEAR Date and Time Zone Classes
+MAINTAINER= horde@FreeBSD.org
+COMMENT= Horde Core Framework libraries
+WWW= https://pear.horde.org/
-BUILD_DEPENDS= ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR
-RUN_DEPENDS:= ${BUILD_DEPENDS}
+OPTIONS_DEFINE= KOLAB SOCKETS
+KOLAB_DESC= Enable Kolab server support
+SOCKETS_DESC= Depend on sockets PHP extension
-FILES= Date.php Date/Calc.php Date/Human.php Date/Span.php \
- Date/TimeZone.php
-TESTS= test_calc.php test_date_methods_span.php testunit.php \
- testunit_date.php testunit_date_span.php wknotest.txt \
- bug674.php bug727_1.php bug727_2.php bug727_3.php \
- bug727_4.php bug967.php weeksinmonth_4_monday.txt \
- weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt \
- weeksinmonth_rdm_sunday.txt
-DOCS= TODO
-_DOCSDIR= .
+USES= horde
+USE_PHP= session
-.include <bsd.port.pre.mk>
-.include "${PORTSDIR}/devel/pear/bsd.pear.mk"
-.include <bsd.port.post.mk>
+USE_HORDE_BUILD= Horde_Role
+USE_HORDE_RUN= Horde_Role Horde_History Horde_Pack \
+ Horde_Text_Filter Horde_View
+
+KOLAB_USE= HORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session
+SOCKETS_USE= PHP=sockets
+
+.include <bsd.port.mk>
....
====
+[TIP]
+====
+Поскольку модули Horde также являются модулями PEAR, они будут автоматически преобразованы с использованием crossref:flavors[flavors-auto-php,флейворов PHP].
+====
+
[[using-python]]
== Использование Python
-Коллекция Портов поддерживает параллельную установку множества версий Python. Следует убедиться, что в портах используется правильный интерпретатор `python` в соответствии с переменной `PYTHON_VERSION`, установленной пользователем. По большей части это означает замену пути к исполняемому файлу `python` в сценариях на значение переменной `PYTHON_CMD`.
+Коллекция портов поддерживает параллельную установку нескольких версий Python. Порты должны использовать правильный интерпретатор `python` в соответствии с настраиваемым пользователем параметром `PYTHON_VERSION`. Важнее всего заменить путь к исполняемому файлу `python` в скриптах на значение `PYTHON_CMD`.
-Порты, устанавливающие файлы под каталог `PYTHON_SITELIBDIR`, должны использовать префикс вида `pyXY-`, таким образом названия пакетов будут включать в себя версию Python, с которой они установлены.
+Порты, которые устанавливают файлы в `PYTHON_SITELIBDIR`, должны использовать префикс имени пакета `pyXY-`, чтобы их имя пакета включало версию Python, для которой они предназначены.
[.programlisting]
....
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
....
-.Переменные для портов, которые используют Python
+
+[[using-python-variables]]
+.Наиболее полезные переменные для портов, использующих Python
[cols="1,1", frame="none"]
|===
-|`USE_PYTHON`
-|Для этого порта нужен Python. Минимальная требуемая версия может быть указана с таким значением как `2.6+`. Также можно указан диапазон версий с разделением двух версий через -, например: `2.6-2.7`
+|`USES=python`
+|Порту требуется Python. Минимально необходимая версия может быть указана с такими значениями, как `3.10+`. Диапазоны версий также можно указать, разделив две версии дефисом: `USES=python:3.8-3.9`. Обратите внимание, что `USES=python` _не_ включает Python 2.7, его нужно запрашивать явно с помощью `USES=python:2.7+`.
+
+|`USE_PYTHON=distutils`
+|Используйте Python distutils для настройки, компиляции и установки. Это требуется, когда порт поставляется с [.filename]#setup.py#. Это переопределяет цели `do-build` и `do-install`, а также может переопределить `do-configure`, если `GNU_CONFIGURE` не определён. Кроме того, подразумевается `USE_PYTHON=flavors`.
-|`USE_PYDISTUTILS`
-|Использовать дистрибутивные утилиты (distutils) Python для конфигурации, компиляции и установки. Необходимо, если порт использует [.filename]#setup.py#. Переопределяет цели `do-build` и `do-install` и также может переопределять `do-configure`, если не определена `GNU_CONFIGURE`.
+|`USE_PYTHON=autoplist`
+|Создать список пакетов автоматически. Это также требует установки `USE_PYTHON=distutils`.
+
+|`USE_PYTHON=concurrent`
+|Порт будет использовать уникальный префикс, обычно `PYTHON_PKGNAMEPREFIX`, для определённых каталогов, таких как `EXAMPLESDIR` и `DOCSDIR`, а также добавлять суффикс — версию Python из `PYTHON_VER` — к устанавливаемым бинарным файлам и скриптам. Это позволяет устанавливать порты для разных версий Python одновременно, что в противном случае приводило бы к конфликту файлов.
+
+|`USE_PYTHON=flavors`
+|Порт не использует distutils, но по-прежнему поддерживает несколько версий Python. `FLAVORS` будет установлен в поддерживаемые версии Python. Дополнительную информацию см. в crossref:flavors[flavors-auto-python,`USES`=python и флейворы].
+
+|`USE_PYTHON=optsuffix`
+|Если текущая версия Python не является версией по умолчанию, порт получит `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Полезно только для флейворов.
|`PYTHON_PKGNAMEPREFIX`
-|Используется как `PKGNAMEPREFIX` для отличия пакетов, использующих разные версии Python. Пример: `py24-`
+|Используется как `PKGNAMEPREFIX` для различения пакетов разных версий Python. Пример: `py27-`
|`PYTHON_SITELIBDIR`
-|Местонахождение дерева site-packages, которое содержит путь установки Python (обычно, `LOCALBASE`). Переменная `PYTHON_SITELIBDIR` может быть очень полезной при установке модулей Python.
+|Расположение дерева site-packages, которое содержит путь установки Python (обычно `LOCALBASE`). `PYTHON_SITELIBDIR` может быть очень полезно при установке модулей Python.
|`PYTHONPREFIX_SITELIBDIR`
-|Вариант PYTHON_SITELIBDIR без PREFIX. По возможности всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#. Значением по умолчанию для `%%PYTHON_SITELIBDIR%%` является `lib/python%%PYTHON_VERSION%%/site-packages`.
+|Вариант PREFIX-clean для PYTHON_SITELIBDIR. Всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#, когда это возможно. Значение по умолчанию для `%%PYTHON_SITELIBDIR%%` — `lib/python%%PYTHON_VERSION%%/site-packages`
|`PYTHON_CMD`
-|Командная строка интерпретатора Python, включая номер версии.
+|Интерпретатор командной строки Python, включая номер версии.
+|===
+[[using-python-variables-helpers]]
+.Помощники зависимостей модуля Python
+[cols="1,1", frame="none"]
+|===
|`PYNUMERIC`
-|Строка зависимости для расширения numeric.
+|Строка зависимости для числового расширения.
|`PYNUMPY`
-|Строка зависимости для нового расширения numeric, numpy (PYNUMERIC объявлен устаревшим вышестоящим производителем).
+|Строка зависимости для нового числового расширения, numpy. (PYNUMERIC устарел у вендора).
|`PYXML`
-|Строка зависимости для расширения XML (не нужно для Python 2.0 и выше, т.к. включено в основной дистрибутив).
-|===
+|Строка зависимости для расширения XML (не требуется для Python 2.0 и выше, так как оно также входит в базовую поставку).
-Полный перечень доступных переменных можно найти в [.filename]#/usr/ports/Mk/bsd.python.mk#.
+|`PY_ENUM34`
+|Условная зависимость от пакета package:devel/py-enum34[] в зависимости от версии Python.
-Некоторые приложения на Python заявляют о поддержке `DESTDIR` (требуется для staging), которая не работает (в частности, у Mailman до версии 2.1.16). Ограничение можно обойти путём перекомпиляции сценариев. Например, это можно выполнить в цели `post-build`. С учётом того, что после установки предполагаемое место размещения сценариев Python будет находиться в `PYTHONPREFIX_SITELIBDIR`, можно применить следующее решение:
+|`PY_ENUM_COMPAT`
+|Условная зависимость от пакета package:devel/py-enum-compat[] в зависимости от версии Python.
-[.programlisting]
-....
-(cd ${STAGEDIR}${PREFIX} \
- && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
- -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})
-....
+|`PY_PATHLIB`
+|Условная зависимость от пакета package:devel/py-pathlib[] в зависимости от версии Python.
-Эта команда перекомпилирует исходный текст с заменой путей на относительные к каталогу сборки, а также дописывает значение `PREFIX` перед именем файла, записанного в выходном файле с промежуточным представлением, с использованием `-d`. `-f` требуется для безусловной перекомпиляции, `:S;${PREFIX}/;;` удаляет префиксы из значения переменной `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к `PREFIX`.
+|`PY_IPADDRESS`
+|Условная зависимость от пакета package:net/py-ipaddress[] в зависимости от версии Python.
-Для этого требуется Python 2.7 или выше. Это не работает с Python 2.6.
-
-[[using-tcl]]
-== Использование Tcl/Tk
-
-В Коллекции Портов поддерживается одновременная установка множественных версий Tcl/Tk. Порты должны пытаться поддерживать по крайней мере версию Tcl/Tk, используемую по умолчанию, и выше с помощью переменных `USE_TCL` и `USE_TK`. Желаемую версию `tcl` можно указать в переменной `WITH_TCL_VER`.
-
-.Наиболее востребованные переменные для портов, которые используют Tcl/Tk
-[cols="1,1", frame="none"]
+|`PY_FUTURES`
+|Условная зависимость от пакета package:devel/py-futures[] в зависимости от версии Python.
|===
-|`USE_TCL`
-|Порт зависит от библиотеки Tcl (не оболочки). Минимальную требуемую версию можно указать с использованием таких значений, как 84+. Отдельные неподдерживаемые версии указываются в переменной `INVALID_TCL_VER`.
-|`USE_TCL_BUILD`
-|Tcl нужен для порта только на время сборки.
+Полный список доступных переменных можно найти в [.filename]#/usr/ports/Mk/Uses/python.mk#.
-|`USE_TCL_WRAPPER`
-|Эту новую переменную следует использовать для портов, для которых требуется оболочка Tcl и не требуется конкретная версия `tclsh`. Обертка `tclsh` устанавливается в систему. Пользователь может указать желаемую оболочку `tcl` для использования.
+[IMPORTANT]
+====
+Все зависимости для портов Python, использующих crossref:flavors[flavors-auto-python,флейворы Python] (с `USE_PYTHON=distutils` или `USE_PYTHON=flavors`), должны иметь флейвор Python, добавленную к их origin с помощью `@${PY_FLAVOR}`. См. crossref:special[python-Makefile,Makefile для простого модуля Python].
+====
-|`WITH_TCL_VER`
-|Определяемые пользователем переменные, которые устанавливают желаемую версию Tcl.
+[[python-Makefile]]
+.Makefile для Простого Модуля Python
+[example]
+====
+[.programlisting]
+....
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= devel
-|`UNIQUENAME_WITH_TCL_VER`
-|Подобно `WITH_TCL_VER`, но для каждого порта.
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Python sample module
+WWW= https://example.com/project/sample/
-|`USE_TCL_THREADS`
-|Требует многопоточную сборку Tcl/Tk.
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}
-|`USE_TK`
-|Порт зависит от библиотеки Tk (не от предпочитаемой оболочки). Подразумевает `USE_TCL` с тем же значением. Для большей информации смотрите описание переменной `USE_TCL`.
+USES= python
+USE_PYTHON= autoplist distutils
-|`USE_TK_BUILD`
-|Аналогично `USE_TCL_BUILD`.
+.include <bsd.port.mk>
+....
-|`USE_TK_WRAPPER`
-|Аналогично `USE_TCL_WRAPPER`.
+====
-|`WITH_TK_VER`
-|Аналогично `WITH_TCL_VER`, подразумевает `WITH_TCL_VER` той же версии.
-|===
+Некоторые приложения на Python заявляют о поддержке `DESTDIR` (что необходимо для промежуточной сборки), но она не работает (например, Mailman до версии 2.1.16). Это можно обойти, перекомпилировав скрипты. Это можно сделать, например, в цели `post-build`. Предполагая, что Python-скрипты должны находиться в `PYTHONPREFIX_SITELIBDIR` после установки, можно применить следующее решение:
-Полный перечень доступных переменных находится в [.filename]#/usr/ports/Mk/bsd.tcl.mk#.
+[.programlisting]
+....
+(cd ${STAGEDIR}${PREFIX} \
+ && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
+ -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})
+....
-[[using-emacs]]
-== Использование Emacs
+Это перекомпилирует исходники с путём, относительным к stage-директории, и добавляет значение `PREFIX` к имени файла, записанному в байт-компилированном выходном файле с помощью `-d`. `-f` требуется для принудительной перекомпиляции, а `:S;${PREFIX}/;;` удаляет префиксы из значения `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к `PREFIX`.
-Этот раздел ещё предстоит написать.
+[[using-tcl]]
+== Использование Tcl/Tk
-[[using-ruby]]
-== Использование Ruby
+Коллекция Ports поддерживает параллельную установку нескольких версий Tcl/Tk. Порты должны стараться поддерживать как минимум версию Tcl/Tk по умолчанию и выше с помощью `USES=tcl`. Можно указать желаемую версию `tcl`, добавив `:_xx_`, например, `USES=tcl:85`.
-.Полезные переменные для портов, использующих Ruby
-[cols="1,1", frame="none", options="header"]
+[[using-tcl-variables]]
+.Самые полезные переменные только для чтения для портов, использующих Tcl/Tk
+[cols="1,1", frame="none"]
|===
-| Переменная
-| Описание
-
-|`USE_RUBY`
-|Порт требует Ruby.
+|`TCL_VER`
+| выбранная версия Tcl major.minor
-|`USE_RUBY_EXTCONF`
-|Порт использует для конфигурации [.filename]#extconf.rb#.
+|`TCLSH`
+| полный путь к интерпретатору Tcl
-|`USE_RUBY_SETUP`
-|Порт использует для конфигурации [.filename]#setup.rb#.
+|`TCL_LIBDIR`
+| путь к библиотекам Tcl
-|`RUBY_SETUP`
-|Устанавливает альтернативное имя для [.filename]#setup.rb#. Распространенным значением является [.filename]#install.rb#.
-|===
+|`TCL_INCLUDEDIR`
+| путь к заголовочным файлам Tcl C
-Следующая таблица отражает некоторые переменные, доступные авторам портов через инфраструктуру портов. Эти переменные должны использоваться для установки файлов в правильное месторасположение. Используйте их в [.filename]#pkg-plist# как можно больше. Эти переменные не должны переопределяться в самом порте.
+|`TCL_PKG_LIB_PREFIX`
+| Префикс библиотеки, согласно TIP595
-.Отобранные переменные только для чтения для портов, использующих Ruby
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Примерное значение
+|`TCL_PKG_STUB_POSTFIX`
+|Заглушка библиотеки postfix
-|`RUBY_PKGNAMEPREFIX`
-|Используется как `PKGNAMEPREFIX` для различия пакетов от разных версий Ruby.
-|`ruby18-`
+|`TK_VER`
+| выбранная версия Tk major.minor
-|`RUBY_VERSION`
-|Полная версия Ruby в форме `x.y.z`.
-|`1.8.2`
+|`WISH`
+| полный путь к интерпретатору Tk
-|`RUBY_SITELIBDIR`
-|Путь для установки архитектуронезависимых библиотек.
-|`/usr/local/lib/ruby/site_ruby/1.8`
+|`TK_LIBDIR`
+| путь к библиотекам Tk
-|`RUBY_SITEARCHLIBDIR`
-|Путь для установки архитектурозависимых библиотек.
-|`/usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6`
-
-|`RUBY_MODDOCDIR`
-|Путь для установки документации модуля.
-|`/usr/local/shared/doc/ruby18/patsy`
-
-|`RUBY_MODEXAMPLESDIR`
-|Путь для установки примеров модуля.
-|`/usr/local/shared/examples/ruby18/patsy`
+|`TK_INCLUDEDIR`
+| путь к заголовочным файлам Tk C
|===
-Полный перечень доступных переменных находится в [.filename]#/usr/ports/Mk/bsd.ruby.mk#.
+См. crossref:uses[uses-tcl,`USES=tcl`] и crossref:uses[uses-tk,`USES=tk`] в crossref:uses[uses,Использование макросов `USES`] для полного описания этих переменных. Полный список этих переменных доступен в [.filename]#/usr/ports/Mk/Uses/tcl.mk#.
[[using-sdl]]
== Использование SDL
-Переменная `USE_SDL` используется для автоматической настройки зависимостей для портов, использующих библиотеки на основе SDL, такие как package:devel/sdl12[] или package:graphics/sdl_image[].
+`USE_SDL` используется для автоматической настройки зависимостей для портов, которые используют библиотеку на основе SDL, такие как package:devel/sdl12[] и package:graphics/sdl_image[].
-Для версии 1.2 на данный момент распознаются следующие SDL-библиотеки:
+Эти библиотеки SDL для версии 1.2 распознаются:
* sdl: package:devel/sdl12[]
* console: package:devel/sdl_console[]
@@ -1482,7 +3471,7 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
* sound: package:audio/sdl_sound[]
* ttf: package:graphics/sdl_ttf[]
-Для версии 2.0 на данный момент распознаются следующие SDL-библиотеки:
+Эти библиотеки SDL для версии 2.0 распознаются:
* sdl: package:devel/sdl20[]
* gfx: package:graphics/sdl2_gfx[]
@@ -1491,61 +3480,47 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
* net: package:net/sdl2_net[]
* ttf: package:graphics/sdl2_ttf[]
-Таким образом, если порт имеет зависимость от package:net/sdl_net[] и package:audio/sdl_mixer[], то строка будет следующей:
+Следовательно, если порт зависит от package:net/sdl_net[] и package:audio/sdl_mixer[], синтаксис будет следующим:
[.programlisting]
....
USE_SDL= net mixer
....
-Зависимость от порта package:devel/sdl12[], который требуется для package:net/sdl_net[] и package:audio/sdl_mixer[], будет также автоматически добавлен.
-
-Если вы используете `USE_SDL` с элементами SDL 1.2, то он автоматически:
-
-* Добавляет зависимость от sdl12-config к `BUILD_DEPENDS`
-* Добавляет переменную `SDL_CONFIG` к `CONFIGURE_ENV`
-* Добавляет зависимости от указанных библиотек к `LIB_DEPENDS`
-
-Если вы используете `USE_SDL` с элементами SDL 2.0, то он автоматически:
+Пакет зависимости package:devel/sdl12[], который требуется для package:net/sdl_net[] и package:audio/sdl_mixer[], также автоматически добавляется.
-* Добавляет зависимость от sdl2-config к `BUILD_DEPENDS`
-* Добавляет переменную `SDL2_CONFIG` к `CONFIGURE_ENV`
-* Добавляет зависимости от указанных библиотек к `LIB_DEPENDS`
+Использование `USE_SDL` с указанием SDL 1.2 автоматически:
-Для проверки наличия библиотеки SDL вы можете делать это при помощи переменной `WANT_SDL`:
+* Добавить зависимость от sdl12-config в `BUILD_DEPENDS`
+* Добавьте переменную `SDL_CONFIG` в `CONFIGURE_ENV`
+* Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`
-[.programlisting]
-....
-WANT_SDL= yes
-
-.include <bsd.port.pre.mk>
+Используя `USE_SDL` с записями для SDL 2.0, это автоматически:
-.if ${HAVE_SDL:Mmixer}!=""
-USE_SDL+= mixer
-.endif
+* Добавить зависимость от sdl2-config в `BUILD_DEPENDS`
+* Добавьте переменную `SDL2_CONFIG` в `CONFIGURE_ENV`
+* Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`
-.include <bsd.port.post.mk>
-....
[[using-wx]]
== Использование wxWidgets
-Эта глава описывает статус библиотек wxWidgets в дереве портов и их интеграцию с системой портов.
+Этот раздел описывает состояние библиотек wxWidgets в дереве портов и их интеграцию с системой портов.
[[wx-introduction]]
=== Введение
-Существует множество версий библиотек wxWidgets, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии под собственным названием с использованием номера версии в качестве суффикса.
+Существует множество версий библиотек wxWidgets, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена путем установки каждой версии под разными именами с использованием суффиксов номеров версий.
-Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. К счастью, большинство приложений для определения нужного компилятора и флагов компоновки вызывают сценарий `wx-config`. Для каждой доступной версии этот сценарий имеет своё имя. Большинство приложений учитывают переменную окружения или принимают аргумент configure для указания, какой сценарий `wx-config` следует вызывать. На все остальные приходится накладывать патч.
+Очевидный недостаток этого подхода заключается в том, что каждое приложение необходимо модифицировать для поиска нужной версии. К счастью, большинство приложений вызывают скрипт `wx-config` для определения необходимых флагов компилятора и компоновщика. Имя этого скрипта отличается для каждой доступной версии. Большинство приложений учитывают переменную окружения или принимают аргумент configure, чтобы указать, какой скрипт `wx-config` вызывать. В противном случае их необходимо патчить.
[[wx-version]]
=== Выбор версии
-Для того, чтобы заставить ваш порт использовать конкретную версию wxWidgets, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
+Чтобы порт использовал определённую версию wxWidgets, доступны две переменные для определения (если задана только одна, другая будет установлена в значение по умолчанию):
[[wx-ver-sel-table]]
-.Переменные для выбора версии wxWidgets
+.Переменные для выбора версий wxWidgets
[cols="1,1,1", frame="none", options="header"]
|===
| Переменная
@@ -1553,65 +3528,59 @@ USE_SDL+= mixer
| Значение по умолчанию
|`USE_WX`
-|Перечень версий, которые порт может использовать
+|Список версий, которые порт может использовать
|Все доступные версии
|`USE_WX_NOT`
-|Перечень версий, которые порт не может использовать
-|Нет
+|Список версий, которые порт не может использовать
+|Ничего
|===
-Перечень доступных версий wxWidgets и соответствующих им портов в дереве:
+Доступные версии wxWidgets и соответствующие порты в дереве:
+[[wx-widgets-versions-table]]
.Доступные версии wxWidgets
[cols="1,1", frame="none", options="header"]
|===
| Версия
| Порт
-|`2.4`
-|package:x11-toolkits/wxgtk24[]
-
-|`2.6`
-|package:x11-toolkits/wxgtk26[]
-
|`2.8`
|package:x11-toolkits/wxgtk28[]
-|===
-[NOTE]
-====
-Версии начиная с `2.5` также поставляются с Unicode и устанавливается подчиненным портом с названием как как у обычного, но с суффиксом `-unicode`, но этим можно управлять при помощи переменных (смотрите <<wx-unicode>>).
-====
+|`3.0`
+|package:x11-toolkits/wxgtk30[]
+|===
-Переменные в <<wx-ver-sel-table>> можно установить в одну или более следующих комбинаций, разделенных пробелами:
+Переменные в crossref:special[wx-ver-sel-table,Переменные для выбора версий wxWidgets] могут быть установлены в одну или несколько комбинаций, разделенных пробелами:
-.Определение версии для wxWidgets
+[[wx-widgets-versions-specification]]
+.Спецификации версий wxWidgets
[cols="1,1", frame="none", options="header"]
|===
| Описание
| Пример
-|Единичная версия
-|`2.4`
+|Единственная версия
+|`2.8`
-|Восходящий диапазон
-|`2.4+`
+|Возрастающий диапазон
+|`2.8+`
|Нисходящий диапазон
-|`2.6-`
+|`3.0-`
-|Полный диапазон (обязан быть восходящим)
-|`2.4-2.6`
+|Полный диапазон (должен быть возрастающим)
+|`2.8-3.0`
|===
-Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.
-
-.Переменные для выбора предпочитаемых версий wxWidgets
+Существуют также переменные для выбора предпочтительных версий из доступных. Их можно установить в виде списка версий, где первые будут иметь более высокий приоритет.
+[[wx-widgets-preferred-version]]
+.Переменные для выбора предпочтительных версий wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
-| Предназначение
+| Имя
+| Предназначен для
|`WANT_WX_VER`
|порт
@@ -1623,58 +3592,52 @@ USE_SDL+= mixer
[[wx-components]]
=== Выбор компонентов
-Существуют другие приложения, которые, хотя и не являются библиотеками wxWidgets, но в тоже время относятся к ним. Эти приложения можно указать в переменной `WX_COMPS`. Доступны следующие компоненты:
+Существуют другие приложения, которые, не являясь библиотеками wxWidgets, связаны с ними. Эти приложения можно указать в `WX_COMPS`. Доступны следующие компоненты:
+[[wx-widgets-components-table]]
.Доступные компоненты wxWidgets
[cols="1,1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
| Ограничение версии
|`wx`
|основная библиотека
-|нет
+|none
|`contrib`
|сторонние библиотеки
-|`нет`
+|`none`
|`python`
-|wxPython (привязки к Python)
-|`2.4-2.6`
-
-|`mozilla`
-|wxMozilla
-|`2.4`
-
-|`svg`
-|wxSVG
-|`2.6`
+|wxPython (интерфейс Python)
+|`2.8-3.0`
|===
-Тип добавляемой зависимости при выборе каждого компонента может быть указан вручную путем добавления суффикса, отделенного точкой с запятой. Если таковой отсутствует, но будет использовано значение по умолчанию (смотрите <<wx-def-dep-types>>). Доступные типы зависимости:
+Тип зависимости может быть выбран для каждого компонента путем добавления суффикса, разделенного точкой с запятой. Если он отсутствует, будет использоваться тип по умолчанию (см. crossref:special[wx-def-dep-types,Типы зависимостей wxWidgets по умолчанию]). Доступны следующие типы:
-.Доступные типы зависимости wxWidgets
+[[wx-widgets-dependency-table]]
+.Доступные типы зависимостей wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
|`build`
-|Компонент требуется для построения, эквивалентен `BUILD_DEPENDS`
+|Компонент необходим для сборки, эквивалентен `BUILD_DEPENDS`
|`run`
-|Компонент требуется для запуска, эквивалентен `RUN_DEPENDS`
+|Компонент необходим для запуска, эквивалентно `RUN_DEPENDS`
|`lib`
-|Компонент требуется для построения и запуска, эквивалентен `LIB_DEPENDS`
+|Компонент необходим для сборки и запуска, эквивалентен `LIB_DEPENDS`
|===
-Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:
+Значения по умолчанию для компонентов подробно описаны в этой таблице:
[[wx-def-dep-types]]
-.Типы зависимости wxWidgets, используемые по умолчанию
+.Типы зависимостей wxWidgets по умолчанию
[cols="1,1", frame="none", options="header"]
|===
| Компонент
@@ -1700,61 +3663,26 @@ USE_SDL+= mixer
.Выбор компонентов wxWidgets
[example]
====
-Следующий фрагмент относится к порту, в котором используется wxWidgets версии `2.4` с его сторонними библиотеками.
+Этот фрагмент соответствует порту, который использует wxWidgets версии `2.4` и дополнительные библиотеки.
[.programlisting]
....
-USE_WX= 2.4
+USE_WX= 2.8
WX_COMPS= wx contrib
....
====
-[[wx-unicode]]
-=== Unicode
-
-Библиотека wxWidgets поддерживает Unicode начиная с версии `2.5`. В дереве портов доступны обе версии и могут быть выбраны с использованием следующих переменных:
-[[wx-unicode-var-table]]
-.Переменные для выбора версии wxWidgets с Unicode
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Предназначение
-
-|`WX_UNICODE`
-|Порт работает _только_ с версией Unicode
-|порт
-
-|`WANT_UNICODE`
-|Порт работает с обеими версиями, но предпочитает версию с Unicode
-|порт
-
-|`WITH_UNICODE`
-|Порт будет использовать версию Unicode
-|пользователь
-
-|`WITHOUT_UNICODE`
-|Порт будет использовать обычную версию, если это поддерживается (когда `WX_UNICODE` не определена)
-|пользователь
-|===
-
-[WARNING]
-====
-
-Не используйте `WX_UNICODE` для портов, которые могут использовать обе версии. Если вы хотите, чтобы порт по умолчанию использовал Unicode, определите вместо этого `WANT_UNICODE`.
-====
-
[[wx-version-detection]]
=== Обнаружение установленных версий
-Для обнаружения установленной версии вам необходимо задать переменную `WANT_WX`. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная `HAVE_WX` будет заполнена после обнаружения.
+Для определения установленной версии определите `WANT_WX`. Если значение не задано для конкретной версии, компоненты будут иметь суффикс версии. `HAVE_WX` будет заполнен после обнаружения.
[[wx-ver-det-example]]
.Обнаружение установленных версий и компонентов wxWidgets
[example]
====
-Следующий фрагмент может быть использован в порту, который использует wxWidgets, в случае если он установлен или выбран соответствующий параметр.
+Этот фрагмент может использоваться в порте, который использует wxWidgets, если они установлены или выбран соответствующий параметр.
[.programlisting]
....
@@ -1762,19 +3690,19 @@ WANT_WX= yes
.include <bsd.port.pre.mk>
-.if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.4)
-USE_WX= 2.4
+.if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)
+USE_WX= 2.8
CONFIGURE_ARGS+= --enable-wx
.endif
....
-Следующий фрагмент может быть использован в порту, который задействует поддержку wxPython, в случае если он установлен или выбран соответствующий параметр, в дополнение к wxWidgets, обе версии `2.6`.
+Этот фрагмент может использоваться в порте, который включает поддержку wxPython, если она установлена или выбрана соответствующая опция, в дополнение к wxWidgets, обе версии `2.8`.
[.programlisting]
....
-USE_WX= 2.6
+USE_WX= 2.8
WX_COMPS= wx
-WANT_WX= 2.6
+WANT_WX= 2.8
.include <bsd.port.pre.mk>
@@ -1787,48 +3715,46 @@ CONFIGURE_ARGS+= --enable-wxpython
====
[[wx-defined-variables]]
-=== Переменные для определения
+=== Переменные, определенные в фреймворке
-Следующие переменные доступны в порту (после определения одной из переменных из <<wx-ver-sel-table>>).
+Эти переменные доступны в порте (после определения одной из crossref:special[wx-ver-sel-table,переменных для выбора версий wxWidgets]).
+[[wx-widgets-variables]]
.Переменные, определенные для портов, использующих wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
|`WX_CONFIG`
-|Путь к сценарию wxWidgets `wx-config` (с другим именем)
+|Путь к скрипту `wx-config` wxWidgets (с другим именем)
|`WXRC_CMD`
-|Путь к программе wxWidgets `wxrc` (с другим именем)
+|Путь к программе `wxrc` wxWidgets (с другим именем)
|`WX_VERSION`
|Версия wxWidgets, которая будет использоваться (например, `2.6`)
-
-|`WX_UNICODE`
-|Если не определена, но Unicode будет использоваться, то она будет определена
|===
[[wx-premk]]
=== Обработка в [.filename]#bsd.port.pre.mk#
-Если вам нужно использовать переменные для запуска команд сразу после подключения [.filename]#bsd.port.pre.mk#, то вам нужно определить `WX_PREMK`.
+Определите `WX_PREMK`, чтобы иметь возможность использовать переменные сразу после включения [.filename]#bsd.port.pre.mk#.
[IMPORTANT]
====
-Если вы определите `WX_PREMK`, то версия, зависимости, компоненты и заданные переменные не изменяться, в случае вы изменили переменные порта wxWidgets после подключения [.filename]#bsd.port.pre.mk#.
+При определении `WX_PREMK` версия, зависимости, компоненты и определенные переменные не изменятся при модификации переменных порта wxWidgets _после_ включения [.filename]#bsd.port.pre.mk#.
====
[[wx-premk-example]]
.Использование переменных wxWidgets в командах
[example]
====
-Следующий фрагмент иллюстрирует использование переменной `WX_PREMK` посредством запуска сценария `wx-config` для получения строки с полной версией с присвоением ее переменной и передачей в программу.
+Этот фрагмент иллюстрирует использование `WX_PREMK` путем запуска скрипта `wx-config` для получения полной строки версии, присвоения её переменной и передачи в программу.
[.programlisting]
....
-USE_WX= 2.4
+USE_WX= 2.8
WX_PREMK= yes
.include <bsd.port.pre.mk>
@@ -1844,15 +3770,16 @@ PLIST_SUB+= VERSION="${VER_STR}"
[NOTE]
====
-Переменные wxWidgets можно безопасно использовать в командах внутри целей без необходимости в использовании `WX_PREMK`.
+Переменные wxWidgets можно безопасно использовать в командах внутри целей без необходимости в `WX_PREMK`.
====
[[wx-additional-config-args]]
=== Дополнительные параметры `configure`
-Некоторые сценарии GNU `configure` не могут найти wxWidgets только с установленной переменной окружения `WX_CONFIG`, требуя дополнительные параметры. Для их передачи можно использовать переменную `WX_CONF_ARGS`.
+Некоторые скрипты GNU `configure` не могут найти wxWidgets, если задана только переменная окружения `WX_CONFIG`, и требуют дополнительные параметры. `WX_CONF_ARGS` можно использовать для их указания.
-.Допустимые значения `WX_CONF_ARGS`
+[[wx-conf-args-values]]
+.Допустимые значения для `WX_CONF_ARGS`
[cols="1,1", frame="none", options="header"]
|===
| Возможное значение
@@ -1868,374 +3795,465 @@ PLIST_SUB+= VERSION="${VER_STR}"
[[using-lua]]
== Использование Lua
-Эта глава описывает статус библиотек Lua в дереве портов и их интеграцию в систему портов.
+Этот раздел описывает состояние библиотек Lua в дереве портов и их интеграцию с системой портов.
[[lua-introduction]]
=== Введение
-Существует множество версий библиотек Lua и соответствующих интерпретаторов, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии в собственное место с использованием номера версии в качестве суффикса.
+Существует множество версий библиотек Lua и соответствующих интерпретаторов, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена установкой каждой версии под разными именами с использованием суффиксов номеров версий.
+
+Очевидный недостаток этого заключается в том, что каждое приложение необходимо модифицировать для поиска ожидаемой версии. Однако это можно решить, добавив дополнительные флаги компилятору и компоновщику.
-Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. Но это решается добавлением некоторых дополнительных флагов для компилятора и компоновщика.
+Приложения, использующие Lua, обычно должны собираться только для одной версии. Однако загружаемые модули для Lua собираются в отдельных флейворах для каждой поддерживаемой версии Lua, и зависимости от таких модулей должны указывать флейвор с использованием суффикса `@${LUA_FLAVOR}` в расположении (origin) порта.
[[lua-version]]
=== Выбор версии
-Для того, чтобы заставить ваш порт использовать конкретную версию Lua, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
+Порт, использующий Lua, должен содержать строку следующего вида:
-[[lua-ver-sel-table]]
-.Переменные для выбора версии Lua
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Значение по умолчанию
+[.programlisting]
+....
+USES= lua
+....
-|`USE_LUA`
-|Перечень версий, которые порт может использовать
-|Все доступные версии
+Если требуется определённая версия Lua или диапазон версий, его можно указать в виде параметра `XY` (который можно использовать несколько раз), `XY+`, `-XY` или `XY-ZA`. Версия Lua, установленная через `DEFAULT_VERSIONS`, будет использована, если она попадает в запрошенный диапазон, в противном случае будет использована ближайшая к умолчанию запрошенная версия. Например:
-|`USE_LUA_NOT`
-|Перечень версий, которые порт не может использовать
-|Пусто
-|===
+[.programlisting]
+....
+USES= lua:52-53
+....
-Перечень доступных версий Lua и соответствующих портов в дереве:
+Обратите внимание, что не предпринимается попытка изменить выбор версии на основе наличия любой уже установленной версии Lua.
-.Доступные версии Lua
-[cols="1,1", frame="none", options="header"]
-|===
-| Версия
-| Порт
+[NOTE]
+====
+Форма указания версии `XY+` не должна использоваться без тщательного обдумывания; Lua API в некоторой степени меняется с каждой версией, и инструменты конфигурации, такие как CMake или Autoconf, скорее всего не будут работать с будущими версиями Lua, пока не будут обновлены для этого.
+====
-|`4.0`
-|package:lang/lua4[]
+[[lua-version-config]]
+=== Конфигурация и флаги компилятора
-|`5.0`
-|package:lang/lua50[]
+Программное обеспечение, использующее Lua, может быть написано с автоматическим определением версии Lua в использовании. В общем случае порты должны переопределять это предположение и принудительно использовать конкретную выбранную версию Lua, как описано выше. В зависимости от портируемого программного обеспечения, это может потребовать любого или всех из следующих действий:
-|`5.1`
-|package:lang/lua[]
-|===
+* Использование `LUA_VER` в качестве части параметра для скрипта конфигурации программного обеспечения через `CONFIGURE_ARGS` или `CONFIGURE_ENV` (или эквивалентные для других систем сборки);
+* Добавление `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}` и `-llua-${LUA_VER}` в `CFLAGS`, `LDFLAGS` и `LIBS` соответственно, где это необходимо;
+* Исправьте конфигурационные или файлы сборки программного обеспечения, чтобы выбрать правильную версию.
+
+
+[[lua-version-flavors]]
+=== Флейворы версии
+
+Порт, который устанавливает модуль Lua (а не приложение, просто использующее Lua), должен собирать отдельный флейвор для каждой поддерживаемой версии Lua. Это делается путем добавления параметра `module`:
+
+[.programlisting]
+....
+USES= lua:module
+....
+
+Так же может быть указае номер версии или диапазон версий. Используйте запятую для разделения параметров.
+
+Поскольку каждый флейвор должен иметь уникальное имя пакета, предоставляется переменная `LUA_PKGNAMEPREFIX`, которая будет установлена в соответствующее значение; предполагаемое использование:
+
+[.programlisting]
+....
+PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
+....
+
+Модульные порты обычно должны устанавливать файлы только в `LUA_MODLIBDIR`, `LUA_MODSHAREDIR`, `LUA_DOCSDIR` и `LUA_EXAMPLESDIR`, все из которых настроены на ссылки в версионно-зависимые подкаталоги. Установка любых других файлов должна выполняться с осторожностью, чтобы избежать конфликтов между версиями.
+
+Порт (кроме модуля Lua), который хочет собрать отдельный пакет для каждой версии Lua, должен использовать параметр `flavors`:
+
+[.programlisting]
+....
+USES= lua:flavors
+....
+
+Это работает так же, как параметр `module`, описанный выше, но без предположения, что пакет должен быть задокументирован как модуль Lua (поэтому `LUA_DOCSDIR` и `LUA_EXAMPLESDIR` по умолчанию не определены). Однако порт может определить `LUA_DOCSUBDIR` как подходящее имя подкаталога (обычно `PORTNAME` порта, если это не конфликтует с `PORTNAME` любого модуля), и в этом случае фреймворк определит как `LUA_DOCSDIR`, так и `LUA_EXAMPLESDIR`.
-Переменные из <<lua-ver-sel-table>> могут иметь комбинации из одного или нескольких значений, разделенных пробелом:
+Как и в случае с модульными портами, порт с флейворами должен избегать установки файлов, которые могут конфликтовать между версиями. Обычно это достигается добавлением `LUA_VER_STR` в качестве суффикса к именам программ (например, с использованием crossref:uses[uses-uniquefiles,`uniquefiles`]), а также использованием `LUA_VER` или `LUA_VER_STR` в составе других файлов или поддиректорий, используемых вне `LUA_MODLIBDIR` и `LUA_MODSHAREDIR`.
-.Определение версии Lua
+[[lua-defined-variables]]
+=== Переменные, определенные в фреймворке
+
+В порте доступны эти переменные.
+
+[[using-lua-variables-ports]]
+.Переменные, определенные для портов, использующих Lua
[cols="1,1", frame="none", options="header"]
|===
+| Имя
| Описание
-| Пример
-|Единичная версия
-|`4.0`
+|`LUA_VER`
+|Версия Lua, которая будет использоваться (например, `5.4`)
-|Восходящий диапазон
-|`5.0+`
+|`LUA_VER_STR`
+|Версия Lua без точек (например, `54`)
-|Нисходящий диапазон
-|`5.0-`
+|`LUA_FLAVOR`
+|Имя флейвора, соответствующее выбранной версии Lua, используемое для указания зависимостей
+
+|`LUA_BASE`
+|Префикс, который должен использоваться для поиска Lua (и компонентов), уже установленных
+
+|`LUA_PREFIX`
+|Префикс, куда этим портом будут установлены Lua (и компоненты)
+
+|`LUA_INCDIR`
+|Каталог, в котором установлены заголовочные файлы Lua
+
+|`LUA_LIBDIR`
+|Каталог, в котором установлены библиотеки Lua
-|Полный диапазон (обязан быть восходящим)
-|`5.0-5.1`
+|`LUA_REFMODLIBDIR`
+|Каталог, в котором находятся уже установленные библиотеки модулей Lua ([.filename]#.so#)
+
+|`LUA_REFMODSHAREDIR`
+|Каталог, в котором находятся установленные модули Lua ([.filename]#.lua#)
+
+|`LUA_MODLIBDIR`
+|Каталог, в котором библиотеки модулей Lua ([.filename]#.so#) должны быть установлены данным портом
+
+|`LUA_MODSHAREDIR`
+|Каталог, в котором должны быть установлены модули Lua ([.filename]#.lua#) данным портом
+
+|`LUA_PKGNAMEPREFIX`
+|Префикс имени пакета, используемый модулями Lua
+
+|`LUA_CMD`
+|Название интерпретатора Lua (например, `lua54`)
+
+|`LUAC_CMD`
+|Название компилятора Lua (например, `luac54`)
|===
-Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.
+Эти дополнительные переменные доступны для портов, которые указали параметр `module`:
-.Переменные для выбора предпочитаемых версий Lua
+[[using-lua-variables-modules]]
+.Переменные, определенные для модулей Lua в портах
[cols="1,1", frame="none", options="header"]
|===
-| Название
-| Предназначение
+| Имя
+| Описание
-|`WANT_LUA_VER`
-|порт
+|`LUA_DOCSDIR`
+|каталог, в который должна быть установлена документация модуля.
-|`WITH_LUA_VER`
-|пользователь
+|`LUA_EXAMPLESDIR`
+|каталог, в который должны быть установлены примеры файлов модуля.
|===
-[[lua-version-example]]
-.Выбор версии Lua
+[[lua-examples]]
+=== Примеры
+
+[[lua-app-Makefile]]
+.`Makefile` для приложения, использующего Lua
[example]
====
-Следующий фрагмент взят из порта, который использует Lua версий `5.0` или `5.1`, по умолчанию `5.0`. Значение может быть переопределено пользователем с использованием переменной `WITH_LUA_VER`.
+Этот пример показывает, как сослаться на модуль Lua, требуемый во время выполнения. Обратите внимание, что ссылка должна указывать флейвор.
[.programlisting]
....
-USE_LUA= 5.0-5.1
-WANT_LUA_VER= 5.0
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
+
+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}
+
+USES= lua
+
+.include <bsd.port.mk>
....
====
-[[lua-components]]
-=== Выбор компонентов
-
-Существуют другие приложения, которые хотя и не являются библиотеками Lua, но относятся к ним. Эти приложения можно указать в переменной `LUA_COMPS`. Доступны следующие компоненты:
+[[lua-mod-Makefile]]
+.`Makefile` для простого модуля Lua
+[example]
+====
+[.programlisting]
+....
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
+PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
-.Доступные компоненты Lua
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Название
-| Описание
-| Ограничение версии
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/lua_sample/sample/
-|`lua`
-|Основная библиотека
-|нет
+USES= lua:module
-|`tolua`
-|Библиотека доступа к коду C/C++
-|4.0-5.0
+DOCSDIR= ${LUA_DOCSDIR}
-|`ruby`
-|Привязка к Ruby
-|4.0-5.0
-|===
+.include <bsd.port.mk>
+....
-[NOTE]
-====
-Есть и другие компоненты, но они относятся к модулям для интерпретатора и не используются приложениями (только другими модулями).
====
-Тип зависимости можно выбрать для каждого компонента через добавление суффикса, отделенного точкой с запятой. В случае отсутствия будет использован тип по умолчанию (смотрите <<lua-def-dep-types>>). Доступные следующие типы:
+[[using-guile]]
+== Использование Guile
-.Доступные типы зависимости Lua
-[cols="1,1", frame="none", options="header"]
-|===
-| Название
-| Описание
+Этот раздел описывает состояние Guile в дереве портов и его интеграцию с системой портов.
-|`build`
-|Компонент требуется для построения, эквивалентен `BUILD_DEPENDS`
+[[guile-introduction]]
+=== Введение
-|`run`
-|Компонент требуется для запуска, эквивалентен `RUN_DEPENDS`
+Существует несколько версий библиотек Guile и соответствующих интерпретаторов, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена путем установки каждой версии под разными именами с использованием суффиксов номеров версий. В большинстве случаев приложения должны определять правильную версию из предоставленных конфигурационных переменных и использовать `pkg-config` для определения имени и связанных путей. Однако некоторые приложения (особенно те, которые используют собственные правила конфигурации для `cmake` или `meson`) всегда будут пытаться использовать последнюю доступную версию. В этом случае либо исправьте порт, либо объявите конфликт сборки (см. опцию `conflicts` ниже), чтобы гарантировать создание правильной зависимости при сборке вне poudriere.
-|`lib`
-|Компонент требуется для построения и запуска, эквивалентен `LIB_DEPENDS`
-|===
+Приложения, использующие Guile, обычно должны собираться только для одной версии, предпочтительно указанной в `DEFAULT_VERSIONS`, или, если это невозможно, для последней поддерживаемой версии. Однако библиотеки Guile или Scheme, а также модули расширения для Guile собираются в отдельных флейворах для каждой поддерживаемой версии Guile. Зависимости от таких портов должны указывать флейвор с использованием суффикса `@${GUILE_FLAVOR}` в расположении (origin) порта.
-Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:
+[[guile-version]]
+=== Выбор версии
-[[lua-def-dep-types]]
-.Типы зависимости Lua, используемые по умолчанию
-[cols="1,1", frame="none", options="header"]
+Порт, использующий Guile, должен определять `USES=guile:__arg,arg...__` с соответствующими параметрами следующим образом:
+
+[[guile-defined-uses-args]]
+.Параметры, определенные для портов, использующих Guile
+[cols="1m,4", frame="none", options="header"]
|===
-| Компонент
-| Тип зависимости
+| Имя
+| Описание
+
+|_X.Y_
+|Объявить совместимость с версией Guile `X.Y`.
+Доступные версии: `1.8` (устарела), `2.2` и `3.0`.
+Можно указать несколько версий.
+
+|flavors
+|Создать флейвор для каждой указанной версии Guile.
+Версия, указанная в `DEFAULT_VERSIONS`, станет флейвором по умолчанию.
+Названия флейворов имеют вид `guileXY`.
-|`lua`
-|`lib` для `4.0-5.0` (динамическая) и `build` для `5.1` (статическая)
+|build
+|Добавить интерпретатор Guile только как зависимость для сборки, а не как зависимость библиотеки.
+`build` и `run` могут быть указаны оба.
-|`tolua`
-|`build` (статическая)
+|run
+|Добавить интерпретатор Guile только как зависимость во время выполнения, а не как зависимость от библиотеки.
+`build` и `run` могут быть указаны оба.
-|`ruby`
-|`lib` (динамическая)
+|alias
+|Добавить значения `BINARY_ALIAS` для интерпретатора и инструментов.
+
+|conflicts
+|Объявить `CONFLICTS_BUILD` для версий Guile новее выбранной.
+Используйте это, когда порт нельзя настроить на использование определённой версии Guile.
|===
-[[lua-components-example]]
-.Выбор компонентов Lua
-[example]
-====
-Следующий фрагмент соответствует порту, использующему Lua версии `4.0` и привязку к Ruby.
+Некоторые дополнительные аргументы доступны для обработки нестандартных случаев; подробности см. в `Mk/Uses/guile.mk`.
-[.programlisting]
-....
-USE_LUA= 4.0
-LUA_COMPS= lua ruby
-....
+Если не указано `build` или `run`, то `LIB_DEPENDS` получает зависимость от библиотеки `libguile`, а также любые дополнительные зависимости, требуемые версией guile, например, `libgc`. Обычно порту не требуются дополнительные зависимости, связанные с использованием Guile.
-====
+[[guile-version-config]]
+=== Флаги конфигурации
-[[lua-version-detection]]
-=== Обнаружение установленных версий
+Программное обеспечение, использующее Guile, должно использовать механизм `pkg-config` для получения флагов компилятора и компоновщика. Некоторые старые или экзотические порты могут использовать `guile-config` или получать значения напрямую из `guile`, что также должно работать (в некоторых из этих случаев может быть полезен аргумент `alias`).
-Для обнаружения установленной версии вам необходимо задать переменную `WANT_LUA`. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная `HAVE_LUA` будет заполнена после обнаружения.
+Фреймворк пытается сообщить порту желаемую версию Guile, используя следующие методы:
-[[lua-ver-det-example]]
-.Обнаружение установленных версий и компонентов Lua
-[example]
-====
-Следующий фрагмент можно использовать для порта, использующего Lua, если она установлена, или был выбран соответствующий параметр.
+* `GUILE_EFFECTIVE_VERSION` добавлен в `CONFIGURE_ENV`;
+* Полный путь к исполняемому файлу Guile указан в переменной `GUILE` в `CONFIGURE_ENV` и `MAKE_ENV`;
+* Если используется опция `alias`, то желаемые версии бинарных файлов Guile являются теми, которые имеют алиасы;
+* Если параметр `alias` не используется, пути к инструментам нужной версии Guile (`guild`, `guile-config` и т.д.) добавляются в `CONFIGURE_ENV` и `MAKE_ENV` в виде переменных `GUILD`, `GUILE_CONFIG` и т.д.
-[.programlisting]
-....
-WANT_LUA= yes
+Для некоторых портов может потребоваться указать версию дополнительными способами, например, через `CONFIGURE_ARGS` или `MESON_ARGS`, в зависимости от порта.
-.include <bsd.port.pre.mk>
+Если ни один из этих методов не приводит к тому, что порт выбирает указанную версию Guile при наличии других версий, то предпочтительно исправить его, чтобы это происходило. Если это невозможно, укажите опцию `conflicts`, чтобы предотвратить сборку порта в условиях, когда он обнаруживает неправильную версию.
-.if defined(WITH_LUA5) || !empty(PORT_OPTIONS:MLUA5) || !empty(HAVE_LUA:Mlua-5.[01])
-USE_LUA= 5.0-5.1
-CONFIGURE_ARGS+= --enable-lua5
-.endif
-....
+[[guile-version-flavors]]
+=== Флейворы версии
+
+Порт, который устанавливает расширение или библиотеку Guile, или библиотеку Scheme, которая предварительно компилируется для Guile, должен собирать отдельный флейвор для каждой поддерживаемой версии Guile. Это делается путем добавления опции `flavors`.
-Следующий фрагмент можно использовать для порта, который включает поддержку tolua, если такой компонент установлен, или был выбран соответствующий параметр в дополнение к Lua, оба имеют версию `4.0`.
+Поскольку каждый флейвор должен иметь уникальное имя пакета, такие порты обычно устанавливают `PKGNAMESUFFIX`, например:
[.programlisting]
....
-USE_LUA= 4.0
-LUA_COMPS= lua
-WANT_LUA= 4.0
+PKGNAMESUFFIX= -${FLAVOR}
+....
-.include <bsd.port.pre.mk>
+Такие порты должны устанавливать файлы Scheme в `GUILE_SITE_DIR`, а не в `GUILE_GLOBAL_SITE_DIR`, даже если файлы не зависят от версии. Это часто требует исправления порта.
-.if defined(WITH_TOLUA) || !empty(PORT_OPTIONS:MTOLUA) || !empty(HAVE_LUA:Mtolua)
-LUA_COMPS+= tolua
-CONFIGURE_ARGS+= --enable-tolua
-.endif
-....
+Кроме того, если такой порт устанавливает файл `.pc`, он должен быть размещён в `GUILE_PKGCONFIG_PATH`, а не в глобальной директории `pkgconfig`. Это позволяет зависимым портам находить правильную конфигурацию для используемой версии Guile.
-====
+Если порт расширения Guile устанавливает файл `.so`, то обычно он должен быть размещён в специфичной для версии Guile директории `extensions`. Обычно не следует использовать `USE_LDCONFIG`.
-[[lua-defined-variables]]
-=== Переменные для определения
+Любые другие файлы, устанавливаемые портом с флейвором, также должны находиться в версионных каталогах или использовать версионные имена файлов. Для документации и примеров переменные `GUILE_DOCS_DIR` и `GUILE_EXAMPLES_DIR` указывают подходящие расположения, в которых порт должен создать подкаталог (см. ниже).
-Следующие переменные доступны в порту (после определения одной из переменных из <<lua-ver-sel-table>>).
+[[guile-defined-variables]]
+=== Переменные, определенные в фреймворке
-.Переменные, определенные для портов, использующих Lua
-[cols="1,1", frame="none", options="header"]
+В порте доступны эти переменные.
+
+[[using-guile-variables-ports]]
+.Переменные, определенные для портов, использующих Guile
+[cols="1,3m,6", frame="none", options="header"]
|===
-| Название
+| Имя
+| Пример значения
| Описание
-|`LUA_VER`
-|Версия Lua, которая будет использоваться (например, `5.1`)
+|`GUILE_VER`
+|3.0
+|Используемая версия Guile.
-|`LUA_VER_SH`
-|Старший номер версии динамической библиотеки Lua (например, `1`)
+|`GUILE_SFX`
+|3
+|Короткий суффикс, используемый в некоторых именах.
+Используйте с осторожностью; может быть неуникальным или измениться в будущем.
-|`LUA_VER_STR`
-|Версия Lua без точки (например, `51`)
+|`GUILE_FLAVOR`
+|guile30
+|Название флейвора, соответствующее выбранной версии.
-|`LUA_PREFIX`
-|Префикс, в который установлена Lua (и компоненты)
+|`GUILE_PORT`
+|lang/guile3
+|Расположение порта (origin) для указанной версии Guile.
-|`LUA_SUBDIR`
-|Каталог под [.filename]#${PREFIX}/bin#, [.filename]#${PREFIX}/share# и [.filename]#${PREFIX}/lib#, в который установлена Lua
+|`GUILE_PREFIX`
+|${PREFIX}
+|Префикс каталога для использования при установке.
-|`LUA_INCDIR`
-|Каталог, в который установлены заголовочные файлы Lua и tolua
+|`GUILE_CMD`
+|guile-3.0
+|Имя интерпретатора Guile с суффиксом версии.
-|`LUA_LIBDIR`
-|Каталог, в который установлены библиотеки Lua и tolua
+|`GUILE_CMDPATH`
+|${LOCALBASE}/bin/guile-3.0
+|Полный путь к интерпретатору Guile.
-|`LUA_MODLIBDIR`
-|Каталог, в который установлены модули библиотеки Lua ([.filename]#.so#)
+|`GUILD_CMD`
+|guild-3.0
+|Название инструмента Guild, с суффиксом версии.
-|`LUA_MODSHAREDIR`
-|Каталог, в который установлены модули Lua ([.filename]#.lua#)
+|`GUILD_CMDPATH`
+|`${LOCALBASE}/bin/guild-3.0`
+|Полный путь к инструменту Guild.
-|`LUA_PKGNAMEPREFIX`
-|Префикс с именем пакета, используемый модулями Lua
+|`++GUILE_*_CMD++` +
+`++GUILE_*_CMDPATH++`
+|
+|Как `GUILE_CMD` и `GUILE_CMDPATH`, но для других исполняемых файлов утилит.
-|`LUA_CMD`
-|Путь к интерпретатору Lua
+|`GUILE_PKGCONFIG_PATH`
+|${LOCALBASE}/libdata/pkgconfig/guile/3.0
+|Где пакеты, использующие `flavors`, должны устанавливать файлы `.pc`.
-|`LUAC_CMD`
-|Путь к компилятору Lua
+|`GUILE_INFO_PATH`
+|share/info/guile3
+|Подходящее значение для `INFO_PATH` для портов, использующих опцию `flavors`.
+|===
-|`TOLUA_CMD`
-|Путь к программе tolua
+Следующие элементы определены как переменные и как записи `PLIST_SUB`. Форма переменной имеет суффикс `_DIR` и представляет собой полный путь (с префиксом `GUILE_PREFIX`).
+
+[[using-guile-path-variables-ports]]
+.Подстановки путей, определенные для портов, использующих Guile
+[cols="1m,3m,6", frame="none", options="header"]
|===
+| Имя
+| Пример значения
+| Описание
-[[lua-variables-example]]
-.Указание для порта, где искать Lua
-[example]
-====
-Следующий фрагмент показывает, как сообщить порту, который использует сценарий configure, где расположены заголовочные файлы и библиотеки Lua.
+|GUILE_GLOBAL_SITE
+|share/guile/site
+|Каталог сайта, общий для всех версий guile; обычно не должен использоваться.
-[.programlisting]
-....
-USE_LUA= 4.0
-GNU_CONFIGURE= yes
-CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"
-....
+|GUILE_SITE
+|share/guile/3.0/site
+|Каталог сайта для выбранной версии Guile.
-====
+|GUILE_SITE_CCACHE
+|lib/guile/3.0/site-ccache
+|Каталог для скомпилированных файлов байт-кода.
-[[lua-premk]]
-=== Обработка в [.filename]#bsd.port.pre.mk#
+|GUILE_DOCS
+|share/doc/guile30
+|Родительский каталог для документации, специфичной для версий.
-Если вам нужно использовать переменные для запуска команд сразу после подключения [.filename]#bsd.port.pre.mk#, для этого вам нужно определить переменную `LUA_PREMK`.
+|GUILE_EXAMPLES
+|share/examples/guile30
+|Родительский каталог для примеров, специфичных для версий.
+|===
-[IMPORTANT]
-====
-Если вы задаете `LUA_PREMK`, то версия, зависимости, компоненты и уже заданные переменные не будут изменены, в случае если вы изменили переменные порта Lua после подключения [.filename]#bsd.port.pre.mk#.
-====
+[[guile-examples]]
+=== Примеры
-[[lua-premk-example]]
-.Использование переменных Lua в командах
+[[guile-app-Makefile]]
+.`Makefile` для приложения, использующего Guile
[example]
====
-Следующий фрагмент иллюстрирует использование `LUA_PREMK` посредством запуска интерпретатора Lua для того, чтобы получить строку с полной версией, сохранить ее в переменную и передать программе.
+Этот пример демонстрирует, как сослаться на библиотеку Guile, необходимую во время сборки и выполнения. Обратите внимание, что ссылка должна указывать флейвор. В этом примере предполагается, что приложение использует `pkg-config` для поиска зависимостей.
[.programlisting]
....
-USE_LUA= 5.0
-LUA_PREMK= yes
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
-.include <bsd.port.pre.mk>
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/guile_sample/sample/
-.if exists(${LUA_CMD})
-VER_STR!= ${LUA_CMD} -v
+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}
-CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
-.endif
-....
+USES= guile:2.2,3.0 pkgconfig
-====
+.include <bsd.port.mk>
+....
-[NOTE]
-====
-Переменные Lua можно безопасно использовать в командах внутри целей без необходимости в использовании `LUA_PREMK`.
====
[[using-iconv]]
== Использование `iconv`
-После 10-08-2013 (link:https://svnweb.freebsd.org/changeset/base/254273[r254273]) в составе FreeBSD 10-CURRENT и более новых версий имеется собственный `iconv`. В более ранних версиях дополнительной зависимостью выступал package:converters/libiconv[].
+В FreeBSD имеется встроенная реализация `iconv` в самой операционной системе.
-Для программного обеспечения, которому нужен `iconv`, определите `USES=iconv`. Версии FreeBSD до 10-CURRENT от 13-08-2013 (link:https://svnweb.freebsd.org/changeset/base/254273[r254273]) не имеют собственного `iconv`. На этих более ранных версиях будет автоматически добавлена зависимость от package:converters/libiconv[].
+Для программного обеспечения, требующего `iconv`, определите `USES=iconv`.
-Когда порт задаёт `USES=iconv`, становятся доступными следующие переменные:
+Когда порт определяет `USES=iconv`, становятся доступны следующие переменные:
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
|===
| Имя переменной
| Назначение
-| Значение до FreeBSD 10-CURRENT 254273 (13-08-2013)
-| Значение после FreeBSD 10-CURRENT 254273 (13-08-2013)
+| Порт iconv (при использовании расширений WCHAR_T или //TRANSLIT)
+| Базовый iconv
+
|`ICONV_CMD`
-|Каталог размещения двоичного файла `iconv`
+|Каталог, в котором находится бинарный файл `iconv`
|`${LOCALBASE}/bin/iconv`
|[.filename]#/usr/bin/iconv#
|`ICONV_LIB`
-|Аргумент `ld` для компоновки с [.filename]#libiconv# (если нужно)
+|аргумент `ld` для линковки с [.filename]#libiconv# (если требуется)
|`-liconv`
|(пусто)
|`ICONV_PREFIX`
-|Каталог размещения реализации `iconv` (используется для сценариев конфигурации)
+|Каталог, в котором находится реализация `iconv` (полезно для скриптов configure)
|`${LOCALBASE}`
|[.filename]#/usr#
|`ICONV_CONFIGURE_ARG`
-|Параметр предварительно собранной конфигурации для сценариев конфигурации
+|Предварительно сконструированный аргумент configure для скриптов configure
|`--with-libiconv-prefix=${LOCALBASE}`
|(пусто)
|`ICONV_CONFIGURE_BASE`
-|Параметр предварительно собранной конфигурации для сценариев конфигурации
+|Предварительно сконструированный аргумент configure для скриптов configure
|`--with-libiconv=${LOCALBASE}`
|(пусто)
|===
-В следующих двух примерах демонстрируется автоматическое присвоение переменным правильных значений для систем, использующих package:converters/libiconv[] или собственный `iconv`.
+Эти два примера автоматически заполняют переменные правильным значением для систем, использующих package:converters/libiconv[] или `iconv`, входящий в состав операционной системы, соответственно:
[[iconv-simple-use]]
.Простое использование `iconv`
@@ -2261,12 +4279,12 @@ CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}
====
-Как показано выше, `ICONV_LIB` имеет пустое значение с собственным `iconv`. Эту особенность можно использовать для обнаружения собственного `iconv` с соответствующими действиями.
+Как показано выше, `ICONV_LIB` пуста, когда присутствует встроенный `iconv`. Это можно использовать для обнаружения встроенного `iconv` и действовать соответственно.
-Иногда в программе параметр `ld` или путь поиска жёстко заданы в [.filename]#Makefile# или сценарии конфигурации. Для решения этой проблемы можно использовать следующий подход:
+Иногда в программе аргумент `ld` или путь поиска жестко заданы в [.filename]#Makefile# или скрипте configure. Для решения этой проблемы можно использовать следующий подход:
[[iconv-reinplace]]
-.Исправление жёстко заданного `-liconv`
+.Исправление жестко заданного `-liconv`
[example]
====
[.programlisting]
@@ -2279,10 +4297,10 @@ post-patch:
====
-В некоторых случаях необходимо установить альтернативные значения или выполнить операции в случае использования собственного `iconv`. Перед проверкой значения `ICONV_LIB` обязан быть подключён [.filename]#bsd.port.pre.mk#:
+В некоторых случаях необходимо установить альтернативные значения или выполнить операции в зависимости от наличия встроенного `iconv`. [.filename]#bsd.port.pre.mk# должен быть включен до проверки значения `ICONV_LIB`:
[[iconv-conditional]]
-.Проверка доступности собственного `iconv`
+.Проверка доступности встроенной поддержки `iconv`
[example]
====
[.programlisting]
@@ -2293,7 +4311,7 @@ USES= iconv
post-patch:
.if empty(ICONV_LIB)
- # обнаружен собственный iconv
+ # native iconv detected
@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh
.endif
@@ -2305,126 +4323,239 @@ post-patch:
[[using-xfce]]
== Использование Xfce
-Переменная `USE_XFCE` используется для автоматической конфигурации зависимостей для портов, использующих библиотеки или приложения на основе Xfce, такие как package:x11-toolkits/libxfce4gui[] и package:x11-wm/xfce4-panel[].
+Порты, которым требуются библиотеки или приложения Xfce, устанавливают `USES=xfce`.
-В настоящее время распознаются следующие библиотеки и приложения Xfce:
+Конкретные зависимости библиотек и приложений Xfce задаются с помощью значений, присвоенных `USE_XFCE`. Они определены в [.filename]#/usr/ports/Mk/Uses/xfce.mk#. Возможные значения:
-* libexo: package:x11/libexo[]
-* libgui: package:x11-toolkits/libxfce4gui[]
-* libutil: package:x11/libxfce4util[]
-* libmcs: package:x11/libxfce4mcs[]
-* mcsmanager: package:sysutils/xfce4-mcs-manager[]
-* panel: package:x11-wm/xfce4-panel[]
-* thunar: package:x11-fm/thunar[]
-* wm: package:x11-wm/xfce4-wm[]
-* xfdev: package:dev/xfce4-dev-tools[]
+.Значения `USE_XFCE`
+garcon::
+package:sysutils/garcon[]
-Распознаются следующие дополнительные параметры:
+libexo::
+package:x11/libexo[]
+
+libgui::
+package:x11-toolkits/libxfce4gui[]
+
+libmenu::
+package:x11/libxfce4menu[]
+
+libutil::
+package:x11/libxfce4util[]
+
+panel::
+package:x11-wm/xfce4-panel[]
+
+thunar::
+package:x11-fm/thunar[]
+
+xfconf::
+package:x11/xfce4-conf[]
+
+[[use-xfce]]
+.Пример `USES=xfce`
+[example]
+====
+[.programlisting]
+....
+USES= xfce
+USE_XFCE= libmenu
+....
+
+====
+
+[[use-xfce-gtk2]]
+.Использование собственных виджетов GTK2 в Xfce
+[example]
+====
+В этом примере портированное приложение использует пакет виджетов, специфичных для GTK2: package:x11/libxfce4menu[] и package:x11/xfce4-conf[].
-* configenv: Используйте, если ваш порт требует специально измененного значения `CONFIGURE_ENV` для поиска требуемых для порта библиотек.
-+
[.programlisting]
....
--I${LOCALBASE}/include -L${LOCALBASE}/lib
+USES= xfce:gtk2
+USE_XFCE= libmenu xfconf
....
-+
-добавляется в CPPFLAGS к `CONFIGURE_ENV`.
+====
-Следовательно, если у порта имеется зависимость от package:sysutils/xfce4-mcs-manager[], и порт требует специальных CPPFLAGS в своем окружении configure, то синтаксис будет следующим:
+[TIP]
+====
+Компоненты Xfce, включённые таким образом, автоматически загрузят все необходимые зависимости. Указывать полный список больше не требуется. Если порту нужен только package:x11-wm/xfce4-panel[], используйте:
[.programlisting]
....
-USE_XFCE= mcsmanager configenv
+USES= xfce
+USE_XFCE= panel
....
-[[using-mozilla]]
-== Использование Mozilla
+Нет необходимости перечислять компоненты package:x11-wm/xfce4-panel[], которые ему самому требуются, вот так:
-.Переменные для портов, использующих Mozilla
-[cols="1,1", frame="none"]
-|===
-|`USE_GECKO`
-|Один из бэкэндов Gecko, с которым может работать порт. Возможные значения: `libxul` ([.filename]#libxul.so#), `seamonkey` ([.filename]#libgtkembedmoz.so#, устаревший, больше не должен использоваться).
+[.programlisting]
+....
+USES= xfce
+USE_XFCE= libexo libmenu libutil panel
+....
+
+Однако компоненты Xfce и зависимости порта, не относящиеся к Xfce, должны быть явно включены. Не рассчитывайте, что компонент Xfce предоставит дополнительную зависимость, кроме себя, для основного порта.
+====
+
+[[using-budgie]]
+== Использование Budgie
+
+Приложения или библиотеки, зависящие от рабочего стола Budgie, должны указывать `USES= budgie` и устанавливать `USE_BUDGIE` в список необходимых компонентов.
-|`USE_FIREFOX`
-|Для запуска порта требуется Firefox. Возможные значения: `yes` (версия по умолчанию), `40`, `36`, `35`. По умолчанию устанавливает зависимость от версии `40`.
+[cols="1,1", frame="none", options="header"]
+|===
+| Имя
+| Описание
-|`USE_FIREFOX_BUILD`
-|Для построения порта требуется Firefox. Возможные значения: смотрите USE_FIREFOX. Автоматически устанавливает USE_FIREFOX с присвоением того же значения.
+| `libbudgie`
+| Ядро рабочего стола (библиотека)
-|`USE_SEAMONKEY`
-|Для запуска порта требуется SeaMonkey. Возможные значения: `yes` (версия по умолчанию), `20`, `11` (устарело, больше не должно использоваться). По умолчанию устанавливает зависимость от версии `20`.
+| `libmagpie`
+| Оконный менеджер X11 и библиотека композитинга Budgie
-|`USE_SEAMONKEY_BUILD`
-|Для построения порта требуется SeaMonkey. Возможные значения: смотрите USE_SEAMONKEY. Автоматически устанавливает USE_SEAMONKEY с присвоением того же значения.
+| `raven`
+| Универсальный центр в панели для доступа к различным виджетам приложений
-|`USE_THUNDERBIRD`
-|Для запуска порта требуется Thunderbird. Возможные значения: `yes` (версия по умолчанию), `31`, `30` (устарело, больше не должно использоваться). По умолчанию устанавливает зависимость от версии `31`.
+| `screensaver`
+| Рабочий стол: специальная заставка
-|`USE_THUNDERBIRD_BUILD`
-|Для построения порта требуется Thunderbird. Возможные значения: смотрите USE_THUNDERBIRD. Автоматически устанавливает USE_THUNDERBIRD с присвоением того же значения.
|===
-Полный перечень доступных переменных можно получить в файле [.filename]#/usr/ports/Mk/bsd.gecko.mk#.
+[NOTE]
+====
+Все виджеты приложений взаимодействуют через службу *org.budgie_desktop.Raven*.
+
+Зависимость по умолчанию включает время сборки и выполнения, её можно изменить с помощью `:build` или `:run`, например:
+
+[.programlisting]
+....
+USES= budgie
+USE_BUDGIE= screensaver:build
+....
+====
+
+[[budgie-components-example]]
+.Пример `USE_BUDGIE`
+[example]
+====
+[.programlisting]
+....
+USES= budgie gettext gnome meson pkgconfig
+USE_BUDGIE= libbudgie
+....
+====
[[using-databases]]
== Использование баз данных
-.Переменные для портов, использующих базы данных
+Используйте один из макросов `USES` из crossref:special[using-databases-uses,Макросы `USES` для баз данных], чтобы добавить зависимость от базы данных.
+
+[[using-databases-uses]]
+.Макросы `USES` для баз данных
[cols="1,1", frame="none", options="header"]
|===
-| Переменная
-| Значение
+| База данных
+| Макрос USES
-|`USE_BDB`
-|Если переменная установлена в `yes`, добавляет зависимость от порта package:databases/db41[]. Также переменной можно присвоить значения: 2, 3, 40, 41, 42, 43, 44, 46, 47, 48 или 51. Вы можете объявить диапазон принимаемых значений, `USE_BDB`=42+ будет искать установленную версию с наибольшим номером, и, если ничего не установлено, вернется к 42.
+|Berkeley DB
+|crossref:uses[uses-bdb,`bdb`]
-|`USE_MYSQL`
-|Если переменная установлена в `yes`, добавляет зависимость от порта package:databases/mysql55-client[]. Как связанная переменная, `WANT_MYSQL_VER` может быть установлена в значение 323, 40, 41, 50, 51, 52, 55 или 60.
+|MariaDB, MySQL, Percona
+|crossref:uses[uses-mysql,`mysql`]
-|`USE_PGSQL`
-|Если установлена в `yes`, добавляет зависимость от порта package:databases/postgresql90-client[]. Как связанная переменная, `WANT_PGSQL_VER` может быть установлена в значение 83, 84, 90, 91 или 92. Вы можете указать максимальное и минимальное значения; `WANT_PGSQL_VER=90+` сделает порт зависимым от минимальной версии 9.0.
+|PostgreSQL
+|crossref:uses[uses-pgsql,`pgsql`]
-|`USE_SQLITE`
-|Если переменная имеет значение `yes`, добавляет зависимость от порта package:databases/sqlite3[]. Переменная может принимать значения: 3, 2.
+|SQLite
+|crossref:uses[uses-sqlite,`sqlite`]
|===
-Подробнее смотрите в http://svnweb.FreeBSD.org/ports/head/Mk/bsd.database.mk?view=markup[bsd.database.mk].
+[[using-databases-bdb-ex1]]
+.Использование Berkeley DB 6
+[example]
+====
+[.programlisting]
+....
+USES= bdb:6
+....
+
+См. crossref:uses[uses-bdb,`bdb`] для получения дополнительной информации.
+====
+
+[[using-databases-mysql-ex1]]
+.Использование MySQL
+[example]
+====
+Когда порту требуется клиентская библиотека MySQL, добавьте
+
+[.programlisting]
+....
+USES= mysql
+....
+
+См. crossref:uses[uses-mysql,`mysql`] для получения дополнительной информации.
+====
+
+[[using-databases-pgsql-ex1]]
+.Использование PostgreSQL
+[example]
+====
+Когда порту требуется сервер PostgreSQL версии 9.6 или новее, добавьте
+
+[.programlisting]
+....
+USES= pgsql:9.6+
+WANT_PGSQL= server
+....
+
+См. crossref:uses[uses-pgsql,`pgsql`] для получения дополнительной информации.
+====
+
+[[using-databases-sqlite-ex1]]
+.Использование SQLite 3
+[example]
+====
+[.programlisting]
+....
+USES= sqlite:3
+....
+
+См. crossref:uses[uses-sqlite,`sqlite`] для получения дополнительной информации.
+====
[[rc-scripts]]
-== Запуск и остановка служб (сценарии `rc`)
+== Запуск и остановка служб (скрипты `rc`)
-Сценарии [.filename]#rc.d# используются для запуска служб при запуске системы и дают администратору стандартный способ остановки, запуска и перезапуска службы. Порты интегрируются в системную инфраструктуру [.filename]#rc.d#. Подробности по её использованию можно найти в extref:{handbook}config-tuning/[главе rc.d Руководства, configtuning-rcd]. Подробное объяснение доступных команд находится в man:rc[8] и man:rc.subr[8]. Наконец, есть extref:{rc-scripting}[статья]о практических аспектах написания сценариев [.filename]#rc.d#.
+[.filename]#rc.d# скрипты используются для запуска служб при загрузке системы, а также предоставляют администраторам стандартный способ остановки, запуска и перезапуска служб. Порты интегрируются в систему [.filename]#rc.d#. Подробности использования можно найти в extref:{handbook}[соответствующей главе Handbook, configtuning-rcd]. Детальное объяснение доступных команд приведено в man:rc[8] и man:rc.subr[8]. Наконец, существует extref:{rc-scripting}[статья], посвящённая практическим аспектам написания [.filename]#rc.d# скриптов.
-Установить можно один или более сценариев [.filename]#rc.d#:
+С мифическим портом под названием _doorman_, которому необходимо запустить демон _doormand_. Добавьте следующее в [.filename]#Makefile#:
[.programlisting]
....
USE_RC_SUBR= doormand
....
-Сценарии обязаны размещаться в подкаталоге [.filename]#files# с обязательным добавлением суффикса `.in` к имени файла. Для этого файла будут использоваться стандартные расширения `SUB_LIST`. Также особенно приветствуется использование расширений `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` в <<using-sub-files,соответствующей главе>>.
+Можно указать несколько скриптов, которые будут установлены. Скрипты должны быть размещены в подкаталоге [.filename]#files#, и к их имени должен быть добавлен суффикс `.in`. Для этого файла будут выполнены стандартные подстановки `SUB_LIST`. Также настоятельно рекомендуется использовать подстановки `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` см. в crossref:pkg-files[using-sub-files,соответствующем разделе].
-Начиная с FreeBSD 6.1-RELEASE локальные сценарии [.filename]#rc.d# (включая установленные из портов) включены в общий man:rcorder[8] основной системы.
+Начиная с FreeBSD 6.1-RELEASE, локальные скрипты [.filename]#rc.d# (включая те, что установлены через порты) включены в общий man:rcorder[8] базовой системы.
-Пример простого сценария [.filename]#rc.d#:
+Пример простого скрипта [.filename]#rc.d# для запуска демона doormand:
[.programlisting]
....
#!/bin/sh
-# $FreeBSD$
-#
# PROVIDE: doormand
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
-# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# Add these lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# doormand_enable (bool): Set to NO by default.
-# Set it to YES to enable doorman.
+# Set it to YES to enable doormand.
# doormand_config (path): Set to %%PREFIX%%/etc/doormand/doormand.cf
# by default.
@@ -2446,73 +4577,76 @@ command_args="-p $pidfile -f $doormand_config"
run_rc_command "$1"
....
-Если нет стоящей причины запускать службы раньше всех портов, сценарии должны использовать
+Если нет очень веской причины запускать службу раньше или она работает от имени определенного пользователя (не root), все скрипты портов должны использовать:
[.programlisting]
....
REQUIRE: LOGIN
....
-Если служба работает под определенным пользователем (отличным от root), то это делается принудительно. В сценарий выше включена конструкция
+Если скрипт запуска демона требует его остановки, следующий код активирует остановку службы при выключении системы:
[.programlisting]
....
KEYWORD: shutdown
....
-потому что вымышленный порт, который мы используем в качестве примера, запускает службу, и она должна корректно завершиться при выключении системы. Если сценарий не запускает постоянную службу, то это не является необходимым.
+Если скрипт не запускает постоянную службу, это не требуется.
-Для необязательных элементов конфигурации присвоение переменной по умолчанию в стиле "=" является более предпочтительным по сравнению со стилем ":=", используемым здесь, поскольку первый устанавливает значение по умолчанию только если переменная не установлена, а последний устанавливает её, если переменная не установлена _или_ обнулена. Пользователь вполне может написать в своем файле [.filename]#rc.conf.local# что-нибудь типа
+Для необязательных элементов конфигурации предпочтительнее использовать стиль присваивания переменных по умолчанию "=" вместо стиля ":=", так как первый устанавливает значение по умолчанию только если переменная не задана, а второй — если переменная не задана _или_ равна null. Пользователь может включить что-то вроде:
[.programlisting]
....
doormand_flags=""
....
-и тогда произойдет неуместная подстановка переменной с использованием ":=", что переопределит намерения пользователя. Переменная `_enable` является обязательной; значением по умолчанию должно быть ":".
+в свой [.filename]#rc.conf.local#, а подстановка переменной с использованием ":=" некорректно переопределила бы намерение пользователя. Переменная `_enable` не является опциональной и должна использовать ":" для значения по умолчанию.
+
+[IMPORTANT]
+====
+Порты _не должны_ запускать и останавливать свои службы при установке и удалении. Не злоупотребляйте ключевыми словами [.filename]#plist#, описанными в crossref:plist[plist-keywords-base-exec, "разделе @preexec command,@postexec command,@preunexec command,@postunexec command"], выполняя команды, которые изменяют работающую систему, включая запуск или остановку служб.
+====
-=== Контрольный список перед внесением изменений
+[[rc-scripts-checklist]]
+=== Pre-Commit Checklist
-Перед тем, как отсылать порт со сценарием [.filename]#rc.d#, и тем более перед его коммитом, сверьтесь со следующим контрольным списком, чтобы убедиться, что порт для этого готов.
+Прежде чем внести порт с [.filename]#rc.d# скриптом, и что более важно, перед его коммитом, пожалуйста, ознакомьтесь с этим контрольным списком, чтобы убедиться, что он готов.
-Большинство из этих проверок умеет выполнять порт package:devel/rclint[], но это не является заменой надлежащему просмотру.
+Порт package:devel/rclint[] может проверить большинство из них, но он не заменяет тщательного просмотра и проверки.
[.procedure]
-====
-. Если это новый файл, заканчивается ли он на [.filename]#.sh#? Если это так, то имя файла должно быть изменено на [.filename]#file.in#, поскольку файлы [.filename]#rc.d# не могут оканчиваться на такое расширение.
-. Присутствует ли в файле тег `$FreeBSD$`?
-. Соответствуют ли друг другу имя файла (без [.filename]#.in#), строка `PROVIDE` и ``$``__name__? Имя файла, совпадающее с `PROVIDE`, упрощает отладку, особенно для проблем, связанных с man:rcorder[8]. Соответствие имени файла и ``$``__name__ также упрощает понимание, какие переменные имеют отношение к сценарию в [.filename]#rc.conf[.local]#. Последнее также является тем, что вы могли бы назвать "политикой" для всех новых сценариев, включая те, что входят в базовую систему.
-. Содержит ли строка `REQUIRE` значение LOGIN? Это условие обязательно для сценариев, работающих не из-под суперпользователя. Если сценарий запускается из-под суперпользователя, то стоит ли его запускать до `LOGIN`? Если нет, то его следует запускать после, так чтобы мы могли свободно сгруппировать локальные сценарии в той точке man:rcorder[8], когда почти все сценарии в базовой системе уже стартовали.
-. Запускает ли сценарий постоянную службу? Если да, то он должен иметь `KEYWORD: shutdown`.
-. Убедитесь в том, что в сценарии отсутствует `KEYWORD: FreeBSD`. Это перестало быть нужным и нежелательно уже много лет. Это также служит индикатором того, что новый сценарий был скопирован со старого, поэтому особое внимание должно быть уделено при проверке.
-. Если сценарий использует интерпретируемый язык, такой как `perl`, `python` или `ruby`, то убедитесь, что значение `command_interpreter` установлено должным образом. В противном случае
+. Если это новый файл, имеет ли он расширение [.filename]#.sh#? Если да, его необходимо изменить на просто [.filename]#file.in#, поскольку файлы [.filename]#rc.d# не могут оканчиваться таким расширением.
+. Совпадают ли имя файла (без [.filename]#.in#), строка `PROVIDE` и `$`_name_? Совпадение имени файла с `PROVIDE` упрощает отладку, особенно при проблемах с man:rcorder[8]. Совпадение имени файла и `$`_name_ облегчает понимание того, какие переменные актуальны в [.filename]#rc.conf[.local]#. Это также является политикой для всех новых скриптов, включая те, что в базовой системе.
+. Установлена ли строка `REQUIRE` в значение `LOGIN`? Это обязательно для скриптов, выполняемых от имени непривилегированного пользователя. Если скрипт выполняется от имени root, есть ли веская причина для его запуска до `LOGIN`? Если нет, он должен запускаться после, чтобы локальные скрипты можно было условно сгруппировать в man:rcorder[8] после запуска большинства компонентов базовой системы.
+. Запускает ли скрипт постоянную службу? Если да, он должен содержать `KEYWORD: shutdown`.
+. Убедитесь, что отсутствует `KEYWORD: FreeBSD`. Это перестало быть необходимым или желательным уже много лет. Это также указывает на то, что новый скрипт был скопирован/вставлен из старого скрипта, поэтому следует проявить дополнительную осторожность при проверке.
+. Если скрипт использует интерпретируемый язык, например `perl`, `python` или `ruby`, убедитесь, что `command_interpreter` установлен корректно. Например, для Perl добавьте `PERL=${PERL}` в `SUB_LIST` и используйте `%%PERL%%`. В противном случае,
+
-[source,shell]
+[source, shell]
....
# service name stop
....
-+
-возможно будет работать неправильно. Смотрите man:service[8] для дополнительной информации.
-. Все ли вхождения [.filename]#/usr/local# были заменены на `%%PREFIX%%`?
-. Идет ли присвоение переменным значений по умолчанию после `load_rc_config`?
++
+вероятно, не будет работать корректно. Дополнительную информацию смотрите в man:service[8].
+. Проверено, что все вхождения [.filename]#/usr/local# заменены на `%%PREFIX%%`?
+. Делаются ли присваивания переменным по умолчанию после `load_rc_config`?
. Используются ли пустые строки при присвоении значений по умолчанию? Такие присвоения должны быть удалены, но перепроверьте, что эти параметры задокументированы в комментариях в начале файла.
. Действительно ли в сценариях используются значения, присвоенные переменным?
-. Являются ли параметры по умолчанию, перечисленные в __name__``_flags``, обязательными? Если это так, то их следует поместить в `command_args`. Параметр `-d` здесь - это как красный флаг (прошу прощения за каламбур), поскольку обычно он применяется для "демонизации" процесса и поэтому на самом деле обязательный.
-. Никогда не включайте переменную __name__``_flags`` в `command_args` (и наоборот; в прочем, такая ошибка встречается реже).
-. Запускает ли сценарий какой-либо код безусловно? Это нехорошо. Обычно такие вещи могут/должны помещаться в `start_precmd`.
-. Все логические условия должны использовать функцию `checkyesno`. Не пишите самописных проверок для `[Yy][Ee][Ss]`, и так далее.
-. Если в сценарии выполняется цикл (например, ожидание чего-либо перед стартом), используется ли счетчик для завершения цикла? Мы не хотим бесконечного ожидания загрузки в случае возникновения ошибки.
-. Создает ли сценарий файлы или каталоги, которым нужны особые права доступа? Например, файл [.filename]#pid#, который должен принадлежать пользователю, из-под которого запускается процесс. Вместо традиционных команд man:touch[1]/man:chown[8]/man:chmod[1] подумайте об использовании man:install[1] с подходящими аргументами командной строки, для того чтобы выполнить всю процедуру за один шаг.
-====
+. Являются ли опции, перечисленные в стандартном _name_`_flags`, обязательными? Если да, они должны быть в `command_args`. Флаг `-d` здесь, как красный флаг (простите за каламбур), так как обычно это опция для "демонизации" процесса и, следовательно, фактически обязательна.
+. `_name__flags` никогда не должны включаться в `command_args` (и наоборот, хотя такая ошибка встречается реже).
+. Выполняет ли скрипт любой код безусловно? Это не приветствуется. Обычно такие вещи должны обрабатываться через `start_precmd`.
+. Все логические проверки должны использовать функцию `checkyesno`. Не допускаются самодельные проверки на `[Yy][Ee][Ss]` и т.п.
+. Если есть цикл (например, ожидание запуска чего-либо), есть ли в нём счётчик для завершения цикла? Мы не хотим, чтобы загрузка зависала навсегда в случае ошибки.
+. Создает ли скрипт файлы или каталоги, требующие определенных разрешений, например, [.filename]#pid#, который должен принадлежать пользователю, запускающему процесс? Вместо традиционной последовательности man:touch[1]/man:chown[8]/man:chmod[1] рассмотрите использование man:install[1] с соответствующими аргументами командной строки, чтобы выполнить всю процедуру за один шаг.
[[users-and-groups]]
== Добавление пользователей и групп
-Некоторые порты требуют в установленной системе наличие определенного пользователя. Выберите свободный UID в диапазоне от 50 до 999 и зарегистрируйте его в [.filename]#ports/UIDs# (для пользователей) и/или в [.filename]#ports/GIDs# (для групп). Удостоверьтесь, что не используете UID, уже используемый системой или другими портами.
+Некоторые порты требуют наличия определённой учётной записи пользователя, обычно для демонов, работающих от имени этого пользователя. Для таких портов выберите _уникальный_ UID в диапазоне от 50 до 999 и зарегистрируйте его в [.filename]#ports/UIDs# (для пользователей) и [.filename]#ports/GIDs# (для групп). Уникальный идентификатор должен быть одинаковым для пользователей и групп.
-Пожалуйста, включите в патч изменение для этих двух файлов, если вам требуется создать нового пользователя или группу для вашего порта.
+Пожалуйста, приложите патч для этих двух файлов, если требуется создать нового пользователя или группу для порта.
-Затем вы сможете использовать в вашем [.filename]#Makefile# переменные `USERS` и `GROUPS`, и пользователь автоматически создастся при установке порта.
+Затем используйте `USERS` и `GROUPS` в [.filename]#Makefile#, и пользователь будет автоматически создан при установке порта.
[.programlisting]
....
@@ -2520,16 +4654,58 @@ USERS= pulse
GROUPS= pulse pulse-access pulse-rt
....
-Текущий перечень зарезервированных UID и GID находится в [.filename]#ports/UIDs# и [.filename]#ports/GIDs#.
+Текущий список зарезервированных UID и GID можно найти в [.filename]#ports/UIDs# и [.filename]#ports/GIDs#.
[[requiring-kernel-sources]]
-== Порты, требующие наличия исходных текстов ядра
+== Порты, зависящие от исходных кодов ядра
-Некоторым портам (таким как загружаемые модули ядра) для компиляции нужны файлы с исходными текстами ядра. Ниже указан корректный способ определения, установлены ли они пользователем:
+Некоторые порты (например, загружаемые модули ядра) требуют исходные файлы ядра для компиляции порта. Вот правильный способ проверить, установлены ли они у пользователя:
[.programlisting]
....
USES= kmod
....
-Кроме этой проверки, `kmod` заботится о большинстве пунктов, которые должны учитываться в этих портах.
+Помимо этой проверки, функция `kmod` учитывает большинство аспектов, которые необходимо принимать во внимание данным портам.
+
+[[go-libs]]
+== Библиотеки Go
+
+Порты не должны упаковывать или устанавливать библиотеки или исходный код Go. Порты Go должны загружать необходимые зависимости в обычное время загрузки и должны устанавливать только программы и то, что нужно пользователям, а не то, что нужно разработчикам на Go.
+
+Порты должны (в порядке предпочтения):
+
+* Использовать зависимости, включенные в исходный код пакета.
+* Получить версии зависимостей, указанные вышестоящим проектом (в случае go.mod, vendor.json или аналогичных).
+* В крайнем случае (зависимости не включены и версии не указаны точно) получить версии зависимостей, доступные на момент разработки/выпуска вышестоящего проекта.
+
+[[haskell-libs]]
+== Библиотеки Haskell
+
+Как и в случае с языком Go, коллекция портов не должна включать или устанавливать библиотеки Haskell. Порты Haskell должны статически линковаться со своими зависимостями и загружать все распространяемые файлы на этапе fetch.
+
+[[shell-completion]]
+== Файлы завершения командной оболочки
+
+Многие современные оболочки (включая bash, fish, tcsh и zsh) поддерживают табуляцию для параметров и/или опций. Эта поддержка обычно обеспечивается файлами завершения, которые содержат определения того, как будет работать завершение по табуляции для определённой команды. Порты иногда поставляются со своими собственными файлами завершения, или разработчики портов могут создавать их самостоятельно.
+
+Если доступны файлы завершения, их всегда следует устанавливать. Нет необходимости создавать для этого опцию. Однако если опция используется, всегда включайте её в `OPTIONS_DEFAULT`.
+
+[[shell-completion-paths]]
+.Полные имена файлов завершения оболочки
+[cols="1,1,1", frame="none"]
+|===
+|`bash`
+|[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#
+|(любые уникальные имена файлов в одной из этих папок)
+
+|`fish`
+|[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#
+|
+
+|`zsh`
+|[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#
+|
+|===
+
+Не регистрируйте зависимости от самих оболочек.
diff --git a/documentation/content/ru/books/porters-handbook/special/_index.po b/documentation/content/ru/books/porters-handbook/special/_index.po
new file mode 100644
index 0000000000..ca4f4e8072
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/special/_index.po
@@ -0,0 +1,14978 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookspecial_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Special considerations when creating a new FreeBSD Port"
+msgstr "Особые соображения при создании нового порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Special Considerations"
+msgstr "Глава 6. Особые соглашения"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:14
+#, no-wrap
+msgid "Special Considerations"
+msgstr "Особые соглашения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:52
+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:54
+#, no-wrap
+msgid "Splitting long files"
+msgstr "Разделение длинных файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:61
+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 ""
+"Иногда [.filename]#Makefiles# могут быть очень длинными. Например, порты "
+"rust могут содержать очень длинный список `CARGO_CRATES`. В других случаях "
+"[.filename]#Makefile# может содержать код, который варьируется в зависимости "
+"от архитектуры. В таких ситуациях может быть удобно разделить исходный "
+"[.filename]#Makefile# на несколько файлов. [.filename]#bsd.port.mk# "
+"автоматически включает некоторые типы [.filename]#Makefiles# в основной "
+"[.filename]#Makefile# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:63
+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:65
+msgid ""
+"[.filename]#Makefile.crates#. An example can be found in package:audio/"
+"ebur128[]."
+msgstr ""
+"[.filename]#Makefile.crates#. Пример можно найти в пакете package:audio/"
+"ebur128[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:66
+msgid ""
+"[.filename]#Makefile.inc#. An example can be found in package:net/ntp[]."
+msgstr ""
+"[.filename]#Makefile.inc#. Пример можно найти в пакете package:net/ntp[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:67
+msgid "[.filename]#Makefile.${ARCH}-${OPSYS}#"
+msgstr "[.filename]#Makefile.${ARCH}-${OPSYS}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:68
+msgid ""
+"[.filename]#Makefile.${OPSYS}#. An example can be found in package:net/cvsup-"
+"static[]."
+msgstr ""
+"[.filename]#Makefile.${OPSYS}#. Пример можно найти в пакете package:net/"
+"cvsup-static[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:69
+msgid "[.filename]#Makefile.${ARCH}#"
+msgstr "[.filename]#Makefile.${ARCH}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:70
+msgid "[.filename]#Makefile.local#"
+msgstr "[.filename]#Makefile.local#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:76
+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 ""
+"Также распространённой практикой является разделение списка пакетов порта на "
+"несколько файлов, если список сильно различается в зависимости от "
+"архитектуры или выбранного флейвора. В этом случае файл [.filename]#pkg-"
+"plist# для каждой архитектуры именуется по шаблону [.filename]#pkg-plist.$"
+"{ARCH}# или [.filename]#pkg-plist.${FLAVOR}#. Фреймворк не создаёт список "
+"пакетов автоматически, если существует несколько файлов [.filename]#pkg-"
+"plist#. Ответственность за выбор подходящего файла [.filename]#pkg-plist# и "
+"его присвоение переменной `PLIST` лежит на того, кто делает порт. Примеры "
+"работы с этим можно найти в портах package:audio/logitechmediaserver[] и "
+"package:deskutils/libportal[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:78
+#, no-wrap
+msgid "Staging"
+msgstr "Staging"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:85
+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 ""
+"[.filename]#bsd.port.mk# ожидает, что порты будут работать с \"директорией "
+"стадии\". Это означает, что порт не должен устанавливать файлы напрямую в "
+"обычные целевые директории (например, под `PREFIX`), а вместо этого в "
+"отдельную директорию, из которой затем собирается пакет. Во многих случаях "
+"это не требует прав root, что позволяет собирать пакеты от имени "
+"непривилегированного пользователя. При использовании стадии порт собирается "
+"и устанавливается в директорию стадии `STAGEDIR`. Пакет создаётся из "
+"директории стадии и затем устанавливается в систему. Инструменты Automake "
+"называют эту концепцию `DESTDIR`, но в FreeBSD `DESTDIR` имеет другое "
+"значение (см. crossref:testing[porting-prefix,`PREFIX` и `DESTDIR`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:92
+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 ""
+"Ни один порт _на самом деле_ не должен работать от root. Этого в большинстве "
+"случаев можно избежать, используя crossref:uses[uses-uidfix,`USES=uidfix`]. "
+"Если порт всё ещё выполняет команды, такие как man:chown[8], man:chgrp[1], "
+"или принудительно устанавливает владельца или группу с помощью "
+"man:install[1], то используйте crossref:uses[uses-fakeroot,`USES=fakeroot`], "
+"чтобы подделать эти вызовы. Потребуется некоторая правка "
+"[.filename]#Makefiles# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:97
+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 ""
+"Метапорты, то есть порты, которые не устанавливают файлы непосредственно, а "
+"только зависят от других портов, должны по возможности избегать распаковки "
+"man:mtree[8] в каталог сборки. Это основная иерархия каталогов пакета, и эти "
+"пустые каталоги будут выглядеть лишними. Для предотвращения распаковки "
+"man:mtree[8] добавьте эту строку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:101
+#, no-wrap
+msgid "NO_MTREE=\tyes\n"
+msgstr "NO_MTREE=\tyes\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:107
+msgid ""
+"Metaports should use crossref:special[uses-metaport,`USES=metaport`]. It "
+"sets up defaults for ports that do not fetch, build, or install anything."
+msgstr ""
+"Метапорты должны использовать crossref:special[uses-"
+"metaport,`USES=metaport`]. Это устанавливает значения по умолчанию для "
+"портов, которые не загружают, не собирают и не устанавливают ничего."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:113
+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`, `DOCSDIR`, and so on. Directories should be created as part "
+"of the `post-install` target. Avoid using absolute paths whenever possible."
+msgstr ""
+"Этап подготовки включается путем добавления `STAGEDIR` к путям, используемым "
+"в целях `pre-install`, `do-install` и `post-install` (см. примеры в книге). "
+"Обычно это включает `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `DOCSDIR` "
+"и т. д. Каталоги должны создаваться как часть цели `post-install`. По "
+"возможности избегайте использования абсолютных путей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:117
+msgid ""
+"Ports that install kernel modules must prepend `STAGEDIR` to their "
+"destination, by default [.filename]#/boot/modules#."
+msgstr ""
+"Порты, которые устанавливают модули ядра, должны добавлять `STAGEDIR` к пути "
+"назначения, по умолчанию это [.filename]#/boot/modules#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:120
+#, no-wrap
+msgid "Handling Symbolic Links"
+msgstr "Обработка символических ссылок"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:125
+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 ""
+"При создании символической ссылки настоятельно рекомендуется использовать "
+"относительные пути. Используйте `${RLN}` для создания относительных "
+"символических ссылок. Эта команда использует man:install[1] для "
+"автоматического определения относительной ссылки, которую нужно создать."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:127
+#, no-wrap
+msgid "Create Relative Symbolic Links Automatically"
+msgstr "Автоматическое создание относительных символических ссылок"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:131
+msgid ""
+"`${RLN}` uses man:install[1]'s relative symbolic feature which frees the "
+"porter of computing the relative path."
+msgstr ""
+"`${RLN}` использует относительную символическую ссылку из man:install[1], "
+"что освобождает сборщика порта от вычисления относительного пути."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:137
+#, 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 ""
+"${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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:140
+msgid "Will generate:"
+msgstr "Будет создано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:150
+#, 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 ""
+"% 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"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:155
+#, no-wrap
+msgid "Bundled Libraries"
+msgstr "Встроенные библиотеки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:158
+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:160
+#, no-wrap
+msgid "Why Bundled Libraries Are Bad"
+msgstr "Почему встроенные библиотеки — это плохо"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:165
+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:167
+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 ""
+"Этот список частично основан на вики https://fedoraproject.org/wiki/"
+"Packaging:No_Bundled_Libraries[Fedora] и https://wiki.gentoo.org/wiki/"
+"Why_not_bundle_dependencies[Gentoo], оба распространяются по лицензии "
+"https://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:168
+#, no-wrap
+msgid "Security"
+msgstr "Безопасность"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:174
+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:175
+#, no-wrap
+msgid "Bugs"
+msgstr "Ошибки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:177
+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:178
+#, no-wrap
+msgid "Forking"
+msgstr "Ветвление"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:182
+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 ""
+"Автору проще создать форк upstream-библиотеки после её включения в "
+"дистрибутив. Хотя на первый взгляд это кажется удобным, такой подход "
+"приводит к расхождению кода с исходным репозиторием, что усложняет "
+"исправление уязвимостей и других проблем в ПО. Одна из причин — затруднённое "
+"применение патчей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:185
+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:186
+#, no-wrap
+msgid "Symbol collision"
+msgstr "Конфликты символов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:191
+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:192
+#, no-wrap
+msgid "Licensing"
+msgstr "Лицензирование"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:194
+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:195
+#, no-wrap
+msgid "Waste of resources"
+msgstr "Растрата ресурсов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:199
+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:200
+#, no-wrap
+msgid "Waste of effort"
+msgstr "Пустая трата усилий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:204
+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 ""
+"Когда библиотеке требуются патчи для FreeBSD, эти патчи приходится "
+"дублировать в составе библиотеки. Это приводит к потере времени "
+"разработчиков, поскольку патчи могут применяться некорректно. Кроме того, "
+"бывает сложно сразу заметить, что эти патчи вообще необходимы."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:206
+#, no-wrap
+msgid "What to do About Bundled Libraries"
+msgstr "Что делать со встроенными библиотеками"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:210
+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 ""
+"По возможности используйте независимую версию библиотеки, добавив "
+"`LIB_DEPENDS` в порт. Если такого порта ещё не существует, рассмотрите "
+"возможность его создания."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:212
+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:220
+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 ""
+"В некоторых особых случаях, например, для эмуляторов, таких как Wine, порт "
+"должен включать библиотеки, потому что они предназначены для другой "
+"архитектуры или были изменены для использования в данном программном "
+"обеспечении. В таком случае эти библиотеки не должны быть доступны для "
+"связывания с другими портами. Добавьте `BUNDLE_LIBS=yes` в "
+"[.filename]#Makefile# порта. Это укажет man:pkg[8] не учитывать "
+"предоставляемые библиотеки. Всегда спрашивайте {portmgr}, прежде чем "
+"добавлять это в порт."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:223
+#, no-wrap
+msgid "Shared Libraries"
+msgstr "Динамические библиотеки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:227
+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 ""
+"Если ваш порт устанавливает одну или несколько динамических библиотек, "
+"определите переменную `USE_LDCONFIG`, которая приведёт к запуску из "
+"[.filename]#bsd.port.mk# команды `${LDCONFIG} -m` относительно каталога, в "
+"который устанавливается новая библиотека (как правило, это "
+"[.filename]#PREFIX/lib#), во время выполнения цели `post-install` для её "
+"регистрации в кэше динамических библиотек. Эта переменная, если она "
+"определена, также приведёт к добавлению соответствующей пары команд `@exec /"
+"sbin/ldconfig -m` и `@unexec /sbin/ldconfig -R` в ваш файл [.filename]#pkg-"
+"plist#, так что пользователь, устанавливающий пакет, сможет сразу же "
+"использовать динамическую библиотеку, а удаление пакета не приведёт к тому, "
+"что система будет предполагать, что библиотека всё ещё имеется в наличии."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:231
+#, no-wrap
+msgid "USE_LDCONFIG=\tyes\n"
+msgstr "USE_LDCONFIG=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:235
+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 ""
+"Если нужно, вы можете переопределить каталог по умолчанию, задав значение "
+"`USE_LDCONFIG`, в котором должны быть перечислены каталоги, в которые "
+"устанавливаются динамические библиотеки. Например, если ваш порт "
+"устанавливает динамические библиотеки в каталоги [.filename]#PREFIX/lib/foo# "
+"и [.filename]#PREFIX/lib/bar#, то вы можете в файле [.filename]#Makefile# "
+"указать следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:239
+#, no-wrap
+msgid "USE_LDCONFIG=\t${PREFIX}/lib/foo ${PREFIX}/lib/bar\n"
+msgstr "USE_LDCONFIG=\t${PREFIX}/lib/foo ${PREFIX}/lib/bar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:242
+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 ""
+"Будьте добры перепроверить, т.к. часто это вовсе не является необходимым и "
+"может быть решено иначе с помощью `-rpath` или установки `LD_RUN_PATH` во "
+"время компоновки (для примера смотрите package:lang/moscow_ml[]), или с "
+"помощью сценария-обёртки, который выставляет `LD_LIBRARY_PATH` перед "
+"запуском исполняемого файла как это делает package:www/seamonkey[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:244
+msgid ""
+"When installing 32-bit libraries on a 64-bit system, use `USE_LDCONFIG32` "
+"instead."
+msgstr ""
+"При установке 32-разрядных библиотек на 64-разрядной системе используйте "
+"вместо этого `USE_LDCONFIG32`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:246
+msgid ""
+"If the software uses crossref:special[using-autotools,autotools], and "
+"specifically `libtool`, add crossref:uses[uses-libtool,`USES=libtool`]."
+msgstr ""
+"Если программное обеспечение использует crossref:special[using-"
+"autotools,autotools], в частности `libtool`, добавьте crossref:uses[uses-"
+"libtool,`USES=libtool`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:248
+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 ""
+"Если при обновлении порта увеличивается старший номер версии библиотеки, то "
+"для всех портов, компонуемых с затронутой библиотекой, следует увеличить "
+"значение `PORTREVISION` для форсирования перекомпиляции с новой версией "
+"библиотеки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:250
+#, no-wrap
+msgid "Ports with Distribution Restrictions or Legal Concerns"
+msgstr "Порты с ограничениями на распространение или с правовым обременением"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:253
+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:258
+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 ""
+"На вас, как на человека, портирующего приложение, ложится обязанность "
+"прочесть лицензионные соглашения на программное обеспечение и "
+"удостовериться, что проект FreeBSD не будет являться их нарушителем, если "
+"будет заниматься распространением исходного кода или в бинарном виде по FTP/"
+"HTTP или на CD-ROM. Если у вас возникли сомнения, то, пожалуйста, обратитесь "
+"в {freebsd-ports}."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:261
+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:263
+#, no-wrap
+msgid "`NO_PACKAGE`"
+msgstr "`NO_PACKAGE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:267
+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:270
+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 ""
+"Однако файлы `DISTFILES` могут свободно зеркалироваться по FTP/HTTP. Они "
+"также могут распространяться, используя CD-ROM (или на похожих носителях), "
+"если не установлена переменная `NO_CDROM`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:273
+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 ""
+"`NO_PACKAGE` должна также использоваться, если двоичный пакет, как правило, "
+"бесполезен, а приложение должно всегда компилироваться из исходного кода. К "
+"примеру, если в приложение во время компиляции жёстко включается "
+"конфигурационная информация, привязанная к конкретной системе, то задайте "
+"переменную `NO_PACKAGE`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:275
+msgid ""
+"Set `NO_PACKAGE` to a string describing the reason why the package cannot be "
+"generated."
+msgstr ""
+"Значением переменной `NO_PACKAGE` должна быть строка, описывающая причину, "
+"по которой пакет не должен создаваться."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:277
+#, no-wrap
+msgid "`NO_CDROM`"
+msgstr "`NO_CDROM`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:281
+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 ""
+"Эта переменная указывает на то, что, хотя мы имеем право создавать бинарные "
+"пакеты, мы не можем помещать эти пакеты или файлы `DISTFILES` порта на CD-"
+"ROM (или на похожие носители) для перепродажи. Однако бинарные пакеты и "
+"файлы `DISTFILES` порта будут оставаться доступными посредством FTP/HTTP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:283
+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 ""
+"Если эта переменная устанавливается вместе с `NO_PACKAGE`, то только файлы "
+"порта `DISTFILES` будут доступны, и только посредством FTP/HTTP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:286
+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 ""
+"В качестве значения `NO_CDROM` должна указываться строка, описывающая "
+"причины, по которым порт не может распространяться на CD-ROM. К примеру, это "
+"применяется, если лицензионное соглашение приложения предполагает только его "
+"\"некоммерческое\" использование."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:288
+#, no-wrap
+msgid "`NOFETCHFILES`"
+msgstr "`NOFETCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:292
+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 ""
+"Файлы, определенные в переменной `NOFETCHFILES`, не будут извлекаться ни из "
+"одного из `MASTER_SITES`. Примером такого файла является файл, поставляемый "
+"на CD-ROM."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:294
+msgid ""
+"Tools which check for the availability of these files on `MASTER_SITES` have "
+"to ignore these files and not report about them."
+msgstr ""
+"Инструменты, проверяющие доступность этих файлов на `MASTER_SITES`, должны "
+"игнорировать эти файлы и не сообщать о них."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:296
+#, no-wrap
+msgid "`RESTRICTED`"
+msgstr "`RESTRICTED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:299
+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 ""
+"Задайте эту переменную, если лицензия на приложение не позволяет ни "
+"зеркалировать файлы `DISTFILES`, ни распространять бинарный пакет через FTP/"
+"HTTP или на CD-ROM."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:301
+msgid ""
+"Do not set `NO_CDROM` or `NO_PACKAGE` along with `RESTRICTED`, since the "
+"latter variable implies the former ones."
+msgstr ""
+"Ни `NO_CDROM`, ни `NO_PACKAGE` не стоит устанавливать вместе с `RESTRICTED`, "
+"так как последняя переменная подразумевает первые две."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:305
+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 ""
+"В качестве значения `RESTRICTED` должна указываться строка, описывающая "
+"причины, по которым порт нельзя распространять. Обычно это означает, что "
+"порт использует закрытое программное обеспечение, а пользователь должен "
+"вручную сгрузить файлы `DISTFILES`, возможно, после заполнения "
+"регистрационной формы или подтверждения соглашения с условиями EULA."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:307
+#, no-wrap
+msgid "`RESTRICTED_FILES`"
+msgstr "`RESTRICTED_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:311
+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 ""
+"Если заданы `RESTRICTED` или `NO_CDROM`, то значение этой переменной по "
+"умолчанию соответствует `${DISTFILES} ${PATCHFILES}`, в противном случае она "
+"пуста. Если ограничены в распространении лишь некоторые из дистрибутивных "
+"файлов, то в этой переменной задаётся их список."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:313
+#, no-wrap
+msgid "`LEGAL_TEXT`"
+msgstr "`LEGAL_TEXT`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:317
+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 ""
+"Если порт имеет правовое обременение, которое не покрывается перечисленными "
+"выше переменными, то переменной `LEGAL_TEXT` следует присвоить строку с "
+"описанием данного обременения. Например, если было получено особое "
+"разрешение для FreeBSD на распространение двоичного файла, то эта переменная "
+"должна содержать соответствующее указание."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:319
+#, no-wrap
+msgid "[.filename]#/usr/ports/LEGAL# and `LEGAL`"
+msgstr "[.filename]#/usr/ports/LEGAL# и `LEGAL`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:325
+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 ""
+"Порт, содержащий любую из перечисленных выше переменных, также должен быть "
+"добавлен в [.filename]#/usr/ports/LEGAL#. Первый столбец содержит шаблон "
+"совпадения с дистрибутивными файлами, имеющими ограничения на "
+"распространение. Второй столбец содержит корень порта. Третий столбец "
+"содержит вывод `make -VLEGAL`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:327
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4228
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4488
+#, no-wrap
+msgid "Examples"
+msgstr "Примеры"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:330
+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:336
+#, 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 ""
+".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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:339
+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:341
+msgid ""
+"Note that this stanza must be preceded by an inclusion of "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Обратите внимание, что данная кляуза должна предшествовать подключению файла "
+"[.filename]#bsd.port.pre.mk#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:343
+#, no-wrap
+msgid "Building Mechanisms"
+msgstr "Механизмы построения"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:346
+#, no-wrap
+msgid "Building Ports in Parallel"
+msgstr "Параллельное построение портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:350
+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 ""
+"Инфраструктура портов FreeBSD поддерживает параллельное построение с "
+"использованием множественных подпроцессов `make`, что позволяет системам SMP "
+"задействовать всю доступную мощность CPU, тем самым делая построение портов "
+"более быстрым и эффективным."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:355
+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 ""
+"Это достигается путём передачи флага `-jX` команде man:make[1]. Такое "
+"построение портов является поведением по умолчанию. К сожалению, не все "
+"порты поддерживают параллельную сборку достаточно хорошо, и поэтому может "
+"потребоваться выключить этот механизм явным образом путём добавления "
+"переменной `MAKE_JOBS_UNSAFE=yes`. Эта переменная используется в случае, "
+"когда известно, что порт ломается с `-jX`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:360
+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 ""
+"При установке `MAKE_JOBS_UNSAFE` очень важно объяснить либо комментарием в "
+"[.filename]#Makefile#, либо хотя бы в сообщении коммита, _почему_ порт не "
+"собирается при включении. В противном случае практически невозможно ни "
+"исправить проблему, ни проверить, была ли она исправлена при коммите "
+"обновления в дальнейшем."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:363
+#, no-wrap
+msgid "`make`, `gmake`, and `imake`"
+msgstr "`make`, `gmake` и `imake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:366
+msgid ""
+"Several differing `make` implementations exist. Ported software often "
+"requires a particular implementation, like GNU `make`, known in FreeBSD as "
+"`gmake`."
+msgstr ""
+"Существует несколько различных реализаций `make`. Переносимому программному "
+"обеспечению часто требуется конкретная реализация, например GNU `make`, "
+"известная в FreeBSD как `gmake`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:368
+msgid "If the port uses GNU make, add `gmake` to `USES`."
+msgstr "Если порт использует GNU make, добавьте `gmake` в `USES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:371
+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 ""
+"`MAKE_CMD` может использоваться для ссылки на конкретную команду, "
+"настроенную параметром `USES` в [.filename]#Makefile# порта. Используйте "
+"`MAKE_CMD` только внутри [.filename]##Makefile## приложения в `WRKSRC` для "
+"вызова реализации `make`, ожидаемой портируемым программным обеспечением."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:374
+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 ""
+"Если ваш порт является приложением X, которое создает файлы "
+"[.filename]#Makefile# из [.filename]#Imakefile#, используя imake, то "
+"установите `USES= imake`. Это заставит стадию конфигурирования автоматически "
+"выполнить `xmkmf -a`. Если флаг `-a` представляет для вашего порта проблему, "
+"то установите `XMKMF=xmkmf`. Если порт использует imake, но не понимает цель "
+"`install.man`, то следует установить `NO_INSTALL_MANPAGES=yes`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:377
+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 ""
+"Если исходный [.filename]#Makefile# вашего порта имеет что-нибудь помимо "
+"`all` в качестве основной цели построения, то задайте соответствующее "
+"значение `ALL_TARGET`. То же касается `install` и `INSTALL_TARGET`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:379
+#, no-wrap
+msgid "`configure` Script"
+msgstr "Сценарий `configure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:384
+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=${PREFIX}/man --build=$"
+"{CONFIGURE_TARGET}`), set those extra arguments in `CONFIGURE_ARGS`. Extra "
+"environment variables can be passed using `CONFIGURE_ENV`."
+msgstr ""
+"Если ваш порт использует сценарий `configure` для получения файлов "
+"[.filename]#Makefile# из файлов [.filename]#Makefile.in#, то установите "
+"`GNU_CONFIGURE=yes`. Если вы хотите дать дополнительные параметры сценарию "
+"`configure` (аргументом по умолчанию является `--prefix=${PREFIX} --infodir=$"
+"{PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}"
+"`), установите эти параметры в `CONFIGURE_ARGS`. Дополнительные переменные "
+"окружения можно передать, используя переменную `CONFIGURE_ENV`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:386
+#, no-wrap
+msgid "Variables for Ports That Use `configure`"
+msgstr "Переменные для портов, использующих `configure`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:390
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:418
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:446
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:812
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2449
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2469
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3173
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3205
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3790
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:392
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:420
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:448
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1325
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3175
+#, no-wrap
+msgid "Means"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:393
+#, no-wrap
+msgid "`GNU_CONFIGURE`"
+msgstr "`GNU_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:395
+#, no-wrap
+msgid "The port uses `configure` script to prepare build."
+msgstr "Порт использует сценарий `configure` для подготовки построения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:396
+#, no-wrap
+msgid "`HAS_CONFIGURE`"
+msgstr "`HAS_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:398
+#, no-wrap
+msgid "Same as `GNU_CONFIGURE`, except default configure target is not added to `CONFIGURE_ARGS`."
+msgstr "То же, что и `GNU_CONFIGURE`, кроме того, что цель configure по умолчанию не добавляется в `CONFIGURE_ARGS`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:399
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr "`CONFIGURE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:401
+#, no-wrap
+msgid "Additional arguments passed to `configure` script."
+msgstr "Дополнительные параметры, передаваемые сценарию `configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:402
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:438
+#, no-wrap
+msgid "`CONFIGURE_ENV`"
+msgstr "`CONFIGURE_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:404
+#, no-wrap
+msgid "Additional environment variables to be set for `configure` script run."
+msgstr "Дополнительные переменные окружения, задаваемые для запуска сценария `configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:405
+#, no-wrap
+msgid "`CONFIGURE_TARGET`"
+msgstr "`CONFIGURE_TARGET`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:406
+#, no-wrap
+msgid "Override default configure target. Default value is `${MACHINE_ARCH}-portbld-freebsd${OSREL}`."
+msgstr "Переопределить цель configure по умолчанию. Значением по умолчанию является `${MACHINE_ARCH}-portbld-freebsd${OSREL}`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:409
+#, no-wrap
+msgid "Using `cmake`"
+msgstr "Использование `cmake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:412
+msgid "For ports that use CMake, define `USES= cmake`."
+msgstr "Если порт использует CMake, определите `USES= cmake`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:414
+#, no-wrap
+msgid "Variables for Ports That Use `cmake`"
+msgstr "Переменные для портов, использующих `cmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:421
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr "`CMAKE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:423
+#, no-wrap
+msgid "Port specific CMake flags to be passed to the `cmake` binary."
+msgstr "Специфичные для порта флаги CMake, передаваемые в бинарный файл `cmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:424
+#, no-wrap
+msgid "`CMAKE_ON`"
+msgstr "`CMAKE_ON`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:427
+#, no-wrap
+msgid ""
+"For each entry in `CMAKE_ON`, an enabled boolean value is added to\n"
+"`CMAKE_ARGS`. See crossref:special[using-cmake-example2,`CMAKE_ON` and `CMAKE_OFF`]."
+msgstr ""
+"Для каждой записи в `CMAKE_ON` добавляется булево значение \"включено\" в\n"
+"`CMAKE_ARGS`. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:428
+#, no-wrap
+msgid "`CMAKE_OFF`"
+msgstr "`CMAKE_OFF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:431
+#, no-wrap
+msgid ""
+"For each entry in `CMAKE_OFF`, a disabled boolean value is added to\n"
+"`CMAKE_ARGS`. See crossref:special[using-cmake-example2,`CMAKE_ON` and `CMAKE_OFF`]."
+msgstr ""
+"Для каждой записи в `CMAKE_OFF` в `CMAKE_ARGS` добавляется отключенное булево\n"
+"значение. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:432
+#, no-wrap
+msgid "`CMAKE_BUILD_TYPE`"
+msgstr "`CMAKE_BUILD_TYPE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:434
+#, no-wrap
+msgid "Type of build (CMake predefined build profiles). Default is `Release`, or `Debug` if `WITH_DEBUG` is set."
+msgstr "Тип сборки (предопределённые профили сборки CMake). По умолчанию `Release`, или `Debug`, если установлен `WITH_DEBUG`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:435
+#, no-wrap
+msgid "`CMAKE_SOURCE_PATH`"
+msgstr "`CMAKE_SOURCE_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:437
+#, no-wrap
+msgid "Path to the source directory. Default is `${WRKSRC}`."
+msgstr "Путь к исходному каталогу. По умолчанию `${WRKSRC}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:439
+#, no-wrap
+msgid "Additional environment variables to be set for the `cmake` binary."
+msgstr "Дополнительные переменные окружения, которые должны быть установлены для бинарного файла `cmake`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:442
+#, no-wrap
+msgid "Variables the Users Can Define for `cmake` Builds"
+msgstr "Переменные, которые пользователи могут определить для сборок `cmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:449
+#, no-wrap
+msgid "`CMAKE_NOCOLOR`"
+msgstr "`CMAKE_NOCOLOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:450
+#, no-wrap
+msgid "Disables color build output. Default not set, unless `BATCH` or `PACKAGE_BUILDING` are set."
+msgstr "Запрещает цветной вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:457
+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 ""
+"CMake поддерживает следующие профили построения: `Debug`, `Release`, "
+"`RelWithDebInfo` и `MinSizeRel`. Профили `Debug` и `Release` учитывают "
+"системные флаги `\\*FLAGS`; `RelWithDebInfo` и `MinSizeRel` соответственно "
+"определяют `CFLAGS` со значением `-O2 -g` и `-Os -DNDEBUG`. Значение "
+"`CMAKE_BUILD_TYPE` экспортируется в нижнем регистре в `PLIST_SUB` и должно "
+"использоваться, если порт устанавливает файлы `*.cmake` в зависимости от "
+"типа построения (для примера посмотрите на package:deskutils/strigi[]). "
+"Следует учитывать, что некоторые проекты могут определять собственные "
+"профили построения и/или форсировать конкретный тип построения через "
+"установку `CMAKE_BUILD_TYPE` в файлах [.filename]#CMakeLists.txt#. Для того "
+"чтобы порт для такого проекта учитывал `CFLAGS` и `WITH_DEBUG`, из этих "
+"файлов должны быть удалены значения `CMAKE_BUILD_TYPE`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:462
+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 ""
+"Большинство проектов, основанных на CMake, поддерживают метод внешнего (out-"
+"of-source) построения. Для порта внешнее построение можно запросить с "
+"использованием суффикса `:outsource`. В этом случае `CONFIGURE_WRKSRC`, "
+"`BUILD_WRKSRC` и `INSTALL_WRKSRC` будут иметь значение `${WRKDIR}/.build` "
+"для каталога, содержащего файлы, получаемые на этапах конфигурации и "
+"построения; при этом каталог с исходным кодом будет оставаться без изменений."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:464
+#, no-wrap
+msgid "`USES= cmake` Example"
+msgstr "Пример для `USES= cmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:469
+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 ""
+"Следующий отрывок демонстрирует использование CMake для порта. "
+"`CMAKE_SOURCE_PATH` обычно не требуется, но может быть установлен, когда "
+"исходный код не находится в верхнем каталоге или если порт используется для "
+"построения части проекта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:474
+#, no-wrap
+msgid ""
+"USES=\t\t\tcmake\n"
+"CMAKE_SOURCE_PATH=\t${WRKSRC}/subproject\n"
+msgstr ""
+"USES=\t\t\tcmake\n"
+"CMAKE_SOURCE_PATH=\t${WRKSRC}/subproject\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:479
+#, no-wrap
+msgid "`CMAKE_ON` and `CMAKE_OFF`"
+msgstr "`CMAKE_ON` и `CMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:483
+msgid ""
+"When adding boolean values to `CMAKE_ARGS`, it is easier to use the "
+"`CMAKE_ON` and `CMAKE_OFF` variables instead. This:"
+msgstr ""
+"При добавлении логических значений в `CMAKE_ARGS` проще использовать "
+"переменные `CMAKE_ON` и `CMAKE_OFF` вместо этого. Это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:488
+#, no-wrap
+msgid ""
+"CMAKE_ON=\tVAR1 VAR2\n"
+"CMAKE_OFF=\tVAR3\n"
+msgstr ""
+"CMAKE_ON=\tVAR1 VAR2\n"
+"CMAKE_OFF=\tVAR3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:491
+msgid "Is equivalent to:"
+msgstr "Эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:495
+#, no-wrap
+msgid "CMAKE_ARGS=\t-DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE\n"
+msgstr "CMAKE_ARGS=\t-DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:501
+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 ""
+"Это относится только к значениям по умолчанию в `CMAKE_ARGS`. "
+"Вспомогательные функции, описанные в crossref:makefiles[options-"
+"cmake_bool,`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`], используют ту же "
+"семантику, но для опциональных значений."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:506
+#, no-wrap
+msgid "Using `scons`"
+msgstr "Использование `scons`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:509
+msgid "If the port uses SCons, define `USES=scons`."
+msgstr "Если порт использует SCons, определите `USES=scons`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:511
+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 ""
+"Чтобы сторонний [.filename]#SConstruct# учитывал все, что передается в SCons "
+"через окружение (то есть, что наиболее важно, `CC/CXX/CFLAGS/CXXFLAGS`), "
+"исправьте [.filename]#SConstruct#, чтобы сборка `Environment` создавалась "
+"следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:515
+#, no-wrap
+msgid "env = Environment(**ARGUMENTS)\n"
+msgstr "env = Environment(**ARGUMENTS)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:518
+msgid "It may be then modified with `env.Append` and `env.Replace`."
+msgstr "Он может быть изменён с помощью `env.Append` и `env.Replace`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:520
+#, no-wrap
+msgid "Building Rust Applications with `cargo`"
+msgstr "Сборка приложений на Rust с помощью `cargo`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:523
+msgid "For ports that use Cargo, define `USES=cargo`."
+msgstr "Для портов, использующих Cargo, определите `USES=cargo`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:525
+#, no-wrap
+msgid "Variables the Users Can Define for `cargo` Builds"
+msgstr "Переменные, которые пользователи могут определить для сборок `cargo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:530
+#, no-wrap
+msgid "Default"
+msgstr "По умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:532
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:814
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1733
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1901
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1919
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2087
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2153
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2397
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2414
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2451
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2471
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2547
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3127
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3791
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3825
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3868
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3894
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3998
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4168
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4220
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4312
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4404
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4466
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4726
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:533
+#, no-wrap
+msgid "`CARGO_CRATES`"
+msgstr "`CARGO_CRATES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:539
+#, 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 ""
+"Список ящиков (crates), от которых зависит порт. Каждая запись должна быть в формате `имя_ящика-семвер`, например, `libc-0.2.40`. Поддерживающие порт могут сгенерировать этот список из файла [.filename]#Cargo.lock# с помощью команды `make cargo-crates`. Вручную обновлять версии ящиков возможно, но следует учитывать транзитивные зависимости.\n"
+"Если список, сгенерированный `make cargo-crates`, слишком велик, его можно разместить в файле `Makefile.crates` в корневом каталоге порта.\n"
+"Если такой файл присутствует, фреймворк портов автоматически загружает его.\n"
+"Это помогает сохранять основной Makefile порта в удобном для работы размере."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:540
+#, no-wrap
+msgid "`CARGO_FEATURES`"
+msgstr "`CARGO_FEATURES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:543
+#, 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 "Список функций приложения для сборки (список через пробел). Чтобы отключить все функции по умолчанию, добавьте специальный токен `--no-default-features` в `CARGO_FEATURES`. Вручную передавать его в `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS` и `CARGO_TEST_ARGS` не требуется."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:544
+#, no-wrap
+msgid "`CARGO_CARGOTOML`"
+msgstr "`CARGO_CARGOTOML`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:545
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.toml`"
+msgstr "`${WRKSRC}/Cargo.toml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:547
+#, no-wrap
+msgid "The path to the [.filename]#Cargo.toml# to use."
+msgstr "Путь к файлу [.filename]#Cargo.toml#, который следует использовать."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:548
+#, no-wrap
+msgid "`CARGO_CARGOLOCK`"
+msgstr "`CARGO_CARGOLOCK`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:549
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.lock`"
+msgstr "`${WRKSRC}/Cargo.lock`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:551
+#, 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 "Путь к файлу [.filename]#Cargo.lock#, используемому для `make cargo-crates`. Можно указать более одного файла блокировки, если это необходимо."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:552
+#, no-wrap
+msgid "`CARGO_ENV`"
+msgstr "`CARGO_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:555
+#, no-wrap
+msgid "A list of environment variables to pass to Cargo similar to `MAKE_ENV`."
+msgstr "Список переменных окружения, передаваемых в Cargo, аналогично `MAKE_ENV`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:556
+#, no-wrap
+msgid "`RUSTFLAGS`"
+msgstr "`RUSTFLAGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:559
+#, no-wrap
+msgid "Flags to pass to the Rust compiler."
+msgstr "Флаги для передачи компилятору Rust."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:560
+#, no-wrap
+msgid "`CARGO_CONFIGURE`"
+msgstr "`CARGO_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:561
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:569
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:577
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:585
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:597
+#, no-wrap
+msgid "`yes`"
+msgstr "`yes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:563
+#, no-wrap
+msgid "Use the default `do-configure`."
+msgstr "Используйте стандартный `do-configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:564
+#, no-wrap
+msgid "`CARGO_UPDATE_ARGS`"
+msgstr "`CARGO_UPDATE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:567
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the configure phase. Valid arguments can be looked up with `cargo update --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы настройки. Допустимые аргументы можно посмотреть с помощью `cargo update --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:568
+#, no-wrap
+msgid "`CARGO_BUILDDEP`"
+msgstr "`CARGO_BUILDDEP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:571
+#, no-wrap
+msgid "Add a build dependency on package:lang/rust[]."
+msgstr "Добавить зависимость сборки на package:lang/rust[]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:572
+#, no-wrap
+msgid "`CARGO_CARGO_BIN`"
+msgstr "`CARGO_CARGO_BIN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:573
+#, no-wrap
+msgid "`${LOCALBASE}/bin/cargo`"
+msgstr "`${LOCALBASE}/bin/cargo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:575
+#, no-wrap
+msgid "Location of the `cargo` binary."
+msgstr "Расположение бинарного файла `cargo`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:576
+#, no-wrap
+msgid "`CARGO_BUILD`"
+msgstr "`CARGO_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:579
+#, no-wrap
+msgid "Use the default `do-build`."
+msgstr "Используйте значение по умолчанию `do-build`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:580
+#, no-wrap
+msgid "`CARGO_BUILD_ARGS`"
+msgstr "`CARGO_BUILD_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:583
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the build phase. Valid arguments can be looked up with `cargo build --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы сборки. Допустимые аргументы можно посмотреть с помощью `cargo build --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:584
+#, no-wrap
+msgid "`CARGO_INSTALL`"
+msgstr "`CARGO_INSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:587
+#, no-wrap
+msgid "Use the default `do-install`."
+msgstr "Используйте настройку `do-install` по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:588
+#, no-wrap
+msgid "`CARGO_INSTALL_ARGS`"
+msgstr "`CARGO_INSTALL_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:591
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the install phase. Valid arguments can be looked up with `cargo install --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы установки. Допустимые аргументы можно посмотреть с помощью `cargo install --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:592
+#, no-wrap
+msgid "`CARGO_INSTALL_PATH`"
+msgstr "`CARGO_INSTALL_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:593
+#, no-wrap
+msgid "`.`"
+msgstr "`.`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:595
+#, 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 "Путь к пакету для установки. Этот аргумент передается в `cargo install` через параметр `--path`. Если указано несколько путей, `cargo install` запускается несколько раз."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:596
+#, no-wrap
+msgid "`CARGO_TEST`"
+msgstr "`CARGO_TEST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:599
+#, no-wrap
+msgid "Use the default `do-test`."
+msgstr "Используйте значение по умолчанию `do-test`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:600
+#, no-wrap
+msgid "`CARGO_TEST_ARGS`"
+msgstr "`CARGO_TEST_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:603
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the test phase. Valid arguments can be looked up with `cargo test --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время тестовой фазы. Допустимые аргументы можно посмотреть с помощью `cargo test --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:604
+#, no-wrap
+msgid "`CARGO_TARGET_DIR`"
+msgstr "`CARGO_TARGET_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:605
+#, no-wrap
+msgid "`${WRKDIR}/target`"
+msgstr "`${WRKDIR}/target`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:607
+#, no-wrap
+msgid "Location of the cargo output directory."
+msgstr "Расположение выходного каталога cargo."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:608
+#, no-wrap
+msgid "`CARGO_DIST_SUBDIR`"
+msgstr "`CARGO_DIST_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:609
+#, no-wrap
+msgid "[.filename]#rust/crates#"
+msgstr "[.filename]#rust/crates#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:611
+#, no-wrap
+msgid "Directory relative to `DISTDIR` where the crate distribution files will be stored."
+msgstr "Каталог относительно `DISTDIR`, в котором будут храниться файлы дистрибутивов пакетов (crates)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:612
+#, no-wrap
+msgid "`CARGO_VENDOR_DIR`"
+msgstr "`CARGO_VENDOR_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:613
+#, no-wrap
+msgid "`${WRKSRC}/cargo-crates`"
+msgstr "`${WRKSRC}/cargo-crates`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:615
+#, 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 "Расположение каталога сторонних поставщиков ПО, в который будут извлечены все крейты. Старайтесь держать его в пределах `PATCH_WRKSRC`, чтобы упростить применение патчей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:616
+#, no-wrap
+msgid "`CARGO_USE_GITHUB`"
+msgstr "`CARGO_USE_GITHUB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:617
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:621
+#, no-wrap
+msgid "`no`"
+msgstr "`no`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:619
+#, 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 "Включить загрузку крейтов, привязанных к определённым коммитам Git на GitHub, с помощью `GH_TUPLE`. Это попытается исправить все файлы [.filename]#Cargo.toml# в `WRKDIR`, чтобы они ссылались на автономные источники вместо загрузки из репозитория Git во время сборки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:620
+#, no-wrap
+msgid "`CARGO_USE_GITLAB`"
+msgstr "`CARGO_USE_GITLAB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:622
+#, no-wrap
+msgid "Same as `CARGO_USE_GITHUB` but for GitLab instances and `GL_TUPLE`."
+msgstr "То же, что и `CARGO_USE_GITHUB`, но для экземпляров GitLab и `GL_TUPLE`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:625
+#, no-wrap
+msgid "Creating a Port for a Simple Rust Application"
+msgstr "Создание порта для простого приложения на Rust"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:630
+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 ""
+"Создание порта на основе Cargo — это процесс из трёх этапов. Сначала "
+"необходимо предоставить шаблон портов, который загружает дистрибутивный файл "
+"приложения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:637
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:682
+#, no-wrap
+msgid ""
+"PORTNAME=\ttokei\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t7.0.2\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\ttokei\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t7.0.2\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:641
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:686
+#, no-wrap
+msgid ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tDisplay statistics about your code\n"
+"WWW=\t\thttps://github.com/XAMPPRocky/tokei/\n"
+msgstr ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tDisplay statistics about your code\n"
+"WWW=\t\thttps://github.com/XAMPPRocky/tokei/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:645
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:690
+#, no-wrap
+msgid ""
+"USES=\t\tcargo\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tAaronepower\n"
+msgstr ""
+"USES=\t\tcargo\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tAaronepower\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:647
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:700
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:867
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:890
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:948
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1019
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1106
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1122
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1136
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1253
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1274
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1647
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3475
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3535
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3651
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4252
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4276
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4514
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:650
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:893
+msgid "Generate an initial [.filename]#distinfo#:"
+msgstr "Сгенерировать первоначальный [.filename]#distinfo#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:658
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:661
+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 ""
+"Теперь файл дистрибутива готов к использованию, и мы можем продолжить, "
+"извлекая зависимости пакета из встроенного файла [.filename]#Cargo.lock#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:672
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:675
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:923
+msgid ""
+"The output of this command needs to be pasted directly into the Makefile:"
+msgstr "Вывод этой команды необходимо вставить напрямую в Makefile:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:698
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:703
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the crate "
+"distribution files:"
+msgstr ""
+"[.filename]#distinfo# необходимо перегенерировать, чтобы включить все "
+"дистрибутивные файлы крейтов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:721
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:724
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:967
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1079
+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 ""
+"Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как "
+"создание plist, написание описания, добавление информации о лицензии, опций "
+"и т.д., как обычно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:726
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:969
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1081
+msgid ""
+"If you are not testing your port in a clean environment like with poudriere, "
+"remember to run `make clean` before any testing."
+msgstr ""
+"Если вы не тестируете свой порт в чистой среде, например, с использованием "
+"poudriere, не забудьте выполнить `make clean` перед любым тестированием."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:729
+#, no-wrap
+msgid "Enabling Additional Application Features"
+msgstr "Включение дополнительных возможностей приложений"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:734
+msgid ""
+"Some applications define additional features in their "
+"[.filename]#Cargo.toml#. They can be compiled in by setting "
+"`CARGO_FEATURES` in the port."
+msgstr ""
+"Некоторые приложения определяют дополнительные возможности в своем "
+"[.filename]#Cargo.toml#. Их можно включить при компиляции, установив "
+"`CARGO_FEATURES` в порте."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:736
+msgid "Here we enable Tokei's `json` and `yaml` features:"
+msgstr "Здесь мы включаем функции `json` и `yaml` в Tokei:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:740
+#, no-wrap
+msgid "CARGO_FEATURES=\tjson yaml\n"
+msgstr "CARGO_FEATURES=\tjson yaml\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:745
+#, no-wrap
+msgid "Encoding Application Features As Port Options"
+msgstr "Кодирование характеристик приложений как параметров порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:749
+msgid ""
+"An example `[features]` section in [.filename]#Cargo.toml# could look like "
+"this:"
+msgstr ""
+"Пример раздела `[features]` в [.filename]#Cargo.toml# может выглядеть так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:756
+#, no-wrap
+msgid ""
+"[features]\n"
+"pulseaudio_backend = [\"librespot-playback/pulseaudio-backend\"]\n"
+"portaudio_backend = [\"librespot-playback/portaudio-backend\"]\n"
+"default = [\"pulseaudio_backend\"]\n"
+msgstr ""
+"[features]\n"
+"pulseaudio_backend = [\"librespot-playback/pulseaudio-backend\"]\n"
+"portaudio_backend = [\"librespot-playback/portaudio-backend\"]\n"
+"default = [\"pulseaudio_backend\"]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:761
+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 ""
+"`pulseaudio_backend` — это функция по умолчанию. Она всегда включена, если "
+"мы явно не отключим функции по умолчанию, добавив `--no-default-features` в "
+"`CARGO_FEATURES`. Здесь мы превращаем функции `portaudio_backend` и "
+"`pulseaudio_backend` в опции порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:765
+#, no-wrap
+msgid "CARGO_FEATURES=\t--no-default-features\n"
+msgstr "CARGO_FEATURES=\t--no-default-features\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:767
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tPORTAUDIO PULSEAUDIO\n"
+msgstr "OPTIONS_DEFINE=\tPORTAUDIO PULSEAUDIO\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:770
+#, no-wrap
+msgid ""
+"PORTAUDIO_VARS=\t\tCARGO_FEATURES+=portaudio_backend\n"
+"PULSEAUDIO_VARS=\tCARGO_FEATURES+=pulseaudio_backend\n"
+msgstr ""
+"PORTAUDIO_VARS=\t\tCARGO_FEATURES+=portaudio_backend\n"
+"PULSEAUDIO_VARS=\tCARGO_FEATURES+=pulseaudio_backend\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:775
+#, no-wrap
+msgid "Listing Crate Licenses"
+msgstr "Перечисление лицензий крейтов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:781
+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 ""
+"Крейты имеют собственные лицензии. Важно знать, какие они, при добавлении "
+"блока `LICENSE` в порт (см. crossref:makefiles[licenses,Лицензии]). "
+"Вспомогательная цель `cargo-crates-licenses` попытается перечислить все "
+"лицензии всех ящиков, определённых в `CARGO_CRATES`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:792
+#, 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 ""
+"% 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"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:798
+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 ""
+"Названия лицензий, которые выводит `make cargo-crates-licenses`, являются "
+"SPDX 2.1-совместимыми лицензионными выражениями, которые не совпадают с "
+"названиями лицензий, определёнными в фреймворке портов. Их необходимо "
+"перевести в названия из crossref:makefiles[licenses-license-list,Списка "
+"предопределённых лицензий]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:803
+#, no-wrap
+msgid "Using `meson`"
+msgstr "Использование `meson`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:806
+msgid "For ports that use Meson, define `USES=meson`."
+msgstr "Для портов, использующих Meson, определите `USES=meson`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:808
+#, no-wrap
+msgid "Variables for Ports That Use `meson`"
+msgstr "Переменные для портов, использующих `meson`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:815
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr "`MESON_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:817
+#, no-wrap
+msgid "Port specific Meson flags to be passed to the `meson` binary."
+msgstr "Порт-специфичные флаги Meson, передаваемые в бинарный файл `meson`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:818
+#, no-wrap
+msgid "`MESON_BUILD_DIR`"
+msgstr "`MESON_BUILD_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:819
+#, no-wrap
+msgid "Path to the build directory relative to `WRKSRC`. Default is `_build`."
+msgstr "Путь к директории сборки относительно `WRKSRC`. По умолчанию — `_build`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:822
+#, no-wrap
+msgid "`USES=meson` Example"
+msgstr "Пример `USES=meson`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:826
+msgid "This snippet demonstrates the use of Meson for a port."
+msgstr "Этот фрагмент демонстрирует использование Meson для порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:831
+#, no-wrap
+msgid ""
+"USES=\t\tmeson\n"
+"MESON_ARGS=\t-Dfoo=enabled\n"
+msgstr ""
+"USES=\t\tmeson\n"
+"MESON_ARGS=\t-Dfoo=enabled\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:836
+#, no-wrap
+msgid "Building Go Applications"
+msgstr "Создание приложений на Go"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:840
+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 ""
+"Для портов, использующих Go, определите `USES=go`. Обратитесь к "
+"crossref:uses[uses-go,`go`] для получения списка переменных, которые можно "
+"задать для управления процессом сборки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:842
+#, no-wrap
+msgid "Creating a Port for a Go Modules Based Application"
+msgstr "Создание порта для приложения на основе модулей Go"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:846
+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 ""
+"В большинстве случаев достаточно установить переменную `GO_MODULE` в "
+"значение, указанное директивой `module` в `go.mod`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:853
+#, no-wrap
+msgid ""
+"PORTNAME= hey\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION= 0.1.4\n"
+"CATEGORIES= benchmarks\n"
+msgstr ""
+"PORTNAME= hey\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION= 0.1.4\n"
+"CATEGORIES= benchmarks\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:857
+#, 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 ""
+"MAINTAINER= dmgk@FreeBSD.org\n"
+"COMMENT= Tiny program that sends some load to a web application\n"
+"WWW= https://github.com/rakyll/hey/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:860
+#, no-wrap
+msgid ""
+"LICENSE= APACHE20\n"
+"LICENSE_FILE= ${WRKSRC}/LICENSE\n"
+msgstr ""
+"LICENSE= APACHE20\n"
+"LICENSE_FILE= ${WRKSRC}/LICENSE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:863
+#, no-wrap
+msgid ""
+"USES= go:modules\n"
+"GO_MODULE= github.com/rakyll/hey\n"
+msgstr ""
+"USES= go:modules\n"
+"GO_MODULE= github.com/rakyll/hey\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:865
+#, no-wrap
+msgid "PLIST_FILES= bin/hey\n"
+msgstr "PLIST_FILES= bin/hey\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:870
+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:873
+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 ""
+"Создание порта на основе Go — это процесс из пяти этапов. Сначала необходимо "
+"предоставить шаблон портов, который загружает дистрибутивный файл приложения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:880
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:930
+#, no-wrap
+msgid ""
+"PORTNAME=\tghq\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t0.12.5\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tghq\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t0.12.5\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:884
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:934
+#, 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 ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tRemote repository management made easy\n"
+"WWW=\t\thttps://github.com/x-motemen/ghq/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:888
+#, no-wrap
+msgid ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+msgstr ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:902
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:906
+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 ""
+"Теперь файл дистрибутива готов к использованию, и мы можем извлечь "
+"необходимые зависимости модуля Go. Этот шаг требует наличия установленного "
+"пакета package:ports-mgmt/modules2tuple[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:920
+#, 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 ""
+"% 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:946
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:951
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+"[.filename]#distinfo# необходимо обновить, чтобы включить все дистрибутивные "
+"файлы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:964
+#, 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 ""
+"% 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"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:972
+#, no-wrap
+msgid "Setting Output Binary Name or Installation Path"
+msgstr "Установка имени выходного бинарного файла или пути установки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:977
+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 ""
+"Некоторые порты требуют установки результирующего бинарного файла под другим "
+"именем или в путь, отличный от стандартного `${PREFIX}/bin`. Это можно "
+"сделать с помощью синтаксиса кортежа `GO_TARGET`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:981
+#, no-wrap
+msgid "GO_TARGET= ./cmd/ipfs:ipfs-go\n"
+msgstr "GO_TARGET= ./cmd/ipfs:ipfs-go\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:984
+msgid "will install `ipfs` binary as `${PREFIX}/bin/ipfs-go` and"
+msgstr "установит бинарный файл `ipfs` как `${PREFIX}/bin/ipfs-go` и"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:988
+#, no-wrap
+msgid "GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy\n"
+msgstr "GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:991
+msgid "will install `dnscrypt-proxy` to `${PREFIX}/sbin`."
+msgstr "установит `dnscrypt-proxy` в `${PREFIX}/sbin`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:994
+#, no-wrap
+msgid "Building Haskell Applications with `cabal`"
+msgstr "Построение приложений на Haskell с помощью `cabal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:998
+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 ""
+"Для портов, использующих Cabal, система сборки определяет `USES=cabal`. "
+"Обратитесь к crossref:uses[uses-cabal,`cabal`] для получения списка "
+"переменных, которые можно задать для управления процессом сборки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1000
+#, no-wrap
+msgid "Creating a Port for a Hackage-hosted Haskell Application"
+msgstr "Создание порта для приложения Haskell с Hackage"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1005
+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 ""
+"При подготовке порта Haskell Cabal требуются программы package:devel/hs-"
+"cabal-install[] и package:ports-mgmt/hs-cabal2tuple[], поэтому убедитесь, "
+"что они установлены заранее. Сначала необходимо определить общие переменные "
+"портов, которые позволяют cabal-install загрузить файл дистрибутива пакета:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1011
+#, no-wrap
+msgid ""
+"PORTNAME=\tShellCheck\n"
+"DISTVERSION=\t0.6.0\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tShellCheck\n"
+"DISTVERSION=\t0.6.0\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1015
+#, no-wrap
+msgid ""
+"MAINTAINER=\thaskell@FreeBSD.org\n"
+"COMMENT=\tShell script analysis tool\n"
+"WWW=\t\thttps://www.shellcheck.net/\n"
+msgstr ""
+"MAINTAINER=\thaskell@FreeBSD.org\n"
+"COMMENT=\tShell script analysis tool\n"
+"WWW=\t\thttps://www.shellcheck.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1017
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1100
+#, no-wrap
+msgid "USES=\t\tcabal\n"
+msgstr "USES=\t\tcabal\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1022
+msgid ""
+"This minimal Makefile fetches the distribution file with the `cabal-extract` "
+"helper target:"
+msgstr ""
+"Этот минимальный Makefile загружает файл дистрибутива с помощью "
+"вспомогательной цели `cabal-extract`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1032
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1035
+msgid ""
+"Now that we have ShellCheck.cabal package description file under `${WRKSRC}"
+"`, we can use `cabal-configure` to generate the build plan:"
+msgstr ""
+"Теперь, когда у нас есть файл описания пакета ShellCheck.cabal в `${WRKSRC}"
+"`, мы можем использовать `cabal-configure` для создания плана сборки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1046
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1049
+msgid "Once done, a list of required dependencies can generated:"
+msgstr "После завершения можно сгенерировать список необходимых зависимостей:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1057
+#, 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 ""
+"% 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1063
+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 ""
+"Пакеты Haskell могут содержать ревизии, как и порты FreeBSD. Ревизии могут "
+"затрагивать только файлы [.filename]#.cabal#. Обратите внимание на "
+"дополнительные номера версий после символа `_`. Замените старый список "
+"`USE_CABAL` на вновь сгенерированный."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1065
+msgid ""
+"Finally, [.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+"Наконец, файл [.filename]#distinfo# необходимо перегенерировать, чтобы он "
+"содержал все файлы дистрибутива:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1076
+#, 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 ""
+"% 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"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1086
+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 ""
+"Некоторые порты Haskell устанавливают различные файлы данных в `share/$"
+"{PORTNAME}`. В таких случаях требуется особая обработка на стороне порта. "
+"Порт должен определить параметр `CABAL_WRAPPER_SCRIPTS`, перечислив каждый "
+"исполняемый файл, который будет использовать файлы данных. Более того, в "
+"редких случаях портируемая программа использует файлы данных других пакетов "
+"Haskell, и тогда на помощь приходит `FOO_DATADIR_VARS`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1088
+#, no-wrap
+msgid "Handling Data Files in a Haskell Port"
+msgstr "Обработка файлов данных в порте Haskell"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1092
+msgid ""
+"`devel/hs-profiteur` is a Haskell application that generates a single-page "
+"HTML with some content."
+msgstr ""
+"`devel/hs-profiteur` — это приложение на Haskell, которое генерирует "
+"одностраничный HTML с некоторым содержимым."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1096
+#, no-wrap
+msgid "PORTNAME=\tprofiteur\n"
+msgstr "PORTNAME=\tprofiteur\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1098
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1113
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1131
+#, no-wrap
+msgid "[...]\n"
+msgstr "[...]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1104
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1117
+#, no-wrap
+msgid ""
+"USE_CABAL=\tOneTuple-0.3.1_2 \\\n"
+"\t\tQuickCheck-2.14.2 \\\n"
+"\t\t[...]\n"
+msgstr ""
+"USE_CABAL=\tOneTuple-0.3.1_2 \\\n"
+"\t\tQuickCheck-2.14.2 \\\n"
+"\t\t[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1109
+msgid ""
+"It installs HTML templates under `share/profiteur`, so we need to add "
+"`CABAL_WRAPPER_SCRIPTS` knob:"
+msgstr ""
+"Он устанавливает HTML-шаблоны в `share/profiteur`, поэтому необходимо "
+"добавить параметр `CABAL_WRAPPER_SCRIPTS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1120
+#, no-wrap
+msgid "CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+msgstr "CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1127
+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 ""
+"Программа также пытается получить доступ к файлу `jquery.js`, который "
+"является частью пакета Haskell `js-jquery-3.3.1`. Чтобы этот файл был "
+"найден, необходимо, чтобы скрипт-обёртка искал файлы данных `js-jquery` "
+"также в `share/profiteur`. Для этого используется `profiteur_DATADIR_VARS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1134
+#, no-wrap
+msgid ""
+"CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+"profiteur_DATADIR_VARS=\t\tjs-jquery\n"
+msgstr ""
+"CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+"profiteur_DATADIR_VARS=\t\tjs-jquery\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1139
+msgid ""
+"Now the port will install the actual binary into `libexec/cabal/profiteur` "
+"and the script into `bin/profiteur`."
+msgstr ""
+"Теперь порт установит непосредственно бинарный файл в `libexec/cabal/"
+"profiteur`, а скрипт — в `bin/profiteur`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1144
+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 ""
+"Не существует простого способа определить подходящее значение для параметра "
+"`FOO_DATADIR_VARS`, кроме как запустить программу и проверить, что всё "
+"работает. К счастью, необходимость использовать `FOO_DATADIR_VARS` возникает "
+"очень редко."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1146
+msgid ""
+"Another corner case when porting complex Haskell programs is the presence of "
+"VCS dependencies in the `cabal.project` file."
+msgstr ""
+"Еще один крайний случай при переносе сложных программ на Haskell — наличие "
+"зависимостей от систем контроля версий (VCS) в файле `cabal.project`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1148
+#, no-wrap
+msgid "Porting Haskell Applications with VCS Dependencies"
+msgstr "Портирование приложений Haskell с зависимостями от VCS"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1153
+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 ""
+"`net-p2p/cardano-node` — это чрезвычайно сложное программное обеспечение. В "
+"его `cabal.project` содержится множество блоков, подобных этому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1162
+#, 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 ""
+"[...]\n"
+"source-repository-package\n"
+" type: git\n"
+" location: https://github.com/input-output-hk/cardano-crypto\n"
+" tag: f73079303f663e028288f9f4a9e08bcca39a923e\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1168
+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 ""
+"Зависимости типа `source-repository-package` автоматически подтягиваются "
+"`cabal` в процессе сборки. К сожалению, это приводит к использованию сети "
+"после этапа `fetch`, что запрещено в рамках системы портов. Эти исходники "
+"необходимо указать в Makefile порта. Вспомогательная цель `make-use-cabal` "
+"может упростить работу с пакетами, размещёнными на GitHub. Запуск этой цели "
+"после стандартных `cabal-extract` и `cabal-configure` позволит получить не "
+"только параметр `USE_CABAL`, но и `GH_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1176
+#, 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 ""
+"% 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1180
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1183
+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 ""
+"Может быть полезно отделить элементы `GH_TUPLE`, поступающие из `make-use-"
+"cabal`, от остальных, чтобы упростить обновление порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1189
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1191
+#, no-wrap
+msgid "GH_TUPLE+=\tbitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp\n"
+msgstr "GH_TUPLE+=\tbitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1194
+msgid ""
+"Haskell ports with VCS dependencies also require the following hack for the "
+"time being:"
+msgstr ""
+"Версия Haskell-портов с зависимостями от систем контроля версий временно "
+"требует следующего обходного решения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1198
+#, no-wrap
+msgid "BINARY_ALIAS=\tgit=true\n"
+msgstr "BINARY_ALIAS=\tgit=true\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1203
+#, no-wrap
+msgid "Using GNU Autotools"
+msgstr "Использование GNU Autotools"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1207
+msgid ""
+"If a port needs any of the GNU Autotools software, add `USES=autoreconf`. "
+"See crossref:uses[uses-autoreconf,`autoreconf`] for more information."
+msgstr ""
+"Если порту требуется какое-либо программное обеспечение GNU Autotools, "
+"добавьте `USES=autoreconf`. Подробнее см. в crossref:uses[uses-"
+"autoreconf,`autoreconf`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1209
+#, no-wrap
+msgid "Using GNU `gettext`"
+msgstr "Использование GNU `gettext`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1212
+#, no-wrap
+msgid "Basic Usage"
+msgstr "Простые варианты использования"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1216
+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 ""
+"Если порт требует `gettext`, установите `USES=gettext`, и порт унаследует "
+"зависимость от [.filename]#libintl.so# из пакета package:devel/gettext[]. "
+"Другие значения для использования `gettext` перечислены в crossref:uses[uses-"
+"gettext,`USES=gettext`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1219
+msgid ""
+"A rather common case is a port using `gettext` and `configure`. Generally, "
+"GNU `configure` should be able to locate `gettext` automatically."
+msgstr ""
+"Довольно распространённый случай — порт, использующий `gettext` и "
+"`configure`. Обычно GNU `configure` должен автоматически находить `gettext`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1224
+#, no-wrap
+msgid ""
+"USES=\tgettext\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+"USES=\tgettext\n"
+"GNU_CONFIGURE=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1227
+msgid ""
+"If it ever fails to, hints at the location of `gettext` can be passed in "
+"`CPPFLAGS` and `LDFLAGS` using `localbase` as follows:"
+msgstr ""
+"Если он не сработает, можно указать расположение `gettext` через `CPPFLAGS` "
+"и `LDFLAGS`, используя `localbase` следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1232
+#, no-wrap
+msgid ""
+"USES=\tgettext localbase:ldflags\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+"USES=\tgettext localbase:ldflags\n"
+"GNU_CONFIGURE=\tyes\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1235
+#, no-wrap
+msgid "Optional Usage"
+msgstr "Оптимальное использование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1241
+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 ""
+"Некоторые программные продукты позволяют отключать NLS, к примеру, передавая "
+"параметр `--disable-nls` сценарию `configure`. В этом случае ваш порт должен "
+"использовать `gettext`, в зависимости от значения `NLS`. Для портов "
+"небольшой или средней сложности вы можете полагаться на следующую идиому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1245
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1260
+#, no-wrap
+msgid "GNU_CONFIGURE=\t\tyes\n"
+msgstr "GNU_CONFIGURE=\t\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1248
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tNLS\n"
+"OPTIONS_SUB=\t\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\t\tNLS\n"
+"OPTIONS_SUB=\t\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1251
+#, no-wrap
+msgid ""
+"NLS_USES=\t\tgettext\n"
+"NLS_CONFIGURE_ENABLE=\tnls\n"
+msgstr ""
+"NLS_USES=\t\tgettext\n"
+"NLS_CONFIGURE_ENABLE=\tnls\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1256
+msgid "Or using the older way of using options:"
+msgstr "Или используя старый способ с опциями:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1262
+#, no-wrap
+msgid "OPTIONS_DEFINE=\t\tNLS\n"
+msgstr "OPTIONS_DEFINE=\t\tNLS\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1264
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1272
+#, 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 ""
+".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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1283
+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 ""
+"Следующий пункт в списке задач — организовать условное включение файлов "
+"каталогов сообщений в упаковочный список. Часть, связанная с "
+"[.filename]#Makefile#, уже предусмотрена идиомой. Это объясняется в разделе "
+"crossref:plist[plist-sub,расширенные практики работы с [.filename]#pkg-"
+"plist#]. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет "
+"заменено на \"`@comment `\", если NLS отключен, или на пустую строку, если "
+"NLS включен. Следовательно, строки с префиксом `%%NLS%%` станут обычными "
+"комментариями в итоговом упаковочном списке, если NLS выключен; в противном "
+"случае префикс будет просто удален. Затем вставьте `%%NLS%%` перед каждым "
+"путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1288
+#, no-wrap
+msgid ""
+"%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo\n"
+"%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo\n"
+msgstr ""
+"%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo\n"
+"%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1291
+msgid ""
+"In high complexity cases, more advanced techniques may be needed, such as "
+"crossref:plist[plist-dynamic,dynamic packing list generation]."
+msgstr ""
+"В особо сложных случаях вам понадобиться использовать более продвинутые "
+"техники, чем данный рецепт, такие как crossref:plist[plist-"
+"dynamic,динамические списки упаковки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1293
+#, no-wrap
+msgid "Handling Message Catalog Directories"
+msgstr "Управление каталогами сообщений"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1300
+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 ""
+"Существует момент, который следует учитывать при установке файлов каталогов "
+"сообщений. Целевые каталоги для размещения, расположенные под "
+"[.filename]#LOCALBASE/shared/locale#, редко когда должны создаваться и "
+"удаляться портом. Для наиболее популярных языков имеются собственные "
+"каталоги, перечисленные в [.filename]#PORTSDIR/Templates/BSD.local.dist#. "
+"Каталоги для множества других языков управляются с помощью порта "
+"package:devel/gettext[]. Обратите внимание на его [.filename]#pkg-plist# и "
+"посмотрите, куда данный порт собирается установить файлы каталогов сообщений "
+"для единственного в своем роде языка."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1302
+#, no-wrap
+msgid "Using Perl"
+msgstr "Использование Perl"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1310
+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 ""
+"Если `MASTER_SITES` установлена в значение `CPAN`, то правильная "
+"поддиректория выбирается автоматически. Если подкаталог по умолчанию указан "
+"неверно, можно использовать `CPAN/Module` для его изменения. Также можно "
+"установить `MASTER_SITES` в старое значение `MASTER_SITE_PERL_CPAN`, тогда "
+"предпочтительным значением `MASTER_SITE_SUBDIR` будет имя иерархии выше "
+"уровнем. Например, рекомендуемое значение для `p5-Module-Name` - `Module`. "
+"Иерархию верхнего уровня можно посмотреть на https://cpan.org/modules/by-"
+"module/[cpan.org]. Это гарантирует работоспособность порта при смене автора "
+"модуля."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1315
+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 ""
+"Исключением этого правила является отсутствие соответствующего каталога или "
+"файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в "
+"этом случае разрешается использовать id автора. Можно использовать макрос "
+"`CPAN:AUTHOR`, который будет преобразован в хешированный каталог автора. "
+"Например, `CPAN:AUTHOR` преобразуется в `authors/id/A/AU/AUTHOR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1317
+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 ""
+"Когда порту требуется поддержка Perl, он должен установить `USES=perl5` с "
+"опциональным `USE_PERL5`, как описано в crossref:uses[uses-perl5,описание "
+"USES для perl5]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1319
+#, no-wrap
+msgid "Read-Only Variables for Ports That Use Perl"
+msgstr "Переменные (только для чтения) для портов, использующих Perl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1323
+#, no-wrap
+msgid "Read only variables"
+msgstr "Переменные (только для чтения)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1326
+#, no-wrap
+msgid "`PERL`"
+msgstr "`PERL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1328
+#, 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 "Полный путь к интерпретатору Perl 5, будь то системный или установленный из порта, но без номера версии. Используйте это, когда программному обеспечению требуется путь к интерпретатору Perl. Для замены строк \"``#!``\" в скриптах используйте crossref:uses[uses-shebangfix,`shebangfix`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1329
+#, no-wrap
+msgid "`PERL_VERSION`"
+msgstr "`PERL_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1331
+#, no-wrap
+msgid "The full version of Perl installed (for example, `5.8.9`)."
+msgstr "Полная версия Perl установлена (например, `5.8.9`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1332
+#, no-wrap
+msgid "`PERL_LEVEL`"
+msgstr "`PERL_LEVEL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1334
+#, no-wrap
+msgid "The installed Perl version as an integer of the form `MNNNPP` (for example, `500809`)."
+msgstr "Установленная версия Perl в виде целого числа формата `MNNNPP` (например, `500809`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1335
+#, no-wrap
+msgid "`PERL_ARCH`"
+msgstr "`PERL_ARCH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1337
+#, no-wrap
+msgid "Where Perl stores architecture dependent libraries. Defaults to `${ARCH}-freebsd`."
+msgstr "Где Perl хранит архитектурно-зависимые библиотеки. По умолчанию: `${ARCH}-freebsd`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1338
+#, no-wrap
+msgid "`PERL_PORT`"
+msgstr "`PERL_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1340
+#, no-wrap
+msgid "Name of the Perl port that is installed (for example, `perl5`)."
+msgstr "Имя порта Perl, который установлен (например, `perl5`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1341
+#, no-wrap
+msgid "`SITE_PERL`"
+msgstr "`SITE_PERL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1342
+#, no-wrap
+msgid "Directory name where site specific Perl packages go. This value is added to `PLIST_SUB`."
+msgstr "Имя каталога, в котором размещаются специфичные для сайта пакеты Perl. Это значение добавляется в `PLIST_SUB`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1348
+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 ""
+"Порты Perl-модулей, у которых нет официального сайта, должны ссылаться на "
+"`cpan.org` в строке WWW файла [.filename]#Makefile#. Предпочтительный формат "
+"URL: `https://search.cpan.org/dist/Module-Name/` (включая завершающий слеш)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1356
+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 ""
+"Не используйте `${SITE_PERL}` в объявлениях зависимостей. Это предполагает, "
+"что был включён файл [.filename]#perl5.mk#, что не всегда верно. Порты, "
+"зависящие от этого порта, будут иметь некорректные зависимости, если файлы "
+"этого порта будут перемещены во время обновления. Правильный способ "
+"объявления зависимостей модулей Perl показан в примере ниже."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1359
+#, no-wrap
+msgid "Perl Dependency Example"
+msgstr "Пример зависимости Perl"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1365
+#, no-wrap
+msgid "p5-IO-Tee>=0.64:devel/p5-IO-Tee\n"
+msgstr "p5-IO-Tee>=0.64:devel/p5-IO-Tee\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1370
+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 ""
+"Для портов Perl, которые устанавливают страницы руководства, макросы "
+"`PERL5_MAN3` и `PERL5_MAN1` могут использоваться внутри [.filename]#pkg-"
+"plist#. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1375
+#, 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 ""
+"lib/perl5/5.14/man/man1/event.1.gz\n"
+"lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1378
+msgid "can be replaced with"
+msgstr "может быть заменено на"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1383
+#, no-wrap
+msgid ""
+"%%PERL5_MAN1%%/event.1.gz\n"
+"%%PERL5_MAN3%%/AnyEvent::I3.3.gz\n"
+msgstr ""
+"%%PERL5_MAN1%%/event.1.gz\n"
+"%%PERL5_MAN3%%/AnyEvent::I3.3.gz\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1388
+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 ""
+"Для других разделов (_x_ в `2` и `4`–`9`) макросы `PERL5_MAN_x_` "
+"отсутствуют, так как они устанавливаются в обычные каталоги."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1391
+#, no-wrap
+msgid "A Port Which Only Requires Perl to Build"
+msgstr "Порт, требующий Perl только для сборки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1395
+msgid "As the default USE_PERL5 value is build and run, set it to:"
+msgstr ""
+"Поскольку значение USE_PERL5 по умолчанию включает build и run, установите "
+"его в:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1400
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tbuild\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tbuild\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1405
+#, no-wrap
+msgid "A Port Which Also Requires Perl to Patch"
+msgstr "Порт, который также требует Perl для исправления"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1410
+msgid ""
+"From time to time, using man:sed[1] for patching is not enough. When using "
+"man:perl[1] is easier, use:"
+msgstr ""
+"Время от времени использования man:sed[1] для исправлений недостаточно. "
+"Когда использование man:perl[1] проще, примените:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1415
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tpatch build run\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tpatch build run\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1420
+#, no-wrap
+msgid "A Perl Module Which Needs `ExtUtils::MakeMaker` to Build"
+msgstr "Модуль Perl, для сборки которого требуется `ExtUtils::MakeMaker`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1425
+msgid ""
+"Most Perl modules come with a [.filename]#Makefile.PL# configure script. In "
+"this case, set:"
+msgstr ""
+"Большинство модулей Perl поставляются с конфигурационным скриптом "
+"[.filename]#Makefile.PL#. В этом случае установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1430
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1435
+#, no-wrap
+msgid "A Perl Module Which Needs `Module::Build` to Build"
+msgstr "Модуль Perl, для сборки которого требуется `Module::Build`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1439
+msgid ""
+"When a Perl module comes with a [.filename]#Build.PL# configure script, it "
+"can require Module::Build, in which case, set"
+msgstr ""
+"Когда модуль Perl поставляется с конфигурационным скриптом "
+"[.filename]#Build.PL#, он может требовать Module::Build, и в этом случае "
+"установите"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1444
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuild\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuild\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1447
+msgid "If it instead requires Module::Build::Tiny, set"
+msgstr "Если вместо этого требуется Module::Build::Tiny, установите"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1452
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuildtiny\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuildtiny\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1457
+#, no-wrap
+msgid "Using X11"
+msgstr "Использование X11"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1460
+#, no-wrap
+msgid "X.Org Components"
+msgstr "Компоненты X.Org"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1465
+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 ""
+"Реализация X11, доступная в Коллекции портов, — это X.Org. Если приложение "
+"зависит от компонентов X, добавьте `USES= xorg` и укажите необходимые "
+"компоненты в `USE_XORG`. Полный список можно найти в crossref:uses[uses-"
+"xorg,`xorg`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1470
+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 ""
+"Проект Mesa — это инициатива по предоставлению свободной реализации OpenGL. "
+"Чтобы указать зависимость от различных компонентов этого проекта, "
+"используйте `USES=gl` и `USE_GL`. См. crossref:uses[uses-gl,`gl`] для "
+"полного списка доступных компонентов. Для обратной совместимости значение "
+"`yes` соответствует `glu`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1472
+#, no-wrap
+msgid "`USE_XORG` Example"
+msgstr "Пример `USE_XORG`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1480
+#, no-wrap
+msgid ""
+"USES=\t\tgl xorg\n"
+"USE_GL=\t\tglu\n"
+"USE_XORG=\txrender xft xkbfile xt xaw\n"
+msgstr ""
+"USES=\t\tgl xorg\n"
+"USE_GL=\t\tglu\n"
+"USE_XORG=\txrender xft xkbfile xt xaw\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1485
+#, no-wrap
+msgid "Variables for Ports That Use X"
+msgstr "Переменные для портов, использующих X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1489
+#, no-wrap
+msgid "`USES= imake`"
+msgstr "`USES= imake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1491
+#, no-wrap
+msgid "The port uses `imake`."
+msgstr "Порт использует `imake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1492
+#, no-wrap
+msgid "`XMKMF`"
+msgstr "`XMKMF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1493
+#, no-wrap
+msgid "Set to the path of `xmkmf` if not in the `PATH`. Defaults to `xmkmf -a`."
+msgstr "Установить путь к `xmkmf`, если он отсутствует в `PATH`. По умолчанию: `xmkmf -a`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1496
+#, no-wrap
+msgid "Using X11-Related Variables"
+msgstr "Использование переменных, связанных с X11"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1504
+#, no-wrap
+msgid ""
+"# Use some X11 libraries\n"
+"USES=\t\txorg\n"
+"USE_XORG=\tx11 xpm\n"
+msgstr ""
+"# Use some X11 libraries\n"
+"USES=\t\txorg\n"
+"USE_XORG=\tx11 xpm\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1509
+#, no-wrap
+msgid "Ports That Require Motif"
+msgstr "Порты, требующие Motif"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1515
+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 ""
+"Если порт требует библиотеку Motif, определите `USES= motif` в "
+"[.filename]#Makefile#. Реализация Motif по умолчанию — это package:x11-"
+"toolkits/open-motif[]. Пользователи могут выбрать package:x11-toolkits/"
+"lesstif[] вместо этого, установив `WANT_LESSTIF` в своём "
+"[.filename]#make.conf#. Аналогично package:x11-toolkits/open-motif-devel[] "
+"можно выбрать, установив `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1518
+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 ""
+"`MOTIFLIB` будет установлен в файле [.filename]#motif.mk# для ссылки на "
+"соответствующую библиотеку Motif. Пожалуйста, исправьте исходный код порта, "
+"чтобы использовать `${MOTIFLIB}` везде, где библиотека Motif упоминается в "
+"оригинальном [.filename]#Makefile# или [.filename]#Imakefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1520
+msgid "There are two common cases:"
+msgstr "Есть два распространённых случая:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1522
+msgid ""
+"If the port refers to the Motif library as `-lXm` in its "
+"[.filename]#Makefile# or [.filename]#Imakefile#, substitute `${MOTIFLIB}` "
+"for it."
+msgstr ""
+"Если порт ссылается на библиотеку Motif как `-lXm` в своем "
+"[.filename]#Makefile# или [.filename]#Imakefile#, замените это на `$"
+"{MOTIFLIB}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1523
+msgid ""
+"If the port uses `XmClientLibs` in its [.filename]#Imakefile#, change it to "
+"`${MOTIFLIB} ${XTOOLLIB} ${XLIB}`."
+msgstr ""
+"Если порт использует `XmClientLibs` в своем [.filename]#Imakefile#, замените "
+"это на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1525
+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 ""
+"Обратите внимание, что `MOTIFLIB` (обычно) раскрывается в `-L/usr/local/lib "
+"-lXm -lXp` или `/usr/local/lib/libXm.a`, поэтому нет необходимости добавлять "
+"`-L` или `-l` перед этим."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1527
+#, no-wrap
+msgid "X11 Fonts"
+msgstr "Шрифты X11"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1530
+msgid ""
+"If the port installs fonts for the X Window System, put them in "
+"[.filename]#LOCALBASE/lib/X11/fonts/local#."
+msgstr ""
+"Если порт устанавливает шрифты для X Window System, поместите их в "
+"[.filename]#LOCALBASE/lib/X11/fonts/local#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1532
+#, no-wrap
+msgid "Getting a Fake `DISPLAY` with Xvfb"
+msgstr "Получение поддельного `DISPLAY` с помощью Xvfb"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1539
+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 ""
+"Некоторые приложения требуют рабочего дисплея X11 для успешной компиляции. "
+"Это создаёт проблему для машин, работающих без монитора. При использовании "
+"этой переменной инфраструктура сборки запустит виртуальный X-сервер с "
+"буфером кадров. Рабочий `DISPLAY` затем передаётся в процесс сборки. См. "
+"crossref:uses[uses-display,`USES=display`] для возможных аргументов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1543
+#, no-wrap
+msgid "USES=\tdisplay\n"
+msgstr "USES=\tdisplay\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1547
+#, no-wrap
+msgid "Desktop Entries"
+msgstr "Desktop Entries (пункты рабочего стола)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1553
+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 ""
+"Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/"
+"[стандарт Freedesktop]) предоставляют способ автоматической настройки "
+"функций рабочего стола при установке новой программы без вмешательства "
+"пользователя. Например, вновь установленные программы автоматически "
+"появляются в меню приложений совместимых сред рабочего стола. Desktop "
+"entries появились в среде GNOME, но теперь стали стандартом и также работают "
+"с KDE и Xfce. Эта автоматизация приносит реальную пользу пользователю, "
+"поэтому Desktop entries рекомендуются для приложений, которые могут "
+"использоваться в среде рабочего стола."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1555
+#, no-wrap
+msgid "Using Predefined [.filename]#.desktop# Files"
+msgstr "Использование предопределенных файлов [.filename]#.desktop#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1559
+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 ""
+"Порты, включающие предопределённые файлы [.filename]#*.desktop#, должны "
+"добавлять эти файлы в [.filename]#pkg-plist# и устанавливать их в директорию "
+"[.filename]#$LOCALBASE/share/applications#. Для установки таких файлов "
+"полезен макрос crossref:makefiles[install-macros,`INSTALL_DATA`]."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1561
+#, no-wrap
+msgid "Updating Desktop Database"
+msgstr "Обновление базы данных рабочего стола"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1565
+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 ""
+"Если порт имеет запись MimeType в файле [.filename]#portname.desktop#, базу "
+"данных рабочего стола необходимо обновить после установки и удаления. Для "
+"этого определите `USES`= desktop-file-utils."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1567
+#, no-wrap
+msgid "Creating Desktop Entries with `DESKTOP_ENTRIES`"
+msgstr "Создание Desktop Entries с помощью `DESKTOP_ENTRIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1572
+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 ""
+"Desktop Entries могут быть легко созданы для приложений с использованием "
+"`DESKTOP_ENTRIES`. Файл с именем [.filename]#name.desktop# будет создан, "
+"установлен и автоматически добавлен в [.filename]#pkg-plist#. Синтаксис "
+"следующий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1576
+#, no-wrap
+msgid "DESKTOP_ENTRIES=\t\"NAME\" \"COMMENT\" \"ICON\" \"COMMAND\" \"CATEGORY\" StartupNotify\n"
+msgstr "DESKTOP_ENTRIES=\t\"NAME\" \"COMMENT\" \"ICON\" \"COMMAND\" \"CATEGORY\" StartupNotify\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1583
+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 ""
+"Список возможных категорий доступен на https://standards.freedesktop.org/"
+"menu-spec/latest/apa.html[сайте Freedesktop]. `StartupNotify` указывает, "
+"совместимо ли приложение с _уведомлениями о запуске_. Обычно это "
+"графический индикатор, например, часы, который появляется у указателя мыши, "
+"в меню или на панели, чтобы дать пользователю понять, что программа "
+"запускается. Программа, совместимая с уведомлениями о запуске, очищает "
+"индикатор после своего старта. Программы, не совместимые с уведомлениями о "
+"запуске, никогда не очищают индикатор (что может сбивать с толку и "
+"раздражать пользователя), и у них должен быть установлен параметр "
+"`StartupNotify` в значение `false`, чтобы индикатор вообще не отображался."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1585
+msgid "Example:"
+msgstr "Пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1592
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1597
+msgid ""
+"`DESKTOP_ENTRIES` are installed in the directory pointed to by the "
+"`DESKTOPDIR` variable. `DESKTOPDIR` defaults to [.filename]#${PREFIX}/share/"
+"applications#"
+msgstr ""
+"`DESKTOP_ENTRIES` устанавливаются в директорию, указанную переменной "
+"`DESKTOPDIR`. По умолчанию `DESKTOPDIR` имеет значение [.filename]#${PREFIX}/"
+"share/applications#"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1600
+#, no-wrap
+msgid "Using GNOME"
+msgstr "Использование GNOME"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1603
+#: 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:4286
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1607
+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 ""
+"Эта глава объясняет фреймворк GNOME, используемый в портах. Фреймворк можно "
+"условно разделить на базовые компоненты, компоненты рабочего стола GNOME и "
+"несколько специальных макросов, упрощающих работу сопровождающих портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1609
+#, no-wrap
+msgid "Using `USE_GNOME`"
+msgstr "Использование `USE_GNOME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1617
+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 ""
+"Добавление этой переменной в порт позволяет использовать макросы и "
+"компоненты, определённые в [.filename]#bsd.gnome.mk#. Код в "
+"[.filename]#bsd.gnome.mk# добавляет необходимые зависимости для сборки, "
+"выполнения или библиотеки, а также обработку специальных файлов. Приложения "
+"GNOME в FreeBSD используют инфраструктуру `USE_GNOME`. Включите все "
+"необходимые компоненты в виде списка, разделённого пробелами. Компоненты "
+"`USE_GNOME` разделены на следующие виртуальные списки: основные компоненты, "
+"компоненты GNOME 3 и устаревшие компоненты. Если порту требуются только "
+"библиотеки GTK3, это кратчайший способ определить это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1621
+#, no-wrap
+msgid "USE_GNOME=\tgtk30\n"
+msgstr "USE_GNOME=\tgtk30\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1625
+msgid ""
+"`USE_GNOME` components automatically add the dependencies they need. Please "
+"see crossref:special[gnome-components, GNOME Components] for an exhaustive "
+"list of all `USE_GNOME` components and which other components they imply and "
+"their dependencies."
+msgstr ""
+"`USE_GNOME` компоненты автоматически добавляют необходимые им зависимости. "
+"Подробный список всех компонентов `USE_GNOME`, а также информацию о том, "
+"какие другие компоненты они подразумевают и их зависимости, можно найти в "
+"crossref:special[gnome-components, Компоненты GNOME]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1628
+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 ""
+"Вот пример [.filename]#Makefile# для порта GNOME, в котором используются "
+"многие методы, описанные в этом документе. Пожалуйста, используйте его в "
+"качестве руководства при создании новых портов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1635
+#, no-wrap
+msgid ""
+"PORTNAME=\tregexxer\n"
+"DISTVERSION=\t0.10\n"
+"CATEGORIES=\tdevel textproc gnome\n"
+"MASTER_SITES=\tGNOME\n"
+msgstr ""
+"PORTNAME=\tregexxer\n"
+"DISTVERSION=\t0.10\n"
+"CATEGORIES=\tdevel textproc gnome\n"
+"MASTER_SITES=\tGNOME\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1639
+#, 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 ""
+"MAINTAINER=\tkwm@FreeBSD.org\n"
+"COMMENT=\tInteractive tool for performing search and replace operations\n"
+"WWW=\t\thttp://regexxer.sourceforge.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1643
+#, 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 ""
+"USES=\t\tgettext gmake localbase:ldflags pathfix pkgconfig tar:xz\n"
+"GNU_CONFIGURE=\tyes\n"
+"USE_GNOME=\tgnomeprefix intlhack gtksourceviewmm3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1645
+#, no-wrap
+msgid "GLIB_SCHEMAS=\torg.regexxer.gschema.xml\n"
+msgstr "GLIB_SCHEMAS=\torg.regexxer.gschema.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1653
+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 ""
+"Макрос `USE_GNOME` без аргументов не добавляет никаких зависимостей к порту. "
+"`USE_GNOME` не может быть установлен после [.filename]#bsd.port.pre.mk#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1656
+#, no-wrap
+msgid "Variables"
+msgstr "Переменные"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1662
+msgid ""
+"This section explains which macros are available and how they are used. "
+"Like they are used in the above example. The crossref:special[gnome-"
+"components, GNOME Components] has a more in-depth explanation. `USE_GNOME` "
+"has to be set for these macros to be of use."
+msgstr ""
+"Этот раздел объясняет, какие макросы доступны и как они используются. Как, "
+"например, в приведённом выше примере. В crossref:special[gnome-components, "
+"Компоненты GNOME] содержится более подробное объяснение. Для использования "
+"этих макросов необходимо установить `USE_GNOME`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1663
+#, no-wrap
+msgid "`GLIB_SCHEMAS`"
+msgstr "`GLIB_SCHEMAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1666
+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 ""
+"Список всех файлов схем glib, которые устанавливает порт. Макрос добавит "
+"файлы в plist порта и обработает регистрацию этих файлов при установке и "
+"удалении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1671
+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 ""
+"Файлы схем glib написаны в XML и имеют расширение [.filename]#gschema.xml#. "
+"Они устанавливаются в директорию [.filename]#share/glib-2.0/schemas/#. Эти "
+"файлы схем содержат все настройки конфигурации приложений со значениями по "
+"умолчанию. Фактическая база данных, используемая приложениями, создаётся с "
+"помощью glib-compile-schema, которая запускается макросом `GLIB_SCHEMAS`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1675
+#, no-wrap
+msgid "GLIB_SCHEMAS=foo.gschema.xml\n"
+msgstr "GLIB_SCHEMAS=foo.gschema.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1681
+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 ""
+"Не добавляйте схемы glib в файл [.filename]#pkg-plist#. Если они указаны в "
+"[.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут "
+"работать некорректно."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1683
+#, no-wrap
+msgid "`GCONF_SCHEMAS`"
+msgstr "`GCONF_SCHEMAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1686
+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 ""
+"Перечислите все файлы схем gconf. Макрос добавит файлы схем в plist порта и "
+"обеспечит их регистрацию при установке и удалении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1691
+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 ""
+"GConf — это база данных на основе XML, которую используют практически все "
+"приложения GNOME для хранения своих настроек. Эти файлы устанавливаются в "
+"директорию [.filename]#etc/gconf/schemas#. Эта база данных определяется "
+"установленными файлами схем, которые используются для генерации ключевых "
+"файлов [.filename]#%gconf.xml#. Для каждого файла схемы, устанавливаемого "
+"портом, должна быть запись в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1695
+#, no-wrap
+msgid "GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas\n"
+msgstr "GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1701
+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 ""
+"Схемы Gconf перечислены в макросе `GCONF_SCHEMAS`, а не в файле "
+"[.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не "
+"будут зарегистрированы, и приложения могут работать некорректно."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1703
+#, no-wrap
+msgid "`INSTALLS_OMF`"
+msgstr "`INSTALLS_OMF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1707
+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 ""
+"Файлы Open Source Metadata Framework (OMF) часто используются приложениями "
+"GNOME 2. Эти файлы содержат информацию о файлах справки приложений и требуют "
+"специальной обработки с помощью ScrollKeeper/rarian. Для правильной "
+"регистрации файлов OMF при установке приложений GNOME из пакетов убедитесь, "
+"что файлы `omf` указаны в `pkg-plist` и что в [.filename]#Makefile# порта "
+"определено `INSTALLS_OMF`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1711
+#, no-wrap
+msgid "INSTALLS_OMF=yes\n"
+msgstr "INSTALLS_OMF=yes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1714
+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 ""
+"При установке [.filename]#bsd.gnome.mk# автоматически сканирует "
+"[.filename]#pkg-plist# и добавляет соответствующие директивы `@exec` и "
+"`@unexec` для каждого файла [.filename]#.omf#, который необходимо "
+"отслеживать в базе данных регистрации OMF."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1716
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1726
+#, no-wrap
+msgid "GNOME Components"
+msgstr "Компоненты GNOME"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1724
+msgid ""
+"For further help with a GNOME port, look at some of the link:https://"
+"ports.FreeBSD.org[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 ""
+"Для получения дополнительной помощи с портом GNOME, ознакомьтесь с "
+"некоторыми из link:https://ports.FreeBSD.org[существующих портов] в качестве "
+"примеров. На странице link:https://www.FreeBSD.org/gnome/[FreeBSD GNOME] "
+"указана контактная информация, если требуется дополнительная помощь. "
+"Компоненты разделены на используемые в настоящее время компоненты GNOME и "
+"устаревшие компоненты. Если компонент поддерживает аргументы, они "
+"перечислены в скобках в описании. Первый аргумент является значением по "
+"умолчанию. \"Both\" указывается, если компонент по умолчанию добавляется как "
+"в зависимости для сборки, так и для выполнения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1730
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1899
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1916
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2085
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3911
+#, no-wrap
+msgid "Component"
+msgstr "Компонент"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1731
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1917
+#, no-wrap
+msgid "Associated program"
+msgstr "Связанная программа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1734
+#, no-wrap
+msgid "`atk`"
+msgstr "`atk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1735
+#, no-wrap
+msgid "accessibility/atk"
+msgstr "accessibility/atk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1737
+#, no-wrap
+msgid "Accessibility toolkit (ATK)"
+msgstr "Инструментарий доступности (ATK)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1738
+#, no-wrap
+msgid "`atkmm`"
+msgstr "`atkmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1739
+#, no-wrap
+msgid "accessibility/atkmm"
+msgstr "accessibility/atkmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1741
+#, no-wrap
+msgid "c++ bindings for atk"
+msgstr "C++ интерфейс для atk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1742
+#, no-wrap
+msgid "`cairo`"
+msgstr "`cairo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1743
+#, no-wrap
+msgid "graphics/cairo"
+msgstr "graphics/cairo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1745
+#, no-wrap
+msgid "Vector graphics library with cross-device output support"
+msgstr "Векторная графическая библиотека с поддержкой вывода на различные устройства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1746
+#, no-wrap
+msgid "`cairomm`"
+msgstr "`cairomm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1747
+#, no-wrap
+msgid "graphics/cairomm"
+msgstr "graphics/cairomm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1749
+#, no-wrap
+msgid "c++ bindings for cairo"
+msgstr "C++ интерфейс для cairo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1750
+#, no-wrap
+msgid "`dconf`"
+msgstr "`dconf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1751
+#, no-wrap
+msgid "devel/dconf"
+msgstr "devel/dconf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1753
+#, no-wrap
+msgid "Configuration database system (both, build, run)"
+msgstr "Система базы данных конфигурации (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1754
+#, no-wrap
+msgid "`evolutiondataserver3`"
+msgstr "`evolutiondataserver3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1755
+#, no-wrap
+msgid "databases/evolution-data-server"
+msgstr "databases/evolution-data-server"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1757
+#, no-wrap
+msgid "Data backends for the Evolution integrated mail/PIM suite"
+msgstr "Бэкенды данных для интегрированного почтового клиента/PIM Evolution"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1758
+#, no-wrap
+msgid "`gdkpixbuf2`"
+msgstr "`gdkpixbuf2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1759
+#, no-wrap
+msgid "graphics/gdk-pixbuf2"
+msgstr "graphics/gdk-pixbuf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1761
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1943
+#, no-wrap
+msgid "Graphics library for GTK+"
+msgstr "Графическая библиотека для GTK+"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1762
+#, no-wrap
+msgid "`glib20`"
+msgstr "`glib20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1763
+#, no-wrap
+msgid "devel/glib20"
+msgstr "devel/glib20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1765
+#, no-wrap
+msgid "GNOME core library `glib20`"
+msgstr "Основная библиотека GNOME `glib20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1766
+#, no-wrap
+msgid "`glibmm`"
+msgstr "`glibmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1767
+#, no-wrap
+msgid "devel/glibmm"
+msgstr "devel/glibmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1769
+#, no-wrap
+msgid "c++ bindings for glib20"
+msgstr "C++ интерфейс для glib20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1770
+#, no-wrap
+msgid "`gnomecontrolcenter3`"
+msgstr "`gnomecontrolcenter3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1771
+#, no-wrap
+msgid "sysutils/gnome-control-center"
+msgstr "sysutils/gnome-control-center"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1773
+#, no-wrap
+msgid "GNOME 3 Control Center"
+msgstr "Центр управления GNOME 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1774
+#, no-wrap
+msgid "`gnomedesktop3`"
+msgstr "`gnomedesktop3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1775
+#, no-wrap
+msgid "x11/gnome-desktop"
+msgstr "x11/gnome-desktop"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1777
+#, no-wrap
+msgid "GNOME 3 desktop UI library"
+msgstr "Библиотека пользовательского интерфейса рабочего стола GNOME 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1778
+#, no-wrap
+msgid "`gsound`"
+msgstr "`gsound`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1779
+#, no-wrap
+msgid "audio/gsound"
+msgstr "audio/gsound"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1781
+#, no-wrap
+msgid "GObject library for playing system sounds (both, build, run)"
+msgstr "Библиотека GObject для воспроизведения системных звуков (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1782
+#, no-wrap
+msgid "`gtk-update-icon-cache`"
+msgstr "`gtk-update-icon-cache`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1783
+#, no-wrap
+msgid "graphics/gtk-update-icon-cache"
+msgstr "graphics/gtk-update-icon-cache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1785
+#, no-wrap
+msgid "Gtk-update-icon-cache utility from the Gtk+ toolkit"
+msgstr "Утилита `gtk-update-icon-cache` из набора инструментов `Gtk+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1786
+#, no-wrap
+msgid "`gtk20`"
+msgstr "`gtk20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1787
+#, no-wrap
+msgid "x11-toolkits/gtk20"
+msgstr "x11-toolkits/gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1789
+#, no-wrap
+msgid "Gtk+ 2 toolkit"
+msgstr "Набор инструментов Gtk+ 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1790
+#, no-wrap
+msgid "`gtk30`"
+msgstr "`gtk30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1791
+#, no-wrap
+msgid "x11-toolkits/gtk30"
+msgstr "x11-toolkits/gtk30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1793
+#, no-wrap
+msgid "Gtk+ 3 toolkit"
+msgstr "Набор инструментов Gtk+ 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1794
+#, no-wrap
+msgid "`gtkmm20`"
+msgstr "`gtkmm20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1795
+#, no-wrap
+msgid "x11-toolkits/gtkmm20"
+msgstr "x11-toolkits/gtkmm20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1797
+#, no-wrap
+msgid "c++ bindings 2.0 for the gtk20 toolkit"
+msgstr "C++ интерфейс 2.0 для инструментария gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1798
+#, no-wrap
+msgid "`gtkmm24`"
+msgstr "`gtkmm24`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1799
+#, no-wrap
+msgid "x11-toolkits/gtkmm24"
+msgstr "x11-toolkits/gtkmm24"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1801
+#, no-wrap
+msgid "c++ bindings 2.4 for the gtk20 toolkit"
+msgstr "C++ интерфейс 2.4 для инструментария gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1802
+#, no-wrap
+msgid "`gtkmm30`"
+msgstr "`gtkmm30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1803
+#, no-wrap
+msgid "x11-toolkits/gtkmm30"
+msgstr "x11-toolkits/gtkmm30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1805
+#, no-wrap
+msgid "c++ bindings 3.0 for the gtk30 toolkit"
+msgstr "C++ интерфейс 3.0 для набора инструментов gtk30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1806
+#, no-wrap
+msgid "`gtksourceview2`"
+msgstr "`gtksourceview2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1807
+#, no-wrap
+msgid "x11-toolkits/gtksourceview2"
+msgstr "x11-toolkits/gtksourceview2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1809
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1987
+#, no-wrap
+msgid "Widget that adds syntax highlighting to GtkTextView"
+msgstr "Виджет, добавляющий подсветку синтаксиса в GtkTextView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1810
+#, no-wrap
+msgid "`gtksourceview3`"
+msgstr "`gtksourceview3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1811
+#, no-wrap
+msgid "x11-toolkits/gtksourceview3"
+msgstr "x11-toolkits/gtksourceview3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1813
+#, no-wrap
+msgid "Text widget that adds syntax highlighting to the GtkTextView widget"
+msgstr "Текстовая виджет, добавляющая подсветку синтаксиса к виджету GtkTextView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1814
+#, no-wrap
+msgid "`gtksourceviewmm3`"
+msgstr "`gtksourceviewmm3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1815
+#, no-wrap
+msgid "x11-toolkits/gtksourceviewmm3"
+msgstr "x11-toolkits/gtksourceviewmm3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1817
+#, no-wrap
+msgid "c++ bindings for the gtksourceview3 library"
+msgstr "C++ интерфейс для библиотеки gtksourceview3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1818
+#, no-wrap
+msgid "`gvfs`"
+msgstr "`gvfs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1819
+#, no-wrap
+msgid "devel/gvfs"
+msgstr "devel/gvfs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1821
+#, no-wrap
+msgid "GNOME virtual file system"
+msgstr "Виртуальная файловая система GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1822
+#, no-wrap
+msgid "`intltool`"
+msgstr "`intltool`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1823
+#, no-wrap
+msgid "textproc/intltool"
+msgstr "textproc/intltool"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1825
+#, no-wrap
+msgid "Tool for internationalization (also see intlhack)"
+msgstr "Инструмент для интернационализации (см. также intlhack)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1826
+#, no-wrap
+msgid "`introspection`"
+msgstr "`introspection`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1827
+#, no-wrap
+msgid "devel/gobject-introspection"
+msgstr "devel/gobject-introspection"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1829
+#, 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 "Базовые привязки (биндинги) интроспекции и инструменты для генерации привязок интроспекции. В большинстве случаев достаточно `:build`, `:both`/`:run` нужны только для приложений, использующих привязки интроспекции. (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1830
+#, no-wrap
+msgid "`libgda5`"
+msgstr "`libgda5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1831
+#, no-wrap
+msgid "databases/libgda5"
+msgstr "databases/libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1833
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2003
+#, no-wrap
+msgid "Provides uniform access to different kinds of data sources"
+msgstr "Обеспечивает единообразный доступ к различным типам источников данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1834
+#, no-wrap
+msgid "`libgda5-ui`"
+msgstr "`libgda5-ui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1835
+#, no-wrap
+msgid "databases/libgda5-ui"
+msgstr "databases/libgda5-ui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1837
+#, no-wrap
+msgid "UI library from the libgda5 library"
+msgstr "Библиотека пользовательского интерфейса из библиотеки libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1838
+#, no-wrap
+msgid "`libgdamm5`"
+msgstr "`libgdamm5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1839
+#, no-wrap
+msgid "databases/libgdamm5"
+msgstr "databases/libgdamm5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1841
+#, no-wrap
+msgid "c++ bindings for the libgda5 library"
+msgstr "привязки C++ для библиотеки libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1842
+#, no-wrap
+msgid "`libgsf`"
+msgstr "`libgsf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1843
+#, no-wrap
+msgid "devel/libgsf"
+msgstr "devel/libgsf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1845
+#, 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:1846
+#, no-wrap
+msgid "`librsvg2`"
+msgstr "`librsvg2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1847
+#, no-wrap
+msgid "graphics/librsvg2"
+msgstr "graphics/librsvg2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1849
+#, no-wrap
+msgid "Library for parsing and rendering SVG vector-graphic files"
+msgstr "Библиотека для разбора и отображения SVG-файлов векторной графики"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1850
+#, no-wrap
+msgid "`libsigc++20`"
+msgstr "`libsigc++20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1851
+#, no-wrap
+msgid "devel/libsigc++20"
+msgstr "devel/libsigc++20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1853
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2047
+#, no-wrap
+msgid "Callback Framework for C++"
+msgstr "Фреймворк обратных вызовов для C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1854
+#, no-wrap
+msgid "`libxml++26`"
+msgstr "`libxml++26`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1855
+#, no-wrap
+msgid "textproc/libxml++26"
+msgstr "textproc/libxml++26"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1857
+#, no-wrap
+msgid "c++ bindings for the libxml2 library"
+msgstr "C++ привязки для библиотеки libxml2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1858
+#, no-wrap
+msgid "`libxml2`"
+msgstr "`libxml2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1859
+#, no-wrap
+msgid "textproc/libxml2"
+msgstr "textproc/libxml2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1861
+#, no-wrap
+msgid "XML parser library (both, build, run)"
+msgstr "Библиотека парсера XML (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1862
+#, no-wrap
+msgid "`libxslt`"
+msgstr "`libxslt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1863
+#, no-wrap
+msgid "textproc/libxslt"
+msgstr "textproc/libxslt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1865
+#, no-wrap
+msgid "XSLT C library (both, build, run)"
+msgstr "Библиотека XSLT (сборка, выполнение)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1866
+#, no-wrap
+msgid "`metacity`"
+msgstr "`metacity`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1867
+#, no-wrap
+msgid "x11-wm/metacity"
+msgstr "x11-wm/metacity"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1869
+#, no-wrap
+msgid "Window manager from GNOME"
+msgstr "Менеджер окон из GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1870
+#, no-wrap
+msgid "`nautilus3`"
+msgstr "`nautilus3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1871
+#, no-wrap
+msgid "x11-fm/nautilus"
+msgstr "x11-fm/nautilus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1873
+#, no-wrap
+msgid "GNOME file manager"
+msgstr "GNOME файловый менеджер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1874
+#, no-wrap
+msgid "`pango`"
+msgstr "`pango`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1875
+#, no-wrap
+msgid "x11-toolkits/pango"
+msgstr "x11-toolkits/pango"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1877
+#, 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:1878
+#, no-wrap
+msgid "`pangomm`"
+msgstr "`pangomm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1879
+#, no-wrap
+msgid "x11-toolkits/pangomm"
+msgstr "x11-toolkits/pangomm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1881
+#, no-wrap
+msgid "c++ bindings for the pango library"
+msgstr "C++ интерфейс для библиотеки pango"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1882
+#, no-wrap
+msgid "`py3gobject3`"
+msgstr "`py3gobject3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1883
+#, no-wrap
+msgid "devel/py3-gobject3"
+msgstr "devel/py3-gobject3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1885
+#, no-wrap
+msgid "Python 3, GObject 3.0 bindings"
+msgstr "Python 3, интерфейс GObject 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1886
+#, no-wrap
+msgid "`pygobject3`"
+msgstr "`pygobject3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1887
+#, no-wrap
+msgid "devel/py-gobject3"
+msgstr "devel/py-gobject3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1889
+#, no-wrap
+msgid "Python 2, GObject 3.0 bindings"
+msgstr "Python 2, интерфейс GObject 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1890
+#, no-wrap
+msgid "`vte3`"
+msgstr "`vte3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1891
+#, no-wrap
+msgid "x11-toolkits/vte3"
+msgstr "x11-toolkits/vte3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1892
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2078
+#, no-wrap
+msgid "Terminal widget with improved accessibility and I18N support"
+msgstr "Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1895
+#, no-wrap
+msgid "GNOME Macro Components"
+msgstr "Компоненты макросов GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1902
+#, no-wrap
+msgid "`gnomeprefix`"
+msgstr "`gnomeprefix`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1904
+#, no-wrap
+msgid "Supply `configure` with some default locations."
+msgstr "Предоставляет `configure` некоторые стандартные расположения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1905
+#, no-wrap
+msgid "`intlhack`"
+msgstr "`intlhack`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1907
+#, 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 "То же, что и `intltool`, но с патчами для гарантии использования [.filename]#share/locale/#. Используйте только в случае, когда одного `intltool` недостаточно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1908
+#, no-wrap
+msgid "`referencehack`"
+msgstr "`referencehack`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1909
+#, no-wrap
+msgid "This macro is there to help splitting of the API or reference documentation into its own port."
+msgstr "Этот макрос предназначен для помощи в разделении API или справочной документации на собственный порт."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1912
+#, no-wrap
+msgid "GNOME Legacy Components"
+msgstr "Компоненты GNOME Legacy"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1920
+#, no-wrap
+msgid "`atspi`"
+msgstr "`atspi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1921
+#, no-wrap
+msgid "accessibility/at-spi"
+msgstr "accessibility/at-spi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1923
+#, no-wrap
+msgid "Assistive Technology Service Provider Interface"
+msgstr "Интерфейс поставщика услуг вспомогательных технологий (AT-SPI)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1924
+#, no-wrap
+msgid "`esound`"
+msgstr "`esound`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1925
+#, no-wrap
+msgid "audio/esound"
+msgstr "audio/esound"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1927
+#, no-wrap
+msgid "Enlightenment sound package"
+msgstr "Пакет звука Enlightenment"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1928
+#, no-wrap
+msgid "`gal2`"
+msgstr "`gal2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1929
+#, no-wrap
+msgid "x11-toolkits/gal2"
+msgstr "x11-toolkits/gal2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1931
+#, no-wrap
+msgid "Collection of widgets taken from GNOME 2 gnumeric"
+msgstr "Коллекция виджетов, взятых из GNOME 2 gnumeric"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1932
+#, no-wrap
+msgid "`gconf2`"
+msgstr "`gconf2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1933
+#, no-wrap
+msgid "devel/gconf2"
+msgstr "devel/gconf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1935
+#, no-wrap
+msgid "Configuration database system for GNOME 2"
+msgstr "Система базы данных конфигурации для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1936
+#, no-wrap
+msgid "`gconfmm26`"
+msgstr "`gconfmm26`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1937
+#, no-wrap
+msgid "devel/gconfmm26"
+msgstr "devel/gconfmm26"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1939
+#, no-wrap
+msgid "c++ bindings for gconf2"
+msgstr "C++ привязки C++ для gconf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1940
+#, no-wrap
+msgid "`gdkpixbuf`"
+msgstr "`gdkpixbuf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1941
+#, no-wrap
+msgid "graphics/gdk-pixbuf"
+msgstr "graphics/gdk-pixbuf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1944
+#, no-wrap
+msgid "`glib12`"
+msgstr "`glib12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1945
+#, no-wrap
+msgid "devel/glib12"
+msgstr "devel/glib12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1947
+#, no-wrap
+msgid "glib 1.2 core library"
+msgstr "Библиотека ядра glib 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1948
+#, no-wrap
+msgid "`gnomedocutils`"
+msgstr "`gnomedocutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1949
+#, no-wrap
+msgid "textproc/gnome-doc-utils"
+msgstr "textproc/gnome-doc-utils"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1951
+#, no-wrap
+msgid "GNOME doc utils"
+msgstr "Утилиты документации GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1952
+#, no-wrap
+msgid "`gnomemimedata`"
+msgstr "`gnomemimedata`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1953
+#, no-wrap
+msgid "misc/gnome-mime-data"
+msgstr "misc/gnome-mime-data"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1955
+#, no-wrap
+msgid "MIME and Application database for GNOME 2"
+msgstr "База данных MIME и приложений для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1956
+#, no-wrap
+msgid "`gnomesharp20`"
+msgstr "`gnomesharp20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1957
+#, no-wrap
+msgid "x11-toolkits/gnome-sharp20"
+msgstr "x11-toolkits/gnome-sharp20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1959
+#, no-wrap
+msgid "GNOME 2 interfaces for the .NET runtime"
+msgstr "Интерфейсы GNOME 2 для среды выполнения .NET"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1960
+#, no-wrap
+msgid "`gnomespeech`"
+msgstr "`gnomespeech`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1961
+#, no-wrap
+msgid "accessibility/gnome-speech"
+msgstr "accessibility/gnome-speech"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1963
+#, no-wrap
+msgid "GNOME 2 text-to-speech API"
+msgstr "GNOME 2 API преобразования текста в речь"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1964
+#, no-wrap
+msgid "`gnomevfs2`"
+msgstr "`gnomevfs2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1965
+#, no-wrap
+msgid "devel/gnome-vfs"
+msgstr "devel/gnome-vfs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1967
+#, no-wrap
+msgid "GNOME 2 Virtual File System"
+msgstr "Виртуальная файловая система GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1968
+#, no-wrap
+msgid "`gtk12`"
+msgstr "`gtk12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1969
+#, no-wrap
+msgid "x11-toolkits/gtk12"
+msgstr "x11-toolkits/gtk12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1971
+#, no-wrap
+msgid "Gtk+ 1.2 toolkit"
+msgstr "Набор инструментов Gtk+ 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1972
+#, no-wrap
+msgid "`gtkhtml3`"
+msgstr "`gtkhtml3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1973
+#, no-wrap
+msgid "www/gtkhtml3"
+msgstr "www/gtkhtml3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1975
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1979
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2035
+#, no-wrap
+msgid "Lightweight HTML rendering/printing/editing engine"
+msgstr "Облегченный движок для отображения/печати/редактирования HTML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1976
+#, no-wrap
+msgid "`gtkhtml4`"
+msgstr "`gtkhtml4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1977
+#, no-wrap
+msgid "www/gtkhtml4"
+msgstr "www/gtkhtml4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1980
+#, no-wrap
+msgid "`gtksharp20`"
+msgstr "`gtksharp20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1981
+#, no-wrap
+msgid "x11-toolkits/gtk-sharp20"
+msgstr "x11-toolkits/gtk-sharp20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1983
+#, no-wrap
+msgid "GTK+ and GNOME 2 interfaces for the .NET runtime"
+msgstr "Интерфейсы GTK+ и GNOME 2 для среды выполнения .NET"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1984
+#, no-wrap
+msgid "`gtksourceview`"
+msgstr "`gtksourceview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1985
+#, no-wrap
+msgid "x11-toolkits/gtksourceview"
+msgstr "x11-toolkits/gtksourceview"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1988
+#, no-wrap
+msgid "`libartgpl2`"
+msgstr "`libartgpl2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1989
+#, no-wrap
+msgid "graphics/libart_lgpl"
+msgstr "graphics/libart_lgpl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1991
+#, no-wrap
+msgid "Library for high-performance 2D graphics"
+msgstr "Библиотека для высокопроизводительной 2D графики"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1992
+#, no-wrap
+msgid "`libbonobo`"
+msgstr "`libbonobo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1993
+#, no-wrap
+msgid "devel/libbonobo"
+msgstr "devel/libbonobo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1995
+#, no-wrap
+msgid "Component and compound document system for GNOME 2"
+msgstr "Система компонентов и составных документов для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1996
+#, no-wrap
+msgid "`libbonoboui`"
+msgstr "`libbonoboui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1997
+#, no-wrap
+msgid "x11-toolkits/libbonoboui"
+msgstr "x11-toolkits/libbonoboui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1999
+#, no-wrap
+msgid "GUI frontend to the libbonobo component of GNOME 2"
+msgstr "Интерфейс для libbonobo в GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2000
+#, no-wrap
+msgid "`libgda4`"
+msgstr "`libgda4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2001
+#, no-wrap
+msgid "databases/libgda4"
+msgstr "databases/libgda4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2004
+#, no-wrap
+msgid "`libglade2`"
+msgstr "`libglade2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2005
+#, no-wrap
+msgid "devel/libglade2"
+msgstr "devel/libglade2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2007
+#, no-wrap
+msgid "GNOME 2 glade library"
+msgstr "Библиотека glade для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2008
+#, no-wrap
+msgid "`libgnome`"
+msgstr "`libgnome`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2009
+#, no-wrap
+msgid "x11/libgnome"
+msgstr "x11/libgnome"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2011
+#, no-wrap
+msgid "Libraries for GNOME 2, a GNU desktop environment"
+msgstr "Библиотеки для GNOME 2, GNU окружения рабочего стола"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2012
+#, no-wrap
+msgid "`libgnomecanvas`"
+msgstr "`libgnomecanvas`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2013
+#, no-wrap
+msgid "graphics/libgnomecanvas"
+msgstr "graphics/libgnomecanvas"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2015
+#, no-wrap
+msgid "Graphics library for GNOME 2"
+msgstr "Графическая библиотека для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2016
+#, no-wrap
+msgid "`libgnomekbd`"
+msgstr "`libgnomekbd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2017
+#, no-wrap
+msgid "x11/libgnomekbd"
+msgstr "x11/libgnomekbd"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2019
+#, no-wrap
+msgid "GNOME 2 keyboard shared library"
+msgstr "Динамическая библиотека клавиатуры GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2020
+#, no-wrap
+msgid "`libgnomeprint`"
+msgstr "`libgnomeprint`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2021
+#, no-wrap
+msgid "print/libgnomeprint"
+msgstr "print/libgnomeprint"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2023
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2027
+#, no-wrap
+msgid "Gnome 2 print support library"
+msgstr "Библиотека поддержки печати Gnome 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2024
+#, no-wrap
+msgid "`libgnomeprintui`"
+msgstr "`libgnomeprintui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2025
+#, no-wrap
+msgid "x11-toolkits/libgnomeprintui"
+msgstr "x11-toolkits/libgnomeprintui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2028
+#, no-wrap
+msgid "`libgnomeui`"
+msgstr "`libgnomeui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2029
+#, no-wrap
+msgid "x11-toolkits/libgnomeui"
+msgstr "x11-toolkits/libgnomeui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2031
+#, no-wrap
+msgid "Libraries for the GNOME 2 GUI, a GNU desktop environment"
+msgstr "Библиотеки для графического интерфейса GNOME 2, среды рабочего стола GNU"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2032
+#, no-wrap
+msgid "`libgtkhtml`"
+msgstr "`libgtkhtml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2033
+#, no-wrap
+msgid "www/libgtkhtml"
+msgstr "www/libgtkhtml"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2036
+#, no-wrap
+msgid "`libgtksourceviewmm`"
+msgstr "`libgtksourceviewmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2037
+#, no-wrap
+msgid "x11-toolkits/libgtksourceviewmm"
+msgstr "x11-toolkits/libgtksourceviewmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2039
+#, no-wrap
+msgid "c++ binding of GtkSourceView"
+msgstr "C++ интерфейс GtkSourceView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2040
+#, no-wrap
+msgid "`libidl`"
+msgstr "`libidl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2041
+#, no-wrap
+msgid "devel/libIDL"
+msgstr "devel/libIDL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2043
+#, no-wrap
+msgid "Library for creating trees of CORBA IDL file"
+msgstr "Библиотека для создания деревьев файлов CORBA IDL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2044
+#, no-wrap
+msgid "`libsigc++12`"
+msgstr "`libsigc++12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2045
+#, no-wrap
+msgid "devel/libsigc++12"
+msgstr "devel/libsigc++12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2048
+#, no-wrap
+msgid "`libwnck`"
+msgstr "`libwnck`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2049
+#, no-wrap
+msgid "x11-toolkits/libwnck"
+msgstr "x11-toolkits/libwnck"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2051
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2055
+#, no-wrap
+msgid "Library used for writing pagers and taskslists"
+msgstr "Библиотека, используемая для написания пейджеров и списков задач"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2052
+#, no-wrap
+msgid "`libwnck3`"
+msgstr "`libwnck3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2053
+#, no-wrap
+msgid "x11-toolkits/libwnck3"
+msgstr "x11-toolkits/libwnck3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2056
+#, no-wrap
+msgid "`orbit2`"
+msgstr "`orbit2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2057
+#, no-wrap
+msgid "devel/ORBit2"
+msgstr "devel/ORBit2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2059
+#, no-wrap
+msgid "High-performance CORBA ORB with support for the C language"
+msgstr "Высокопроизводительный CORBA ORB с поддержкой языка C"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2060
+#, no-wrap
+msgid "`pygnome2`"
+msgstr "`pygnome2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2061
+#, no-wrap
+msgid "x11-toolkits/py-gnome2"
+msgstr "x11-toolkits/py-gnome2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2063
+#, no-wrap
+msgid "Python bindings for GNOME 2"
+msgstr "Интерфейс Python для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2064
+#, no-wrap
+msgid "`pygobject`"
+msgstr "`pygobject`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2065
+#, no-wrap
+msgid "devel/py-gobject"
+msgstr "devel/py-gobject"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2067
+#, no-wrap
+msgid "Python 2, GObject 2.0 bindings"
+msgstr "Python 2, интерфейс GObject 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2068
+#, no-wrap
+msgid "`pygtk2`"
+msgstr "`pygtk2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2069
+#, no-wrap
+msgid "x11-toolkits/py-gtk2"
+msgstr "x11-toolkits/py-gtk2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2071
+#, no-wrap
+msgid "Set of Python bindings for GTK+"
+msgstr "Набор интерфейсов Python для GTK+"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2072
+#, no-wrap
+msgid "`pygtksourceview`"
+msgstr "`pygtksourceview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2073
+#, no-wrap
+msgid "x11-toolkits/py-gtksourceview"
+msgstr "x11-toolkits/py-gtksourceview"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2075
+#, no-wrap
+msgid "Python bindings for GtkSourceView 2"
+msgstr "Интерфейс Python для GtkSourceView 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2076
+#, no-wrap
+msgid "`vte`"
+msgstr "`vte`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2077
+#, no-wrap
+msgid "x11-toolkits/vte"
+msgstr "x11-toolkits/vte"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2081
+#, no-wrap
+msgid "Deprecated Components: Do Not Use"
+msgstr "Устаревшие компоненты: не использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2088
+#, no-wrap
+msgid "`pangox-compat`"
+msgstr "`pangox-compat`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2089
+#, no-wrap
+msgid "pangox-compat has been deprecated and split off from the pango package."
+msgstr "pangox-compat устарел и был отделён от пакета pango."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2092
+#, no-wrap
+msgid "Using Qt"
+msgstr "Использование Qt"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2097
+msgid ""
+"For ports that are part of Qt itself, see crossref:uses[uses-qt-dist,`qt-"
+"dist`]."
+msgstr ""
+"Для портов, которые являются частью самого Qt, см. crossref:uses[uses-qt-"
+"dist,`qt-dist`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2100
+#, no-wrap
+msgid "Ports That Require Qt"
+msgstr "Порты, требующие Qt"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2105
+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 ""
+"Коллекция портов поддерживает Qt 5 и Qt 6 с помощью `USES+=qt:5` и "
+"`USES+=qt:6` соответственно. Установите `USE_QT` в список необходимых "
+"компонентов Qt (libraries, tools, plugins - библиотеки, инструменты, "
+"плагины)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2107
+msgid ""
+"The Qt framework exports a number of variables which can be used by ports, "
+"some of them listed below:"
+msgstr ""
+"Фреймворк Qt экспортирует ряд переменных, которые могут использоваться "
+"портами, некоторые из них перечислены ниже:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2109
+#, no-wrap
+msgid "Variables Provided to Ports That Use Qt"
+msgstr "Переменные, предоставляемые портам, использующим Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2113
+#, no-wrap
+msgid "`QMAKE`"
+msgstr "`QMAKE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2115
+#, no-wrap
+msgid "Full path to `qmake` binary."
+msgstr "Полный путь к исполняемому файлу `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2116
+#, no-wrap
+msgid "`LRELEASE`"
+msgstr "`LRELEASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2118
+#, no-wrap
+msgid "Full path to `lrelease` utility."
+msgstr "Полный путь к утилите `lrelease`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2119
+#, no-wrap
+msgid "`MOC`"
+msgstr "`MOC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2121
+#, no-wrap
+msgid "Full path to `moc`."
+msgstr "Полный путь к `moc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2122
+#, no-wrap
+msgid "`RCC`"
+msgstr "`RCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2124
+#, no-wrap
+msgid "Full path to `rcc`."
+msgstr "Полный путь к `rcc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2125
+#, no-wrap
+msgid "`UIC`"
+msgstr "`UIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2127
+#, no-wrap
+msgid "Full path to `uic`."
+msgstr "Полный путь к `uic`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2128
+#, no-wrap
+msgid "`QT_INCDIR`"
+msgstr "`QT_INCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2130
+#, no-wrap
+msgid "Qt include directory."
+msgstr "Каталог включаемых файлов Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2131
+#, no-wrap
+msgid "`QT_LIBDIR`"
+msgstr "`QT_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2133
+#, no-wrap
+msgid "Qt libraries path."
+msgstr "Путь к библиотекам Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2134
+#, no-wrap
+msgid "`QT_PLUGINDIR`"
+msgstr "`QT_PLUGINDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2135
+#, no-wrap
+msgid "Qt plugins path."
+msgstr "Путь к плагинам Qt."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2138
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3857
+#, no-wrap
+msgid "Component Selection"
+msgstr "Выбор компонентов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2145
+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 ""
+"Отдельные зависимости инструментов и библиотек Qt должны быть указаны в "
+"`USE_QT`. Каждый компонент может иметь суффикс `_build` или `_run`, "
+"указывающий, требуется ли компонент во время сборки или выполнения. Если "
+"суффикс отсутствует, компонент будет требоваться как во время сборки, так и "
+"во время выполнения. Обычно компоненты библиотек указываются без суффикса, "
+"компоненты инструментов чаще всего указываются с суффиксом `_build`, а "
+"компоненты плагинов — с суффиксом `_run`. Наиболее часто используемые "
+"компоненты перечислены ниже (все доступные компоненты перечислены в "
+"`_USE_QT_ALL`, которая формируется из `_USE_QT_COMMON` и `_USE_QT[56]_ONLY` "
+"в [.filename]#/usr/ports/Mk/Uses/qt.mk#):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2147
+#, no-wrap
+msgid "Available Qt Library Components"
+msgstr "Доступные компоненты библиотеки Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2151
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2395
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2412
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2545
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3125
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3847
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3867
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3892
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3996
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4166
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4218
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4310
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4401
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4463
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4724
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2154
+#, no-wrap
+msgid "`3d`"
+msgstr "`3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2156
+#, no-wrap
+msgid "Qt3D module"
+msgstr "Модуль Qt3D"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2157
+#, no-wrap
+msgid "`5compat`"
+msgstr "`5compat`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2159
+#, no-wrap
+msgid "Qt 5 compatibility module for Qt 6"
+msgstr "Модуль совместимости Qt 5 для Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2160
+#, no-wrap
+msgid "`assistant`"
+msgstr "`assistant`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2162
+#, no-wrap
+msgid "Qt 5 documentation browser"
+msgstr "Браузер документации Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2163
+#, no-wrap
+msgid "`base`"
+msgstr "`base`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2165
+#, no-wrap
+msgid "Qt 6 base module"
+msgstr "Модуль Qt 6 base"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2166
+#, no-wrap
+msgid "`canvas3d`"
+msgstr "`canvas3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2168
+#, no-wrap
+msgid "Qt canvas3d module"
+msgstr "Модуль Qt canvas3d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2169
+#, no-wrap
+msgid "`charts`"
+msgstr "`charts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2171
+#, no-wrap
+msgid "Qt 5 charts module"
+msgstr "Модуль Qt 5 charts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2172
+#, no-wrap
+msgid "`concurrent`"
+msgstr "`concurrent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2174
+#, no-wrap
+msgid "Qt multi-threading module"
+msgstr "Модуль многопоточности Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2175
+#, no-wrap
+msgid "`connectivity`"
+msgstr "`connectivity`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2177
+#, no-wrap
+msgid "Qt connectivity (Bluetooth/NFC) module"
+msgstr "Модуль Qt для подключения (Bluetooth/NFC)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2178
+#, no-wrap
+msgid "`core`"
+msgstr "`core`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2180
+#, no-wrap
+msgid "Qt core non-graphical module"
+msgstr "Ядро Qt, неграфический модуль"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2181
+#, no-wrap
+msgid "`datavis3d`"
+msgstr "`datavis3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2183
+#, no-wrap
+msgid "Qt 5 3D data visualization module"
+msgstr "Модуль визуализации 3D данных Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2184
+#, no-wrap
+msgid "`dbus`"
+msgstr "`dbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2186
+#, no-wrap
+msgid "Qt D-Bus inter-process communication module"
+msgstr "Модуль межпроцессного взаимодействия Qt D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2187
+#, no-wrap
+msgid "`declarative`"
+msgstr "`declarative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2189
+#, no-wrap
+msgid "Qt declarative framework for dynamic user interfaces"
+msgstr "Декларативный фреймворк Qt для динамических пользовательских интерфейсов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2190
+#, no-wrap
+msgid "`designer`"
+msgstr "`designer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2192
+#, no-wrap
+msgid "Qt 5 graphical user interface designer"
+msgstr "Интерфейсный конструктор Qt 5 для графического пользовательского интерфейса"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2193
+#, no-wrap
+msgid "`diag`"
+msgstr "`diag`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2195
+#, no-wrap
+msgid "Tool for reporting diagnostic information about Qt and its environment"
+msgstr "Инструмент для сбора диагностической информации о Qt и его окружении"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2196
+#, no-wrap
+msgid "`doc`"
+msgstr "`doc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2198
+#, no-wrap
+msgid "Qt 5 documentation"
+msgstr "Документация Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2199
+#, no-wrap
+msgid "`examples`"
+msgstr "`examples`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2201
+#, no-wrap
+msgid "Qt 5 examples sourcecode"
+msgstr "Исходный код примеров Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2202
+#, no-wrap
+msgid "`gamepad`"
+msgstr "`gamepad`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2204
+#, no-wrap
+msgid "Qt 5 Gamepad Module"
+msgstr "Модуль Qt 5 Gamepad"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2205
+#, no-wrap
+msgid "`graphicaleffects`"
+msgstr "`graphicaleffects`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2207
+#, no-wrap
+msgid "Qt Quick graphical effects"
+msgstr "Графические эффекты Qt Quick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2208
+#, no-wrap
+msgid "`gui`"
+msgstr "`gui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2210
+#, no-wrap
+msgid "Qt graphical user interface module"
+msgstr "Модуль графического интерфейса Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2211
+#, no-wrap
+msgid "`help`"
+msgstr "`help`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2213
+#, no-wrap
+msgid "Qt online help integration module"
+msgstr "Модуль интеграции справки Qt в режиме онлайн"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2214
+#, no-wrap
+msgid "`l10n`"
+msgstr "`l10n`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2216
+#, no-wrap
+msgid "Qt localized messages"
+msgstr "Локализованные сообщения Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2217
+#, no-wrap
+msgid "`languageserver`"
+msgstr "`languageserver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2219
+#, no-wrap
+msgid "Qt 6 Language Server Protocol implementation"
+msgstr "Реализация протокола Language Server Protocol в Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2220
+#, no-wrap
+msgid "`linguist`"
+msgstr "`linguist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2222
+#, no-wrap
+msgid "Qt 5 translation tool"
+msgstr "Инструмент перевода Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2223
+#, no-wrap
+msgid "`location`"
+msgstr "`location`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2225
+#, no-wrap
+msgid "Qt location module"
+msgstr "Модуль Qt Location"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2226
+#, no-wrap
+msgid "`lottie`"
+msgstr "`lottie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2228
+#, no-wrap
+msgid "Qt 6 QML API for rendering graphics and animations"
+msgstr "Qt 6 QML API для отрисовки графики и анимаций"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2229
+#, no-wrap
+msgid "`multimedia`"
+msgstr "`multimedia`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2231
+#, no-wrap
+msgid "Qt audio, video, radio and camera support module"
+msgstr "Модуль поддержки аудио, видео, радио и камеры Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2232
+#, no-wrap
+msgid "`network`"
+msgstr "`network`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2234
+#, no-wrap
+msgid "Qt network module"
+msgstr "Сетевой модуль Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2235
+#, no-wrap
+msgid "`networkauth`"
+msgstr "`networkauth`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2237
+#, no-wrap
+msgid "Qt network auth module"
+msgstr "Модуль сетевой аутентификации Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2238
+#, no-wrap
+msgid "`opengl`"
+msgstr "`opengl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2240
+#, no-wrap
+msgid "Qt 5-compatible OpenGL support module"
+msgstr "Модуль поддержки OpenGL, совместимый с Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2241
+#, no-wrap
+msgid "`paths`"
+msgstr "`paths`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2243
+#, no-wrap
+msgid "Command line client to QStandardPaths"
+msgstr "Клиент командной строки для QStandardPaths"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2244
+#, no-wrap
+msgid "`phonon4`"
+msgstr "`phonon4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2246
+#, no-wrap
+msgid "KDE multimedia framework"
+msgstr "Мультимедийный фреймворк KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2247
+#, no-wrap
+msgid "`pixeltool`"
+msgstr "`pixeltool`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2249
+#, no-wrap
+msgid "Qt 5 screen magnifier"
+msgstr "Увеличитель экрана Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2250
+#, no-wrap
+msgid "`plugininfo`"
+msgstr "`plugininfo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2252
+#, no-wrap
+msgid "Qt 5 plugin metadata dumper"
+msgstr "Дампер метаданных плагинов Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2253
+#, no-wrap
+msgid "`positioning`"
+msgstr "`positioning`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2255
+#, no-wrap
+msgid "Qt 6 positioning API from sources such as satellite, wifi or text files."
+msgstr "Qt 6 API позиционирования из источников, таких как спутники, Wi-Fi или текстовые файлы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2256
+#, no-wrap
+msgid "`printsupport`"
+msgstr "`printsupport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2258
+#, no-wrap
+msgid "Qt print support module"
+msgstr "Модуль поддержки печати Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2259
+#, no-wrap
+msgid "`qdbus`"
+msgstr "`qdbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2261
+#, no-wrap
+msgid "Qt command-line interface to D-Bus"
+msgstr "Интерфейс командной строки Qt для D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2262
+#, no-wrap
+msgid "`qdbusviewer`"
+msgstr "`qdbusviewer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2264
+#, no-wrap
+msgid "Qt 5 graphical interface to D-Bus"
+msgstr "Графический интерфейс Qt 5 для D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2265
+#, no-wrap
+msgid "`qdoc`"
+msgstr "`qdoc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2267
+#, no-wrap
+msgid "Qt documentation generator"
+msgstr "Генератор документации Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2268
+#, no-wrap
+msgid "`qdoc-data`"
+msgstr "`qdoc-data`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2270
+#, no-wrap
+msgid "QDoc configuration files"
+msgstr "Файлы конфигурации QDoc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2271
+#, no-wrap
+msgid "`qev`"
+msgstr "`qev`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2273
+#, no-wrap
+msgid "Qt QWidget events introspection tool"
+msgstr "Инструмент для интроспекции событий Qt QWidget"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2274
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2404
+#, no-wrap
+msgid "`qmake`"
+msgstr "`qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2276
+#, no-wrap
+msgid "Qt Makefile generator"
+msgstr "Генератор Makefile Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2277
+#, no-wrap
+msgid "`quickcontrols`"
+msgstr "`quickcontrols`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2279
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2282
+#, no-wrap
+msgid "Set of controls for building complete interfaces in Qt Quick"
+msgstr "Набор элементов управления для создания полных интерфейсов в Qt Quick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2280
+#, no-wrap
+msgid "`quickcontrols2`"
+msgstr "`quickcontrols2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2283
+#, no-wrap
+msgid "`remoteobjects`"
+msgstr "`remoteobjects`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2285
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2294
+#, no-wrap
+msgid "Qt 5 SXCML module"
+msgstr "Модуль Qt 5 SXCML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2286
+#, no-wrap
+msgid "`script`"
+msgstr "`script`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2288
+#, no-wrap
+msgid "Qt 4-compatible scripting module"
+msgstr "Совместимый с Qt 4 модуль для написания сценариев"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2289
+#, no-wrap
+msgid "`scripttools`"
+msgstr "`scripttools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2291
+#, no-wrap
+msgid "Qt Script additional components"
+msgstr "Дополнительные компоненты Qt Script"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2292
+#, no-wrap
+msgid "`scxml`"
+msgstr "`scxml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2295
+#, no-wrap
+msgid "`sensors`"
+msgstr "`sensors`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2297
+#, no-wrap
+msgid "Qt sensors module"
+msgstr "Модуль Qt sensors"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2298
+#, no-wrap
+msgid "`serialbus`"
+msgstr "`serialbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2300
+#, no-wrap
+msgid "Qt functions to access industrial bus systems"
+msgstr "Функции Qt для доступа к промышленным шинным системам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2301
+#, no-wrap
+msgid "`serialport`"
+msgstr "`serialport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2303
+#, no-wrap
+msgid "Qt functions to access serial ports"
+msgstr "Функции Qt для доступа к последовательным портам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2304
+#, no-wrap
+msgid "`shadertools`"
+msgstr "`shadertools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2306
+#, no-wrap
+msgid "Qt 6 tools for the cross-platform Qt shader pipeline"
+msgstr "Инструменты Qt 6 для кроссплатформенного конвейера шейдеров Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2307
+#, no-wrap
+msgid "`speech`"
+msgstr "`speech`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2309
+#, no-wrap
+msgid "Accessibility features for Qt5"
+msgstr "Доступность в Qt5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2310
+#, no-wrap
+msgid "`sql`"
+msgstr "`sql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2312
+#, no-wrap
+msgid "Qt SQL database integration module"
+msgstr "Модуль интеграции с базой данных Qt SQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2313
+#, no-wrap
+msgid "`sql-ibase`"
+msgstr "`sql-ibase`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2315
+#, no-wrap
+msgid "Qt InterBase/Firebird database plugin"
+msgstr "Плагин Qt баз данных InterBase/Firebird"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2316
+#, no-wrap
+msgid "`sql-mysql`"
+msgstr "`sql-mysql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2318
+#, no-wrap
+msgid "Qt MySQL database plugin"
+msgstr "Плагин Qt базы данных MySQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2319
+#, no-wrap
+msgid "`sql-odbc`"
+msgstr "`sql-odbc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2321
+#, no-wrap
+msgid "Qt Open Database Connectivity plugin"
+msgstr "Плагин Qt ODBC"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2322
+#, no-wrap
+msgid "`sql-pgsql`"
+msgstr "`sql-pgsql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2324
+#, no-wrap
+msgid "Qt PostgreSQL database plugin"
+msgstr "Плагин Qt базы данных PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2325
+#, no-wrap
+msgid "`sql-sqlite2`"
+msgstr "`sql-sqlite2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2327
+#, no-wrap
+msgid "Qt SQLite 2 database plugin"
+msgstr "Плагин Qt базы данных SQLite 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2328
+#, no-wrap
+msgid "`sql-sqlite3`"
+msgstr "`sql-sqlite3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2330
+#, no-wrap
+msgid "Qt SQLite 3 database plugin"
+msgstr "Плагин Qt базы данных SQLite 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2331
+#, no-wrap
+msgid "`sql-tds`"
+msgstr "`sql-tds`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2333
+#, no-wrap
+msgid "Qt TDS Database Connectivity database plugin"
+msgstr "Плагин Qt для подключение к базам данных по протоколу TDS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2334
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3926
+#, no-wrap
+msgid "`svg`"
+msgstr "`svg`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2336
+#, no-wrap
+msgid "Qt SVG support module"
+msgstr "Модуль поддержки SVG в Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2337
+#, no-wrap
+msgid "`testlib`"
+msgstr "`testlib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2339
+#, no-wrap
+msgid "Qt unit testing module"
+msgstr "Модуль тестирования Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2340
+#, no-wrap
+msgid "`tools`"
+msgstr "`tools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2342
+#, no-wrap
+msgid "Qt 6 assorted tools"
+msgstr "Различные инструменты Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2343
+#, no-wrap
+msgid "`translations`"
+msgstr "`translations`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2345
+#, no-wrap
+msgid "Qt 6 translation module"
+msgstr "Модуль перевода Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2346
+#, no-wrap
+msgid "`uiplugin`"
+msgstr "`uiplugin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2348
+#, no-wrap
+msgid "Custom Qt widget plugin interface for Qt Designer"
+msgstr "Интерфейс плагина пользовательского виджета Qt для Qt Designer"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2349
+#, no-wrap
+msgid "`uitools`"
+msgstr "`uitools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2351
+#, no-wrap
+msgid "Qt Designer UI forms support module"
+msgstr "Модуль поддержки форм пользовательского интерфейса Qt Designer"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2352
+#, no-wrap
+msgid "`virtualkeyboard`"
+msgstr "`virtualkeyboard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2354
+#, no-wrap
+msgid "Qt 5 Virtual Keyboard Module"
+msgstr "Модуль виртуальной клавиатуры Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2355
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3079
+#, no-wrap
+msgid "`wayland`"
+msgstr "`wayland`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2357
+#, no-wrap
+msgid "Qt 5 wrapper for Wayland"
+msgstr "Оболочка Qt 5 для Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2358
+#, no-wrap
+msgid "`webchannel`"
+msgstr "`webchannel`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2360
+#, no-wrap
+msgid "Qt 5 library for integration of C++/QML with HTML/js clients"
+msgstr "Библиотека Qt 5 для интеграции C++/QML с клиентами на HTML/js"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2361
+#, no-wrap
+msgid "`webengine`"
+msgstr "`webengine`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2363
+#, no-wrap
+msgid "Qt 5 library to render web content"
+msgstr "Библиотека Qt 5 для отображения веб-содержимого"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2364
+#, no-wrap
+msgid "`webkit`"
+msgstr "`webkit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2366
+#, no-wrap
+msgid "QtWebKit with a more modern WebKit code base"
+msgstr "QtWebKit с более современной кодовой базой WebKit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2367
+#, no-wrap
+msgid "`websockets`"
+msgstr "`websockets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2369
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol"
+msgstr "Реализация протокола WebSocket на Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2370
+#, no-wrap
+msgid "`websockets-qml`"
+msgstr "`websockets-qml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2372
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol (QML bindings)"
+msgstr "Реализация протокола WebSocket на Qt (привязки QML)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2373
+#, no-wrap
+msgid "`webview`"
+msgstr "`webview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2375
+#, no-wrap
+msgid "Qt component for displaying web content"
+msgstr "Компонент Qt для отображения веб-содержимого"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2376
+#, no-wrap
+msgid "`widgets`"
+msgstr "`widgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2378
+#, no-wrap
+msgid "Qt C++ widgets module"
+msgstr "Модуль виджетов Qt C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2379
+#, no-wrap
+msgid "`x11extras`"
+msgstr "`x11extras`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2381
+#, no-wrap
+msgid "Qt platform-specific features for X11-based systems"
+msgstr "Платформо-специфичные возможности Qt для систем на основе X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2382
+#, no-wrap
+msgid "`xml`"
+msgstr "`xml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2384
+#, no-wrap
+msgid "Qt SAX and DOM implementations"
+msgstr "Реализации SAX и DOM в Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2385
+#, no-wrap
+msgid "`xmlpatterns`"
+msgstr "`xmlpatterns`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2386
+#, no-wrap
+msgid "Qt support for XPath, XQuery, XSLT and XML Schema"
+msgstr "Поддержка Qt для XPath, XQuery, XSLT и XML Schema"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2389
+msgid ""
+"To determine the libraries an application depends on, run `ldd` on the main "
+"executable after a successful compilation."
+msgstr ""
+"Чтобы определить библиотеки, от которых зависит приложение, выполните `ldd` "
+"для основного исполняемого файла после успешной компиляции."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2391
+#, no-wrap
+msgid "Available Qt Tool Components"
+msgstr "Доступные компоненты инструментов Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2398
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3128
+#, no-wrap
+msgid "`buildtools`"
+msgstr "`buildtools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2400
+#, no-wrap
+msgid "build tools (`moc`, `rcc`), needed for almost every Qt application."
+msgstr "инструменты сборки (`moc`, `rcc`), необходимые практически для любого приложения Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2401
+#, no-wrap
+msgid "`linguisttools`"
+msgstr "`linguisttools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2403
+#, no-wrap
+msgid "localization tools: `lrelease`, `lupdate`"
+msgstr "инструменты локализации: `lrelease`, `lupdate`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2405
+#, no-wrap
+msgid "Makefile generator/build utility"
+msgstr "Генератор Makefile/утилита сборки"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2408
+#, no-wrap
+msgid "Available Qt Plugin Components"
+msgstr "Доступные компоненты плагинов Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2415
+#, no-wrap
+msgid "`imageformats`"
+msgstr "`imageformats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2416
+#, no-wrap
+msgid "plugins for TGA, TIFF, and MNG image formats"
+msgstr "плагины для графических форматов TGA, TIFF и MNG"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2419
+#, no-wrap
+msgid "Selecting Qt 5 Components"
+msgstr "Выбор компонентов Qt 5"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2425
+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 ""
+"В этом примере портированное приложение использует библиотеку графического "
+"интерфейса Qt 5, основную библиотеку Qt 5, все инструменты генерации кода Qt "
+"5 и генератор Makefile Qt 5. Поскольку библиотека `gui` подразумевает "
+"зависимость от основной библиотеки, `core` не нужно указывать. Инструменты "
+"генерации кода Qt 5 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` "
+"требуются только во время сборки, поэтому они указаны с суффиксом `_build`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2430
+#, no-wrap
+msgid ""
+"USES=\tqt:5\n"
+"USE_QT=\tgui buildtools_build qmake_build\n"
+msgstr ""
+"USES=\tqt:5\n"
+"USE_QT=\tgui buildtools_build qmake_build\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2435
+#, no-wrap
+msgid "Using `qmake`"
+msgstr "Использование `qmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2443
+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 crossref:special[using-cmake,CMake], qmake supports "
+"out-of-source builds, which can be enabled by specifying the `outsource` "
+"argument (see crossref:special[using-qmake-example,`USES= qmake` example]). "
+"Also see crossref:special[using-qmake-arguments,Possible Arguments for `USES "
+"qmake`]."
+msgstr ""
+"Если приложение предоставляет файл проекта qmake ([.filename]#*.pro#), "
+"определите `USES= qmake` вместе с `USE_QT`. `USES= qmake` уже подразумевает "
+"зависимость сборки от qmake, поэтому компонент qmake может быть опущен в "
+"`USE_QT`. Подобно crossref:special[using-cmake,CMake], qmake поддерживает "
+"сборку вне исходного дерева, которую можно включить, указав аргумент "
+"`outsource` (см. crossref:special[using-qmake-example,пример `USES= "
+"qmake`]). Также см. crossref:special[using-qmake-arguments,Возможные "
+"аргументы для `USES qmake`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2445
+#, no-wrap
+msgid "Possible Arguments for `USES= qmake`"
+msgstr "Возможные аргументы для `USES= qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2452
+#, no-wrap
+msgid "`no_configure`"
+msgstr "`no_configure`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2454
+#, 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 "Не добавлять цель configure. Это подразумевается при `HAS_CONFIGURE=yes` и `GNU_CONFIGURE=yes`. Это требуется, когда сборке нужна только настройка окружения из `USES= qmake`, но в остальном она запускает `qmake` самостоятельно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2455
+#, no-wrap
+msgid "`no_env`"
+msgstr "`no_env`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2457
+#, 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 "Подавить модификацию окружения configure и make. Это требуется только когда `qmake` используется для настройки программного обеспечения и сборка не понимает окружение, установленное `USES= qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2458
+#, no-wrap
+msgid "`norecursive`"
+msgstr "`norecursive`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2460
+#, no-wrap
+msgid "Do not pass the `-recursive` argument to `qmake`."
+msgstr "Не передавать аргумент `-recursive` в `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2461
+#, no-wrap
+msgid "`outsource`"
+msgstr "`outsource`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2462
+#, no-wrap
+msgid "Perform an out-of-source build."
+msgstr "Выполнить сборку вне исходного кода."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2465
+#, no-wrap
+msgid "Variables for Ports That Use `qmake`"
+msgstr "Переменные для портов, использующих `qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2472
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr "`QMAKE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2474
+#, no-wrap
+msgid "Port specific qmake flags to be passed to the `qmake` binary."
+msgstr "Специфичные для порта флаги qmake, передаваемые в бинарный файл `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2475
+#, no-wrap
+msgid "`QMAKE_ENV`"
+msgstr "`QMAKE_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2477
+#, no-wrap
+msgid "Environment variables to be set for the `qmake` binary. The default is `${CONFIGURE_ENV}`."
+msgstr "Переменные окружения, которые должны быть установлены для бинарного файла `qmake`. По умолчанию используется `${CONFIGURE_ENV}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2478
+#, no-wrap
+msgid "`QMAKE_SOURCE_PATH`"
+msgstr "`QMAKE_SOURCE_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2479
+#, 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 "Путь к файлам проекта qmake ([.filename]#.pro#). По умолчанию используется `${WRKSRC}`, если запрошена сборка вне исходного кода, в противном случае оставляется пустым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2482
+msgid "When using `USES= qmake`, these settings are deployed:"
+msgstr "При использовании `USES= qmake` применяются следующие настройки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2489
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2493
+#, no-wrap
+msgid ""
+"CONFIGURE_ENV+=\tQTDIR=\"${QT_PREFIX}\" QMAKE=\"${QMAKE}\" \\\n"
+"\t\tMOC=\"${MOC}\" RCC=\"${RCC}\" UIC=\"${UIC}\" \\\n"
+"\t\tQMAKESPEC=\"${QMAKESPEC}\"\n"
+msgstr ""
+"CONFIGURE_ENV+=\tQTDIR=\"${QT_PREFIX}\" QMAKE=\"${QMAKE}\" \\\n"
+"\t\tMOC=\"${MOC}\" RCC=\"${RCC}\" UIC=\"${UIC}\" \\\n"
+"\t\tQMAKESPEC=\"${QMAKESPEC}\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2497
+#, 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 ""
+"PLIST_SUB+=\tQT_INCDIR=${QT_INCDIR_REL} \\\n"
+"\t\tQT_LIBDIR=${QT_LIBDIR_REL} \\\n"
+"\t\tQT_PLUGINDIR=${QT_PLUGINDIR_REL}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2501
+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 ""
+"Некоторые скрипты configure не поддерживают указанные выше аргументы. Чтобы "
+"отключить изменение `CONFIGURE_ENV` и `CONFIGURE_ARGS`, установите `USES= "
+"qmake:no_env`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2503
+#, no-wrap
+msgid "`USES= qmake` Example"
+msgstr "Пример `USES= qmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2507
+msgid "This snippet demonstrates the use of qmake for a Qt 5 port:"
+msgstr "Этот фрагмент демонстрирует использование qmake для порта Qt 5:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2512
+#, no-wrap
+msgid ""
+"USES=\tqmake:outsource qt:5\n"
+"USE_QT=\tbuildtools_build\n"
+msgstr ""
+"USES=\tqmake:outsource qt:5\n"
+"USE_QT=\tbuildtools_build\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2517
+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 ""
+"Приложения Qt часто разрабатываются как кроссплатформенные, и зачастую X11/"
+"Unix — не та платформа, на которой они создаются. Это, в свою очередь, "
+"приводит к определённым недоработкам, таким как:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2519
+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 ""
+"_Отсутствуют дополнительные пути для заголовочных файлов._ Многие приложения "
+"поддерживают значки в системном трее, но не учитывают пути для заголовочных "
+"файлов и/или библиотек в каталогах X11. Чтобы добавить каталоги в пути "
+"поиска заголовочных файлов и библиотек для `qmake` через командную строку, "
+"используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2524
+#, no-wrap
+msgid ""
+"QMAKE_ARGS+=\tINCLUDEPATH+=${LOCALBASE}/include \\\n"
+"\t\tLIBS+=-L${LOCALBASE}/lib\n"
+msgstr ""
+"QMAKE_ARGS+=\tINCLUDEPATH+=${LOCALBASE}/include \\\n"
+"\t\tLIBS+=-L${LOCALBASE}/lib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2527
+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 ""
+"_Некорректные пути установки._ Иногда данные, такие как иконки или "
+"файлы .desktop, по умолчанию устанавливаются в каталоги, которые не "
+"сканируются приложениями, совместимыми с XDG. Например, package:editors/"
+"texmaker[] — посмотрите на файл [.filename]#patch-texmaker.pro# в директории "
+"[.filename]#files# этого порта, чтобы увидеть шаблон исправления этой "
+"проблемы напрямую в проектом файле `qmake`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2529
+#, no-wrap
+msgid "Using KDE"
+msgstr "Использование KDE"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2532
+#, no-wrap
+msgid "KDE Variable Definitions"
+msgstr "Определения переменных KDE"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2539
+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 ""
+"Если приложение зависит от KDE, установите `USES+=kde:5` и `USE_KDE` в "
+"список необходимых компонентов. Суффиксы `_build` и `_run` можно "
+"использовать для принудительного указания типа зависимости компонентов "
+"(например, `baseapps_run`). Если суффикс не задан, будет использован тип "
+"зависимости по умолчанию. Чтобы принудительно задать оба типа, добавьте "
+"компонент дважды с обоими суффиксами (например, `ecm_build ecm_run`). "
+"Доступные компоненты перечислены ниже (актуальный список компонентов также "
+"приведён в [.filename]#/usr/ports/Mk/Uses/kde.mk#):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2541
+#, no-wrap
+msgid "Available KDE Components"
+msgstr "Доступные компоненты KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2548
+#, no-wrap
+msgid "`activities`"
+msgstr "`activities`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2550
+#, no-wrap
+msgid "KF5 runtime and library to organize work in separate activities"
+msgstr "Среда выполнения и библиотека KF5 для организации работы в отдельных автивностях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2551
+#, no-wrap
+msgid "`activities-stats`"
+msgstr "`activities-stats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2553
+#, no-wrap
+msgid "KF5 statistics for activities"
+msgstr "KF5 статистика для активностей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2554
+#, no-wrap
+msgid "`activitymanagerd`"
+msgstr "`activitymanagerd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2556
+#, 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:2557
+#, no-wrap
+msgid "`akonadi`"
+msgstr "`akonadi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2559
+#, no-wrap
+msgid "Storage server for KDE-Pim"
+msgstr "Хранилище данных для KDE-Pim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2560
+#, no-wrap
+msgid "`akonadicalendar`"
+msgstr "`akonadicalendar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2562
+#, no-wrap
+msgid "Akonadi Calendar Integration"
+msgstr "Интеграция Akonadi с Календарем"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2563
+#, no-wrap
+msgid "`akonadiconsole`"
+msgstr "`akonadiconsole`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2565
+#, no-wrap
+msgid "Akonadi management and debugging console"
+msgstr "Консоль управления и отладки Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2566
+#, no-wrap
+msgid "`akonadicontacts`"
+msgstr "`akonadicontacts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2568
+#, no-wrap
+msgid "Libraries and daemons to implement Contact Management in Akonadi"
+msgstr "Библиотеки и демоны для реализации управления контактами в Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2569
+#, no-wrap
+msgid "`akonadiimportwizard`"
+msgstr "`akonadiimportwizard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2571
+#, no-wrap
+msgid "Import data from other mail clients to KMail"
+msgstr "Импорт данных из других почтовых клиентов в KMail"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2572
+#, no-wrap
+msgid "`akonadimime`"
+msgstr "`akonadimime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2574
+#, no-wrap
+msgid "Libraries and daemons to implement basic email handling"
+msgstr "Библиотеки и демоны для реализации базовой обработки электронной почты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2575
+#, no-wrap
+msgid "`akonadinotes`"
+msgstr "`akonadinotes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2577
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2940
+#, no-wrap
+msgid "KDE library for accessing mail storages in MBox format"
+msgstr "Библиотека KDE для доступа к хранилищам почты в формате MBox"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2578
+#, no-wrap
+msgid "`akonadisearch`"
+msgstr "`akonadisearch`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2580
+#, no-wrap
+msgid "Libraries and daemons to implement searching in Akonadi"
+msgstr "Библиотеки и демоны для реализации поиска в Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2581
+#, no-wrap
+msgid "`akregator`"
+msgstr "`akregator`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2583
+#, no-wrap
+msgid "A Feed Reader by KDE"
+msgstr "Читатель лент от KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2584
+#, no-wrap
+msgid "`alarmcalendar`"
+msgstr "`alarmcalendar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2586
+#, no-wrap
+msgid "KDE API for KAlarm alarms"
+msgstr "KDE API для будильников KAlarm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2587
+#, no-wrap
+msgid "`apidox`"
+msgstr "`apidox`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2589
+#, no-wrap
+msgid "KF5 API Documentation Tools"
+msgstr "Документация API KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2590
+#, no-wrap
+msgid "`archive`"
+msgstr "`archive`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2592
+#, no-wrap
+msgid "KF5 library that provides classes for handling archive formats"
+msgstr "Библиотека KF5, предоставляющая классы для работы с форматами архивов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2593
+#, no-wrap
+msgid "`attica`"
+msgstr "`attica`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2595
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2598
+#, no-wrap
+msgid "Open Collaboration Services API library KDE5 version"
+msgstr "Библиотека API Open Collaboration Services, версия для KDE5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2596
+#, no-wrap
+msgid "`attica5`"
+msgstr "`attica5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2599
+#, no-wrap
+msgid "`auth`"
+msgstr "`auth`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2601
+#, no-wrap
+msgid "KF5 abstraction to system policy and authentication features"
+msgstr "Абстракция KF5 для системной политики и функций аутентификации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2602
+#, no-wrap
+msgid "`baloo`"
+msgstr "`baloo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2604
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2610
+#, no-wrap
+msgid "KF5 Framework for searching and managing user metadata"
+msgstr "KF5 Фреймворк для поиска и управления пользовательскими метаданными"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2605
+#, no-wrap
+msgid "`baloo-widgets`"
+msgstr "`baloo-widgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2607
+#, no-wrap
+msgid "BalooWidgets library"
+msgstr "Библиотека BalooWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2608
+#, no-wrap
+msgid "`baloo5`"
+msgstr "`baloo5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2611
+#, no-wrap
+msgid "`blog`"
+msgstr "`blog`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2613
+#, no-wrap
+msgid "KDE API for weblogging access"
+msgstr "KDE API для доступа к веб-логам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2614
+#, no-wrap
+msgid "`bookmarks`"
+msgstr "`bookmarks`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2616
+#, no-wrap
+msgid "KF5 library for bookmarks and the XBEL format"
+msgstr "Библиотека KF5 для закладок и формата XBEL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2617
+#, no-wrap
+msgid "`breeze`"
+msgstr "`breeze`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2619
+#, no-wrap
+msgid "Plasma5 artwork, styles and assets for the Breeze visual style"
+msgstr "Plasma5 artwork, стили и ресурсы для визуального стиля Breeze"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2620
+#, no-wrap
+msgid "`breeze-gtk`"
+msgstr "`breeze-gtk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2622
+#, no-wrap
+msgid "Plasma5 Breeze visual style for Gtk"
+msgstr "Plasma5 Breeze визуальный стиль для Gtk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2623
+#, no-wrap
+msgid "`breeze-icons`"
+msgstr "`breeze-icons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2625
+#, no-wrap
+msgid "Breeze icon theme for KDE"
+msgstr "Тема значков Breeze для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2626
+#, no-wrap
+msgid "`calendarcore`"
+msgstr "`calendarcore`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2628
+#, no-wrap
+msgid "KDE calendar access library"
+msgstr "Библиотека доступа к календарю KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2629
+#, no-wrap
+msgid "`calendarsupport`"
+msgstr "`calendarsupport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2631
+#, no-wrap
+msgid "Calendar support libraries for KDEPim"
+msgstr "Библиотеки поддержки календарей для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2632
+#, no-wrap
+msgid "`calendarutils`"
+msgstr "`calendarutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2634
+#, no-wrap
+msgid "KDE utility and user interface functions for accessing calendar"
+msgstr "Утилита KDE и пользовательские функции интерфейса для доступа к календарю"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2635
+#, no-wrap
+msgid "`codecs`"
+msgstr "`codecs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2637
+#, no-wrap
+msgid "KF5 library for string manipulation"
+msgstr "Библиотека KF5 для работы со строками"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2638
+#, no-wrap
+msgid "`completion`"
+msgstr "`completion`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2640
+#, no-wrap
+msgid "KF5 text completion helpers and widgets"
+msgstr "KF5 вспомогательные средства и виджеты автодополнения текста"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2641
+#, no-wrap
+msgid "`config`"
+msgstr "`config`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2643
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2646
+#, no-wrap
+msgid "KF5 widgets for configuration dialogs"
+msgstr "Виджеты KF5 для диалогов настройки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2644
+#, no-wrap
+msgid "`configwidgets`"
+msgstr "`configwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2647
+#, no-wrap
+msgid "`contacts`"
+msgstr "`contacts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2649
+#, no-wrap
+msgid "KDE api to manage contact information"
+msgstr "KDE API для управления контактной информацией"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2650
+#, no-wrap
+msgid "`coreaddons`"
+msgstr "`coreaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2652
+#, no-wrap
+msgid "KF5 addons to QtCore"
+msgstr "KF5 аддоны для QtCore"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2653
+#, no-wrap
+msgid "`crash`"
+msgstr "`crash`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2655
+#, no-wrap
+msgid "KF5 library to handle crash analysis and bug report from apps"
+msgstr "Библиотека KF5 для обработки анализа сбоев и отчётов об ошибках в приложениях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2656
+#, no-wrap
+msgid "`dbusaddons`"
+msgstr "`dbusaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2658
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3066
+#, no-wrap
+msgid "KF5 addons to QtDBus"
+msgstr "KF5 дополнения к QtDBus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2659
+#, no-wrap
+msgid "`decoration`"
+msgstr "`decoration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2661
+#, no-wrap
+msgid "Plasma5 library to create window decorations"
+msgstr "Библиотека Plasma5 для создания оформления окон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2662
+#, no-wrap
+msgid "`designerplugin`"
+msgstr "`designerplugin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2664
+#, no-wrap
+msgid "KF5 integration of Frameworks widgets in Qt Designer/Creator"
+msgstr "Интеграция KF5 виджетов Frameworks в Qt Designer/Creator"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2665
+#, no-wrap
+msgid "`discover`"
+msgstr "`discover`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2667
+#, no-wrap
+msgid "Plasma5 package management tools"
+msgstr "Инструменты управления пакетами Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2668
+#, no-wrap
+msgid "`dnssd`"
+msgstr "`dnssd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2670
+#, no-wrap
+msgid "KF5 abstraction to system DNSSD features"
+msgstr "Абстракция KF5 для системных функций DNSSD"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2671
+#, no-wrap
+msgid "`doctools`"
+msgstr "`doctools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2673
+#, no-wrap
+msgid "KF5 documentation generation from docbook"
+msgstr "Генерация документации KF5 из docbook"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2674
+#, no-wrap
+msgid "`drkonqi`"
+msgstr "`drkonqi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2676
+#, no-wrap
+msgid "Plasma5 crash handler"
+msgstr "Обработчик сбоев Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2677
+#, no-wrap
+msgid "`ecm`"
+msgstr "`ecm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2679
+#, no-wrap
+msgid "Extra modules and scripts for CMake"
+msgstr "Дополнительные модули и скрипты для CMake"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2680
+#, no-wrap
+msgid "`emoticons`"
+msgstr "`emoticons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2682
+#, no-wrap
+msgid "KF5 library to convert emoticons"
+msgstr "Библиотека KF5 для преобразования эмотиконов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2683
+#, no-wrap
+msgid "`eventviews`"
+msgstr "`eventviews`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2685
+#, no-wrap
+msgid "Event view libriares for KDEPim"
+msgstr "Библиотеки просмотра событий для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2686
+#, no-wrap
+msgid "`filemetadata`"
+msgstr "`filemetadata`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2688
+#, no-wrap
+msgid "KF5 library for extracting file metadata"
+msgstr "Библиотека KF5 для извлечения метаданных файлов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2689
+#, no-wrap
+msgid "`frameworkintegration`"
+msgstr "`frameworkintegration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2691
+#, no-wrap
+msgid "KF5 workspace and cross-framework integration plugins"
+msgstr "Плагины рабочего пространства KF5 и интеграции фреймворков"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2692
+#, no-wrap
+msgid "`gapi`"
+msgstr "`gapi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2694
+#, no-wrap
+msgid "KDE based library to access google services"
+msgstr "Библиотека на основе KDE для доступа к сервисам Google"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2695
+#, no-wrap
+msgid "`globalaccel`"
+msgstr "`globalaccel`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2697
+#, no-wrap
+msgid "KF5 library to add support for global workspace shortcuts"
+msgstr "Библиотека KF5 для добавления поддержки глобальных сочетаний клавиш рабочего пространства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2698
+#, no-wrap
+msgid "`grantlee-editor`"
+msgstr "`grantlee-editor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2700
+#, no-wrap
+msgid "Editor for Grantlee themes"
+msgstr "Редактор тем Grantlee"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2701
+#, no-wrap
+msgid "`grantleetheme`"
+msgstr "`grantleetheme`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2703
+#, no-wrap
+msgid "KDE PIM grantleetheme"
+msgstr "KDE PIM grantleetheme"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2704
+#, no-wrap
+msgid "`gravatar`"
+msgstr "`gravatar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2706
+#, no-wrap
+msgid "Library for gravatar support"
+msgstr "Библиотека для поддержки gravatar"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2707
+#, no-wrap
+msgid "`guiaddons`"
+msgstr "`guiaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2709
+#, no-wrap
+msgid "KF5 addons to QtGui"
+msgstr "KF5 аддоны для QtGui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2710
+#, no-wrap
+msgid "`holidays`"
+msgstr "`holidays`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2712
+#, no-wrap
+msgid "KDE library for calendar holidays"
+msgstr "Библиотека KDE для календарных праздников"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2713
+#, no-wrap
+msgid "`hotkeys`"
+msgstr "`hotkeys`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2715
+#, no-wrap
+msgid "Plasma5 library for hotkeys"
+msgstr "Библиотека Plasma5 для горячих клавиш"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2716
+#, no-wrap
+msgid "`i18n`"
+msgstr "`i18n`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2718
+#, no-wrap
+msgid "KF5 advanced internationalization framework"
+msgstr "KF5 — расширенная инфраструктура интернационализации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2719
+#, no-wrap
+msgid "`iconthemes`"
+msgstr "`iconthemes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2721
+#, no-wrap
+msgid "KF5 library for handling icons in applications"
+msgstr "Библиотека KF5 для работы с иконками в приложениях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2722
+#, no-wrap
+msgid "`identitymanagement`"
+msgstr "`identitymanagement`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2724
+#, no-wrap
+msgid "KDE pim identities"
+msgstr "KDE pim идентификации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2725
+#, no-wrap
+msgid "`idletime`"
+msgstr "`idletime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2727
+#, no-wrap
+msgid "KF5 library for monitoring user activity"
+msgstr "Библиотека KF5 для мониторинга активности пользователей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2728
+#, no-wrap
+msgid "`imap`"
+msgstr "`imap`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2730
+#, no-wrap
+msgid "KDE API for IMAP support"
+msgstr "KDE API для поддержки IMAP"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2731
+#, no-wrap
+msgid "`incidenceeditor`"
+msgstr "`incidenceeditor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2733
+#, no-wrap
+msgid "Incidence editor libriares for KDEPim"
+msgstr "Инцидентные редакторские библиотеки для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2734
+#, no-wrap
+msgid "`infocenter`"
+msgstr "`infocenter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2736
+#, no-wrap
+msgid "Plasma5 utility providing system information"
+msgstr "Утилита Plasma5, предоставляющая системную информацию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2737
+#, no-wrap
+msgid "`init`"
+msgstr "`init`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2739
+#, no-wrap
+msgid "KF5 process launcher to speed up launching KDE applications"
+msgstr "Запускатель процессов KF5 для ускорения запуска приложений KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2740
+#, no-wrap
+msgid "`itemmodels`"
+msgstr "`itemmodels`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2742
+#, no-wrap
+msgid "KF5 models for Qt Model/View system"
+msgstr "Модели KF5 для системы Qt Model/View"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2743
+#, no-wrap
+msgid "`itemviews`"
+msgstr "`itemviews`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2745
+#, no-wrap
+msgid "KF5 widget addons for Qt Model/View"
+msgstr "KF5 виджеты-дополнения для Qt Model/View"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2746
+#, no-wrap
+msgid "`jobwidgets`"
+msgstr "`jobwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2748
+#, no-wrap
+msgid "KF5 widgets for tracking KJob instance"
+msgstr "Виджеты KF5 для отслеживания экземпляра KJob"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2749
+#, no-wrap
+msgid "`js`"
+msgstr "`js`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2751
+#, no-wrap
+msgid "KF5 library providing an ECMAScript interpreter"
+msgstr "Библиотека KF5, предоставляющая интерпретатор ECMAScript"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2752
+#, no-wrap
+msgid "`jsembed`"
+msgstr "`jsembed`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2754
+#, no-wrap
+msgid "KF5 library for binding JavaScript objects to QObjects"
+msgstr "Библиотека KF5 для привязки объектов JavaScript к QObjects"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2755
+#, no-wrap
+msgid "`kaddressbook`"
+msgstr "`kaddressbook`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2757
+#, no-wrap
+msgid "KDE contact manager"
+msgstr "Менеджер контактов KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2758
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2761
+#, no-wrap
+msgid "`kalarm`"
+msgstr "`kalarm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2760
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2763
+#, no-wrap
+msgid "Personal alarm scheduler"
+msgstr "Планировщик персональных сигналов тревоги"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2764
+#, no-wrap
+msgid "`kate`"
+msgstr "`kate`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2766
+#, no-wrap
+msgid "Basic editor framework for the KDE system"
+msgstr "Базовая структура редактора для системы KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2767
+#, no-wrap
+msgid "`kcmutils`"
+msgstr "`kcmutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2769
+#, no-wrap
+msgid "KF5 utilities for working with KCModules"
+msgstr "KF5 утилиты для работы с KCModules"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2770
+#, no-wrap
+msgid "`kde-cli-tools`"
+msgstr "`kde-cli-tools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2772
+#, no-wrap
+msgid "Plasma5 non-interactive system tools"
+msgstr "Неинтерактивные системные инструменты Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2773
+#, no-wrap
+msgid "`kde-gtk-config`"
+msgstr "`kde-gtk-config`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2775
+#, no-wrap
+msgid "Plasma5 GTK2 and GTK3 configurator"
+msgstr "Plasma5 конфигуратор GTK2 и GTK3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2776
+#, no-wrap
+msgid "`kdeclarative`"
+msgstr "`kdeclarative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2778
+#, no-wrap
+msgid "KF5 library providing integration of QML and KDE Frameworks"
+msgstr "Библиотека KF5, обеспечивающая интеграцию QML и KDE Frameworks"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2779
+#, no-wrap
+msgid "`kded`"
+msgstr "`kded`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2781
+#, no-wrap
+msgid "KF5 extensible daemon for providing system level services"
+msgstr "KF5 расширяемый демон для предоставления системных сервисов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2782
+#, no-wrap
+msgid "`kdelibs4support`"
+msgstr "`kdelibs4support`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2784
+#, no-wrap
+msgid "KF5 porting aid from KDELibs4"
+msgstr "Помощник в портировании KF5 из KDELibs4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2785
+#, no-wrap
+msgid "`kdepim-addons`"
+msgstr "`kdepim-addons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2787
+#, no-wrap
+msgid "KDE PIM addons"
+msgstr "Дополнения KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2788
+#, no-wrap
+msgid "`kdepim-apps-libs`"
+msgstr "`kdepim-apps-libs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2790
+#, no-wrap
+msgid "KDE PIM mail related libraries"
+msgstr "Библиотеки KDE PIM, связанные с почтой"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2791
+#, no-wrap
+msgid "`kdepim-runtime5`"
+msgstr "`kdepim-runtime5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2793
+#, no-wrap
+msgid "KDE PIM tools and services"
+msgstr "Инструменты и службы KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2794
+#, no-wrap
+msgid "`kdeplasma-addons`"
+msgstr "`kdeplasma-addons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2796
+#, no-wrap
+msgid "Plasma5 addons to improve the Plasma experience"
+msgstr "Дополнения Plasma5 для улучшения работы с Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2797
+#, no-wrap
+msgid "`kdesu`"
+msgstr "`kdesu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2799
+#, no-wrap
+msgid "KF5 integration with su for elevated privileges"
+msgstr "Интеграция KF5 с su для повышенных привилегий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2800
+#, no-wrap
+msgid "`kdewebkit`"
+msgstr "`kdewebkit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2802
+#, no-wrap
+msgid "KF5 library providing integration of QtWebKit"
+msgstr "Библиотека KF5, обеспечивающая интеграцию QtWebKit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2803
+#, no-wrap
+msgid "`kgamma5`"
+msgstr "`kgamma5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2805
+#, no-wrap
+msgid "Plasma5 monitor's gamma settings"
+msgstr "Настройки гаммы монитора Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2806
+#, no-wrap
+msgid "`khtml`"
+msgstr "`khtml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2808
+#, no-wrap
+msgid "KF5 KTHML rendering engine"
+msgstr "Механизм рендеринга KF5 KTHML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2809
+#, no-wrap
+msgid "`kimageformats`"
+msgstr "`kimageformats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2811
+#, no-wrap
+msgid "KF5 library providing support for additional image formats"
+msgstr "Библиотека KF5, обеспечивающая поддержку дополнительных форматов изображений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2812
+#, no-wrap
+msgid "`kio`"
+msgstr "`kio`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2814
+#, no-wrap
+msgid "KF5 resource and network access abstraction"
+msgstr "Абстракция ресурсов и сетевого доступа KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2815
+#, no-wrap
+msgid "`kirigami2`"
+msgstr "`kirigami2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2817
+#, no-wrap
+msgid "QtQuick based components set"
+msgstr "Набор компонентов на основе QtQuick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2818
+#, no-wrap
+msgid "`kitinerary`"
+msgstr "`kitinerary`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2820
+#, no-wrap
+msgid "Data Model and Extraction System for Travel Reservation information"
+msgstr "Модель данных и система извлечения информации о бронировании путешествий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2821
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2824
+#, no-wrap
+msgid "`kmail`"
+msgstr "`kmail`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2823
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2826
+#, no-wrap
+msgid "KDE mail client"
+msgstr "Клиент электронной почты KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2827
+#, no-wrap
+msgid "`kmail-account-wizard`"
+msgstr "`kmail-account-wizard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2829
+#, no-wrap
+msgid "KDE mail account wizard"
+msgstr "Мастер настройки почтового аккаунта KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2830
+#, no-wrap
+msgid "`kmenuedit`"
+msgstr "`kmenuedit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2832
+#, no-wrap
+msgid "Plasma5 menu editor"
+msgstr "Редактор меню Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2833
+#, no-wrap
+msgid "`knotes`"
+msgstr "`knotes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2835
+#, no-wrap
+msgid "Popup notes"
+msgstr "Всплывающие примечания"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2836
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2839
+#, no-wrap
+msgid "`kontact`"
+msgstr "`kontact`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2838
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2841
+#, no-wrap
+msgid "KDE Personal Information Manager"
+msgstr "KDE Персональный Органайзер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2842
+#, no-wrap
+msgid "`kontactinterface`"
+msgstr "`kontactinterface`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2844
+#, no-wrap
+msgid "KDE glue for embedding KParts into Kontact"
+msgstr "KDE glue для встраивания KParts в Kontact"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2845
+#, no-wrap
+msgid "`korganizer`"
+msgstr "`korganizer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2847
+#, no-wrap
+msgid "Calendar and scheduling Program"
+msgstr "Программа для календаря и планирования"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2848
+#, no-wrap
+msgid "`kpimdav`"
+msgstr "`kpimdav`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2850
+#, no-wrap
+msgid "A DAV protocol implementation with KJobs"
+msgstr "Реализация протокола DAV с KJobs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2851
+#, no-wrap
+msgid "`kpkpass`"
+msgstr "`kpkpass`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2853
+#, no-wrap
+msgid "Library to deal with Apple Wallet pass files"
+msgstr "Библиотека для работы с файлами паролей Apple Wallet"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2854
+#, no-wrap
+msgid "`kross`"
+msgstr "`kross`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2856
+#, no-wrap
+msgid "KF5 multi-language application scripting"
+msgstr "KF5 мультиязыковые прикладные скрипты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2857
+#, no-wrap
+msgid "`kscreen`"
+msgstr "`kscreen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2859
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2919
+#, no-wrap
+msgid "Plasma5 screen management library"
+msgstr "Библиотека управления экраном Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2860
+#, no-wrap
+msgid "`kscreenlocker`"
+msgstr "`kscreenlocker`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2862
+#, no-wrap
+msgid "Plasma5 secure lock screen architecture"
+msgstr "Архитектура безопасной блокировки экрана Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2863
+#, no-wrap
+msgid "`ksmtp`"
+msgstr "`ksmtp`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2865
+#, no-wrap
+msgid "Job-based library to send email through an SMTP server"
+msgstr "Библиотека на основе задач для отправки электронной почты через SMTP-сервер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2866
+#, no-wrap
+msgid "`ksshaskpass`"
+msgstr "`ksshaskpass`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2868
+#, no-wrap
+msgid "Plasma5 ssh-add frontend"
+msgstr "Plasma5 интерфейс для ssh-add"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2869
+#, no-wrap
+msgid "`ksysguard`"
+msgstr "`ksysguard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2871
+#, no-wrap
+msgid "Plasma5 utility to track and control the running processes"
+msgstr "Утилита Plasma5 для отслеживания и управления запущенными процессами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2872
+#, no-wrap
+msgid "`kwallet-pam`"
+msgstr "`kwallet-pam`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2874
+#, no-wrap
+msgid "Plasma5 KWallet PAM Integration"
+msgstr "Интеграция Plasma5 KWallet с PAM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2875
+#, no-wrap
+msgid "`kwayland-integration`"
+msgstr "`kwayland-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2877
+#, no-wrap
+msgid "Integration plugins for a Wayland-based desktop"
+msgstr "Интеграционные плагины для рабочего стола на основе Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2878
+#, no-wrap
+msgid "`kwin`"
+msgstr "`kwin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2880
+#, no-wrap
+msgid "Plasma5 window manager"
+msgstr "Менеджер окон Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2881
+#, no-wrap
+msgid "`kwrited`"
+msgstr "`kwrited`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2883
+#, no-wrap
+msgid "Plasma5 daemon listening for wall and write messages"
+msgstr "Демон Plasma5, ожидающий сообщения wall и write"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2884
+#, no-wrap
+msgid "`ldap`"
+msgstr "`ldap`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2886
+#, no-wrap
+msgid "LDAP access API for KDE"
+msgstr "API доступа к LDAP для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2887
+#, no-wrap
+msgid "`libkcddb`"
+msgstr "`libkcddb`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2889
+#, no-wrap
+msgid "KDE CDDB library"
+msgstr "Библиотека KDE CDDB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2890
+#, no-wrap
+msgid "`libkcompactdisc`"
+msgstr "`libkcompactdisc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2892
+#, no-wrap
+msgid "KDE library for interfacing with audio CDs"
+msgstr "Библиотека KDE для взаимодействия с аудио-CD"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2893
+#, no-wrap
+msgid "`libkdcraw`"
+msgstr "`libkdcraw`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2895
+#, no-wrap
+msgid "LibRaw interface for KDE"
+msgstr "Интерфейс LibRaw для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2896
+#, no-wrap
+msgid "`libkdegames`"
+msgstr "`libkdegames`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2898
+#, no-wrap
+msgid "Libraries used by KDE games"
+msgstr "Библиотеки, используемые играми KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2899
+#, no-wrap
+msgid "`libkdepim`"
+msgstr "`libkdepim`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2901
+#, no-wrap
+msgid "KDE PIM Libraries"
+msgstr "Библиотеки KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2902
+#, no-wrap
+msgid "`libkeduvocdocument`"
+msgstr "`libkeduvocdocument`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2904
+#, no-wrap
+msgid "Library for reading and writing vocabulary files"
+msgstr "Библиотека для чтения и записи файлов словарей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2905
+#, no-wrap
+msgid "`libkexiv2`"
+msgstr "`libkexiv2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2907
+#, no-wrap
+msgid "Exiv2 library interface for KDE"
+msgstr "Интерфейс библиотеки Exiv2 для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2908
+#, no-wrap
+msgid "`libkipi`"
+msgstr "`libkipi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2910
+#, no-wrap
+msgid "KDE Image Plugin Interface"
+msgstr "Интерфейс плагинов изображений KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2911
+#, no-wrap
+msgid "`libkleo`"
+msgstr "`libkleo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2913
+#, no-wrap
+msgid "Certificate manager for KDE"
+msgstr "Менеджер сертификатов для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2914
+#, no-wrap
+msgid "`libksane`"
+msgstr "`libksane`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2916
+#, no-wrap
+msgid "SANE library interface for KDE"
+msgstr "Интерфейс библиотеки SANE для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2917
+#, no-wrap
+msgid "`libkscreen`"
+msgstr "`libkscreen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2920
+#, no-wrap
+msgid "`libksieve`"
+msgstr "`libksieve`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2922
+#, no-wrap
+msgid "Sieve libriares for KDEPim"
+msgstr "Библиотеки Sieve для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2923
+#, no-wrap
+msgid "`libksysguard`"
+msgstr "`libksysguard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2925
+#, no-wrap
+msgid "Plasma5 library to track and control running processes"
+msgstr "Библиотека Plasma5 для отслеживания и управления запущенными процессами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2926
+#, no-wrap
+msgid "`mailcommon`"
+msgstr "`mailcommon`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2928
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2988
+#, no-wrap
+msgid "Common libriares for KDEPim"
+msgstr "Общие библиотеки для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2929
+#, no-wrap
+msgid "`mailimporter`"
+msgstr "`mailimporter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2931
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2943
+#, no-wrap
+msgid "Import mbox files to KMail"
+msgstr "Импорт файлов mbox в KMail"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2932
+#, no-wrap
+msgid "`mailtransport`"
+msgstr "`mailtransport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2934
+#, no-wrap
+msgid "KDE library to managing mail transport"
+msgstr "Библиотека KDE для управления транспортом почты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2935
+#, no-wrap
+msgid "`marble`"
+msgstr "`marble`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2937
+#, no-wrap
+msgid "Virtual globe and world atlas for KDE"
+msgstr "Виртуальный глобус и мировой атлас для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2938
+#, no-wrap
+msgid "`mbox`"
+msgstr "`mbox`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2941
+#, no-wrap
+msgid "`mbox-importer`"
+msgstr "`mbox-importer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2944
+#, no-wrap
+msgid "`mediaplayer`"
+msgstr "`mediaplayer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2946
+#, no-wrap
+msgid "KF5 plugin interface for media player features"
+msgstr "Интерфейс плагина KF5 для функций медиаплеера"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2947
+#, no-wrap
+msgid "`messagelib`"
+msgstr "`messagelib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2949
+#, no-wrap
+msgid "Library for handling messages"
+msgstr "Библиотека для обработки сообщений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2950
+#, no-wrap
+msgid "`milou`"
+msgstr "`milou`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2952
+#, no-wrap
+msgid "Plasma5 Plasmoid for search"
+msgstr "Plasma5 Plasmoid для поиска"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2953
+#, no-wrap
+msgid "`mime`"
+msgstr "`mime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2955
+#, no-wrap
+msgid "Library for handling MIME data"
+msgstr "Библиотека для обработки данных MIME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2956
+#, no-wrap
+msgid "`newstuff`"
+msgstr "`newstuff`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2958
+#, no-wrap
+msgid "KF5 library for downloading application assets from the network"
+msgstr "Библиотека KF5 для загрузки ресурсов приложений из сети"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2959
+#, no-wrap
+msgid "`notifications`"
+msgstr "`notifications`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2961
+#, no-wrap
+msgid "KF5 abstraction for system notifications"
+msgstr "Абстракция KF5 для системных уведомлений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2962
+#, no-wrap
+msgid "`notifyconfig`"
+msgstr "`notifyconfig`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2964
+#, no-wrap
+msgid "KF5 configuration system for KNotify"
+msgstr "Система конфигурации KF5 для KNotify"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2965
+#, no-wrap
+msgid "`okular`"
+msgstr "`okular`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2967
+#, no-wrap
+msgid "KDE universal document viewer"
+msgstr "Универсальная программа для просмотра документов KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2968
+#, no-wrap
+msgid "`oxygen`"
+msgstr "`oxygen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2970
+#, no-wrap
+msgid "Plasma5 Oxygen style"
+msgstr "Стиль Plasma5 Oxygen"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2971
+#, no-wrap
+msgid "`oxygen-icons5`"
+msgstr "`oxygen-icons5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2973
+#, no-wrap
+msgid "The Oxygen icon theme for KDE"
+msgstr "Тема иконок Oxygen для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2974
+#, no-wrap
+msgid "`package`"
+msgstr "`package`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2976
+#, no-wrap
+msgid "KF5 library to load and install packages"
+msgstr "Библиотека KF5 для загрузки и установки пакетов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2977
+#, no-wrap
+msgid "`parts`"
+msgstr "`parts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2979
+#, no-wrap
+msgid "KF5 document centric plugin system"
+msgstr "KF5 система плагинов для работы с документами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2980
+#, no-wrap
+msgid "`people`"
+msgstr "`people`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2982
+#, no-wrap
+msgid "KF5 library providing access to contacts"
+msgstr "Библиотека KF5, предоставляющая доступ к контактам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2983
+#, no-wrap
+msgid "`pim-data-exporter`"
+msgstr "`pim-data-exporter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2985
+#, no-wrap
+msgid "Import and export KDE PIM settings"
+msgstr "Импорт и экспорт настроек KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2986
+#, no-wrap
+msgid "`pimcommon`"
+msgstr "`pimcommon`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2989
+#, no-wrap
+msgid "`pimtextedit`"
+msgstr "`pimtextedit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2991
+#, no-wrap
+msgid "KDE library for PIM-specific text editing utilities"
+msgstr "Библиотека KDE для утилит редактирования текста, специфичных для PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2992
+#, no-wrap
+msgid "`plasma-browser-integration`"
+msgstr "`plasma-browser-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2994
+#, no-wrap
+msgid "Plasma5 components to integrate browsers into the desktop"
+msgstr "Компоненты Plasma5 для интеграции браузеров в рабочий стол"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2995
+#, no-wrap
+msgid "`plasma-desktop`"
+msgstr "`plasma-desktop`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2997
+#, no-wrap
+msgid "Plasma5 plasma desktop"
+msgstr "Plasma5 рабочий стол Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2998
+#, no-wrap
+msgid "`plasma-framework`"
+msgstr "`plasma-framework`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3000
+#, no-wrap
+msgid "KF5 plugin based UI runtime used to write user interfaces"
+msgstr "KF5 - среда выполнения пользовательского интерфейса на основе плагинов, используемая для создания пользовательских интерфейсов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3001
+#, no-wrap
+msgid "`plasma-integration`"
+msgstr "`plasma-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3003
+#, no-wrap
+msgid "Qt Platform Theme integration plugins for the Plasma workspaces"
+msgstr "Плагины интеграции Qt Platform Theme для рабочего окружения Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3004
+#, no-wrap
+msgid "`plasma-pa`"
+msgstr "`plasma-pa`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3006
+#, no-wrap
+msgid "Plasma5 Plasma pulse audio mixer"
+msgstr "Plasma5 Микшер звука Plasma Pulse"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3007
+#, no-wrap
+msgid "`plasma-sdk`"
+msgstr "`plasma-sdk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3009
+#, no-wrap
+msgid "Plasma5 applications useful for Plasma development"
+msgstr "Приложения Plasma5, полезные для разработки Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3010
+#, no-wrap
+msgid "`plasma-workspace`"
+msgstr "`plasma-workspace`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3012
+#, no-wrap
+msgid "Plasma5 Plasma workspace"
+msgstr "Plasma5 Рабочее пространство Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3013
+#, no-wrap
+msgid "`plasma-workspace-wallpapers`"
+msgstr "`plasma-workspace-wallpapers`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3015
+#, no-wrap
+msgid "Plasma5 wallpapers"
+msgstr "Обои Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3016
+#, no-wrap
+msgid "`plotting`"
+msgstr "`plotting`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3018
+#, no-wrap
+msgid "KF5 lightweight plotting framework"
+msgstr "KF5 облегченный фреймворк для построения графиков"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3019
+#, no-wrap
+msgid "`polkit-kde-agent-1`"
+msgstr "`polkit-kde-agent-1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3021
+#, no-wrap
+msgid "Plasma5 daemon providing a polkit authentication UI"
+msgstr "Демон Plasma5, предоставляющий интерфейс аутентификации polkit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3022
+#, no-wrap
+msgid "`powerdevil`"
+msgstr "`powerdevil`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3024
+#, no-wrap
+msgid "Plasma5 tool to manage the power consumption settings"
+msgstr "Инструмент Plasma5 для управления настройками энергопотребления"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3025
+#, no-wrap
+msgid "`prison`"
+msgstr "`prison`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3027
+#, no-wrap
+msgid "API to produce barcodes"
+msgstr "Интерфейс API для создания штрихкодов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3028
+#, no-wrap
+msgid "`pty`"
+msgstr "`pty`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3030
+#, no-wrap
+msgid "KF5 pty abstraction"
+msgstr "Абстракция pty KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3031
+#, no-wrap
+msgid "`purpose`"
+msgstr "`purpose`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3033
+#, no-wrap
+msgid "Offers available actions for a specific purpose"
+msgstr "Предлагает доступные действия для конкретной цели"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3034
+#, no-wrap
+msgid "`qqc2-desktop-style`"
+msgstr "`qqc2-desktop-style`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3036
+#, no-wrap
+msgid "Qt QuickControl2 style for KDE"
+msgstr "Стиль Qt QuickControl2 для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3037
+#, no-wrap
+msgid "`runner`"
+msgstr "`runner`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3039
+#, no-wrap
+msgid "KF5 parallelized query system"
+msgstr "KF5 параллелизованная система запросов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3040
+#, no-wrap
+msgid "`service`"
+msgstr "`service`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3042
+#, no-wrap
+msgid "KF5 advanced plugin and service introspection"
+msgstr "KF5 расширенные плагины и интроспекция сервисов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3043
+#, no-wrap
+msgid "`solid`"
+msgstr "`solid`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3045
+#, no-wrap
+msgid "KF5 hardware integration and detection"
+msgstr "Интеграция и обнаружение оборудования KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3046
+#, no-wrap
+msgid "`sonnet`"
+msgstr "`sonnet`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3048
+#, no-wrap
+msgid "KF5 plugin-based spell checking library"
+msgstr "KF5 библиотека проверки орфографии на основе плагинов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3049
+#, no-wrap
+msgid "`syndication`"
+msgstr "`syndication`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3051
+#, no-wrap
+msgid "KDE RSS feed handling library"
+msgstr "Библиотека KDE для обработки RSS-лент"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3052
+#, no-wrap
+msgid "`syntaxhighlighting`"
+msgstr "`syntaxhighlighting`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3054
+#, no-wrap
+msgid "KF5 syntax highlighting engine for structured text and code"
+msgstr "Движок подсветки синтаксиса KF5 для структурированного текста и кода"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3055
+#, no-wrap
+msgid "`systemsettings`"
+msgstr "`systemsettings`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3057
+#, no-wrap
+msgid "Plasma5 system settings"
+msgstr "Настройки системы Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3058
+#, no-wrap
+msgid "`texteditor`"
+msgstr "`texteditor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3060
+#, no-wrap
+msgid "KF5 advanced embeddable text editor"
+msgstr "KF5 продвинутый встраиваемый текстовый редактор"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3061
+#, no-wrap
+msgid "`textwidgets`"
+msgstr "`textwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3063
+#, no-wrap
+msgid "KF5 advanced text editing widgets"
+msgstr "KF5 расширенные виджеты для редактирования текста"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3064
+#, no-wrap
+msgid "`threadweaver`"
+msgstr "`threadweaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3067
+#, no-wrap
+msgid "`tnef`"
+msgstr "`tnef`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3069
+#, no-wrap
+msgid "KDE API for the handling of TNEF data"
+msgstr "KDE API для обработки данных TNEF"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3070
+#, no-wrap
+msgid "`unitconversion`"
+msgstr "`unitconversion`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3072
+#, no-wrap
+msgid "KF5 library for unit conversion"
+msgstr "Библиотека KF5 для преобразования единиц измерения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3073
+#, no-wrap
+msgid "`user-manager`"
+msgstr "`user-manager`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3075
+#, no-wrap
+msgid "Plasma5 user manager"
+msgstr "Пользовательский менеджер Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3076
+#, no-wrap
+msgid "`wallet`"
+msgstr "`wallet`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3078
+#, no-wrap
+msgid "KF5 secure and unified container for user passwords"
+msgstr "KF5 безопасный и унифицированный контейнер для паролей пользователей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3081
+#, no-wrap
+msgid "KF5 Client and Server library wrapper for the Wayland libraries"
+msgstr "Обёртка клиентской и серверной библиотек KF5 для библиотек Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3082
+#, no-wrap
+msgid "`widgetsaddons`"
+msgstr "`widgetsaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3084
+#, no-wrap
+msgid "KF5 addons to QtWidgets"
+msgstr "KF5 аддоны для QtWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3085
+#, no-wrap
+msgid "`windowsystem`"
+msgstr "`windowsystem`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3087
+#, no-wrap
+msgid "KF5 library for access to the windowing system"
+msgstr "Библиотека KF5 для доступа к оконной системе"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3088
+#, no-wrap
+msgid "`xmlgui`"
+msgstr "`xmlgui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3090
+#, no-wrap
+msgid "KF5 user configurable main windows"
+msgstr "KF5 настраиваемые пользователем главные окна"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3091
+#, no-wrap
+msgid "`xmlrpcclient`"
+msgstr "`xmlrpcclient`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3092
+#, no-wrap
+msgid "KF5 interaction with XMLRPC services"
+msgstr "Взаимодействие KF5 с XMLRPC-сервисами"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3095
+#, no-wrap
+msgid "`USE_KDE` Example"
+msgstr "Пример `USE_KDE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3105
+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 "
+"crossref:special[using-cmake, 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 ""
+"Это простой пример порта для KDE. `USES= cmake` указывает порту "
+"использовать CMake, инструмент конфигурации, широко применяемый в проектах "
+"KDE (см. crossref:special[using-cmake, Использование `cmake`] для подробного "
+"описания). `USE_KDE` добавляет зависимость от библиотек KDE. Необходимые "
+"компоненты KDE и другие зависимости можно определить через лог "
+"конфигурации. `USE_KDE` не подразумевает `USE_QT`. Если порту требуются "
+"некоторые компоненты Qt, укажите их в `USE_QT`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3111
+#, 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 ""
+"USES=\t\tcmake kde:5 qt:5\n"
+"USE_KDE=\tecm\n"
+"USE_QT=\t\tcore buildtools_build qmake_build\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3116
+#, no-wrap
+msgid "Using LXQt"
+msgstr "Использование LXQt"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3119
+msgid ""
+"Applications depending on LXQt should set `USES+= lxqt` and set `USE_LXQT` "
+"to the list of required components from the table below"
+msgstr ""
+"Приложения, зависящие от LXQt, должны устанавливать `USES+= lxqt` и задавать "
+"`USE_LXQT` списком необходимых компонентов из таблицы ниже"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3121
+#, no-wrap
+msgid "Available LXQt Components"
+msgstr "Доступные компоненты LXQt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3130
+#, no-wrap
+msgid "Helpers for additional CMake modules"
+msgstr "Помощники для дополнительных модулей CMake"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3131
+#, no-wrap
+msgid "`libfmqt`"
+msgstr "`libfmqt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3133
+#, no-wrap
+msgid "Libfm Qt bindings"
+msgstr "Привязки Libfm к Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3134
+#, no-wrap
+msgid "`lxqt`"
+msgstr "`lxqt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3136
+#, no-wrap
+msgid "LXQt core library"
+msgstr "Ядро библиотеки LXQt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3137
+#, no-wrap
+msgid "`qtxdg`"
+msgstr "`qtxdg`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3138
+#, no-wrap
+msgid "Qt implementation of freedesktop.org XDG specifications"
+msgstr "Реализация Qt спецификаций freedesktop.org XDG"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3141
+#, no-wrap
+msgid "`USE_LXQT` Example"
+msgstr "Пример `USE_LXQT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3146
+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 ""
+"Это простой пример, `USE_LXQT` добавляет зависимость от библиотек LXQt. "
+"Необходимые компоненты LXQt и другие зависимости можно определить из лога "
+"конфигурации."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3152
+#, 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 ""
+"USES=\tcmake lxqt qt:5 tar:xz\n"
+"USE_QT=\t\tcore dbus widgets buildtools_build qmake_build\n"
+"USE_LXQT=\tbuildtools libfmqt\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3157
+#, no-wrap
+msgid "Using Java"
+msgstr "Использование Java"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3160
+#, no-wrap
+msgid "Variable Definitions"
+msgstr "Определения переменных"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3163
+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 ""
+"Если порту требуется Java(TM) Development Kit (JDK(TM)) для сборки, запуска "
+"или даже извлечения distfile, определите `USE_JAVA`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3167
+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 ""
+"В коллекции портов доступно несколько JDK от различных поставщиков и в "
+"нескольких версиях. Если порт должен использовать определённую версию, "
+"укажите её с помощью переменной `JAVA_VERSION`. Самая актуальная версия — "
+"package:java/openjdk18[], также доступны package:java/openjdk17[], "
+"package:java/openjdk16[], package:java/openjdk15[], package:java/"
+"openjdk14[], package:java/openjdk13[], package:java/openjdk12[], "
+"package:java/openjdk11[], package:java/openjdk8[] и package:java/openjdk7[]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3169
+#, no-wrap
+msgid "Variables Which May be Set by Ports That Use Java"
+msgstr "Переменные, которые могут быть установлены портами, использующими Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3176
+#, no-wrap
+msgid "`USE_JAVA`"
+msgstr "`USE_JAVA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3178
+#, no-wrap
+msgid "Define for the remaining variables to have any effect."
+msgstr "Определите для остальных переменных, чтобы они имели какой-либо эффект."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3179
+#, no-wrap
+msgid "`JAVA_VERSION`"
+msgstr "`JAVA_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3182
+#, 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 ""
+"Список подходящих версий Java для порта, разделённых пробелами.\n"
+"Необязательный символ `\\+` позволяет указать диапазон версий (допустимые значения: `8[+] 11[\\+] 17[+] 18[\\+] 19[+] 20[\\+] 21[+]`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3183
+#, no-wrap
+msgid "`JAVA_OS`"
+msgstr "`JAVA_OS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3185
+#, no-wrap
+msgid "List of space-separated suitable JDK port operating systems for the port (allowed values: `native linux`)."
+msgstr "Список разделенных пробелами подходящих операционных систем портов JDK для порта (допустимые значения: `native linux`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3186
+#, no-wrap
+msgid "`JAVA_VENDOR`"
+msgstr "`JAVA_VENDOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3188
+#, no-wrap
+msgid "List of space-separated suitable JDK port vendors for the port (allowed values: `openjdk oracle`)."
+msgstr "Список подходящих поставщиков портов JDK для порта через пробел (допустимые значения: `openjdk oracle`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3189
+#, no-wrap
+msgid "`JAVA_BUILD`"
+msgstr "`JAVA_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3191
+#, no-wrap
+msgid "When set, add the selected JDK port to the build dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости сборки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3192
+#, no-wrap
+msgid "`JAVA_RUN`"
+msgstr "`JAVA_RUN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3194
+#, no-wrap
+msgid "When set, add the selected JDK port to the run dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости времени выполнения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3195
+#, no-wrap
+msgid "`JAVA_EXTRACT`"
+msgstr "`JAVA_EXTRACT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3196
+#, no-wrap
+msgid "When set, add the selected JDK port to the extract dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости для извлечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3199
+msgid ""
+"Below is the list of all settings a port will receive after setting "
+"`USE_JAVA`:"
+msgstr ""
+"Ниже приведен список всех настроек, которые порт получит после установки "
+"`USE_JAVA`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3201
+#, no-wrap
+msgid "Variables Provided to Ports That Use Java"
+msgstr "Переменные, предоставляемые портам, использующим Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3207
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3286
+#, no-wrap
+msgid "Value"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3208
+#, no-wrap
+msgid "`JAVA_PORT`"
+msgstr "`JAVA_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3210
+#, no-wrap
+msgid "The name of the JDK port (for example, `java/openjdk6`)."
+msgstr "Имя порта JDK (например, `java/openjdk6`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3211
+#, no-wrap
+msgid "`JAVA_PORT_VERSION`"
+msgstr "`JAVA_PORT_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3213
+#, 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 "Полная версия порта JDK (например, `1.6.0`). Требуются только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\\.([0-9])(.*)$/\\1.\\2/}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3214
+#, no-wrap
+msgid "`JAVA_PORT_OS`"
+msgstr "`JAVA_PORT_OS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3216
+#, no-wrap
+msgid "The operating system used by the JDK port (for example, `'native'`)."
+msgstr "Операционная система, используемая портом JDK (например, `'native'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3217
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR`"
+msgstr "`JAVA_PORT_VENDOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3219
+#, no-wrap
+msgid "The vendor of the JDK port (for example, `'openjdk'`)."
+msgstr "Поставщик порта JDK (например, `'openjdk'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3220
+#, no-wrap
+msgid "`JAVA_PORT_OS_DESCRIPTION`"
+msgstr "`JAVA_PORT_OS_DESCRIPTION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3222
+#, no-wrap
+msgid "Description of the operating system used by the JDK port (for example, `'Native'`)."
+msgstr "Описание операционной системы, используемой портом JDK (например, `'Native'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3223
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR_DESCRIPTION`"
+msgstr "`JAVA_PORT_VENDOR_DESCRIPTION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3225
+#, no-wrap
+msgid "Description of the vendor of the JDK port (for example, `'OpenJDK BSD Porting Team'`)."
+msgstr "Описание поставщика порта JDK (например, `'OpenJDK BSD Porting Team'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3226
+#, no-wrap
+msgid "`JAVA_HOME`"
+msgstr "`JAVA_HOME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3228
+#, no-wrap
+msgid "Path to the installation directory of the JDK (for example, [.filename]#'/usr/local/openjdk6'#)."
+msgstr "Путь к каталогу установки JDK (например, [.filename]#'/usr/local/openjdk6'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3229
+#, no-wrap
+msgid "`JAVAC`"
+msgstr "`JAVAC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3231
+#, no-wrap
+msgid "Path to the Java compiler to use (for example, [.filename]#'/usr/local/openjdk6/bin/javac'#)."
+msgstr "Путь к используемому компилятору Java (например, [.filename]#'/usr/local/openjdk6/bin/javac'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3232
+#, no-wrap
+msgid "`JAR`"
+msgstr "`JAR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3234
+#, 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 "Путь к инструменту `jar`, который следует использовать (например, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3235
+#, no-wrap
+msgid "`APPLETVIEWER`"
+msgstr "`APPLETVIEWER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3237
+#, no-wrap
+msgid "Path to the `appletviewer` utility (for example, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#)."
+msgstr "Путь к утилите `appletviewer` (например, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3238
+#, no-wrap
+msgid "`JAVA`"
+msgstr "`JAVA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3240
+#, no-wrap
+msgid "Path to the `java` executable. Use this for executing Java programs (for example, [.filename]#'/usr/local/openjdk6/bin/java'#)."
+msgstr "Путь к исполняемому файлу `java`. Используется для запуска программ на Java (например, [.filename]#'/usr/local/openjdk6/bin/java'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3241
+#, no-wrap
+msgid "`JAVADOC`"
+msgstr "`JAVADOC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3243
+#, no-wrap
+msgid "Path to the `javadoc` utility program."
+msgstr "Путь к программе `javadoc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3244
+#, no-wrap
+msgid "`JAVAH`"
+msgstr "`JAVAH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3246
+#, no-wrap
+msgid "Path to the `javah` program."
+msgstr "Путь к программе `javah`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3247
+#, no-wrap
+msgid "`JAVAP`"
+msgstr "`JAVAP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3249
+#, no-wrap
+msgid "Path to the `javap` program."
+msgstr "Путь к программе `javap`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3250
+#, no-wrap
+msgid "`JAVA_KEYTOOL`"
+msgstr "`JAVA_KEYTOOL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3252
+#, no-wrap
+msgid "Path to the `keytool` utility program."
+msgstr "Путь к утилите `keytool`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3253
+#, no-wrap
+msgid "`JAVA_N2A`"
+msgstr "`JAVA_N2A`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3255
+#, no-wrap
+msgid "Path to the `native2ascii` tool."
+msgstr "Путь к инструменту `native2ascii`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3256
+#, no-wrap
+msgid "`JAVA_POLICYTOOL`"
+msgstr "`JAVA_POLICYTOOL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3258
+#, no-wrap
+msgid "Path to the `policytool` program."
+msgstr "Путь к программе `policytool`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3259
+#, no-wrap
+msgid "`JAVA_SERIALVER`"
+msgstr "`JAVA_SERIALVER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3261
+#, no-wrap
+msgid "Path to the `serialver` utility program."
+msgstr "Путь к утилите `serialver`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3262
+#, no-wrap
+msgid "`RMIC`"
+msgstr "`RMIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3264
+#, no-wrap
+msgid "Path to the RMI stub/skeleton generator, `rmic`."
+msgstr "Путь к генератору RMI-заглушек/скелетов, `rmic`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3265
+#, no-wrap
+msgid "`RMIREGISTRY`"
+msgstr "`RMIREGISTRY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3267
+#, no-wrap
+msgid "Path to the RMI registry program, `rmiregistry`."
+msgstr "Путь к программе реестра RMI, `rmiregistry`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3268
+#, no-wrap
+msgid "`RMID`"
+msgstr "`RMID`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3270
+#, no-wrap
+msgid "Path to the RMI daemon program `rmid`."
+msgstr "Путь к программе демона RMI `rmid`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3271
+#, no-wrap
+msgid "`JAVA_CLASSES`"
+msgstr "`JAVA_CLASSES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3272
+#, no-wrap
+msgid "Path to the archive that contains the JDK class files, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+msgstr "Путь к архиву, содержащему файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3276
+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 ""
+"Используйте цель `java-debug` в make для получения информации для отладки "
+"порта. Она отобразит значения многих из перечисленных ранее переменных."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3278
+msgid ""
+"Additionally, these constants are defined so all Java ports may be installed "
+"in a consistent way:"
+msgstr ""
+"Кроме того, определены следующие константы, чтобы все порты Java могли быть "
+"установлены единообразно:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3280
+#, no-wrap
+msgid "Constants Defined for Ports That Use Java"
+msgstr "Константы, определенные для портов, использующих Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3284
+#, no-wrap
+msgid "Constant"
+msgstr "Константа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3287
+#, no-wrap
+msgid "`JAVASHAREDIR`"
+msgstr "`JAVASHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3289
+#, no-wrap
+msgid "The base directory for everything related to Java. Default: [.filename]#${PREFIX}/share/java#."
+msgstr "Базовый каталог для всего, связанного с Java. По умолчанию: [.filename]#${PREFIX}/share/java#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3290
+#, no-wrap
+msgid "`JAVAJARDIR`"
+msgstr "`JAVAJARDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3292
+#, no-wrap
+msgid "The directory where JAR files is installed. Default: [.filename]#${JAVASHAREDIR}/classes#."
+msgstr "Каталог, в котором установлены JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3293
+#, no-wrap
+msgid "`JAVALIBDIR`"
+msgstr "`JAVALIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3294
+#, no-wrap
+msgid "The directory where JAR files installed by other ports are located. Default: [.filename]#${LOCALBASE}/share/java/classes#."
+msgstr "Каталог, в котором расположены JAR-файлы, установленные другими портами. По умолчанию: [.filename]#${LOCALBASE}/share/java/classes#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3297
+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 ""
+"Связанные записи определены как в `PLIST_SUB` (документировано в "
+"crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), "
+"так и в `SUB_LIST`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3299
+#, no-wrap
+msgid "Building with Ant"
+msgstr "Сборка с Ant"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3305
+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 "
+"crossref:special[building, Building Mechanisms]."
+msgstr ""
+"Когда порт должен собираться с использованием Apache Ant, он должен "
+"определять `USE_ANT`. Таким образом, Ant считается командой sub-make. Если "
+"цель `do-build` не определена в порте, будет установлена цель по умолчанию, "
+"которая запускает Ant в соответствии с `MAKE_ENV`, `MAKE_ARGS` и "
+"`ALL_TARGET`. Это аналогично механизму `USES= gmake`, который документирован "
+"в crossref:special[building, Building Mechanisms]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3307
+#, no-wrap
+msgid "Best Practices"
+msgstr "Лучшие практики"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3312
+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 ""
+"При переносе библиотеки Java порт должен устанавливать JAR-файл(ы) в "
+"[.filename]#${JAVAJARDIR}#, а все остальное — в [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}# (за исключением документации, см. ниже). Чтобы уменьшить размер "
+"упаковочного файла, ссылайтесь на JAR-файл(ы) напрямую в "
+"[.filename]#Makefile#. Используйте следующую инструкцию (где "
+"[.filename]#myport.jar# — имя JAR-файла, устанавливаемого как часть порта):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3316
+#, no-wrap
+msgid "PLIST_FILES+=\t${JAVAJARDIR}/myport.jar\n"
+msgstr "PLIST_FILES+=\t${JAVAJARDIR}/myport.jar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3321
+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 ""
+"При переносе Java-приложения порт обычно устанавливает все компоненты в "
+"единый каталог (включая зависимости в виде JAR-файлов). В этом отношении "
+"настоятельно рекомендуется использовать [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}#. Портеру предстоит решить, устанавливать ли дополнительные JAR-"
+"зависимости в этот каталог или использовать уже установленные (из "
+"[.filename]#${JAVAJARDIR}#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3328
+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 ""
+"При переносе Java(TM)-приложения, которое требует сервера приложений, такого "
+"как package:www/tomcat7[], для запуска службы, вендор часто распространяет "
+"файл [.filename]#.war#. [.filename]#.war# — это веб-архив приложения (Web "
+"application ARchive), который извлекается при вызове приложением. Избегайте "
+"добавления [.filename]#.war# в [.filename]#pkg-plist#. Это не считается "
+"лучшей практикой. Сервер приложений развернет архив war, но не очистит его "
+"должным образом при удалении порта. Более предпочтительный способ работы с "
+"этим файлом — извлечь архив, затем установить файлы и, наконец, добавить эти "
+"файлы в [.filename]#pkg-plist#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3333
+#, no-wrap
+msgid ""
+"TOMCATDIR=\t${LOCALBASE}/apache-tomcat-7.0\n"
+"WEBAPPDIR=\tmyapplication\n"
+msgstr ""
+"TOMCATDIR=\t${LOCALBASE}/apache-tomcat-7.0\n"
+"WEBAPPDIR=\tmyapplication\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3337
+#, no-wrap
+msgid ""
+"post-extract:\n"
+"\t@${MKDIR} ${WRKDIR}/${PORTDIRNAME}\n"
+"\t@${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}\n"
+msgstr ""
+"post-extract:\n"
+"\t@${MKDIR} ${WRKDIR}/${PORTDIRNAME}\n"
+"\t@${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3342
+#, 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 ""
+"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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3349
+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 ""
+"Независимо от типа порта (библиотека или приложение), дополнительная "
+"документация устанавливается crossref:makefiles[install-documentation,в том "
+"же месте], что и для любого другого порта. Известно, что инструмент Javadoc "
+"создает разный набор файлов в зависимости от версии используемого JDK. Для "
+"портов, которые не требуют использования конкретной версии JDK, указание "
+"списка упаковки ([.filename]#pkg-plist#) становится сложной задачей. Это "
+"одна из причин, по которой разработчикам портов настоятельно рекомендуется "
+"использовать `PORTDOCS`. Более того, даже если набор файлов, генерируемых "
+"`javadoc`, можно предсказать, размер результирующего [.filename]#pkg-plist# "
+"говорит в пользу использования `PORTDOCS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3353
+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 ""
+"Значение по умолчанию для `DATADIR` — [.filename]#${PREFIX}/share/${PORTNAME}"
+"#. Рекомендуется переопределить `DATADIR` на [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}# для портов Java. Действительно, `DATADIR` автоматически "
+"добавляется в `PLIST_SUB` (документировано в crossref:plist[plist-"
+"sub,Изменение pkg-plist на основе переменных Make]), поэтому используйте `%"
+"%DATADIR%%` напрямую в [.filename]#pkg-plist#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3356
+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 ""
+"Что касается выбора между сборкой портов Java из исходного кода или их "
+"непосредственной установкой из бинарного дистрибутива, на момент написания "
+"документации определённой политики не существует. Однако участники https://"
+"www.freebsd.org/java/[FreeBSD Java Project] рекомендуют сопровождающим "
+"портов по возможности собирать их из исходного кода, если это не "
+"представляет сложностей."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3360
+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 ""
+"Все функции, представленные в этом разделе, реализованы в "
+"[.filename]#bsd.java.mk#. Если порту требуется более сложная поддержка Java, "
+"сначала ознакомьтесь с https://cgit.FreeBSD.org/ports/tree/Mk/"
+"bsd.java.mk[историей изменений bsd.java.mk], так как документирование новых "
+"функций обычно занимает некоторое время. Затем, если отсутствующая поддержка "
+"будет полезна для многих других Java-портов, не стесняйтесь обсудить это на "
+"списке рассылки freebsd-java."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3363
+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 ""
+"Хотя существует категория `java` для PR, она относится к усилиям по "
+"портированию JDK в рамках проекта FreeBSD Java. Поэтому отправляйте порт "
+"Java в категорию `ports`, как и любой другой порт, если только проблема не "
+"связана либо с реализацией JDK, либо с [.filename]#bsd.java.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3365
+msgid ""
+"Similarly, there is a defined policy regarding the `CATEGORIES` of a Java "
+"port, which is detailed in crossref:makefiles[makefile-"
+"categories,Categorization]."
+msgstr ""
+"Аналогично существует определённая политика в отношении `CATEGORIES` для "
+"портов Java, которая подробно описана в crossref:makefiles[makefile-"
+"categories,Категоризация]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3367
+#, no-wrap
+msgid "Web Applications, Apache and PHP"
+msgstr "Веб-приложения, Apache и PHP"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3370
+#, no-wrap
+msgid "Apache"
+msgstr "Apache"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3373
+#, no-wrap
+msgid "Variables for Ports That Use Apache"
+msgstr "Переменные для портов, использующих Apache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3377
+#, no-wrap
+msgid "`USE_APACHE`"
+msgstr "`USE_APACHE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3379
+#, 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 "Порт требует Apache. Возможные значения: `yes` (любая версия), `22`, `24`, `22-24`, `22+` и т.д. Версия APACHE по умолчанию — `22`. Подробнее см. в [.filename]#ports/Mk/bsd.apache.mk# и на https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3380
+#, no-wrap
+msgid "`APXS`"
+msgstr "`APXS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3382
+#, no-wrap
+msgid "Full path to the `apxs` binary. Can be overridden in the port."
+msgstr "Полный путь к бинарному файлу `apxs`. Может быть переопределён в порте."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3383
+#, no-wrap
+msgid "`HTTPD`"
+msgstr "`HTTPD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3385
+#, no-wrap
+msgid "Full path to the `httpd` binary. Can be overridden in the port."
+msgstr "Полный путь к бинарному файлу `httpd`. Может быть переопределён в порте."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3386
+#, no-wrap
+msgid "`APACHE_VERSION`"
+msgstr "`APACHE_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3388
+#, 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 "Версия установленной Apache (переменная только для чтения). Эта переменная доступна только после включения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3389
+#, no-wrap
+msgid "`APACHEMODDIR`"
+msgstr "`APACHEMODDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3391
+#, no-wrap
+msgid "Directory for Apache modules. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для модулей Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3392
+#, no-wrap
+msgid "`APACHEINCLUDEDIR`"
+msgstr "`APACHEINCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3394
+#, no-wrap
+msgid "Directory for Apache headers. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для заголовков Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3395
+#, no-wrap
+msgid "`APACHEETCDIR`"
+msgstr "`APACHEETCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3396
+#, no-wrap
+msgid "Directory for Apache configuration files. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для файлов конфигурации Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3399
+#, no-wrap
+msgid "Useful Variables for Porting Apache Modules"
+msgstr "Полезные переменные для переноса модулей Apache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3403
+#, no-wrap
+msgid "`MODULENAME`"
+msgstr "`MODULENAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3405
+#, no-wrap
+msgid "Name of the module. Default value is `PORTNAME`. Example: `mod_hello`"
+msgstr "Имя модуля. Значение по умолчанию — `PORTNAME`. Пример: `mod_hello`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3406
+#, no-wrap
+msgid "`SHORTMODNAME`"
+msgstr "`SHORTMODNAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3408
+#, no-wrap
+msgid "Short name of the module. Automatically derived from `MODULENAME`, but can be overridden. Example: `hello`"
+msgstr "Короткое имя модуля. Автоматически определяется из `MODULENAME`, но может быть переопределено. Пример: `hello`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3409
+#, no-wrap
+msgid "`AP_FAST_BUILD`"
+msgstr "`AP_FAST_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3411
+#, no-wrap
+msgid "Use `apxs` to compile and install the module."
+msgstr "Используйте `apxs` для компиляции и установки модуля."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3412
+#, no-wrap
+msgid "`AP_GENPLIST`"
+msgstr "`AP_GENPLIST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3414
+#, no-wrap
+msgid "Also automatically creates a [.filename]#pkg-plist#."
+msgstr "Также автоматически создаёт файл [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3415
+#, no-wrap
+msgid "`AP_INC`"
+msgstr "`AP_INC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3417
+#, 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:3418
+#, no-wrap
+msgid "`AP_LIB`"
+msgstr "`AP_LIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3420
+#, 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:3421
+#, no-wrap
+msgid "`AP_EXTRAS`"
+msgstr "`AP_EXTRAS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3422
+#, no-wrap
+msgid "Additional flags to pass to `apxs`."
+msgstr "Дополнительные флаги для передачи в `apxs`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3425
+#, no-wrap
+msgid "Web Applications"
+msgstr "Веб-приложения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3429
+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 ""
+"Веб-приложения должны быть установлены в [.filename]#PREFIX/www/appname#. "
+"Этот путь доступен как в [.filename]#Makefile#, так и в [.filename]#pkg-"
+"plist# как `WWWDIR`, а путь относительно `PREFIX` доступен в "
+"[.filename]#Makefile# как `WWWDIR_REL`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3434
+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 ""
+"Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, "
+"если необходимо изменить владельца некоторых файлов. Значения по умолчанию "
+"для обоих — `www`. Используйте `WWWOWN?= myuser` и `WWWGRP?= mygroup`, если "
+"порту требуются другие значения. Это позволяет пользователю легко их "
+"переопределить."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3439
+msgid ""
+"Use `WWWOWN` and `WWWGRP` sparingly. Remember that every file the web "
+"server can write to is a security risk waiting to happen."
+msgstr ""
+"Используйте `WWWOWN` и `WWWGRP` с осторожностью. Помните, что каждый файл, "
+"доступный для записи веб-серверу, представляет собой потенциальную угрозу "
+"безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3443
+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 ""
+"Не зависьте от Apache, если веб-приложение явно не требует Apache. "
+"Учитывайте, что пользователи могут захотеть запускать веб-приложение на "
+"другом веб-сервере, кроме Apache."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3445
+#, no-wrap
+msgid "PHP"
+msgstr "PHP"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3449
+msgid ""
+"PHP web applications declare their dependency on it with `USES=php`. See "
+"crossref:uses[uses-php,`php`] for more information."
+msgstr ""
+"Веб-приложения PHP объявляют свою зависимость от него с помощью `USES=php`. "
+"Подробнее см. в crossref:uses[uses-php,`php`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3451
+#, no-wrap
+msgid "PEAR Modules"
+msgstr "Модули PEAR"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3454
+msgid "Porting PEAR modules is a very simple process."
+msgstr "Портирование модулей PEAR — это очень простой процесс."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3457
+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 ""
+"Добавьте `USES=pear` в [.filename]#Makefile# порта. Фреймворк установит "
+"соответствующие файлы в нужные места и автоматически сгенерирует plist во "
+"время установки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3459
+#, no-wrap
+msgid "Example Makefile for PEAR Class"
+msgstr "Пример Makefile для PEAR Class"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3467
+#, no-wrap
+msgid ""
+"PORTNAME= Date\n"
+"DISTVERSION=\t1.4.3\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+"PORTNAME= Date\n"
+"DISTVERSION=\t1.4.3\n"
+"CATEGORIES=\tdevel www pear\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3471
+#, 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 ""
+"MAINTAINER=\tsomeone@example.org\n"
+"COMMENT=\tPEAR Date and Time Zone Classes\n"
+"WWW=\t\thttps://pear.php.net/package/Date/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3473
+#, no-wrap
+msgid "USES=\tpear\n"
+msgstr "USES=\tpear\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3482
+msgid ""
+"PEAR modules will automatically be flavorized using crossref:flavors[flavors-"
+"auto-php,PHP flavors]."
+msgstr ""
+"Модули PEAR будут автоматически преобразованы в порт с флейвором с "
+"использованием crossref:flavors[flavors-auto-php,флейворов PHP]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3487
+msgid ""
+"If a non default `PEAR_CHANNEL` is used, the build and run-time dependencies "
+"will automatically be added."
+msgstr ""
+"Если используется нестандартный `PEAR_CHANNEL`, зависимости для сборки и "
+"выполнения будут добавлены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3493
+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 ""
+"Модули PEAR не требуют определения `PKGNAMESUFFIX`, так как он автоматически "
+"заполняется с использованием `PEAR_PKGNAMEPREFIX`. Если порту необходимо "
+"добавить к `PKGNAMEPREFIX`, он также должен использовать "
+"`PEAR_PKGNAMEPREFIX`, чтобы отличать различные флейворы."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3496
+#, no-wrap
+msgid "Horde Modules"
+msgstr "Модули Horde"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3499
+msgid "In the same way, porting Horde modules is a simple process."
+msgstr "Также и перенос модулей Horde является простым процессом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3502
+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 ""
+"Добавьте `USES=horde` в [.filename]#Makefile# порта. Фреймворк установит "
+"соответствующие файлы в нужные места и автоматически сгенерирует plist во "
+"время установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3505
+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 ""
+"Переменные `USE_HORDE_BUILD` и `USE_HORDE_RUN` могут использоваться для "
+"добавления зависимостей времени сборки и выполнения от других модулей Horde. "
+"Полный список доступных модулей можно найти в [.filename]#Mk/Uses/horde.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3507
+#, no-wrap
+msgid "Example Makefile for Horde Module"
+msgstr "Пример Makefile для модуля Horde"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3515
+#, no-wrap
+msgid ""
+"PORTNAME=\tHorde_Core\n"
+"DISTVERSION=\t2.14.0\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+"PORTNAME=\tHorde_Core\n"
+"DISTVERSION=\t2.14.0\n"
+"CATEGORIES=\tdevel www pear\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3519
+#, no-wrap
+msgid ""
+"MAINTAINER=\thorde@FreeBSD.org\n"
+"COMMENT=\tHorde Core Framework libraries\n"
+"WWW=\t\thttps://pear.horde.org/\n"
+msgstr ""
+"MAINTAINER=\thorde@FreeBSD.org\n"
+"COMMENT=\tHorde Core Framework libraries\n"
+"WWW=\t\thttps://pear.horde.org/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3523
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tKOLAB SOCKETS\n"
+"KOLAB_DESC=\tEnable Kolab server support\n"
+"SOCKETS_DESC=\tDepend on sockets PHP extension\n"
+msgstr ""
+"OPTIONS_DEFINE=\tKOLAB SOCKETS\n"
+"KOLAB_DESC=\tEnable Kolab server support\n"
+"SOCKETS_DESC=\tDepend on sockets PHP extension\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3526
+#, no-wrap
+msgid ""
+"USES=\thorde\n"
+"USE_PHP=\tsession\n"
+msgstr ""
+"USES=\thorde\n"
+"USE_PHP=\tsession\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3530
+#, 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 ""
+"USE_HORDE_BUILD=\tHorde_Role\n"
+"USE_HORDE_RUN=\tHorde_Role Horde_History Horde_Pack \\\n"
+"\t\tHorde_Text_Filter Horde_View\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3533
+#, no-wrap
+msgid ""
+"KOLAB_USE=\tHORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session\n"
+"SOCKETS_USE=\tPHP=sockets\n"
+msgstr ""
+"KOLAB_USE=\tHORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session\n"
+"SOCKETS_USE=\tPHP=sockets\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3542
+msgid ""
+"As Horde modules are also PEAR modules they will also automatically be "
+"flavorized using crossref:flavors[flavors-auto-php,PHP flavors]."
+msgstr ""
+"Поскольку модули Horde также являются модулями PEAR, они будут автоматически "
+"преобразованы с использованием crossref:flavors[flavors-auto-php,флейворов "
+"PHP]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3545
+#, no-wrap
+msgid "Using Python"
+msgstr "Использование Python"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3550
+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 ""
+"Коллекция портов поддерживает параллельную установку нескольких версий "
+"Python. Порты должны использовать правильный интерпретатор `python` в "
+"соответствии с настраиваемым пользователем параметром `PYTHON_VERSION`. "
+"Важнее всего заменить путь к исполняемому файлу `python` в скриптах на "
+"значение `PYTHON_CMD`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3552
+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 ""
+"Порты, которые устанавливают файлы в `PYTHON_SITELIBDIR`, должны "
+"использовать префикс имени пакета `pyXY-`, чтобы их имя пакета включало "
+"версию Python, для которой они предназначены."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3556
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${PYTHON_PKGNAMEPREFIX}\n"
+msgstr "PKGNAMEPREFIX=\t${PYTHON_PKGNAMEPREFIX}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3560
+#, no-wrap
+msgid "Most Useful Variables for Ports That Use Python"
+msgstr "Наиболее полезные переменные для портов, использующих Python"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3564
+#, no-wrap
+msgid "`USES=python`"
+msgstr "`USES=python`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3566
+#, 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 "Порту требуется Python. Минимально необходимая версия может быть указана с такими значениями, как `3.10+`. Диапазоны версий также можно указать, разделив две версии дефисом: `USES=python:3.8-3.9`. Обратите внимание, что `USES=python` _не_ включает Python 2.7, его нужно запрашивать явно с помощью `USES=python:2.7+`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3567
+#, no-wrap
+msgid "`USE_PYTHON=distutils`"
+msgstr "`USE_PYTHON=distutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3569
+#, 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 "Используйте Python distutils для настройки, компиляции и установки. Это требуется, когда порт поставляется с [.filename]#setup.py#. Это переопределяет цели `do-build` и `do-install`, а также может переопределить `do-configure`, если `GNU_CONFIGURE` не определён. Кроме того, подразумевается `USE_PYTHON=flavors`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3570
+#, no-wrap
+msgid "`USE_PYTHON=autoplist`"
+msgstr "`USE_PYTHON=autoplist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3572
+#, no-wrap
+msgid "Create the packaging list automatically. This also requires `USE_PYTHON=distutils` to be set."
+msgstr "Создать список пакетов автоматически. Это также требует установки `USE_PYTHON=distutils`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3573
+#, no-wrap
+msgid "`USE_PYTHON=concurrent`"
+msgstr "`USE_PYTHON=concurrent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3575
+#, 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 "Порт будет использовать уникальный префикс, обычно `PYTHON_PKGNAMEPREFIX`, для определённых каталогов, таких как `EXAMPLESDIR` и `DOCSDIR`, а также добавлять суффикс — версию Python из `PYTHON_VER` — к устанавливаемым бинарным файлам и скриптам. Это позволяет устанавливать порты для разных версий Python одновременно, что в противном случае приводило бы к конфликту файлов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3576
+#, no-wrap
+msgid "`USE_PYTHON=flavors`"
+msgstr "`USE_PYTHON=flavors`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3578
+#, 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 "Порт не использует distutils, но по-прежнему поддерживает несколько версий Python. `FLAVORS` будет установлен в поддерживаемые версии Python. Дополнительную информацию см. в crossref:flavors[flavors-auto-python,`USES`=python и флейворы]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3579
+#, no-wrap
+msgid "`USE_PYTHON=optsuffix`"
+msgstr "`USE_PYTHON=optsuffix`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3581
+#, 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 "Если текущая версия Python не является версией по умолчанию, порт получит `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Полезно только для флейворов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3582
+#, no-wrap
+msgid "`PYTHON_PKGNAMEPREFIX`"
+msgstr "`PYTHON_PKGNAMEPREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3584
+#, no-wrap
+msgid "Used as a `PKGNAMEPREFIX` to distinguish packages for different Python versions. Example: `py27-`"
+msgstr "Используется как `PKGNAMEPREFIX` для различения пакетов разных версий Python. Пример: `py27-`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3585
+#, no-wrap
+msgid "`PYTHON_SITELIBDIR`"
+msgstr "`PYTHON_SITELIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3587
+#, 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 "Расположение дерева site-packages, которое содержит путь установки Python (обычно `LOCALBASE`). `PYTHON_SITELIBDIR` может быть очень полезно при установке модулей Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3588
+#, no-wrap
+msgid "`PYTHONPREFIX_SITELIBDIR`"
+msgstr "`PYTHONPREFIX_SITELIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3590
+#, 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 "Вариант PREFIX-clean для PYTHON_SITELIBDIR. Всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#, когда это возможно. Значение по умолчанию для `%%PYTHON_SITELIBDIR%%` — `lib/python%%PYTHON_VERSION%%/site-packages`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3591
+#, no-wrap
+msgid "`PYTHON_CMD`"
+msgstr "`PYTHON_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3592
+#, no-wrap
+msgid "Python interpreter command line, including version number."
+msgstr "Интерпретатор командной строки Python, включая номер версии."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3595
+#, no-wrap
+msgid "Python Module Dependency Helpers"
+msgstr "Помощники зависимостей модуля Python"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3599
+#, no-wrap
+msgid "`PYNUMERIC`"
+msgstr "`PYNUMERIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3601
+#, no-wrap
+msgid "Dependency line for numeric extension."
+msgstr "Строка зависимости для числового расширения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3602
+#, no-wrap
+msgid "`PYNUMPY`"
+msgstr "`PYNUMPY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3604
+#, no-wrap
+msgid "Dependency line for the new numeric extension, numpy. (PYNUMERIC is deprecated by upstream vendor)."
+msgstr "Строка зависимости для нового числового расширения, numpy. (PYNUMERIC устарел у вендора)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3605
+#, no-wrap
+msgid "`PYXML`"
+msgstr "`PYXML`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3607
+#, no-wrap
+msgid "Dependency line for XML extension (not needed for Python 2.0 and higher as it is also in base distribution)."
+msgstr "Строка зависимости для расширения XML (не требуется для Python 2.0 и выше, так как оно также входит в базовую поставку)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3608
+#, no-wrap
+msgid "`PY_ENUM34`"
+msgstr "`PY_ENUM34`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3610
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum34[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-enum34[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3611
+#, no-wrap
+msgid "`PY_ENUM_COMPAT`"
+msgstr "`PY_ENUM_COMPAT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3613
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum-compat[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-enum-compat[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3614
+#, no-wrap
+msgid "`PY_PATHLIB`"
+msgstr "`PY_PATHLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3616
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-pathlib[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-pathlib[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3617
+#, no-wrap
+msgid "`PY_IPADDRESS`"
+msgstr "`PY_IPADDRESS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3619
+#, no-wrap
+msgid "Conditional dependency on package:net/py-ipaddress[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:net/py-ipaddress[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3620
+#, no-wrap
+msgid "`PY_FUTURES`"
+msgstr "`PY_FUTURES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3621
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-futures[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-futures[] в зависимости от версии Python."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3624
+msgid ""
+"A complete list of available variables can be found in [.filename]#/usr/"
+"ports/Mk/Uses/python.mk#."
+msgstr ""
+"Полный список доступных переменных можно найти в [.filename]#/usr/ports/Mk/"
+"Uses/python.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3629
+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 crossref:special[python-Makefile,Makefile for a "
+"Simple Python Module]."
+msgstr ""
+"Все зависимости для портов Python, использующих crossref:flavors[flavors-"
+"auto-python,флейворы Python] (с `USE_PYTHON=distutils` или "
+"`USE_PYTHON=flavors`), должны иметь флейвор Python, добавленную к их origin "
+"с помощью `@${PY_FLAVOR}`. См. crossref:special[python-Makefile,Makefile для "
+"простого модуля Python]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3632
+#, no-wrap
+msgid "Makefile for a Simple Python Module"
+msgstr "Makefile для Простого Модуля Python"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3640
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3644
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tPython sample module\n"
+"WWW=\t\thttps://example.com/project/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tPython sample module\n"
+"WWW=\t\thttps://example.com/project/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3646
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3649
+#, no-wrap
+msgid ""
+"USES=\t\tpython\n"
+"USE_PYTHON=\tautoplist distutils\n"
+msgstr ""
+"USES=\t\tpython\n"
+"USE_PYTHON=\tautoplist distutils\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3659
+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 ""
+"Некоторые приложения на Python заявляют о поддержке `DESTDIR` (что "
+"необходимо для промежуточной сборки), но она не работает (например, Mailman "
+"до версии 2.1.16). Это можно обойти, перекомпилировав скрипты. Это можно "
+"сделать, например, в цели `post-build`. Предполагая, что Python-скрипты "
+"должны находиться в `PYTHONPREFIX_SITELIBDIR` после установки, можно "
+"применить следующее решение:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3665
+#, no-wrap
+msgid ""
+"(cd ${STAGEDIR}${PREFIX} \\\n"
+" && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \\\n"
+" -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})\n"
+msgstr ""
+"(cd ${STAGEDIR}${PREFIX} \\\n"
+" && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \\\n"
+" -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3668
+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 ""
+"Это перекомпилирует исходники с путём, относительным к stage-директории, и "
+"добавляет значение `PREFIX` к имени файла, записанному в байт-"
+"компилированном выходном файле с помощью `-d`. `-f` требуется для "
+"принудительной перекомпиляции, а `:S;${PREFIX}/;;` удаляет префиксы из "
+"значения `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к "
+"`PREFIX`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3670
+#, no-wrap
+msgid "Using Tcl/Tk"
+msgstr "Использование Tcl/Tk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3675
+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 ""
+"Коллекция Ports поддерживает параллельную установку нескольких версий Tcl/"
+"Tk. Порты должны стараться поддерживать как минимум версию Tcl/Tk по "
+"умолчанию и выше с помощью `USES=tcl`. Можно указать желаемую версию `tcl`, "
+"добавив `:_xx_`, например, `USES=tcl:85`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3677
+#, no-wrap
+msgid "The Most Useful Read-Only Variables for Ports That Use Tcl/Tk"
+msgstr "Самые полезные переменные только для чтения для портов, использующих Tcl/Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3681
+#, no-wrap
+msgid "`TCL_VER`"
+msgstr "`TCL_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3683
+#, no-wrap
+msgid "chosen major.minor version of Tcl"
+msgstr "выбранная версия Tcl major.minor"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3684
+#, no-wrap
+msgid "`TCLSH`"
+msgstr "`TCLSH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3686
+#, no-wrap
+msgid "full path of the Tcl interpreter"
+msgstr "полный путь к интерпретатору Tcl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3687
+#, no-wrap
+msgid "`TCL_LIBDIR`"
+msgstr "`TCL_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3689
+#, no-wrap
+msgid "path of the Tcl libraries"
+msgstr "путь к библиотекам Tcl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3690
+#, no-wrap
+msgid "`TCL_INCLUDEDIR`"
+msgstr "`TCL_INCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3692
+#, no-wrap
+msgid "path of the Tcl C header files"
+msgstr "путь к заголовочным файлам Tcl C"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3693
+#, no-wrap
+msgid "`TCL_PKG_LIB_PREFIX`"
+msgstr "`TCL_PKG_LIB_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3695
+#, no-wrap
+msgid "Library prefix, as per TIP595"
+msgstr "Префикс библиотеки, согласно TIP595"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3696
+#, no-wrap
+msgid "`TCL_PKG_STUB_POSTFIX`"
+msgstr "`TCL_PKG_STUB_POSTFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3698
+#, no-wrap
+msgid "Stub library postfix"
+msgstr "Заглушка библиотеки postfix"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3699
+#, no-wrap
+msgid "`TK_VER`"
+msgstr "`TK_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3701
+#, no-wrap
+msgid "chosen major.minor version of Tk"
+msgstr "выбранная версия Tk major.minor"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3702
+#, no-wrap
+msgid "`WISH`"
+msgstr "`WISH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3704
+#, no-wrap
+msgid "full path of the Tk interpreter"
+msgstr "полный путь к интерпретатору Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3705
+#, no-wrap
+msgid "`TK_LIBDIR`"
+msgstr "`TK_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3707
+#, no-wrap
+msgid "path of the Tk libraries"
+msgstr "путь к библиотекам Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3708
+#, no-wrap
+msgid "`TK_INCLUDEDIR`"
+msgstr "`TK_INCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3709
+#, no-wrap
+msgid "path of the Tk C header files"
+msgstr "путь к заголовочным файлам Tk C"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3713
+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 ""
+"См. crossref:uses[uses-tcl,`USES=tcl`] и crossref:uses[uses-tk,`USES=tk`] в "
+"crossref:uses[uses,Использование макросов `USES`] для полного описания этих "
+"переменных. Полный список этих переменных доступен в [.filename]#/usr/ports/"
+"Mk/Uses/tcl.mk#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3715
+#, no-wrap
+msgid "Using SDL"
+msgstr "Использование SDL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3718
+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 ""
+"`USE_SDL` используется для автоматической настройки зависимостей для портов, "
+"которые используют библиотеку на основе SDL, такие как package:devel/sdl12[] "
+"и package:graphics/sdl_image[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3720
+msgid "These SDL libraries for version 1.2 are recognized:"
+msgstr "Эти библиотеки SDL для версии 1.2 распознаются:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3722
+msgid "sdl: package:devel/sdl12[]"
+msgstr "sdl: package:devel/sdl12[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3723
+msgid "console: package:devel/sdl_console[]"
+msgstr "console: package:devel/sdl_console[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3724
+msgid "gfx: package:graphics/sdl_gfx[]"
+msgstr "gfx: package:graphics/sdl_gfx[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3725
+msgid "image: package:graphics/sdl_image[]"
+msgstr "image: package:graphics/sdl_image[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3726
+msgid "mixer: package:audio/sdl_mixer[]"
+msgstr "mixer: package:audio/sdl_mixer[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3727
+msgid "mm: package:devel/sdlmm[]"
+msgstr "mm: package:devel/sdlmm[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3728
+msgid "net: package:net/sdl_net[]"
+msgstr "net: package:net/sdl_net[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3729
+msgid "pango: package:x11-toolkits/sdl_pango[]"
+msgstr "pango: package:x11-toolkits/sdl_pango[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3730
+msgid "sound: package:audio/sdl_sound[]"
+msgstr "sound: package:audio/sdl_sound[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3731
+msgid "ttf: package:graphics/sdl_ttf[]"
+msgstr "ttf: package:graphics/sdl_ttf[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3733
+msgid "These SDL libraries for version 2.0 are recognized:"
+msgstr "Эти библиотеки SDL для версии 2.0 распознаются:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3735
+msgid "sdl: package:devel/sdl20[]"
+msgstr "sdl: package:devel/sdl20[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3736
+msgid "gfx: package:graphics/sdl2_gfx[]"
+msgstr "gfx: package:graphics/sdl2_gfx[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3737
+msgid "image: package:graphics/sdl2_image[]"
+msgstr "image: package:graphics/sdl2_image[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3738
+msgid "mixer: package:audio/sdl2_mixer[]"
+msgstr "mixer: package:audio/sdl2_mixer[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3739
+msgid "net: package:net/sdl2_net[]"
+msgstr "net: package:net/sdl2_net[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3740
+msgid "ttf: package:graphics/sdl2_ttf[]"
+msgstr "ttf: package:graphics/sdl2_ttf[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3742
+msgid ""
+"Therefore, if a port has a dependency on package:net/sdl_net[] and "
+"package:audio/sdl_mixer[], the syntax will be:"
+msgstr ""
+"Следовательно, если порт зависит от package:net/sdl_net[] и package:audio/"
+"sdl_mixer[], синтаксис будет следующим:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3746
+#, no-wrap
+msgid "USE_SDL=\tnet mixer\n"
+msgstr "USE_SDL=\tnet mixer\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3749
+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 ""
+"Пакет зависимости package:devel/sdl12[], который требуется для package:net/"
+"sdl_net[] и package:audio/sdl_mixer[], также автоматически добавляется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3751
+msgid "Using `USE_SDL` with entries for SDL 1.2, it will automatically:"
+msgstr "Использование `USE_SDL` с указанием SDL 1.2 автоматически:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3753
+msgid "Add a dependency on sdl12-config to `BUILD_DEPENDS`"
+msgstr "Добавить зависимость от sdl12-config в `BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3754
+msgid "Add the variable `SDL_CONFIG` to `CONFIGURE_ENV`"
+msgstr "Добавьте переменную `SDL_CONFIG` в `CONFIGURE_ENV`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3755
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3761
+msgid "Add the dependencies of the selected libraries to `LIB_DEPENDS`"
+msgstr "Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3757
+msgid "Using `USE_SDL` with entries for SDL 2.0, it will automatically:"
+msgstr "Используя `USE_SDL` с записями для SDL 2.0, это автоматически:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3759
+msgid "Add a dependency on sdl2-config to `BUILD_DEPENDS`"
+msgstr "Добавить зависимость от sdl2-config в `BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3760
+msgid "Add the variable `SDL2_CONFIG` to `CONFIGURE_ENV`"
+msgstr "Добавьте переменную `SDL2_CONFIG` в `CONFIGURE_ENV`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3764
+#, no-wrap
+msgid "Using wxWidgets"
+msgstr "Использование wxWidgets"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3767
+msgid ""
+"This section describes the status of the wxWidgets libraries in the ports "
+"tree and its integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние библиотек wxWidgets в дереве портов и их "
+"интеграцию с системой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3773
+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 ""
+"Существует множество версий библиотек wxWidgets, которые конфликтуют между "
+"собой (устанавливают файлы с одинаковыми именами). В дереве портов эта "
+"проблема решена путем установки каждой версии под разными именами с "
+"использованием суффиксов номеров версий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3779
+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 ""
+"Очевидный недостаток этого подхода заключается в том, что каждое приложение "
+"необходимо модифицировать для поиска нужной версии. К счастью, большинство "
+"приложений вызывают скрипт `wx-config` для определения необходимых флагов "
+"компилятора и компоновщика. Имя этого скрипта отличается для каждой "
+"доступной версии. Большинство приложений учитывают переменную окружения или "
+"принимают аргумент configure, чтобы указать, какой скрипт `wx-config` "
+"вызывать. В противном случае их необходимо патчить."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3781
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4082
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4301
+#, no-wrap
+msgid "Version Selection"
+msgstr "Выбор версии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3784
+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 ""
+"Чтобы порт использовал определённую версию wxWidgets, доступны две "
+"переменные для определения (если задана только одна, другая будет "
+"установлена в значение по умолчанию):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3786
+#, no-wrap
+msgid "Variables to Select wxWidgets Versions"
+msgstr "Переменные для выбора версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3793
+#, no-wrap
+msgid "Default value"
+msgstr "Значение по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3794
+#, no-wrap
+msgid "`USE_WX`"
+msgstr "`USE_WX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3795
+#, no-wrap
+msgid "List of versions the port can use"
+msgstr "Список версий, которые порт может использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3797
+#, no-wrap
+msgid "All available versions"
+msgstr "Все доступные версии"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3798
+#, no-wrap
+msgid "`USE_WX_NOT`"
+msgstr "`USE_WX_NOT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3799
+#, no-wrap
+msgid "List of versions the port cannot use"
+msgstr "Список версий, которые порт не может использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3800
+#, no-wrap
+msgid "None"
+msgstr "Ничего"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3803
+msgid ""
+"The available wxWidgets versions and the corresponding ports in the tree are:"
+msgstr "Доступные версии wxWidgets и соответствующие порты в дереве:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3805
+#, no-wrap
+msgid "Available wxWidgets Versions"
+msgstr "Доступные версии wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3809
+#, no-wrap
+msgid "Version"
+msgstr "Версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3811
+#, no-wrap
+msgid "Port"
+msgstr "Порт"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3812
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3830
+#, no-wrap
+msgid "`2.8`"
+msgstr "`2.8`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3814
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk28[]"
+msgstr "package:x11-toolkits/wxgtk28[]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3815
+#, no-wrap
+msgid "`3.0`"
+msgstr "`3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3816
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk30[]"
+msgstr "package:x11-toolkits/wxgtk30[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3819
+msgid ""
+"The variables in crossref:special[wx-ver-sel-table,Variables to Select "
+"wxWidgets Versions] can be set to one or more of these combinations "
+"separated by spaces:"
+msgstr ""
+"Переменные в crossref:special[wx-ver-sel-table,Переменные для выбора версий "
+"wxWidgets] могут быть установлены в одну или несколько комбинаций, "
+"разделенных пробелами:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3821
+#, no-wrap
+msgid "wxWidgets Version Specifications"
+msgstr "Спецификации версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3827
+#, no-wrap
+msgid "Example"
+msgstr "Пример"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3828
+#, no-wrap
+msgid "Single version"
+msgstr "Единственная версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3831
+#, no-wrap
+msgid "Ascending range"
+msgstr "Возрастающий диапазон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3833
+#, no-wrap
+msgid "`2.8+`"
+msgstr "`2.8+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3834
+#, no-wrap
+msgid "Descending range"
+msgstr "Нисходящий диапазон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3836
+#, no-wrap
+msgid "`3.0-`"
+msgstr "`3.0-`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3837
+#, no-wrap
+msgid "Full range (must be ascending)"
+msgstr "Полный диапазон (должен быть возрастающим)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3838
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3881
+#, no-wrap
+msgid "`2.8-3.0`"
+msgstr "`2.8-3.0`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3842
+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:3843
+#, no-wrap
+msgid "Variables to Select Preferred wxWidgets Versions"
+msgstr "Переменные для выбора предпочтительных версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3849
+#, no-wrap
+msgid "Designed for"
+msgstr "Предназначен для"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3850
+#, no-wrap
+msgid "`WANT_WX_VER`"
+msgstr "`WANT_WX_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3852
+#, no-wrap
+msgid "the port"
+msgstr "порт"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3853
+#, no-wrap
+msgid "`WITH_WX_VER`"
+msgstr "`WITH_WX_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3854
+#, no-wrap
+msgid "the user"
+msgstr "пользователь"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3861
+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 ""
+"Существуют другие приложения, которые, не являясь библиотеками wxWidgets, "
+"связаны с ними. Эти приложения можно указать в `WX_COMPS`. Доступны "
+"следующие компоненты:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3863
+#, no-wrap
+msgid "Available wxWidgets Components"
+msgstr "Доступные компоненты wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3870
+#, no-wrap
+msgid "Version restriction"
+msgstr "Ограничение версии"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3871
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3914
+#, no-wrap
+msgid "`wx`"
+msgstr "`wx`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3872
+#, no-wrap
+msgid "main library"
+msgstr "основная библиотека"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3874
+#, no-wrap
+msgid "none"
+msgstr "none"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3875
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3917
+#, no-wrap
+msgid "`contrib`"
+msgstr "`contrib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3876
+#, no-wrap
+msgid "contributed libraries"
+msgstr "сторонние библиотеки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3878
+#, no-wrap
+msgid "`none`"
+msgstr "`none`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3879
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3920
+#, no-wrap
+msgid "`python`"
+msgstr "`python`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3880
+#, no-wrap
+msgid "wxPython (Python bindings)"
+msgstr "wxPython (интерфейс Python)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3886
+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 crossref:special[wx-def-dep-types,Default wxWidgets Dependency "
+"Types]). These types are available:"
+msgstr ""
+"Тип зависимости может быть выбран для каждого компонента путем добавления "
+"суффикса, разделенного точкой с запятой. Если он отсутствует, будет "
+"использоваться тип по умолчанию (см. crossref:special[wx-def-dep-types,Типы "
+"зависимостей wxWidgets по умолчанию]). Доступны следующие типы:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3888
+#, no-wrap
+msgid "Available wxWidgets Dependency Types"
+msgstr "Доступные типы зависимостей wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3895
+#, no-wrap
+msgid "`build`"
+msgstr "`build`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3897
+#, no-wrap
+msgid "Component is required for building, equivalent to `BUILD_DEPENDS`"
+msgstr "Компонент необходим для сборки, эквивалентен `BUILD_DEPENDS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3898
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3922
+#, no-wrap
+msgid "`run`"
+msgstr "`run`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3900
+#, no-wrap
+msgid "Component is required for running, equivalent to `RUN_DEPENDS`"
+msgstr "Компонент необходим для запуска, эквивалентно `RUN_DEPENDS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3901
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3916
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3919
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3925
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3927
+#, no-wrap
+msgid "`lib`"
+msgstr "`lib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3902
+#, no-wrap
+msgid "Component is required for building and running, equivalent to `LIB_DEPENDS`"
+msgstr "Компонент необходим для сборки и запуска, эквивалентен `LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3905
+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:3907
+#, no-wrap
+msgid "Default wxWidgets Dependency Types"
+msgstr "Типы зависимостей wxWidgets по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3913
+#, no-wrap
+msgid "Dependency type"
+msgstr "Тип зависимости"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3923
+#, no-wrap
+msgid "`mozilla`"
+msgstr "`mozilla`"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3930
+#, no-wrap
+msgid "Selecting wxWidgets Components"
+msgstr "Выбор компонентов wxWidgets"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3934
+msgid ""
+"This fragment corresponds to a port which uses wxWidgets version `2.4` and "
+"its contributed libraries."
+msgstr ""
+"Этот фрагмент соответствует порту, который использует wxWidgets версии `2.4` "
+"и дополнительные библиотеки."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3939
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx contrib\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx contrib\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3944
+#, no-wrap
+msgid "Detecting Installed Versions"
+msgstr "Обнаружение установленных версий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3949
+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 ""
+"Для определения установленной версии определите `WANT_WX`. Если значение не "
+"задано для конкретной версии, компоненты будут иметь суффикс версии. "
+"`HAVE_WX` будет заполнен после обнаружения."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3951
+#, no-wrap
+msgid "Detecting Installed wxWidgets Versions and Components"
+msgstr "Обнаружение установленных версий и компонентов wxWidgets"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3955
+msgid ""
+"This fragment can be used in a port that uses wxWidgets if it is installed, "
+"or an option is selected."
+msgstr ""
+"Этот фрагмент может использоваться в порте, который использует wxWidgets, "
+"если они установлены или выбран соответствующий параметр."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3959
+#, no-wrap
+msgid "WANT_WX=\tyes\n"
+msgstr "WANT_WX=\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3961
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3977
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4030
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4620
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3966
+#, 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 ""
+".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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3969
+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 ""
+"Этот фрагмент может использоваться в порте, который включает поддержку "
+"wxPython, если она установлена или выбрана соответствующая опция, в "
+"дополнение к wxWidgets, обе версии `2.8`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3975
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx\n"
+"WANT_WX=\t2.8\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx\n"
+"WANT_WX=\t2.8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3982
+#, 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 ""
+".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"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3987
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4157
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4392
+#, no-wrap
+msgid "Defined Variables"
+msgstr "Переменные, определенные в фреймворке"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3990
+msgid ""
+"These variables are available in the port (after defining one from "
+"crossref:special[wx-ver-sel-table,Variables to Select wxWidgets Versions])."
+msgstr ""
+"Эти переменные доступны в порте (после определения одной из "
+"crossref:special[wx-ver-sel-table,переменных для выбора версий wxWidgets])."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3992
+#, no-wrap
+msgid "Variables Defined for Ports That Use wxWidgets"
+msgstr "Переменные, определенные для портов, использующих wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3999
+#, no-wrap
+msgid "`WX_CONFIG`"
+msgstr "`WX_CONFIG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4001
+#, no-wrap
+msgid "The path to the wxWidgets`wx-config` script (with different name)"
+msgstr "Путь к скрипту `wx-config` wxWidgets (с другим именем)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4002
+#, no-wrap
+msgid "`WXRC_CMD`"
+msgstr "`WXRC_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4004
+#, no-wrap
+msgid "The path to the wxWidgets`wxrc` program (with different name)"
+msgstr "Путь к программе `wxrc` wxWidgets (с другим именем)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4005
+#, no-wrap
+msgid "`WX_VERSION`"
+msgstr "`WX_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4006
+#, no-wrap
+msgid "The wxWidgets version that is going to be used (for example, `2.6`)"
+msgstr "Версия wxWidgets, которая будет использоваться (например, `2.6`)"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4009
+#, no-wrap
+msgid "Processing in [.filename]#bsd.port.pre.mk#"
+msgstr "Обработка в [.filename]#bsd.port.pre.mk#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4012
+msgid ""
+"Define `WX_PREMK` to be able to use the variables right after including "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Определите `WX_PREMK`, чтобы иметь возможность использовать переменные сразу "
+"после включения [.filename]#bsd.port.pre.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4016
+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 ""
+"При определении `WX_PREMK` версия, зависимости, компоненты и определенные "
+"переменные не изменятся при модификации переменных порта wxWidgets _после_ "
+"включения [.filename]#bsd.port.pre.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4019
+#, no-wrap
+msgid "Using wxWidgets Variables in Commands"
+msgstr "Использование переменных wxWidgets в командах"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4023
+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 ""
+"Этот фрагмент иллюстрирует использование `WX_PREMK` путем запуска скрипта "
+"`wx-config` для получения полной строки версии, присвоения её переменной и "
+"передачи в программу."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4028
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_PREMK=\tyes\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_PREMK=\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4033
+#, no-wrap
+msgid ""
+".if exists(${WX_CONFIG})\n"
+"VER_STR!=\t${WX_CONFIG} --release\n"
+msgstr ""
+".if exists(${WX_CONFIG})\n"
+"VER_STR!=\t${WX_CONFIG} --release\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4036
+#, no-wrap
+msgid ""
+"PLIST_SUB+=\tVERSION=\"${VER_STR}\"\n"
+".endif\n"
+msgstr ""
+"PLIST_SUB+=\tVERSION=\"${VER_STR}\"\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4043
+msgid ""
+"The wxWidgets variables can be safely used in commands when they are inside "
+"targets without the need of `WX_PREMK`."
+msgstr ""
+"Переменные wxWidgets можно безопасно использовать в командах внутри целей "
+"без необходимости в `WX_PREMK`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4046
+#, no-wrap
+msgid "Additional `configure` Arguments"
+msgstr "Дополнительные параметры `configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4049
+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 ""
+"Некоторые скрипты GNU `configure` не могут найти wxWidgets, если задана "
+"только переменная окружения `WX_CONFIG`, и требуют дополнительные параметры. "
+"`WX_CONF_ARGS` можно использовать для их указания."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4051
+#, no-wrap
+msgid "Legal Values for `WX_CONF_ARGS`"
+msgstr "Допустимые значения для `WX_CONF_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4055
+#, no-wrap
+msgid "Possible value"
+msgstr "Возможное значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4057
+#, no-wrap
+msgid "Resulting argument"
+msgstr "Получаемый параметр"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4058
+#, no-wrap
+msgid "`absolute`"
+msgstr "`absolute`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4060
+#, no-wrap
+msgid "`--with-wx-config=${WX_CONFIG}`"
+msgstr "`--with-wx-config=${WX_CONFIG}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4061
+#, no-wrap
+msgid "`relative`"
+msgstr "`relative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4062
+#, no-wrap
+msgid "`--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`"
+msgstr "`--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4065
+#, no-wrap
+msgid "Using Lua"
+msgstr "Использование Lua"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4068
+msgid ""
+"This section describes the status of the Lua libraries in the ports tree and "
+"its integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние библиотек Lua в дереве портов и их "
+"интеграцию с системой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4074
+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 ""
+"Существует множество версий библиотек Lua и соответствующих интерпретаторов, "
+"которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). "
+"В дереве портов эта проблема решена установкой каждой версии под разными "
+"именами с использованием суффиксов номеров версий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4077
+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:4080
+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 ""
+"Приложения, использующие Lua, обычно должны собираться только для одной "
+"версии. Однако загружаемые модули для Lua собираются в отдельных флейворах "
+"для каждой поддерживаемой версии Lua, и зависимости от таких модулей должны "
+"указывать флейвор с использованием суффикса `@${LUA_FLAVOR}` в расположении "
+"(origin) порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4085
+msgid "A port using Lua should have a line of this form:"
+msgstr "Порт, использующий Lua, должен содержать строку следующего вида:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4089
+#, no-wrap
+msgid "USES=\tlua\n"
+msgstr "USES=\tlua\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4094
+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 ""
+"Если требуется определённая версия Lua или диапазон версий, его можно "
+"указать в виде параметра `XY` (который можно использовать несколько раз), "
+"`XY+`, `-XY` или `XY-ZA`. Версия Lua, установленная через "
+"`DEFAULT_VERSIONS`, будет использована, если она попадает в запрошенный "
+"диапазон, в противном случае будет использована ближайшая к умолчанию "
+"запрошенная версия. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4098
+#, no-wrap
+msgid "USES=\tlua:52-53\n"
+msgstr "USES=\tlua:52-53\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4101
+msgid ""
+"Note that no attempt is made to adjust the version selection based on the "
+"presence of any already-installed Lua version."
+msgstr ""
+"Обратите внимание, что не предпринимается попытка изменить выбор версии на "
+"основе наличия любой уже установленной версии Lua."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4106
+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 ""
+"Форма указания версии `XY+` не должна использоваться без тщательного "
+"обдумывания; Lua API в некоторой степени меняется с каждой версией, и "
+"инструменты конфигурации, такие как CMake или Autoconf, скорее всего не "
+"будут работать с будущими версиями Lua, пока не будут обновлены для этого."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4109
+#, no-wrap
+msgid "Configuration and Compiler flags"
+msgstr "Конфигурация и флаги компилятора"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4114
+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 ""
+"Программное обеспечение, использующее Lua, может быть написано с "
+"автоматическим определением версии Lua в использовании. В общем случае порты "
+"должны переопределять это предположение и принудительно использовать "
+"конкретную выбранную версию Lua, как описано выше. В зависимости от "
+"портируемого программного обеспечения, это может потребовать любого или всех "
+"из следующих действий:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4116
+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 ""
+"Использование `LUA_VER` в качестве части параметра для скрипта конфигурации "
+"программного обеспечения через `CONFIGURE_ARGS` или `CONFIGURE_ENV` (или "
+"эквивалентные для других систем сборки);"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4117
+msgid ""
+"Adding `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}`, and `-llua-${LUA_VER}` to "
+"`CFLAGS`, `LDFLAGS`, `LIBS` respectively as appropriate;"
+msgstr ""
+"Добавление `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}` и `-llua-${LUA_VER}` в "
+"`CFLAGS`, `LDFLAGS` и `LIBS` соответственно, где это необходимо;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4118
+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:4121
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4365
+#, no-wrap
+msgid "Version Flavors"
+msgstr "Флейворы версии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4125
+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 ""
+"Порт, который устанавливает модуль Lua (а не приложение, просто использующее "
+"Lua), должен собирать отдельный флейвор для каждой поддерживаемой версии "
+"Lua. Это делается путем добавления параметра `module`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4129
+#, no-wrap
+msgid "USES=\tlua:module\n"
+msgstr "USES=\tlua:module\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4132
+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:4134
+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 ""
+"Поскольку каждый флейвор должен иметь уникальное имя пакета, предоставляется "
+"переменная `LUA_PKGNAMEPREFIX`, которая будет установлена в соответствующее "
+"значение; предполагаемое использование:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4138
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr "PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4142
+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 ""
+"Модульные порты обычно должны устанавливать файлы только в `LUA_MODLIBDIR`, "
+"`LUA_MODSHAREDIR`, `LUA_DOCSDIR` и `LUA_EXAMPLESDIR`, все из которых "
+"настроены на ссылки в версионно-зависимые подкаталоги. Установка любых "
+"других файлов должна выполняться с осторожностью, чтобы избежать конфликтов "
+"между версиями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4144
+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 ""
+"Порт (кроме модуля Lua), который хочет собрать отдельный пакет для каждой "
+"версии Lua, должен использовать параметр `flavors`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4148
+#, no-wrap
+msgid "USES=\tlua:flavors\n"
+msgstr "USES=\tlua:flavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4152
+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 ""
+"Это работает так же, как параметр `module`, описанный выше, но без "
+"предположения, что пакет должен быть задокументирован как модуль Lua "
+"(поэтому `LUA_DOCSDIR` и `LUA_EXAMPLESDIR` по умолчанию не определены). "
+"Однако порт может определить `LUA_DOCSUBDIR` как подходящее имя подкаталога "
+"(обычно `PORTNAME` порта, если это не конфликтует с `PORTNAME` любого "
+"модуля), и в этом случае фреймворк определит как `LUA_DOCSDIR`, так и "
+"`LUA_EXAMPLESDIR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4155
+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 ""
+"Как и в случае с модульными портами, порт с флейворами должен избегать "
+"установки файлов, которые могут конфликтовать между версиями. Обычно это "
+"достигается добавлением `LUA_VER_STR` в качестве суффикса к именам программ "
+"(например, с использованием crossref:uses[uses-uniquefiles,`uniquefiles`]), "
+"а также использованием `LUA_VER` или `LUA_VER_STR` в составе других файлов "
+"или поддиректорий, используемых вне `LUA_MODLIBDIR` и `LUA_MODSHAREDIR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4160
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4395
+msgid "These variables are available in the port."
+msgstr "В порте доступны эти переменные."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4162
+#, no-wrap
+msgid "Variables Defined for Ports That Use Lua"
+msgstr "Переменные, определенные для портов, использующих Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4169
+#, no-wrap
+msgid "`LUA_VER`"
+msgstr "`LUA_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4171
+#, no-wrap
+msgid "The Lua version that is going to be used (for example, `5.4`)"
+msgstr "Версия Lua, которая будет использоваться (например, `5.4`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4172
+#, no-wrap
+msgid "`LUA_VER_STR`"
+msgstr "`LUA_VER_STR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4174
+#, no-wrap
+msgid "The Lua version without the dots (for example, `54`)"
+msgstr "Версия Lua без точек (например, `54`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4175
+#, no-wrap
+msgid "`LUA_FLAVOR`"
+msgstr "`LUA_FLAVOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4177
+#, no-wrap
+msgid "The flavor name corresponding to the selected Lua version, to be used for specifying dependencies"
+msgstr "Имя флейвора, соответствующее выбранной версии Lua, используемое для указания зависимостей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4178
+#, no-wrap
+msgid "`LUA_BASE`"
+msgstr "`LUA_BASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4180
+#, no-wrap
+msgid "The prefix that should be used to locate Lua (and components) that are already installed"
+msgstr "Префикс, который должен использоваться для поиска Lua (и компонентов), уже установленных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4181
+#, no-wrap
+msgid "`LUA_PREFIX`"
+msgstr "`LUA_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4183
+#, no-wrap
+msgid "The prefix where Lua (and components) are to be installed by this port"
+msgstr "Префикс, куда этим портом будут установлены Lua (и компоненты)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4184
+#, no-wrap
+msgid "`LUA_INCDIR`"
+msgstr "`LUA_INCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4186
+#, no-wrap
+msgid "The directory where Lua header files are installed"
+msgstr "Каталог, в котором установлены заголовочные файлы Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4187
+#, no-wrap
+msgid "`LUA_LIBDIR`"
+msgstr "`LUA_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4189
+#, no-wrap
+msgid "The directory where Lua libraries are installed"
+msgstr "Каталог, в котором установлены библиотеки Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4190
+#, no-wrap
+msgid "`LUA_REFMODLIBDIR`"
+msgstr "`LUA_REFMODLIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4192
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) that are already installed are to be found"
+msgstr "Каталог, в котором находятся уже установленные библиотеки модулей Lua ([.filename]#.so#)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4193
+#, no-wrap
+msgid "`LUA_REFMODSHAREDIR`"
+msgstr "`LUA_REFMODSHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4195
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) that are already installed are to be found"
+msgstr "Каталог, в котором находятся установленные модули Lua ([.filename]#.lua#)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4196
+#, no-wrap
+msgid "`LUA_MODLIBDIR`"
+msgstr "`LUA_MODLIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4198
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) are to be installed by this port"
+msgstr "Каталог, в котором библиотеки модулей Lua ([.filename]#.so#) должны быть установлены данным портом"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4199
+#, no-wrap
+msgid "`LUA_MODSHAREDIR`"
+msgstr "`LUA_MODSHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4201
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) are to be installed by this port"
+msgstr "Каталог, в котором должны быть установлены модули Lua ([.filename]#.lua#) данным портом"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4202
+#, no-wrap
+msgid "`LUA_PKGNAMEPREFIX`"
+msgstr "`LUA_PKGNAMEPREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4204
+#, no-wrap
+msgid "The package name prefix used by Lua modules"
+msgstr "Префикс имени пакета, используемый модулями Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4205
+#, no-wrap
+msgid "`LUA_CMD`"
+msgstr "`LUA_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4207
+#, no-wrap
+msgid "The name of the Lua interpreter (e.g. `lua54`)"
+msgstr "Название интерпретатора Lua (например, `lua54`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4208
+#, no-wrap
+msgid "`LUAC_CMD`"
+msgstr "`LUAC_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4209
+#, no-wrap
+msgid "The name of the Lua compiler (e.g. `luac54`)"
+msgstr "Название компилятора Lua (например, `luac54`)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4212
+msgid ""
+"These additional variables are available for ports that specified the "
+"`module` parameter:"
+msgstr ""
+"Эти дополнительные переменные доступны для портов, которые указали параметр "
+"`module`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4214
+#, no-wrap
+msgid "Variables Defined for Lua Module Ports"
+msgstr "Переменные, определенные для модулей Lua в портах"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4221
+#, no-wrap
+msgid "`LUA_DOCSDIR`"
+msgstr "`LUA_DOCSDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4223
+#, 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:4224
+#, no-wrap
+msgid "`LUA_EXAMPLESDIR`"
+msgstr "`LUA_EXAMPLESDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4225
+#, 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:4231
+#, no-wrap
+msgid "Makefile for an application using Lua"
+msgstr "`Makefile` для приложения, использующего Lua"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4236
+msgid ""
+"This example shows how to reference a Lua module required at run time. "
+"Notice that the reference must specify a flavor."
+msgstr ""
+"Этот пример показывает, как сослаться на модуль Lua, требуемый во время "
+"выполнения. Обратите внимание, что ссылка должна указывать флейвор."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4242
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4503
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4246
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4270
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/lua_sample/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/lua_sample/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4248
+#, no-wrap
+msgid "RUN_DEPENDS=\t${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4250
+#, no-wrap
+msgid "USES=\t\tlua\n"
+msgstr "USES=\t\tlua\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4257
+#, no-wrap
+msgid "Makefile for a simple Lua module"
+msgstr "`Makefile` для простого модуля Lua"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4266
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+"PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+"PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4272
+#, no-wrap
+msgid "USES=\t\tlua:module\n"
+msgstr "USES=\t\tlua:module\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4274
+#, no-wrap
+msgid "DOCSDIR=\t${LUA_DOCSDIR}\n"
+msgstr "DOCSDIR=\t${LUA_DOCSDIR}\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4281
+#, no-wrap
+msgid "Using Guile"
+msgstr "Использование Guile"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4284
+msgid ""
+"This section describes the status of Guile in the ports tree and its "
+"integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние Guile в дереве портов и его интеграцию с "
+"системой портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4293
+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 ""
+"Существует несколько версий библиотек Guile и соответствующих "
+"интерпретаторов, которые конфликтуют между собой (устанавливают файлы с "
+"одинаковыми именами). В дереве портов эта проблема решена путем установки "
+"каждой версии под разными именами с использованием суффиксов номеров версий. "
+"В большинстве случаев приложения должны определять правильную версию из "
+"предоставленных конфигурационных переменных и использовать `pkg-config` для "
+"определения имени и связанных путей. Однако некоторые приложения (особенно "
+"те, которые используют собственные правила конфигурации для `cmake` или "
+"`meson`) всегда будут пытаться использовать последнюю доступную версию. В "
+"этом случае либо исправьте порт, либо объявите конфликт сборки (см. опцию "
+"`conflicts` ниже), чтобы гарантировать создание правильной зависимости при "
+"сборке вне poudriere."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4299
+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 ""
+"Приложения, использующие Guile, обычно должны собираться только для одной "
+"версии, предпочтительно указанной в `DEFAULT_VERSIONS`, или, если это "
+"невозможно, для последней поддерживаемой версии. Однако библиотеки Guile или "
+"Scheme, а также модули расширения для Guile собираются в отдельных флейворах "
+"для каждой поддерживаемой версии Guile. Зависимости от таких портов должны "
+"указывать флейвор с использованием суффикса `@${GUILE_FLAVOR}` в "
+"расположении (origin) порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4304
+msgid ""
+"A port using Guile should define `USES=guile:__arg,arg...__` with "
+"appropriate arguments as follows:"
+msgstr ""
+"Порт, использующий Guile, должен определять `USES=guile:__arg,arg...__` с "
+"соответствующими параметрами следующим образом:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4306
+#, no-wrap
+msgid "Arguments Defined for Ports That Use Guile"
+msgstr "Параметры, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4313
+#, no-wrap
+msgid "_X.Y_"
+msgstr "_X.Y_"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4317
+#, 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 ""
+"Объявить совместимость с версией Guile `X.Y`.\n"
+"Доступные версии: `1.8` (устарела), `2.2` и `3.0`.\n"
+"Можно указать несколько версий."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4318
+#, no-wrap
+msgid "flavors"
+msgstr "flavors"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4322
+#, 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 ""
+"Создать флейвор для каждой указанной версии Guile.\n"
+"Версия, указанная в `DEFAULT_VERSIONS`, станет флейвором по умолчанию.\n"
+"Названия флейворов имеют вид `guileXY`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4323
+#, no-wrap
+msgid "build"
+msgstr "build"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4326
+#, 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 ""
+"Добавить интерпретатор Guile только как зависимость для сборки, а не как зависимость библиотеки.\n"
+"`build` и `run` могут быть указаны оба."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4327
+#, no-wrap
+msgid "run"
+msgstr "run"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4330
+#, 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 ""
+"Добавить интерпретатор Guile только как зависимость во время выполнения, а не как зависимость от библиотеки.\n"
+"`build` и `run` могут быть указаны оба."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4331
+#, no-wrap
+msgid "alias"
+msgstr "alias"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4333
+#, no-wrap
+msgid "Add `BINARY_ALIAS` values for the interpreter and tools."
+msgstr "Добавить значения `BINARY_ALIAS` для интерпретатора и инструментов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4334
+#, no-wrap
+msgid "conflicts"
+msgstr "conflicts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4336
+#, 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 ""
+"Объявить `CONFLICTS_BUILD` для версий Guile новее выбранной. \n"
+"Используйте это, когда порт нельзя настроить на использование определённой версии Guile."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4339
+msgid ""
+"Some additional arguments are available for handling unusual cases; see `Mk/"
+"Uses/guile.mk` for details."
+msgstr ""
+"Некоторые дополнительные аргументы доступны для обработки нестандартных "
+"случаев; подробности см. в `Mk/Uses/guile.mk`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4342
+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 ""
+"Если не указано `build` или `run`, то `LIB_DEPENDS` получает зависимость от "
+"библиотеки `libguile`, а также любые дополнительные зависимости, требуемые "
+"версией guile, например, `libgc`. Обычно порту не требуются дополнительные "
+"зависимости, связанные с использованием Guile."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4344
+#, no-wrap
+msgid "Configuration flags"
+msgstr "Флаги конфигурации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4349
+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 ""
+"Программное обеспечение, использующее Guile, должно использовать механизм "
+"`pkg-config` для получения флагов компилятора и компоновщика. Некоторые "
+"старые или экзотические порты могут использовать `guile-config` или получать "
+"значения напрямую из `guile`, что также должно работать (в некоторых из этих "
+"случаев может быть полезен аргумент `alias`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4351
+msgid ""
+"The framework tries to inform the port of the desired Guile version using "
+"the following methods:"
+msgstr ""
+"Фреймворк пытается сообщить порту желаемую версию Guile, используя следующие "
+"методы:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4353
+msgid "`GUILE_EFFECTIVE_VERSION` is added to `CONFIGURE_ENV`;"
+msgstr "`GUILE_EFFECTIVE_VERSION` добавлен в `CONFIGURE_ENV`;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4354
+msgid ""
+"The full path to the Guile binary is specified in the `GUILE` variable in "
+"`CONFIGURE_ENV` and `MAKE_ENV`;"
+msgstr ""
+"Полный путь к исполняемому файлу Guile указан в переменной `GUILE` в "
+"`CONFIGURE_ENV` и `MAKE_ENV`;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4355
+msgid ""
+"If the `alias` option is used, the desired Guile version's binaries are the "
+"ones aliased;"
+msgstr ""
+"Если используется опция `alias`, то желаемые версии бинарных файлов Guile "
+"являются теми, которые имеют алиасы;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4356
+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 ""
+"Если параметр `alias` не используется, пути к инструментам нужной версии "
+"Guile (`guild`, `guile-config` и т.д.) добавляются в `CONFIGURE_ENV` и "
+"`MAKE_ENV` в виде переменных `GUILD`, `GUILE_CONFIG` и т.д."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4359
+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 ""
+"Для некоторых портов может потребоваться указать версию дополнительными "
+"способами, например, через `CONFIGURE_ARGS` или `MESON_ARGS`, в зависимости "
+"от порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4363
+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 ""
+"Если ни один из этих методов не приводит к тому, что порт выбирает указанную "
+"версию Guile при наличии других версий, то предпочтительно исправить его, "
+"чтобы это происходило. Если это невозможно, укажите опцию `conflicts`, чтобы "
+"предотвратить сборку порта в условиях, когда он обнаруживает неправильную "
+"версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4370
+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 ""
+"Порт, который устанавливает расширение или библиотеку Guile, или библиотеку "
+"Scheme, которая предварительно компилируется для Guile, должен собирать "
+"отдельный флейвор для каждой поддерживаемой версии Guile. Это делается путем "
+"добавления опции `flavors`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4372
+msgid ""
+"Since each flavor must have a different package name, such ports must set "
+"`PKGNAMESUFFIX`, typically:"
+msgstr ""
+"Поскольку каждый флейвор должен иметь уникальное имя пакета, такие порты "
+"обычно устанавливают `PKGNAMESUFFIX`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4376
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t-${FLAVOR}\n"
+msgstr "PKGNAMESUFFIX=\t-${FLAVOR}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4380
+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 ""
+"Такие порты должны устанавливать файлы Scheme в `GUILE_SITE_DIR`, а не в "
+"`GUILE_GLOBAL_SITE_DIR`, даже если файлы не зависят от версии. Это часто "
+"требует исправления порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4383
+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 ""
+"Кроме того, если такой порт устанавливает файл `.pc`, он должен быть "
+"размещён в `GUILE_PKGCONFIG_PATH`, а не в глобальной директории `pkgconfig`. "
+"Это позволяет зависимым портам находить правильную конфигурацию для "
+"используемой версии Guile."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4386
+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 ""
+"Если порт расширения Guile устанавливает файл `.so`, то обычно он должен "
+"быть размещён в специфичной для версии Guile директории `extensions`. Обычно "
+"не следует использовать `USE_LDCONFIG`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4390
+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 ""
+"Любые другие файлы, устанавливаемые портом с флейвором, также должны "
+"находиться в версионных каталогах или использовать версионные имена файлов. "
+"Для документации и примеров переменные `GUILE_DOCS_DIR` и "
+"`GUILE_EXAMPLES_DIR` указывают подходящие расположения, в которых порт "
+"должен создать подкаталог (см. ниже)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4397
+#, no-wrap
+msgid "Variables Defined for Ports That Use Guile"
+msgstr "Переменные, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4402
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4464
+#, no-wrap
+msgid "Sample Value"
+msgstr "Пример значения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4405
+#, no-wrap
+msgid "`GUILE_VER`"
+msgstr "`GUILE_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4406
+#, no-wrap
+msgid "3.0"
+msgstr "3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4408
+#, no-wrap
+msgid "Guile version in use."
+msgstr "Используемая версия Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4409
+#, no-wrap
+msgid "`GUILE_SFX`"
+msgstr "`GUILE_SFX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4410
+#, no-wrap
+msgid "3"
+msgstr "3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4413
+#, 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 ""
+"Короткий суффикс, используемый в некоторых именах.\n"
+"Используйте с осторожностью; может быть неуникальным или измениться в будущем."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4414
+#, no-wrap
+msgid "`GUILE_FLAVOR`"
+msgstr "`GUILE_FLAVOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4415
+#, no-wrap
+msgid "guile30"
+msgstr "guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4417
+#, no-wrap
+msgid "Flavor name corresponding to the selected version."
+msgstr "Название флейвора, соответствующее выбранной версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4418
+#, no-wrap
+msgid "`GUILE_PORT`"
+msgstr "`GUILE_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4419
+#, no-wrap
+msgid "lang/guile3"
+msgstr "lang/guile3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4421
+#, no-wrap
+msgid "Port origin of the specified Guile version."
+msgstr "Расположение порта (origin) для указанной версии Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4422
+#, no-wrap
+msgid "`GUILE_PREFIX`"
+msgstr "`GUILE_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4423
+#, no-wrap
+msgid "${PREFIX}"
+msgstr "${PREFIX}"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4425
+#, no-wrap
+msgid "Directory prefix to be used for installation."
+msgstr "Префикс каталога для использования при установке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4426
+#, no-wrap
+msgid "`GUILE_CMD`"
+msgstr "`GUILE_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4427
+#, no-wrap
+msgid "guile-3.0"
+msgstr "guile-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4429
+#, no-wrap
+msgid "Name of the Guile interpreter, with version suffix."
+msgstr "Имя интерпретатора Guile с суффиксом версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4430
+#, no-wrap
+msgid "`GUILE_CMDPATH`"
+msgstr "`GUILE_CMDPATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4431
+#, no-wrap
+msgid "${LOCALBASE}/bin/guile-3.0"
+msgstr "${LOCALBASE}/bin/guile-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4433
+#, no-wrap
+msgid "Full path to the Guile interpreter."
+msgstr "Полный путь к интерпретатору Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4434
+#, no-wrap
+msgid "`GUILD_CMD`"
+msgstr "`GUILD_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4435
+#, no-wrap
+msgid "guild-3.0"
+msgstr "guild-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4437
+#, no-wrap
+msgid "Name of the Guild tool, with version suffix."
+msgstr "Название инструмента Guild, с суффиксом версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4438
+#, no-wrap
+msgid "`GUILD_CMDPATH`"
+msgstr "`GUILD_CMDPATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4439
+#, no-wrap
+msgid "${LOCALBASE}/bin/guild-3.0"
+msgstr "`${LOCALBASE}/bin/guild-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4441
+#, no-wrap
+msgid "Full path to the Guild tool."
+msgstr "Полный путь к инструменту Guild."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4443
+#, no-wrap
+msgid ""
+"`++GUILE_*_CMD++` +\n"
+"`++GUILE_*_CMDPATH++`"
+msgstr ""
+"`++GUILE_*_CMD++` +\n"
+"`++GUILE_*_CMDPATH++`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4446
+#, no-wrap
+msgid "Like `GUILE_CMD` and `GUILE_CMDPATH`, but for other tool binaries."
+msgstr "Как `GUILE_CMD` и `GUILE_CMDPATH`, но для других исполняемых файлов утилит."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4447
+#, no-wrap
+msgid "`GUILE_PKGCONFIG_PATH`"
+msgstr "`GUILE_PKGCONFIG_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4448
+#, no-wrap
+msgid "${LOCALBASE}/libdata/pkgconfig/guile/3.0"
+msgstr "${LOCALBASE}/libdata/pkgconfig/guile/3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4450
+#, no-wrap
+msgid "Where packages using `flavors` should install `.pc` files."
+msgstr "Где пакеты, использующие `flavors`, должны устанавливать файлы `.pc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4451
+#, no-wrap
+msgid "`GUILE_INFO_PATH`"
+msgstr "`GUILE_INFO_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4452
+#, no-wrap
+msgid "share/info/guile3"
+msgstr "share/info/guile3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4453
+#, no-wrap
+msgid "A suitable value for `INFO_PATH` for ports using the `flavors` option."
+msgstr "Подходящее значение для `INFO_PATH` для портов, использующих опцию `flavors`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4457
+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 ""
+"Следующие элементы определены как переменные и как записи `PLIST_SUB`. Форма "
+"переменной имеет суффикс `_DIR` и представляет собой полный путь (с "
+"префиксом `GUILE_PREFIX`)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4459
+#, no-wrap
+msgid "Path Substitutions Defined for Ports That Use Guile"
+msgstr "Подстановки путей, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4467
+#, no-wrap
+msgid "GUILE_GLOBAL_SITE"
+msgstr "GUILE_GLOBAL_SITE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4468
+#, no-wrap
+msgid "share/guile/site"
+msgstr "share/guile/site"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4470
+#, no-wrap
+msgid "Site directory shared by all guile versions; this should not usually be used."
+msgstr "Каталог сайта, общий для всех версий guile; обычно не должен использоваться."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4471
+#, no-wrap
+msgid "GUILE_SITE"
+msgstr "GUILE_SITE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4472
+#, no-wrap
+msgid "share/guile/3.0/site"
+msgstr "share/guile/3.0/site"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4474
+#, no-wrap
+msgid "Site directory for the selected Guile version."
+msgstr "Каталог сайта для выбранной версии Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4475
+#, no-wrap
+msgid "GUILE_SITE_CCACHE"
+msgstr "GUILE_SITE_CCACHE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4476
+#, no-wrap
+msgid "lib/guile/3.0/site-ccache"
+msgstr "lib/guile/3.0/site-ccache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4478
+#, no-wrap
+msgid "Directory for compiled bytecode files."
+msgstr "Каталог для скомпилированных файлов байт-кода."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4479
+#, no-wrap
+msgid "GUILE_DOCS"
+msgstr "GUILE_DOCS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4480
+#, no-wrap
+msgid "share/doc/guile30"
+msgstr "share/doc/guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4482
+#, no-wrap
+msgid "Parent directory for version-specific documentation."
+msgstr "Родительский каталог для документации, специфичной для версий."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4483
+#, no-wrap
+msgid "GUILE_EXAMPLES"
+msgstr "GUILE_EXAMPLES"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4484
+#, no-wrap
+msgid "share/examples/guile30"
+msgstr "share/examples/guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4485
+#, no-wrap
+msgid "Parent directory for version-specific examples."
+msgstr "Родительский каталог для примеров, специфичных для версий."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4491
+#, no-wrap
+msgid "Makefile for an application using Guile"
+msgstr "`Makefile` для приложения, использующего Guile"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4497
+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 ""
+"Этот пример демонстрирует, как сослаться на библиотеку Guile, необходимую во "
+"время сборки и выполнения. Обратите внимание, что ссылка должна указывать "
+"флейвор. В этом примере предполагается, что приложение использует `pkg-"
+"config` для поиска зависимостей."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4507
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/guile_sample/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/guile_sample/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4510
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4512
+#, no-wrap
+msgid "USES=\t\tguile:2.2,3.0 pkgconfig\n"
+msgstr "USES=\t\tguile:2.2,3.0 pkgconfig\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4519
+#, no-wrap
+msgid "Using `iconv`"
+msgstr "Использование `iconv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4522
+msgid "FreeBSD has a native `iconv` in the operating system."
+msgstr ""
+"В FreeBSD имеется встроенная реализация `iconv` в самой операционной системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4524
+msgid "For software that needs `iconv`, define `USES=iconv`."
+msgstr ""
+"Для программного обеспечения, требующего `iconv`, определите `USES=iconv`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4526
+msgid "When a port defines `USES=iconv`, these variables will be available:"
+msgstr ""
+"Когда порт определяет `USES=iconv`, становятся доступны следующие переменные:"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4531
+#, no-wrap
+msgid "Variable name"
+msgstr "Имя переменной"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4532
+#, no-wrap
+msgid "Purpose"
+msgstr "Назначение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4533
+#, no-wrap
+msgid "Port iconv (when using WCHAR_T or //TRANSLIT extensions)"
+msgstr "Порт iconv (при использовании расширений WCHAR_T или //TRANSLIT)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4536
+#, no-wrap
+msgid "Base iconv"
+msgstr "Базовый iconv"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4537
+#, no-wrap
+msgid "`ICONV_CMD`"
+msgstr "`ICONV_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4538
+#, no-wrap
+msgid "Directory where the `iconv` binary resides"
+msgstr "Каталог, в котором находится бинарный файл `iconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4539
+#, no-wrap
+msgid "`${LOCALBASE}/bin/iconv`"
+msgstr "`${LOCALBASE}/bin/iconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4541
+#, no-wrap
+msgid "[.filename]#/usr/bin/iconv#"
+msgstr "[.filename]#/usr/bin/iconv#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4542
+#, no-wrap
+msgid "`ICONV_LIB`"
+msgstr "`ICONV_LIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4543
+#, no-wrap
+msgid "`ld` argument to link to [.filename]#libiconv# (if needed)"
+msgstr "аргумент `ld` для линковки с [.filename]#libiconv# (если требуется)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4544
+#, no-wrap
+msgid "`-liconv`"
+msgstr "`-liconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4546
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4556
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4560
+#, no-wrap
+msgid "(empty)"
+msgstr "(пусто)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4547
+#, no-wrap
+msgid "`ICONV_PREFIX`"
+msgstr "`ICONV_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4548
+#, no-wrap
+msgid "Directory where the `iconv` implementation resides (useful for configure scripts)"
+msgstr "Каталог, в котором находится реализация `iconv` (полезно для скриптов configure)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4549
+#, no-wrap
+msgid "`${LOCALBASE}`"
+msgstr "`${LOCALBASE}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4551
+#, no-wrap
+msgid "[.filename]#/usr#"
+msgstr "[.filename]#/usr#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4552
+#, no-wrap
+msgid "`ICONV_CONFIGURE_ARG`"
+msgstr "`ICONV_CONFIGURE_ARG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4553
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4558
+#, no-wrap
+msgid "Preconstructed configure argument for configure scripts"
+msgstr "Предварительно сконструированный аргумент configure для скриптов configure"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4554
+#, no-wrap
+msgid "`--with-libiconv-prefix=${LOCALBASE}`"
+msgstr "`--with-libiconv-prefix=${LOCALBASE}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4557
+#, no-wrap
+msgid "`ICONV_CONFIGURE_BASE`"
+msgstr "`ICONV_CONFIGURE_BASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4559
+#, no-wrap
+msgid "`--with-libiconv=${LOCALBASE}`"
+msgstr "`--with-libiconv=${LOCALBASE}`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4563
+msgid ""
+"These two examples automatically populate the variables with the correct "
+"value for systems using package:converters/libiconv[] or the native `iconv` "
+"respectively:"
+msgstr ""
+"Эти два примера автоматически заполняют переменные правильным значением для "
+"систем, использующих package:converters/libiconv[] или `iconv`, входящий в "
+"состав операционной системы, соответственно:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4565
+#, no-wrap
+msgid "Simple `iconv` Usage"
+msgstr "Простое использование `iconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4572
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"LDFLAGS+=\t-L${LOCALBASE}/lib ${ICONV_LIB}\n"
+msgstr ""
+"USES=\t\ticonv\n"
+"LDFLAGS+=\t-L${LOCALBASE}/lib ${ICONV_LIB}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4577
+#, no-wrap
+msgid "`iconv` Usage with `configure`"
+msgstr "Использование `iconv` с `configure`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4584
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}\n"
+msgstr ""
+"USES=\t\ticonv\n"
+"CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4590
+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 ""
+"Как показано выше, `ICONV_LIB` пуста, когда присутствует встроенный `iconv`. "
+"Это можно использовать для обнаружения встроенного `iconv` и действовать "
+"соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4593
+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 ""
+"Иногда в программе аргумент `ld` или путь поиска жестко заданы в "
+"[.filename]#Makefile# или скрипте configure. Для решения этой проблемы можно "
+"использовать следующий подход:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4595
+#, no-wrap
+msgid "Fixing Hardcoded `-liconv`"
+msgstr "Исправление жестко заданного `-liconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4601
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4618
+#, no-wrap
+msgid "USES=\t\ticonv\n"
+msgstr "USES=\t\ticonv\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4604
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4610
+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 ""
+"В некоторых случаях необходимо установить альтернативные значения или "
+"выполнить операции в зависимости от наличия встроенного `iconv`. "
+"[.filename]#bsd.port.pre.mk# должен быть включен до проверки значения "
+"`ICONV_LIB`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4612
+#, no-wrap
+msgid "Checking for Native `iconv` Availability"
+msgstr "Проверка доступности встроенной поддержки `iconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4626
+#, 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 ""
+"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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4628
+#, no-wrap
+msgid ".include <bsd.port.post.mk>\n"
+msgstr ".include <bsd.port.post.mk>\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4633
+#, no-wrap
+msgid "Using Xfce"
+msgstr "Использование Xfce"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4636
+msgid "Ports that need Xfce libraries or applications set `USES=xfce`."
+msgstr ""
+"Порты, которым требуются библиотеки или приложения Xfce, устанавливают "
+"`USES=xfce`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4640
+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 ""
+"Конкретные зависимости библиотек и приложений Xfce задаются с помощью "
+"значений, присвоенных `USE_XFCE`. Они определены в [.filename]#/usr/ports/Mk/"
+"Uses/xfce.mk#. Возможные значения:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4641
+#, no-wrap
+msgid "Values of `USE_XFCE`"
+msgstr "Значения `USE_XFCE`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4642
+#, no-wrap
+msgid "garcon"
+msgstr "garcon"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4644
+msgid "package:sysutils/garcon[]"
+msgstr "package:sysutils/garcon[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4645
+#, no-wrap
+msgid "libexo"
+msgstr "libexo"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4647
+msgid "package:x11/libexo[]"
+msgstr "package:x11/libexo[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4648
+#, no-wrap
+msgid "libgui"
+msgstr "libgui"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4650
+msgid "package:x11-toolkits/libxfce4gui[]"
+msgstr "package:x11-toolkits/libxfce4gui[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4651
+#, no-wrap
+msgid "libmenu"
+msgstr "libmenu"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4653
+msgid "package:x11/libxfce4menu[]"
+msgstr "package:x11/libxfce4menu[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4654
+#, no-wrap
+msgid "libutil"
+msgstr "libutil"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4656
+msgid "package:x11/libxfce4util[]"
+msgstr "package:x11/libxfce4util[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4657
+#, no-wrap
+msgid "panel"
+msgstr "panel"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4659
+msgid "package:x11-wm/xfce4-panel[]"
+msgstr "package:x11-wm/xfce4-panel[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4660
+#, no-wrap
+msgid "thunar"
+msgstr "thunar"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4662
+msgid "package:x11-fm/thunar[]"
+msgstr "package:x11-fm/thunar[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4663
+#, no-wrap
+msgid "xfconf"
+msgstr "xfconf"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4665
+msgid "package:x11/xfce4-conf[]"
+msgstr "package:x11/xfce4-conf[]"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4667
+#, no-wrap
+msgid "`USES=xfce` Example"
+msgstr "Пример `USES=xfce`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4674
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibmenu\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibmenu\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4679
+#, no-wrap
+msgid "Using Xfce's Own GTK2 Widgets"
+msgstr "Использование собственных виджетов GTK2 в Xfce"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4683
+msgid ""
+"In this example, the ported application uses the GTK2-specific widgets "
+"package:x11/libxfce4menu[] and package:x11/xfce4-conf[]."
+msgstr ""
+"В этом примере портированное приложение использует пакет виджетов, "
+"специфичных для GTK2: package:x11/libxfce4menu[] и package:x11/xfce4-conf[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4688
+#, no-wrap
+msgid ""
+"USES=\t\txfce:gtk2\n"
+"USE_XFCE=\tlibmenu xfconf\n"
+msgstr ""
+"USES=\t\txfce:gtk2\n"
+"USE_XFCE=\tlibmenu xfconf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4697
+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 ""
+"Компоненты Xfce, включённые таким образом, автоматически загрузят все "
+"необходимые зависимости. Указывать полный список больше не требуется. Если "
+"порту нужен только package:x11-wm/xfce4-panel[], используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4702
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tpanel\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tpanel\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4705
+msgid ""
+"There is no need to list the components package:x11-wm/xfce4-panel[] needs "
+"itself like this:"
+msgstr ""
+"Нет необходимости перечислять компоненты package:x11-wm/xfce4-panel[], "
+"которые ему самому требуются, вот так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4710
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibexo libmenu libutil panel\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibexo libmenu libutil panel\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4714
+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 ""
+"Однако компоненты Xfce и зависимости порта, не относящиеся к Xfce, должны "
+"быть явно включены. Не рассчитывайте, что компонент Xfce предоставит "
+"дополнительную зависимость, кроме себя, для основного порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4717
+#, no-wrap
+msgid "Using Budgie"
+msgstr "Использование Budgie"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4720
+msgid ""
+"Applications or libraries depending on the Budgie desktop should set `USES= "
+"budgie` and set `USE_BUDGIE` to the list of required components."
+msgstr ""
+"Приложения или библиотеки, зависящие от рабочего стола Budgie, должны "
+"указывать `USES= budgie` и устанавливать `USE_BUDGIE` в список необходимых "
+"компонентов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4727
+#, no-wrap
+msgid "`libbudgie`"
+msgstr "`libbudgie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4729
+#, no-wrap
+msgid "Desktop core (library)"
+msgstr "Ядро рабочего стола (библиотека)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4730
+#, no-wrap
+msgid "`libmagpie`"
+msgstr "`libmagpie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4732
+#, no-wrap
+msgid "Budgie's X11 window manager and compositor library"
+msgstr "Оконный менеджер X11 и библиотека композитинга Budgie"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4733
+#, no-wrap
+msgid "`raven`"
+msgstr "`raven`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4735
+#, 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:4736
+#, no-wrap
+msgid "`screensaver`"
+msgstr "`screensaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4738
+#, no-wrap
+msgid "Desktop-specific screensaver"
+msgstr "Рабочий стол: специальная заставка"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4743
+msgid ""
+"All application widgets communicate through the *org.budgie_desktop.Raven* "
+"service."
+msgstr ""
+"Все виджеты приложений взаимодействуют через службу "
+"*org.budgie_desktop.Raven*."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4745
+msgid ""
+"The default dependency is lib- and run-time, it can be changed with `:build` "
+"or `:run`, for example:"
+msgstr ""
+"Зависимость по умолчанию включает время сборки и выполнения, её можно "
+"изменить с помощью `:build` или `:run`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4750
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie\n"
+"USE_BUDGIE=\tscreensaver:build\n"
+msgstr ""
+"USES=\t\tbudgie\n"
+"USE_BUDGIE=\tscreensaver:build\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4754
+#, no-wrap
+msgid "`USE_BUDGIE` Example"
+msgstr "Пример `USE_BUDGIE`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4761
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie gettext gnome meson pkgconfig\n"
+"USE_BUDGIE=\tlibbudgie\n"
+msgstr ""
+"USES=\t\tbudgie gettext gnome meson pkgconfig\n"
+"USE_BUDGIE=\tlibbudgie\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4765
+#, no-wrap
+msgid "Using Databases"
+msgstr "Использование баз данных"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4768
+msgid ""
+"Use one of the `USES` macros from crossref:special[using-databases-"
+"uses,Database `USES` Macros] to add a dependency on a database."
+msgstr ""
+"Используйте один из макросов `USES` из crossref:special[using-databases-"
+"uses,Макросы `USES` для баз данных], чтобы добавить зависимость от базы "
+"данных."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4770
+#, no-wrap
+msgid "Database `USES` Macros"
+msgstr "Макросы `USES` для баз данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4774
+#, no-wrap
+msgid "Database"
+msgstr "База данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4776
+#, no-wrap
+msgid "USES Macro"
+msgstr "Макрос USES"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4777
+#, no-wrap
+msgid "Berkeley DB"
+msgstr "Berkeley DB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4779
+#, no-wrap
+msgid "crossref:uses[uses-bdb,`bdb`]"
+msgstr "crossref:uses[uses-bdb,`bdb`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4780
+#, no-wrap
+msgid "MariaDB, MySQL, Percona"
+msgstr "MariaDB, MySQL, Percona"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4782
+#, no-wrap
+msgid "crossref:uses[uses-mysql,`mysql`]"
+msgstr "crossref:uses[uses-mysql,`mysql`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4783
+#, no-wrap
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4785
+#, no-wrap
+msgid "crossref:uses[uses-pgsql,`pgsql`]"
+msgstr "crossref:uses[uses-pgsql,`pgsql`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4786
+#, no-wrap
+msgid "SQLite"
+msgstr "SQLite"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4787
+#, no-wrap
+msgid "crossref:uses[uses-sqlite,`sqlite`]"
+msgstr "crossref:uses[uses-sqlite,`sqlite`]"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4790
+#, no-wrap
+msgid "Using Berkeley DB 6"
+msgstr "Использование Berkeley DB 6"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4796
+#, no-wrap
+msgid "USES=\tbdb:6\n"
+msgstr "USES=\tbdb:6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4799
+msgid "See crossref:uses[uses-bdb,`bdb`] for more information."
+msgstr ""
+"См. crossref:uses[uses-bdb,`bdb`] для получения дополнительной информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4802
+#, no-wrap
+msgid "Using MySQL"
+msgstr "Использование MySQL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4806
+msgid "When a port needs the MySQL client library add"
+msgstr "Когда порту требуется клиентская библиотека MySQL, добавьте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4810
+#, no-wrap
+msgid "USES=\tmysql\n"
+msgstr "USES=\tmysql\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4813
+msgid "See crossref:uses[uses-mysql,`mysql`] for more information."
+msgstr ""
+"См. crossref:uses[uses-mysql,`mysql`] для получения дополнительной "
+"информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4816
+#, no-wrap
+msgid "Using PostgreSQL"
+msgstr "Использование PostgreSQL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4820
+msgid "When a port needs the PostgreSQL server version 9.6 or later add"
+msgstr "Когда порту требуется сервер PostgreSQL версии 9.6 или новее, добавьте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4825
+#, no-wrap
+msgid ""
+"USES=\t\tpgsql:9.6+\n"
+"WANT_PGSQL=\tserver\n"
+msgstr ""
+"USES=\t\tpgsql:9.6+\n"
+"WANT_PGSQL=\tserver\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4828
+msgid "See crossref:uses[uses-pgsql,`pgsql`] for more information."
+msgstr ""
+"См. crossref:uses[uses-pgsql,`pgsql`] для получения дополнительной "
+"информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4831
+#, no-wrap
+msgid "Using SQLite 3"
+msgstr "Использование SQLite 3"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4837
+#, no-wrap
+msgid "USES=\tsqlite:3\n"
+msgstr "USES=\tsqlite:3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4840
+msgid "See crossref:uses[uses-sqlite,`sqlite`] for more information."
+msgstr ""
+"См. crossref:uses[uses-sqlite,`sqlite`] для получения дополнительной "
+"информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4843
+#, no-wrap
+msgid "Starting and Stopping Services (`rc` Scripts)"
+msgstr "Запуск и остановка служб (скрипты `rc`)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4850
+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 ""
+"[.filename]#rc.d# скрипты используются для запуска служб при загрузке "
+"системы, а также предоставляют администраторам стандартный способ остановки, "
+"запуска и перезапуска служб. Порты интегрируются в систему "
+"[.filename]#rc.d#. Подробности использования можно найти в extref:{handbook}"
+"[соответствующей главе Handbook, configtuning-rcd]. Детальное объяснение "
+"доступных команд приведено в man:rc[8] и man:rc.subr[8]. Наконец, существует "
+"extref:{rc-scripting}[статья], посвящённая практическим аспектам написания "
+"[.filename]#rc.d# скриптов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4853
+msgid ""
+"With a mythical port called _doorman_, which needs to start a _doormand_ "
+"daemon. Add the following to the [.filename]#Makefile#:"
+msgstr ""
+"С мифическим портом под названием _doorman_, которому необходимо запустить "
+"демон _doormand_. Добавьте следующее в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4857
+#, no-wrap
+msgid "USE_RC_SUBR=\tdoormand\n"
+msgstr "USE_RC_SUBR=\tdoormand\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4864
+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 ""
+"Можно указать несколько скриптов, которые будут установлены. Скрипты должны "
+"быть размещены в подкаталоге [.filename]#files#, и к их имени должен быть "
+"добавлен суффикс `.in`. Для этого файла будут выполнены стандартные "
+"подстановки `SUB_LIST`. Также настоятельно рекомендуется использовать "
+"подстановки `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` см. в "
+"crossref:pkg-files[using-sub-files,соответствующем разделе]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4866
+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 ""
+"Начиная с FreeBSD 6.1-RELEASE, локальные скрипты [.filename]#rc.d# (включая "
+"те, что установлены через порты) включены в общий man:rcorder[8] базовой "
+"системы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4868
+msgid ""
+"An example simple [.filename]#rc.d# script to start the doormand daemon:"
+msgstr "Пример простого скрипта [.filename]#rc.d# для запуска демона doormand:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4872
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4884
+#, 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 ""
+"# 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"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4886
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ". /etc/rc.subr\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4889
+#, no-wrap
+msgid ""
+"name=doormand\n"
+"rcvar=doormand_enable\n"
+msgstr ""
+"name=doormand\n"
+"rcvar=doormand_enable\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4891
+#, no-wrap
+msgid "load_rc_config $name\n"
+msgstr "load_rc_config $name\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4894
+#, no-wrap
+msgid ""
+": ${doormand_enable:=\"NO\"}\n"
+": ${doormand_config=\"%%PREFIX%%/etc/doormand/doormand.cf\"}\n"
+msgstr ""
+": ${doormand_enable:=\"NO\"}\n"
+": ${doormand_config=\"%%PREFIX%%/etc/doormand/doormand.cf\"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4897
+#, no-wrap
+msgid ""
+"command=%%PREFIX%%/sbin/${name}\n"
+"pidfile=/var/run/${name}.pid\n"
+msgstr ""
+"command=%%PREFIX%%/sbin/${name}\n"
+"pidfile=/var/run/${name}.pid\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4899
+#, no-wrap
+msgid "command_args=\"-p $pidfile -f $doormand_config\"\n"
+msgstr "command_args=\"-p $pidfile -f $doormand_config\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4901
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr "run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4904
+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 ""
+"Если нет очень веской причины запускать службу раньше или она работает от "
+"имени определенного пользователя (не root), все скрипты портов должны "
+"использовать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4908
+#, no-wrap
+msgid "REQUIRE: LOGIN\n"
+msgstr "REQUIRE: LOGIN\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4911
+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:4915
+#, no-wrap
+msgid "KEYWORD: shutdown\n"
+msgstr "KEYWORD: shutdown\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4918
+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:4921
+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 ""
+"Для необязательных элементов конфигурации предпочтительнее использовать "
+"стиль присваивания переменных по умолчанию \"=\" вместо стиля \":=\", так "
+"как первый устанавливает значение по умолчанию только если переменная не "
+"задана, а второй — если переменная не задана _или_ равна null. Пользователь "
+"может включить что-то вроде:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4925
+#, no-wrap
+msgid "doormand_flags=\"\"\n"
+msgstr "doormand_flags=\"\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4929
+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 ""
+"в свой [.filename]#rc.conf.local#, а подстановка переменной с использованием "
+"\":=\" некорректно переопределила бы намерение пользователя. Переменная "
+"`_enable` не является опциональной и должна использовать \":\" для значения "
+"по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4934
+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 ""
+"Порты _не должны_ запускать и останавливать свои службы при установке и "
+"удалении. Не злоупотребляйте ключевыми словами [.filename]#plist#, "
+"описанными в crossref:plist[plist-keywords-base-exec, \"разделе @preexec "
+"command,@postexec command,@preunexec command,@postunexec command\"], "
+"выполняя команды, которые изменяют работающую систему, включая запуск или "
+"остановку служб."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4937
+#, no-wrap
+msgid "Pre-Commit Checklist"
+msgstr "Pre-Commit Checklist"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4940
+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 ""
+"Прежде чем внести порт с [.filename]#rc.d# скриптом, и что более важно, "
+"перед его коммитом, пожалуйста, ознакомьтесь с этим контрольным списком, "
+"чтобы убедиться, что он готов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4942
+msgid ""
+"The package:devel/rclint[] port can check for most of these, but it is not a "
+"substitute for proper review."
+msgstr ""
+"Порт package:devel/rclint[] может проверить большинство из них, но он не "
+"заменяет тщательного просмотра и проверки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4945
+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 ""
+"Если это новый файл, имеет ли он расширение [.filename]#.sh#? Если да, его "
+"необходимо изменить на просто [.filename]#file.in#, поскольку файлы "
+"[.filename]#rc.d# не могут оканчиваться таким расширением."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4946
+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 ""
+"Совпадают ли имя файла (без [.filename]#.in#), строка `PROVIDE` и `$`_name_? "
+"Совпадение имени файла с `PROVIDE` упрощает отладку, особенно при проблемах "
+"с man:rcorder[8]. Совпадение имени файла и `$`_name_ облегчает понимание "
+"того, какие переменные актуальны в [.filename]#rc.conf[.local]#. Это также "
+"является политикой для всех новых скриптов, включая те, что в базовой "
+"системе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4947
+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 ""
+"Установлена ли строка `REQUIRE` в значение `LOGIN`? Это обязательно для "
+"скриптов, выполняемых от имени непривилегированного пользователя. Если "
+"скрипт выполняется от имени root, есть ли веская причина для его запуска до "
+"`LOGIN`? Если нет, он должен запускаться после, чтобы локальные скрипты "
+"можно было условно сгруппировать в man:rcorder[8] после запуска большинства "
+"компонентов базовой системы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4948
+msgid ""
+"Does the script start a persistent service? If so, it must have `KEYWORD: "
+"shutdown`."
+msgstr ""
+"Запускает ли скрипт постоянную службу? Если да, он должен содержать "
+"`KEYWORD: shutdown`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4949
+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 ""
+"Убедитесь, что отсутствует `KEYWORD: FreeBSD`. Это перестало быть "
+"необходимым или желательным уже много лет. Это также указывает на то, что "
+"новый скрипт был скопирован/вставлен из старого скрипта, поэтому следует "
+"проявить дополнительную осторожность при проверке."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4950
+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 ""
+"Если скрипт использует интерпретируемый язык, например `perl`, `python` или "
+"`ruby`, убедитесь, что `command_interpreter` установлен корректно. Например, "
+"для Perl добавьте `PERL=${PERL}` в `SUB_LIST` и используйте `%%PERL%%`. В "
+"противном случае,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4954
+#, no-wrap
+msgid "# service name stop\n"
+msgstr "# service name stop\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4957
+msgid ""
+"will probably not work properly. See man:service[8] for more information."
+msgstr ""
+"вероятно, не будет работать корректно. Дополнительную информацию смотрите в "
+"man:service[8]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4958
+msgid ""
+"Have all occurrences of [.filename]#/usr/local# been replaced with `%%PREFIX%"
+"%`?"
+msgstr ""
+"Проверено, что все вхождения [.filename]#/usr/local# заменены на `%%PREFIX%"
+"%`?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4959
+msgid "Do the default variable assignments come after `load_rc_config`?"
+msgstr ""
+"Делаются ли присваивания переменным по умолчанию после `load_rc_config`?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4960
+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:4961
+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:4962
+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 ""
+"Являются ли опции, перечисленные в стандартном _name_`_flags`, "
+"обязательными? Если да, они должны быть в `command_args`. Флаг `-d` здесь, "
+"как красный флаг (простите за каламбур), так как обычно это опция для "
+"\"демонизации\" процесса и, следовательно, фактически обязательна."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4963
+msgid ""
+"`_name__flags` must never be included in `command_args` (and vice versa, "
+"although that error is less common)."
+msgstr ""
+"`_name__flags` никогда не должны включаться в `command_args` (и наоборот, "
+"хотя такая ошибка встречается реже)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4964
+msgid ""
+"Does the script execute any code unconditionally? This is frowned on. "
+"Usually these things must be dealt with through a `start_precmd`."
+msgstr ""
+"Выполняет ли скрипт любой код безусловно? Это не приветствуется. Обычно "
+"такие вещи должны обрабатываться через `start_precmd`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4965
+msgid ""
+"All boolean tests must use the `checkyesno` function. No hand-rolled tests "
+"for `[Yy][Ee][Ss]`, etc."
+msgstr ""
+"Все логические проверки должны использовать функцию `checkyesno`. Не "
+"допускаются самодельные проверки на `[Yy][Ee][Ss]` и т.п."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4966
+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:4967
+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 ""
+"Создает ли скрипт файлы или каталоги, требующие определенных разрешений, "
+"например, [.filename]#pid#, который должен принадлежать пользователю, "
+"запускающему процесс? Вместо традиционной последовательности man:touch[1]/"
+"man:chown[8]/man:chmod[1] рассмотрите использование man:install[1] с "
+"соответствующими аргументами командной строки, чтобы выполнить всю процедуру "
+"за один шаг."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4969
+#, no-wrap
+msgid "Adding Users and Groups"
+msgstr "Добавление пользователей и групп"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4974
+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 ""
+"Некоторые порты требуют наличия определённой учётной записи пользователя, "
+"обычно для демонов, работающих от имени этого пользователя. Для таких портов "
+"выберите _уникальный_ UID в диапазоне от 50 до 999 и зарегистрируйте его в "
+"[.filename]#ports/UIDs# (для пользователей) и [.filename]#ports/GIDs# (для "
+"групп). Уникальный идентификатор должен быть одинаковым для пользователей и "
+"групп."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4976
+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:4978
+msgid ""
+"Then use `USERS` and `GROUPS` in [.filename]#Makefile#, and the user will be "
+"automatically created when installing the port."
+msgstr ""
+"Затем используйте `USERS` и `GROUPS` в [.filename]#Makefile#, и пользователь "
+"будет автоматически создан при установке порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4983
+#, no-wrap
+msgid ""
+"USERS=\tpulse\n"
+"GROUPS=\tpulse pulse-access pulse-rt\n"
+msgstr ""
+"USERS=\tpulse\n"
+"GROUPS=\tpulse pulse-access pulse-rt\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4986
+msgid ""
+"The current list of reserved UIDs and GIDs can be found in [.filename]#ports/"
+"UIDs# and [.filename]#ports/GIDs#."
+msgstr ""
+"Текущий список зарезервированных UID и GID можно найти в [.filename]#ports/"
+"UIDs# и [.filename]#ports/GIDs#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4988
+#, no-wrap
+msgid "Ports That Rely on Kernel Sources"
+msgstr "Порты, зависящие от исходных кодов ядра"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4992
+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:4996
+#, no-wrap
+msgid "USES=\tkmod\n"
+msgstr "USES=\tkmod\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4999
+msgid ""
+"Apart from this check, the `kmod` feature takes care of most items that "
+"these ports need to take into account."
+msgstr ""
+"Помимо этой проверки, функция `kmod` учитывает большинство аспектов, которые "
+"необходимо принимать во внимание данным портам."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5001
+#, no-wrap
+msgid "Go Libraries"
+msgstr "Библиотеки Go"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5005
+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 ""
+"Порты не должны упаковывать или устанавливать библиотеки или исходный код "
+"Go. Порты Go должны загружать необходимые зависимости в обычное время "
+"загрузки и должны устанавливать только программы и то, что нужно "
+"пользователям, а не то, что нужно разработчикам на Go."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5007
+msgid "Ports should (in order of preference):"
+msgstr "Порты должны (в порядке предпочтения):"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5009
+msgid "Use vendored dependencies included with the package source."
+msgstr "Использовать зависимости, включенные в исходный код пакета."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5010
+msgid ""
+"Fetch the versions of deps specified by upstream (in the case of go.mod, "
+"vendor.json or similar)."
+msgstr ""
+"Получить версии зависимостей, указанные вышестоящим проектом (в случае "
+"go.mod, vendor.json или аналогичных)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5011
+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:5013
+#, no-wrap
+msgid "Haskell Libraries"
+msgstr "Библиотеки Haskell"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5017
+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 ""
+"Как и в случае с языком Go, коллекция портов не должна включать или "
+"устанавливать библиотеки Haskell. Порты Haskell должны статически "
+"линковаться со своими зависимостями и загружать все распространяемые файлы "
+"на этапе fetch."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5019
+#, no-wrap
+msgid "Shell Completion Files"
+msgstr "Файлы завершения командной оболочки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5024
+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 ""
+"Многие современные оболочки (включая bash, fish, tcsh и zsh) поддерживают "
+"табуляцию для параметров и/или опций. Эта поддержка обычно обеспечивается "
+"файлами завершения, которые содержат определения того, как будет работать "
+"завершение по табуляции для определённой команды. Порты иногда поставляются "
+"со своими собственными файлами завершения, или разработчики портов могут "
+"создавать их самостоятельно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5028
+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 ""
+"Если доступны файлы завершения, их всегда следует устанавливать. Нет "
+"необходимости создавать для этого опцию. Однако если опция используется, "
+"всегда включайте её в `OPTIONS_DEFAULT`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5030
+#, no-wrap
+msgid "Full shell completion file names"
+msgstr "Полные имена файлов завершения оболочки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5034
+#, no-wrap
+msgid "`bash`"
+msgstr "`bash`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5035
+#, no-wrap
+msgid "[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#"
+msgstr "[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5037
+#, no-wrap
+msgid "(any unique file names in one of these folders)"
+msgstr "(любые уникальные имена файлов в одной из этих папок)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5038
+#, no-wrap
+msgid "`fish`"
+msgstr "`fish`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5039
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#"
+msgstr "[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5042
+#, no-wrap
+msgid "`zsh`"
+msgstr "`zsh`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5043
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#"
+msgstr "[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5046
+msgid "Do not register any dependencies on the shells themselves."
+msgstr "Не регистрируйте зависимости от самих оболочек."
diff --git a/documentation/content/ru/books/porters-handbook/testing/_index.adoc b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
index 57676e2f64..73b8cdff1f 100644
--- a/documentation/content/ru/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 9. Тестирование вашего порта
-prev: books/porters-handbook/pkg-files
+description: 'Тестирование порта FreeBSD'
next: books/porters-handbook/upgrading
-showBookMenu: true
-weight: 9
params:
- path: "/books/porters-handbook/testing/"
+ path: /books/porters-handbook/testing/
+prev: books/porters-handbook/pkg-files
+showBookMenu: true
+tags: ["testing", "port", "Portclippy", "Portfmt", "Portlint", "poudriere", "sets"]
+title: 'Глава 10. Тестирование вашего порта'
+weight: 10
---
[[testing]]
-= Тестирование вашего порта
+= Тестирование порта
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 9
+:sectnumoffset: 10
:partnums:
:source-highlighter: rouge
:experimental:
@@ -58,7 +60,37 @@ endif::[]
Если `make describe` выдаёт строчку, а не ошибку, то для вас это пройдёт безболезненно. Обратитесь к файлу [.filename]#bsd.port.mk#, чтобы выяснить значение выдаваемых строк.
-Заметьте также, что запуск последней версии `portlint` (как указано в следующем разделе) приведёт к автоматическому запуску команды `make describe`.
+Также обратите внимание, что запуск актуальной версии `portlint` (как указано в следующем разделе) приведёт к автоматическому выполнению `make describe`.
+
+[[make-test]]
+== Запуск `make test`
+
+Даже если порт успешно собирается, рекомендуется убедиться, что программа корректно выполняет свои функции. Если исходный проект предоставляет тесты вместе с программным обеспечением, рекомендуется их запустить и проверить, что всё работает, как ожидается.
+
+Порт может автоматически включить тесты, используя переменную `TEST_TARGET`. Когда эта переменная установлена, она содержит имя цели тестирования порта. Обычно это просто `test`, но другие варианты включают `tests`, `check` или, в специфических случаях, такие значения, как `run_tests.py`.
+
+В дополнение к переменной `TEST_TARGET` фреймворк предоставляет следующие переменные для управления выполнением тестов:
+
+* `TEST_WRKSRC` — это каталог для выполнения тестов.
+* `TEST_ENV` содержит дополнительные переменные, которые передаются на этап тестирования.
+* `TEST_ARGS` содержит любые дополнительные аргументы, переданные на этапе тестирования.
+
+Примеры использования этих переменных можно найти в package:cad/xyce[], package:www/libjwt[] и других.
+
+[NOTE]
+====
+Убедитесь, что тесты не ломаются при обновлении порта.
+====
+
+
+[[testing-portclippy]]
+== Portclippy / Portfmt
+
+Эти инструменты поставляются из пакета:ports-mgmt/portfmt[].
+
+Portclippy — это линтер, проверяющий, расположены ли переменные в файле [.filename]#Makefile# в правильном порядке согласно crossref:order[porting-order,Порядку переменных в Makefile портов].
+
+Portfmt — это инструмент для автоматического форматирования [.filename]#Makefile#.
[[testing-portlint]]
== Portlint
@@ -68,13 +100,13 @@ endif::[]
Так как для обнаружения ошибок `portlint` использует эвристические методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, время от времени нечто, отмечаемое как некорректность, из-за ограничений механизма создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то лучше всего спросить в {freebsd-ports}.
[[testing-porttools]]
-== Port Tools
+== Инструменты для работы с портами
Программа package:ports-mgmt/porttools[] входит в состав Коллекции Портов.
-`port` является сценарием переднего плана, который может упростить вам задачу тестирования. Если вы хотите проверить новый порт или обновить существующий, то вы можете использовать `port test` для проверки вашего порта, включая проверку <<testing-portlint,`portlint`>>. Эта команда также находит и отображает любые файлы, которые невключенные в [.filename]#pkg-plist#. Смотрите следующий пример:
+`port` является сценарием переднего плана, который может упростить вам задачу тестирования. Если вы хотите проверить новый порт или обновить существующий, то вы можете использовать `port test` для проверки вашего порта, включая проверку crossref:testing[testing-portlint,`portlint`]. Эта команда также находит и отображает любые файлы, которые невключенные в [.filename]#pkg-plist#. Смотрите следующий пример:
-[source,shell]
+[source, shell]
....
# port test /usr/ports/net/csup
....
@@ -92,43 +124,417 @@ endif::[]
Проверьте, что ваше приложение не устанавливает чего-либо в каталог [.filename]#/usr/local# вместо `PREFIX`. Наличие явно указанных путей можно быстро проверить следующим образом:
-[source,shell]
+[source, shell]
....
-# make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
+% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
....
Если что-то было установлено за пределами `PREFIX`, то процесс создания пакета сообщит об отсутствии файлов.
Это также стоит проверить с использованием поддержки каталога сборки (смотрите crossref:special[staging, Staging]):
-[source,shell]
+[source, shell]
....
-# make stage && make check-orphans && make package
+% make stage && make check-plist && make stage-qa && make package
....
-Эти проверки не найдут явно указанных путей внутри файлов порта и не проверят корректность использования `LOCALBASE` в качестве ссылки на файлы из других портов. Порт, временно установленный в [.filename]#/var/tmp/`make -V PORTNAME`#, следует проверять на работоспособность, чтобы убедиться в отсутствии проблем с путями.
+* `check-plist` проверяет отсутствующие в plist файлы и файлы в plist, которые не установлены портом.
+* `stage-qa` проверяет наличие распространённых проблем, таких как неправильный шебанг (интерпретаторная строка в первой строке скрипта), символьные ссылки, указывающие за пределы stage-директории,файлы с setuid битом и библиотеки с отладочной информацией...
+
+Эти тесты не обнаружат жёстко заданные пути в файлах порта, а также не проверят, что `LOCALBASE` используется корректно для ссылок на файлы из других портов. Временно установленный порт в [.filename]#/var/tmp/`make -V PORTNAME`# должен быть протестирован на корректную работу, чтобы убедиться в отсутствии проблем с путями.
-Переменная `PREFIX` не должна задаваться явно в файле [.filename]#Makefile# порта. Пользователи при установке порта могут задать в `PREFIX` свое собственное место, и порт должен учитывать это значение.
+`PREFIX` не должен быть явно установлен в [.filename]#Makefile# порта. Пользователи, устанавливающие порт, могут задать `PREFIX` в другом месте, и порт должен учитывать эту настройку.
-Обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макрос `PAGER` являлся полным путем утилиты `less`, не используйте строковый путь [.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:
+Обращайтесь к программам и файлам из других портов с помощью упомянутых выше переменных, а не явных путей. Например, если порт требует, чтобы макрос `PAGER` содержал полный путь к `less`, не используйте явный путь [.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:
[.programlisting]
....
-DPAGER=\"${LOCALBASE}/bin/less\"
....
-Путь с использованием `LOCALBASE` имеет больше шансов оставаться работоспособным, если системный администратор переместил всё дерево [.filename]#/usr/local# куда-то в другое место.
+Путь с `LOCALBASE` с большей вероятностью продолжит работать, если системный администратор переместил всё дерево [.filename]#/usr/local# в другое место.
-[[testing-tinderbox]]
-== Tinderbox
+[TIP]
+====
+Все эти тесты выполняются автоматически при запуске `poudriere testport` или `poudriere bulk -t`. Настоятельно рекомендуется каждому участнику разработки портов устанавливать и тестировать свои порты с помощью этого инструмента. Дополнительную информацию можно найти в crossref:testing[testing-poudriere, poudriere].
+====
+
+[[testing-poudriere]]
+== poudriere
-Если вы алчный контрибутор портов, то вы можете захотеть взглянуть на Tinderbox. Это мощная система построения и тестирования портов. Tinderbox можно установить, используя порт package:ports-mgmt/tinderbox[]. Обязательно прочитайте поставляемую документацию, поскольку конфигурация не является тривиальной.
+Для контрибьютора портов poudriere является одним из самых важных и полезных инструментов для тестирования и сборки. Его основные возможности включают:
-Для получения подробностей посетите http://tinderbox.marcuscom.com/[вебсайт Tinderbox].
+* Массовая сборка всего дерева портов, определенных подмножеств дерева портов или отдельного порта с его зависимостями
+* Автоматическая упаковка результатов сборки
+* Генерация файлов журнала сборки для каждого порта
+* Предоставление подписанного репозитория man:pkg[8]
+* Тестирование сборки портов перед отправкой патча в трекер ошибок FreeBSD или внесением изменений в дерево портов
+* Тестирование успешных сборок портов с использованием различных параметров
-[[testing-poudriere]]
-== Poudriere
+Поскольку poudriere выполняет сборку в чистой среде man:jail[8] и использует возможности man:zfs[8], он имеет несколько преимуществ по сравнению с традиционным тестированием на основной системе:
+
+* Отсутствие загрязнения основной среды: никаких оставшихся файлов, случайных удалений или изменений существующих конфигурационных файлов.
+* Проверяет [.filename]#pkg-plist# на наличие отсутствующих или лишних записей
+* Коммиттеры портов иногда запрашивают журнал poudriere вместе с отправкой патча, чтобы оценить, готов ли патч для интеграции в дерево портов
+
+Также его настройка и использование довольно просты, он не имеет зависимостей и будет работать в любой поддерживаемой версии FreeBSD. В этом разделе показано, как установить, настроить и запустить poudriere в рамках обычного рабочего процесса разработчика портов.
+
+Примеры в этом разделе показывают стандартную структуру файлов, принятую в FreeBSD. Внесите соответствующие изменения, если у вас используются другие настройки. Дерево портов, обозначаемое как `${PORTSDIR}`, находится в [.filename]#/usr/ports#. По умолчанию `${LOCALBASE}` и `${PREFIX}` указывают на [.filename]#/usr/local#.
+
+[[testing-poudriere-installing]]
+=== Установка poudriere
+
+poudriere доступен в дереве портов в пакете package:ports-mgmt/poudriere[]. Его можно установить с помощью man:pkg[8] или из портов:
+
+[source, shell]
+....
+# pkg install poudriere
+....
+
+или
+
+[source, shell]
+....
+# make -C /usr/ports/ports-mgmt/poudriere install clean
+....
+
+Также существует версия poudriere в разработке, которая в конечном итоге станет следующим релизом. Она доступна в пакете:ports-mgmt/poudriere-devel[]. Эта версия используется для официальных сборок пакетов FreeBSD, поэтому она хорошо протестирована. В ней часто появляются новые интересные функции. Коммиттер портов захочет использовать версию в разработке, так как именно она используется в продакшене и содержит все новые функции, которые гарантируют, что всё будет работать идеально. Контрибьютору не обязательно нужны эти функции, так как наиболее важные исправления переносятся в выпущенную версию. Основная причина использования версии в разработке для сборки официальных пакетов заключается в её скорости — она позволяет сократить время полной сборки с 18 до 17 часов при использовании высокопроизводительного сервера с 32 CPU и 128 ГБ оперативной памяти. Эти оптимизации не будут столь значимы при сборке портов на настольном компьютере.
+
+[[testing-poudriere-setup]]
+=== Настройка poudriere
+
+Порт устанавливает файл конфигурации по умолчанию, [.filename]#/usr/local/etc/poudriere.conf#. Каждый параметр описан в этом файле конфигурации.
+
+Вот минимальный пример конфигурационного файла:
+
+[.programlisting]
+....
+ZPOOL=zroot
+BASEFS=/usr/local/poudriere
+DISTFILES_CACHE=/usr/ports/distfiles
+RESOLV_CONF=/etc/resolv.conf
+....
+
+`ZPOOL`::
+Имя пула хранения ZFS, который будет использовать poudriere. Должно быть указано в выводе команды `zpool status`.
+
+`BASEFS`::
+Корневая точка монтирования файловых систем poudriere. Эта запись приведет к тому, что poudriere смонтирует `tank/poudriere` в `/poudriere`.
+
+`DISTFILES_CACHE`::
+Определяет, где хранятся distfiles. В этом примере poudriere и хост используют общий каталог для хранения distfiles. Это позволяет избежать загрузки tарболов, которые уже присутствуют в системе. Пожалуйста, создайте этот каталог, если он ещё не существует, чтобы poudriere мог его найти.
+
+`RESOLV_CONF`::
+Используйте файл [.filename]#/etc/resolv.conf# хоста внутри клеток для DNS. Это необходимо, чтобы клетки могли разрешать URL-адреса distfiles при загрузке. Это не требуется при использовании прокси. Обратитесь к файлу конфигурации по умолчанию для настройки прокси.
+
+[[testing-poudriere-create-jails]]
+=== Создание клеток poudriere
+
+Создайте базовые клетки, которые poudriere будет использовать для сборки:
+
+[source, shell]
+....
+# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64
+....
+
+Загрузите `13.1-RELEASE` для `amd64` с FTP-сервера, указанного в `FREEBSD_HOST` в [.filename]#poudriere.conf#, создайте ZFS-файловую систему `tank/poudriere/jails/131Ramd64`, смонтируйте её в [.filename]#/poudriere/jails/131Ramd64# и распакуйте тарболлы `13.1-RELEASE` в эту файловую систему.
+
+[source, shell]
+....
+# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https
+....
+
+Создайте `tank/poudriere/jails/12i386`, смонтируйте его на [.filename]#/poudriere/jails/12i386#, затем извлеките верхушку ветки Git `FreeBSD-12-STABLE` из `GIT_HOST` в [.filename]#poudriere.conf# или по умолчанию `git.freebsd.org` в [.filename]#/poudriere/jails/12i386/usr/src#, после чего выполните `buildworld` и установите его в [.filename]#/poudriere/jails/12i386#.
+
+[NOTE]
+====
+Хотя возможно собрать более новую версию FreeBSD на старой версии, в большинстве случаев она не запустится. Например, если требуется клетка на `stable/13`, то хост также должен работать на `stable/13`. Запуск `13.1-RELEASE` недостаточен.
+====
+
+[NOTE]
+====
+Для создания клетки poudriere для `14.0-CURRENT`:
+
+[source, shell]
+....
+# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https
+....
+
+Для запуска клетки `14.0-CURRENT` poudriere хостовая система должна работать под управлением `14.0-CURRENT`. В общем случае, более новые ядра могут собирать и запускать более старые клетки. Например, ядро `14.0-CURRENT` может собирать и запускать клетку `12.4-STABLE`, если параметр ядра `COMPAT_FREEBSD12` был скомпилирован (включен по умолчанию в конфигурации ядра [.filename]#GENERIC# `14.0-CURRENT`).
+====
+
+Список клеток, известных poudriere, можно вывести с помощью команды `poudriere jail -l`:
+
+[source, shell]
+....
+# poudriere jail -l
+JAILNAME VERSION ARCH METHOD
+131Ramd64 13.1-RELEASE amd64 ftp
+12i386 12.4-STABLE i386 git+https
+....
+
+[[testing-poudriere-maintaining-jails]]
+=== Обновление клеток poudriere
+
+Управление обновлениями очень простое. Команда:
+
+[source, shell]
+....
+# poudriere jail -u -j JAILNAME
+....
+
+обновляет указанную клетку до последней доступной версии. Для релизов FreeBSD обновление до последнего уровня исправлений с помощью man:freebsd-update[8]. Для версий FreeBSD, собранных из исходников, обновление до последней ревизии git в ветке.
+
+[TIP]
+====
+Для клеток, использующих метод `git+*`, полезно добавить `-J _КоличествоПараллельныхСборок_` для ускорения сборки за счёт увеличения количества параллельных задач компиляции. Например, если на машине для сборки 6 CPU, используйте:
+
+[source, shell]
+....
+# poudriere jail -u -J 6 -j JAILNAME
+....
+
+====
+
+[[testing-poudriere-ports-tree]]
+=== Настройка деревьев портов для использования с poudriere
+
+Существует несколько способов использования деревьев портов в poudriere. Наиболее простой способ — позволить poudriere создать для себя дерево портов по умолчанию, используя link:{handbook}mirrors/#git[Git]:
+
+[source, shell]
+....
+# poudriere ports -c -m git+https -B main
+....
+
+Эти команды создают `tank/poudriere/ports/default`, монтируют его в [.filename]#/poudriere/ports/default# и заполняют с помощью Git. После этого он включается в список известных деревьев портов:
+
+[source, shell]
+....
+# poudriere ports -l
+PORTSTREE METHOD TIMESTAMP PATH
+default git+https 2020-07-20 04:23:56 /poudriere/ports/default
+....
+
+[NOTE]
+====
+Обратите внимание, что дерево портов "default" является особым. Каждая из команд сборки, объяснённых далее, будет неявно использовать это дерево портов, если явно не указано иное. Чтобы использовать другое дерево, добавьте `-p _treename_` к командам.
+====
+
+Лучший способ работы с локальными изменениями для разработчика портов — использовать link:{handbook}mirrors/#git[Git]. Как и при создании клеток, можно использовать другой метод для создания дерева портов. Чтобы добавить дополнительное дерево портов для тестирования локальных изменений и разработки портов, предпочтительно использовать клонирование дерева через git (как описано выше).
+
+[[testing-poudriere-ports-tree-manual]]
+=== Использование управляемых вручную деревьев портов с помощью poudriere
-Если вы контрибутор портов, подумайте об установке poudriere. Это мощная система для построения и тестирования портов. Poudriere можно установить из package:ports-mgmt/poudriere[].
+В зависимости от рабочего процесса может быть крайне полезно использовать деревья портов, которые поддерживаются вручную. Например, если существует локальная копия дерева портов в [.filename]#/work/ports#, укажите poudriere на это расположение:
+
+[source, shell]
+....
+# poudriere ports -c -m null -M /work/ports -p development
+....
+
+Это будет указано в таблице известных деревьев:
+
+[source, shell]
+....
+# poudriere ports -l
+PORTSTREE METHOD TIMESTAMP PATH
+development null 2020-07-20 05:06:33 /work/ports
+....
+
+[NOTE]
+====
+Тире или `null` в колонке `METHOD` означает, что poudriere никогда не будет обновлять или изменять это дерево портов. Полностью на пользователе лежит ответственность за поддержку этого дерева, включая все локальные изменения, которые могут использоваться для тестирования новых портов и отправки исправлений.
+====
+
+[[testing-poudriere-ports-tree-updating]]
+=== Обновление деревьев портов poudriere
+
+Так же просто, как с клетками, описанными ранее:
+
+[source, shell]
+....
+# poudriere ports -u -p PORTSTREE
+....
+
+Обновит указанное _PORTSTREE_, дерево, указанное в выводе команды `poudriere -l`, до последней доступной ревизии на официальных серверах.
+
+[NOTE]
+====
+Деревья портов без метода, см. crossref:testing[testing-poudriere-ports-tree-manual, Использование вручную управляемых деревьев портов с помощью poudriere], не могут быть обновлены таким образом и должны обновляться вручную сопровождающим портов.
+====
+
+[[testing-poudriere-testing-ports]]
+=== Тестирование портов
+
+После настройки клеток и деревьев портов можно проверить результат изменений, внесенных участником в дерево портов.
+
+Например, локальные изменения в порте package:www/firefox[], расположенном в [.filename]#/work/ports/www/firefox#, можно протестировать в ранее созданной клетке 13.1-RELEASE:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -o www/firefox
+....
+
+Это соберет все зависимости Firefox. Если зависимость уже была собрана ранее и остается актуальной, будет установлен готовый пакет. Если для зависимости нет актуального пакета, он будет собран с параметрами по умолчанию в клетке. Затем будет собран сам Firefox.
+
+Полная сборка каждого порта записывается в [.filename]#/poudriere/data/logs/bulk/131Ri386-development/build-time/logs#.
+
+Имя каталога `131Ri386-development` формируется из аргументов `-j` и `-p` соответственно. Для удобства также поддерживается символическая ссылка [.filename]#/poudriere/data/logs/bulk/131Ri386-development/latest#. Эта ссылка указывает на последний каталог _времени сборки_. Также в этом каталоге находится файл [.filename]#index.html#, который позволяет наблюдать за процессом сборки через веб-браузер.
+
+По умолчанию poudriere очищает клетки и оставляет файлы журналов в указанных выше каталогах. Для упрощения анализа клетки можно оставить запущенными после сборки, добавив `-i` к `testport`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -i -o www/firefox
+....
+
+После завершения сборки, независимо от того, была ли она успешной, в клетке предоставляется оболочка. Эта оболочка используется для дальнейшего исследования. Можно указать poudriere оставить клетку запущенной после завершения сборки с помощью `-I`. poudriere покажет команду для выполнения, когда клетка больше не нужна. Затем можно использовать man:jexec[8] для входа в неё:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -I -o www/firefox
+[...]
+====>> Installing local Pkg repository to /usr/local/etc/pkg/repos
+====>> 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 131Ramd64 -p development
+====>> Umounting file systems
+....
+
+Неотъемлемой частью инфраструктуры сборки портов FreeBSD является возможность настройки портов под личные предпочтения с помощью опций. Их также можно тестировать с помощью poudriere. Добавление опции `-c`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -c -o www/firefox
+....
+
+Представляет диалог настройки порта перед его сборкой. Порты, указанные после `-o` в формате `_категория_/_имя_порта_`, будут использовать указанные опции, все зависимости будут использовать опции по умолчанию. Тестирование зависимых портов с нестандартными опциями может быть выполнено с использованием наборов, см. crossref:testing[testing-poudriere-sets, Использование наборов].
+
+[TIP]
+====
+При тестировании портов, где файл [.filename]#pkg-plist# изменяется во время сборки в зависимости от выбранных опций, рекомендуется выполнить тестовый запуск со всеми выбранными опциями _и_ один без выбранных опций.
+====
+
+[[testing-poudriere-sets]]
+=== Использование наборов
+
+Для всех действий, связанных со сборкой, можно указать так называемый _набор_ с помощью `-z _имя_набора_`. Набор относится к полностью независимой сборке. Это позволяет, например, использовать `testport` с нестандартными параметрами для зависимых портов.
+
+Для использования наборов poudriere ожидает, что будет использована структура каталогов, аналогичная `PORT_DBDIR`, по умолчанию [.filename]#/var/db/ports#, в его конфигурационной директории. Этот каталог затем монтируется с помощью man:nullfs[5] в клетки, где собираются порты и их зависимости. Обычно подходящую начальную точку можно получить, рекурсивно скопировав существующий `PORT_DBDIR` в [.filename]#/usr/local/etc/poudriere.d/jailname-portname-setname-options#. Это подробно описано в man:poudriere[8]. Например, для тестирования package:www/firefox[] в определённом наборе с именем `devset`, добавьте параметр `-z devset` к команде `testport`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
+....
+
+Это проверит наличие этих каталогов в следующем порядке:
+
+* [.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/131Ramd64-options#
+* [.filename]#/usr/local/etc/poudriere.d/options#
+
+Из этого списка poudriere man:nullfs[5] монтирует _первое существующее_ дерево каталогов в директорию [.filename]#/var/db/ports# сборных клеток. Таким образом, все пользовательские настройки используются для всех портов во время этого запуска `testport`.
+
+После предоставления структуры каталогов для набора можно изменить параметры для конкретного порта. Например:
+
+[source, shell]
+....
+# poudriere options -c www/firefox -z devset
+....
+
+Отображается диалог настройки package:www/firefox[], где можно редактировать параметры. Выбранные параметры сохраняются в набор `devset`.
+
+[NOTE]
+====
+poudriere очень гибок в настройке опций. poudriere можно настроить для конкретных клеток, деревьев портов и для нескольких портов одной командой. Подробности см. в man:poudriere[8].
+====
+
+[[testing-poudriere-make-conf]]
+=== Предоставление пользовательского файла [.filename]#make.conf#
+
+Подобно использованию наборов, poudriere также использует пользовательский [.filename]#make.conf#, если он предоставлен. Для этого не требуется специального аргумента командной строки. Вместо этого poudriere ищет существующие файлы, соответствующие схеме именования, производной от командной строки. Например:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
+....
+
+заставляет poudriere проверять наличие этих файлов в следующем порядке:
+
+* [.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/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#
+
+В отличие от наборов, все найденные файлы будут добавлены, _в указанном порядке_, в один [.filename]#make.conf# внутри клеток сборки. Таким образом, можно задать общие переменные make, предназначенные для влияния на все сборки, в файле [.filename]#/usr/local/etc/poudriere.d/make.conf#. Специальные переменные, предназначенные только для определённых клеток или наборов, можно задать в специализированных файлах [.filename]#make.conf#, например, в [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make.conf#.
+
+[[testing-poudriere-sets-perl]]
+.Использование [.filename]#make.conf# для изменения Perl по умолчанию
+[example]
+====
+
+Для сборки набора с нестандартной версией Perl, например, `5.20`, используя набор с именем `perl5-20`, создайте файл [.filename]#perl5-20-make.conf# со следующей строкой:
+
+[.programlisting]
+....
+DEFAULT_VERSIONS+= perl=5.20
+....
+[NOTE]
+****
+Обратите внимание на использование `+=`, чтобы содержимое переменной не было перезаписано, если она уже установлена в стандартном [.filename]#make.conf#.
+****
+
+====
+
+[[testing-poudriere-pruning-distfiles]]
+=== Удаление ненужных файлов дистрибутива
+
+poudriere имеет встроенный механизм для удаления устаревших файлов дистрибутива, которые больше не используются ни одним портом данного дерева. Команда
+
+[source, shell]
+....
+# poudriere distclean -p portstree
+....
+
+будет сканировать папку файлов дистрибутива, `DISTFILES_CACHE` в [.filename]#poudriere.conf#, сравнивая ее с деревом портов, указанным аргументом `-p _portstree_`, и запрашивать подтверждение на удаление этих файлов дистрибутива. Чтобы пропустить запрос и удалить все неиспользуемые файлы без подтверждения, можно добавить аргумент `-y`:
+
+[source, shell]
+....
+# poudriere distclean -p portstree -y
+....
+
+[[testing-debugging-ports]]
+== Отладка портов
+
+Иногда что-то идёт не так, и порт не работает во время выполнения. Фреймворк предоставляет некоторые средства для отладки портов. Эти вспомогательные инструменты ограничены, поскольку способ отладки порта во многом зависит от используемой технологии. Следующие переменные помогают в отладке портов:
+
+* `WITH_DEBUG`. Если установлено, порты собираются с отладочными символами.
+* `WITH_DEBUG_PORTS`. Указывает список портов, которые должны собираться с установленным `WITH_DEBUG`.
+* `DEBUG_FLAGS`. Используется для указания дополнительных флагов для `CFLAGS`. По умолчанию `-g`.
+
+Когда `WITH_DEBUG` установлен, глобально или для списка портов, результирующие бинарные файлы не лишаются символов.
+
+Эти переменные могут быть указаны в [.filename]#make.conf# или в командной строке:
+
+[source, shell]
+....
+# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS="-g -O0"
+....
+
+[NOTE]
+====
+Если порт собирается с использованием package:ports-mgmt/poudriere[], отладочные переменные должны быть указаны в [.filename]#make.conf# poudriere, а не в [.filename]#/etc/make.conf#. Подробности см. в документации package:ports-mgmt/poudriere[].
+====
-Для получения подробной информации посетите http://fossil.etoilebsd.net/poudriere[вебсайт Poudriere].
+Пожалуйста, обратитесь к отладочной информации в extref:{developers-handbook}tools[Руководстве разработчика, отладка] для получения более подробной информации о доступных инструментах отладки.
diff --git a/documentation/content/ru/books/porters-handbook/testing/_index.po b/documentation/content/ru/books/porters-handbook/testing/_index.po
new file mode 100644
index 0000000000..30ce20d0d6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/testing/_index.po
@@ -0,0 +1,1685 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooktesting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Testing a FreeBSD Port"
+msgstr "Тестирование порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Testing the Port"
+msgstr "Глава 10. Тестирование вашего порта"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:14
+#, no-wrap
+msgid "Testing the Port"
+msgstr "Тестирование порта"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:52
+#, no-wrap
+msgid "Running `make describe`"
+msgstr "Запуск `make describe`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:57
+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 ""
+"Некоторые утилиты FreeBSD для сопровождения портов, например, "
+"man:portupgrade[1], опираются на базу данных с именем [.filename]#/usr/ports/"
+"INDEX#, в которой отслеживаются такие характеристики портов, как их "
+"зависимости. Файл [.filename]#INDEX# создаётся при помощи [.filename]#ports/"
+"Makefile# верхнего уровня по команде `make index`, спускающейся в подкаталог "
+"каждого порта и выполняющей в нём `make describe`. Таким образом, если "
+"выполнение `make describe` с каким-либо портом завершится неудачно, то "
+"никому не удастся создать [.filename]#INDEX#, при этом много людей вскоре "
+"станут несчастны."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:62
+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 ""
+"Возможность генерировать этот файл очень важна вне зависимости от того, "
+"какие параметры присутствуют в [.filename]#make.conf#, поэтому, пожалуйста, "
+"избегайте, таких вещей, как использование декларации `.error`, когда (к "
+"примеру) требования к зависимости не было удовлетворено. (Смотрите "
+"crossref:porting-dads[dads-dot-error, Избегайте использования конструкции "
+"`.error`].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:66
+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 ""
+"Если `make describe` выдаёт строчку, а не ошибку, то для вас это пройдёт "
+"безболезненно. Обратитесь к файлу [.filename]#bsd.port.mk#, чтобы выяснить "
+"значение выдаваемых строк."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:68
+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 ""
+"Также обратите внимание, что запуск актуальной версии `portlint` (как "
+"указано в следующем разделе) приведёт к автоматическому выполнению `make "
+"describe`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:70
+#, no-wrap
+msgid "Running `make test`"
+msgstr "Запуск `make test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:76
+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:81
+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 ""
+"Порт может автоматически включить тесты, используя переменную `TEST_TARGET`. "
+"Когда эта переменная установлена, она содержит имя цели тестирования порта. "
+"Обычно это просто `test`, но другие варианты включают `tests`, `check` или, "
+"в специфических случаях, такие значения, как `run_tests.py`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:84
+msgid ""
+"In addition to the `TEST_TARGET` variable the framework provides the "
+"following variables to control the tests execution:"
+msgstr ""
+"В дополнение к переменной `TEST_TARGET` фреймворк предоставляет следующие "
+"переменные для управления выполнением тестов:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:86
+msgid "`TEST_WRKSRC` is the directory to do the tests in."
+msgstr "`TEST_WRKSRC` — это каталог для выполнения тестов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:87
+msgid ""
+"`TEST_ENV` contains additional variables to be passed to the test stage."
+msgstr ""
+"`TEST_ENV` содержит дополнительные переменные, которые передаются на этап "
+"тестирования."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:88
+msgid "`TEST_ARGS` contains any extra arguments passed to the test stage."
+msgstr ""
+"`TEST_ARGS` содержит любые дополнительные аргументы, переданные на этапе "
+"тестирования."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:91
+msgid ""
+"Examples of use of these variables can be found in package:cad/xyce[], "
+"package:www/libjwt[] and others."
+msgstr ""
+"Примеры использования этих переменных можно найти в package:cad/xyce[], "
+"package:www/libjwt[] и других."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:95
+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:99
+#, no-wrap
+msgid "Portclippy / Portfmt"
+msgstr "Portclippy / Portfmt"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:102
+msgid "Those tools come from package:ports-mgmt/portfmt[]."
+msgstr "Эти инструменты поставляются из пакета:ports-mgmt/portfmt[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:104
+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 ""
+"Portclippy — это линтер, проверяющий, расположены ли переменные в файле "
+"[.filename]#Makefile# в правильном порядке согласно crossref:order[porting-"
+"order,Порядку переменных в Makefile портов]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:106
+msgid "Portfmt is a tool for automatically formatting [.filename]#Makefile#."
+msgstr ""
+"Portfmt — это инструмент для автоматического форматирования "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:108
+#, no-wrap
+msgid "Portlint"
+msgstr "Portlint"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:113
+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 ""
+"Проверьте свою работу командой crossref:quick-porting[porting-"
+"portlint,`portlint`] перед тем, как её отослать или перенести в дерево "
+"портов. `portlint` предупреждает вас о многих распространённых ошибках, как "
+"функциональных, так и стилистических. Для нового (или скопированного внутри "
+"хранилища) порта самым подходящим является запуск `portlint -A`; для уже "
+"существующего порта достаточно будет запустить `portlint -C`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:117
+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. When in doubt, the best thing to do is "
+"ask on {freebsd-ports}."
+msgstr ""
+"Так как для обнаружения ошибок `portlint` использует эвристические методы, "
+"то им могут выдаваться и ошибочные предупреждения. Кроме того, время от "
+"времени нечто, отмечаемое как некорректность, из-за ограничений механизма "
+"создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то "
+"лучше всего спросить в {freebsd-ports}."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:119
+#, no-wrap
+msgid "Port Tools"
+msgstr "Инструменты для работы с портами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:122
+msgid ""
+"The package:ports-mgmt/porttools[] program is part of the Ports Collection."
+msgstr ""
+"Программа package:ports-mgmt/porttools[] входит в состав Коллекции Портов."
+
+#. 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 crossref:testing[testing-"
+"portlint,`portlint`] checking. This command also detects and lists any "
+"files that are not listed in [.filename]#pkg-plist#. For example:"
+msgstr ""
+"`port` является сценарием переднего плана, который может упростить вам "
+"задачу тестирования. Если вы хотите проверить новый порт или обновить "
+"существующий, то вы можете использовать `port test` для проверки вашего "
+"порта, включая проверку crossref:testing[testing-portlint,`portlint`]. Эта "
+"команда также находит и отображает любые файлы, которые невключенные в "
+"[.filename]#pkg-plist#. Смотрите следующий пример:"
+
+#. 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 "# port test /usr/ports/net/csup\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:135
+#, no-wrap
+msgid "`PREFIX` and `DESTDIR`"
+msgstr "`PREFIX` и `DESTDIR`"
+
+#. 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 ""
+"Переменная `PREFIX` определяет, куда будет установлен порт. По умолчанию это "
+"[.filename]#/usr/local#, но может меняться пользователем на собственный "
+"путь, такой как [.filename]#/opt#. В вашем порту значение этой переменной "
+"должно учитываться."
+
+#. 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 ""
+"Если пользователь установил переменную `DESTDIR`, то она определяет полное "
+"альтернативное окружение, обычно, это jail или установленная система, "
+"смонтированная в месте, отличном от [.filename]#/#. На самом деле порт "
+"устанавливается в [.filename]#DESTDIR/PREFIX# и регистрируется в базе данных "
+"пакетов в [.filename]#DESTDIR/var/db/pkg#. Поскольку управление `DESTDIR` "
+"производится автоматически инфраструктурой портов с помощью man:chroot[8], "
+"вам не нужны никакие изменения или проявление особой осторожности при "
+"написании портов, совместымых с `DESTDIR`."
+
+#. 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 ""
+"Значение переменной `PREFIX` будет установлено в `LOCALBASE` (по умолчанию "
+"[.filename]#/usr/local#). Если задана переменная `USE_LINUX_PREFIX`, то "
+"`PREFIX` примет значение `LINUXBASE` (по умолчанию [.filename]#/compat/"
+"linux#)."
+
+#. 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 ""
+"Избегание явно прописываемых путей [.filename]#/usr/local# в исходном коде "
+"сделает порт гораздо более гибким и способным удовлетворить потребности "
+"других серверов. Часто этого можно добиться простой заменой строк "
+"[.filename]#/usr/local# в различных файлах [.filename]#Makefile# внутри "
+"порта на `${PREFIX}`. Эта переменная автоматически передаётся далее на "
+"каждом этапе построения и установки."
+
+#. 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 ""
+"Проверьте, что ваше приложение не устанавливает чего-либо в каталог "
+"[.filename]#/usr/local# вместо `PREFIX`. Наличие явно указанных путей можно "
+"быстро проверить следующим образом:"
+
+#. 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 "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n"
+
+#. 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 ""
+"Если что-то было установлено за пределами `PREFIX`, то процесс создания "
+"пакета сообщит об отсутствии файлов."
+
+#. 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 ""
+"Это также стоит проверить с использованием поддержки каталога сборки "
+"(смотрите crossref:special[staging, Staging]):"
+
+#. 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 "% make stage && make check-plist && make stage-qa && make package\n"
+
+#. 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 ""
+"`check-plist` проверяет отсутствующие в plist файлы и файлы в plist, которые "
+"не установлены портом."
+
+#. 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 ""
+"`stage-qa` проверяет наличие распространённых проблем, таких как "
+"неправильный шебанг (интерпретаторная строка в первой строке скрипта), "
+"символьные ссылки, указывающие за пределы stage-директории,файлы с setuid "
+"битом и библиотеки с отладочной информацией..."
+
+#. 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 ""
+"Эти тесты не обнаружат жёстко заданные пути в файлах порта, а также не "
+"проверят, что `LOCALBASE` используется корректно для ссылок на файлы из "
+"других портов. Временно установленный порт в [.filename]#/var/tmp/`make -V "
+"PORTNAME`# должен быть протестирован на корректную работу, чтобы убедиться в "
+"отсутствии проблем с путями."
+
+#. 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 ""
+"`PREFIX` не должен быть явно установлен в [.filename]#Makefile# порта. "
+"Пользователи, устанавливающие порт, могут задать `PREFIX` в другом месте, и "
+"порт должен учитывать эту настройку."
+
+#. 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 ""
+"Обращайтесь к программам и файлам из других портов с помощью упомянутых выше "
+"переменных, а не явных путей. Например, если порт требует, чтобы макрос "
+"`PAGER` содержал полный путь к `less`, не используйте явный путь "
+"[.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:186
+#, no-wrap
+msgid "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n"
+msgstr "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n"
+
+#. 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 ""
+"Путь с `LOCALBASE` с большей вероятностью продолжит работать, если системный "
+"администратор переместил всё дерево [.filename]#/usr/local# в другое место."
+
+#. 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 crossref:testing[testing-"
+"poudriere, poudriere] for more information."
+msgstr ""
+"Все эти тесты выполняются автоматически при запуске `poudriere testport` или "
+"`poudriere bulk -t`. Настоятельно рекомендуется каждому участнику разработки "
+"портов устанавливать и тестировать свои порты с помощью этого инструмента. "
+"Дополнительную информацию можно найти в crossref:testing[testing-poudriere, "
+"poudriere]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:198
+#, no-wrap
+msgid "poudriere"
+msgstr "poudriere"
+
+#. 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 ""
+"Для контрибьютора портов poudriere является одним из самых важных и полезных "
+"инструментов для тестирования и сборки. Его основные возможности включают:"
+
+#. 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 "Предоставление подписанного репозитория man:pkg[8]"
+
+#. 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 ""
+"Тестирование сборки портов перед отправкой патча в трекер ошибок FreeBSD или "
+"внесением изменений в дерево портов"
+
+#. 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 ""
+"Поскольку poudriere выполняет сборку в чистой среде man:jail[8] и использует "
+"возможности man:zfs[8], он имеет несколько преимуществ по сравнению с "
+"традиционным тестированием на основной системе:"
+
+#. 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 ""
+"Проверяет [.filename]#pkg-plist# на наличие отсутствующих или лишних записей"
+
+#. 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 ""
+"Коммиттеры портов иногда запрашивают журнал poudriere вместе с отправкой "
+"патча, чтобы оценить, готов ли патч для интеграции в дерево портов"
+
+#. 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 ""
+"Также его настройка и использование довольно просты, он не имеет "
+"зависимостей и будет работать в любой поддерживаемой версии FreeBSD. В этом "
+"разделе показано, как установить, настроить и запустить poudriere в рамках "
+"обычного рабочего процесса разработчика портов."
+
+#. 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 ""
+"Примеры в этом разделе показывают стандартную структуру файлов, принятую в "
+"FreeBSD. Внесите соответствующие изменения, если у вас используются другие "
+"настройки. Дерево портов, обозначаемое как `${PORTSDIR}`, находится в "
+"[.filename]#/usr/ports#. По умолчанию `${LOCALBASE}` и `${PREFIX}` указывают "
+"на [.filename]#/usr/local#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:226
+#, no-wrap
+msgid "Installing poudriere"
+msgstr "Установка poudriere"
+
+#. 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 ""
+"poudriere доступен в дереве портов в пакете package:ports-mgmt/poudriere[]. "
+"Его можно установить с помощью man:pkg[8] или из портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:234
+#, no-wrap
+msgid "# pkg install poudriere\n"
+msgstr "# pkg install poudriere\n"
+
+#. 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 "# make -C /usr/ports/ports-mgmt/poudriere install clean\n"
+
+#. 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 ""
+"Также существует версия poudriere в разработке, которая в конечном итоге "
+"станет следующим релизом. Она доступна в пакете:ports-mgmt/poudriere-"
+"devel[]. Эта версия используется для официальных сборок пакетов FreeBSD, "
+"поэтому она хорошо протестирована. В ней часто появляются новые интересные "
+"функции. Коммиттер портов захочет использовать версию в разработке, так как "
+"именно она используется в продакшене и содержит все новые функции, которые "
+"гарантируют, что всё будет работать идеально. Контрибьютору не обязательно "
+"нужны эти функции, так как наиболее важные исправления переносятся в "
+"выпущенную версию. Основная причина использования версии в разработке для "
+"сборки официальных пакетов заключается в её скорости — она позволяет "
+"сократить время полной сборки с 18 до 17 часов при использовании "
+"высокопроизводительного сервера с 32 CPU и 128 ГБ оперативной памяти. Эти "
+"оптимизации не будут столь значимы при сборке портов на настольном "
+"компьютере."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:254
+#, no-wrap
+msgid "Setting Up poudriere"
+msgstr "Настройка poudriere"
+
+#. 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 ""
+"Порт устанавливает файл конфигурации по умолчанию, [.filename]#/usr/local/"
+"etc/poudriere.conf#. Каждый параметр описан в этом файле конфигурации."
+
+#. 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 ""
+"ZPOOL=zroot\n"
+"BASEFS=/usr/local/poudriere\n"
+"DISTFILES_CACHE=/usr/ports/distfiles\n"
+"RESOLV_CONF=/etc/resolv.conf\n"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:269
+#, no-wrap
+msgid "`ZPOOL`"
+msgstr "`ZPOOL`"
+
+#. 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 ""
+"Имя пула хранения ZFS, который будет использовать poudriere. Должно быть "
+"указано в выводе команды `zpool status`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:273
+#, no-wrap
+msgid "`BASEFS`"
+msgstr "`BASEFS`"
+
+#. 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 ""
+"Корневая точка монтирования файловых систем poudriere. Эта запись приведет к "
+"тому, что poudriere смонтирует `tank/poudriere` в `/poudriere`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:277
+#, no-wrap
+msgid "`DISTFILES_CACHE`"
+msgstr "`DISTFILES_CACHE`"
+
+#. 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 ""
+"Определяет, где хранятся distfiles. В этом примере poudriere и хост "
+"используют общий каталог для хранения distfiles. Это позволяет избежать "
+"загрузки tарболов, которые уже присутствуют в системе. Пожалуйста, создайте "
+"этот каталог, если он ещё не существует, чтобы poudriere мог его найти."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:283
+#, no-wrap
+msgid "`RESOLV_CONF`"
+msgstr "`RESOLV_CONF`"
+
+#. 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 ""
+"Используйте файл [.filename]#/etc/resolv.conf# хоста внутри клеток для DNS. "
+"Это необходимо, чтобы клетки могли разрешать URL-адреса distfiles при "
+"загрузке. Это не требуется при использовании прокси. Обратитесь к файлу "
+"конфигурации по умолчанию для настройки прокси."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:290
+#, no-wrap
+msgid "Creating poudriere Jails"
+msgstr "Создание клеток poudriere"
+
+#. 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 ""
+"Создайте базовые клетки, которые poudriere будет использовать для сборки:"
+
+#. 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 "# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64\n"
+
+#. 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 ""
+"Загрузите `13.1-RELEASE` для `amd64` с FTP-сервера, указанного в "
+"`FREEBSD_HOST` в [.filename]#poudriere.conf#, создайте ZFS-файловую систему "
+"`tank/poudriere/jails/131Ramd64`, смонтируйте её в [.filename]#/poudriere/"
+"jails/131Ramd64# и распакуйте тарболлы `13.1-RELEASE` в эту файловую систему."
+
+#. 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 "# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https\n"
+
+#. 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 ""
+"Создайте `tank/poudriere/jails/12i386`, смонтируйте его на [.filename]#/"
+"poudriere/jails/12i386#, затем извлеките верхушку ветки Git `FreeBSD-12-"
+"STABLE` из `GIT_HOST` в [.filename]#poudriere.conf# или по умолчанию "
+"`git.freebsd.org` в [.filename]#/poudriere/jails/12i386/usr/src#, после чего "
+"выполните `buildworld` и установите его в [.filename]#/poudriere/jails/"
+"12i386#."
+
+#. 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 ""
+"Хотя возможно собрать более новую версию FreeBSD на старой версии, в "
+"большинстве случаев она не запустится. Например, если требуется клетка на "
+"`stable/13`, то хост также должен работать на `stable/13`. Запуск `13.1-"
+"RELEASE` недостаточен."
+
+#. 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 "Для создания клетки poudriere для `14.0-CURRENT`:"
+
+#. 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 "# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https\n"
+
+#. 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 ""
+"Для запуска клетки `14.0-CURRENT` poudriere хостовая система должна работать "
+"под управлением `14.0-CURRENT`. В общем случае, более новые ядра могут "
+"собирать и запускать более старые клетки. Например, ядро `14.0-CURRENT` "
+"может собирать и запускать клетку `12.4-STABLE`, если параметр ядра "
+"`COMPAT_FREEBSD12` был скомпилирован (включен по умолчанию в конфигурации "
+"ядра [.filename]#GENERIC# `14.0-CURRENT`)."
+
+#. 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 ""
+"Список клеток, известных poudriere, можно вывести с помощью команды "
+"`poudriere jail -l`:"
+
+#. 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 ""
+"# poudriere jail -l\n"
+"JAILNAME VERSION ARCH METHOD\n"
+"131Ramd64 13.1-RELEASE amd64 ftp\n"
+"12i386 12.4-STABLE i386 git+https\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:344
+#, no-wrap
+msgid "Keeping poudriere Jails Updated"
+msgstr "Обновление клеток poudriere"
+
+#. 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 "# poudriere jail -u -j JAILNAME\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:357
+msgid ""
+"updates the specified jail to the latest version available. For FreeBSD "
+"releases, update to the latest patchlevel with man:freebsd-update[8]. For "
+"FreeBSD versions built from source, update to the latest git revision in the "
+"branch."
+msgstr ""
+"обновляет указанную клетку до последней доступной версии. Для релизов "
+"FreeBSD обновление до последнего уровня исправлений с помощью man:freebsd-"
+"update[8]. Для версий FreeBSD, собранных из исходников, обновление до "
+"последней ревизии git в ветке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:362
+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 ""
+"Для клеток, использующих метод `git+*`, полезно добавить `-J "
+"_КоличествоПараллельныхСборок_` для ускорения сборки за счёт увеличения "
+"количества параллельных задач компиляции. Например, если на машине для "
+"сборки 6 CPU, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:366
+#, no-wrap
+msgid "# poudriere jail -u -J 6 -j JAILNAME\n"
+msgstr "# poudriere jail -u -J 6 -j JAILNAME\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:371
+#, no-wrap
+msgid "Setting Up Ports Trees for Use with poudriere"
+msgstr "Настройка деревьев портов для использования с poudriere"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:375
+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 ""
+"Существует несколько способов использования деревьев портов в poudriere. "
+"Наиболее простой способ — позволить poudriere создать для себя дерево портов "
+"по умолчанию, используя link:{handbook}mirrors/#git[Git]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:379
+#, no-wrap
+msgid "# poudriere ports -c -m git+https -B main\n"
+msgstr "# poudriere ports -c -m git+https -B main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:383
+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 ""
+"Эти команды создают `tank/poudriere/ports/default`, монтируют его в "
+"[.filename]#/poudriere/ports/default# и заполняют с помощью Git. После этого "
+"он включается в список известных деревьев портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:389
+#, 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 ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"default git+https 2020-07-20 04:23:56 /poudriere/ports/default\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:396
+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 ""
+"Обратите внимание, что дерево портов \"default\" является особым. Каждая из "
+"команд сборки, объяснённых далее, будет неявно использовать это дерево "
+"портов, если явно не указано иное. Чтобы использовать другое дерево, "
+"добавьте `-p _treename_` к командам."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:401
+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 ""
+"Лучший способ работы с локальными изменениями для разработчика портов — "
+"использовать link:{handbook}mirrors/#git[Git]. Как и при создании клеток, "
+"можно использовать другой метод для создания дерева портов. Чтобы добавить "
+"дополнительное дерево портов для тестирования локальных изменений и "
+"разработки портов, предпочтительно использовать клонирование дерева через "
+"git (как описано выше)."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:403
+#, no-wrap
+msgid "Using Manually Managed Ports Trees with poudriere"
+msgstr "Использование управляемых вручную деревьев портов с помощью poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:407
+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 ""
+"В зависимости от рабочего процесса может быть крайне полезно использовать "
+"деревья портов, которые поддерживаются вручную. Например, если существует "
+"локальная копия дерева портов в [.filename]#/work/ports#, укажите poudriere "
+"на это расположение:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:411
+#, no-wrap
+msgid "# poudriere ports -c -m null -M /work/ports -p development\n"
+msgstr "# poudriere ports -c -m null -M /work/ports -p development\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:414
+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:420
+#, no-wrap
+msgid ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"development null 2020-07-20 05:06:33 /work/ports\n"
+msgstr ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"development null 2020-07-20 05:06:33 /work/ports\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:426
+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 ""
+"Тире или `null` в колонке `METHOD` означает, что poudriere никогда не будет "
+"обновлять или изменять это дерево портов. Полностью на пользователе лежит "
+"ответственность за поддержку этого дерева, включая все локальные изменения, "
+"которые могут использоваться для тестирования новых портов и отправки "
+"исправлений."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:429
+#, no-wrap
+msgid "Keeping poudriere Ports Trees Updated"
+msgstr "Обновление деревьев портов poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:432
+msgid "As straightforward as with jails described earlier:"
+msgstr "Так же просто, как с клетками, описанными ранее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:436
+#, no-wrap
+msgid "# poudriere ports -u -p PORTSTREE\n"
+msgstr "# poudriere ports -u -p PORTSTREE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:439
+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 ""
+"Обновит указанное _PORTSTREE_, дерево, указанное в выводе команды `poudriere "
+"-l`, до последней доступной ревизии на официальных серверах."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:444
+msgid ""
+"Ports trees without a method, see crossref:testing[testing-poudriere-ports-"
+"tree-manual, Using Manually Managed Ports Trees with poudriere], cannot be "
+"updated like this and must be updated manually by the porter."
+msgstr ""
+"Деревья портов без метода, см. crossref:testing[testing-poudriere-ports-tree-"
+"manual, Использование вручную управляемых деревьев портов с помощью "
+"poudriere], не могут быть обновлены таким образом и должны обновляться "
+"вручную сопровождающим портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:447
+#, no-wrap
+msgid "Testing Ports"
+msgstr "Тестирование портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:450
+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:452
+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 ""
+"Например, локальные изменения в порте package:www/firefox[], расположенном в "
+"[.filename]#/work/ports/www/firefox#, можно протестировать в ранее созданной "
+"клетке 13.1-RELEASE:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:456
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -p development -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:462
+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 ""
+"Это соберет все зависимости Firefox. Если зависимость уже была собрана ранее "
+"и остается актуальной, будет установлен готовый пакет. Если для зависимости "
+"нет актуального пакета, он будет собран с параметрами по умолчанию в клетке. "
+"Затем будет собран сам Firefox."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:464
+msgid ""
+"The complete build of every port is logged to [.filename]#/poudriere/data/"
+"logs/bulk/131Ri386-development/build-time/logs#."
+msgstr ""
+"Полная сборка каждого порта записывается в [.filename]#/poudriere/data/logs/"
+"bulk/131Ri386-development/build-time/logs#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:469
+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 ""
+"Имя каталога `131Ri386-development` формируется из аргументов `-j` и `-p` "
+"соответственно. Для удобства также поддерживается символическая ссылка "
+"[.filename]#/poudriere/data/logs/bulk/131Ri386-development/latest#. Эта "
+"ссылка указывает на последний каталог _времени сборки_. Также в этом "
+"каталоге находится файл [.filename]#index.html#, который позволяет наблюдать "
+"за процессом сборки через веб-браузер."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:472
+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 ""
+"По умолчанию poudriere очищает клетки и оставляет файлы журналов в указанных "
+"выше каталогах. Для упрощения анализа клетки можно оставить запущенными "
+"после сборки, добавив `-i` к `testport`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:476
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -i -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -p development -i -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:483
+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 ""
+"После завершения сборки, независимо от того, была ли она успешной, в клетке "
+"предоставляется оболочка. Эта оболочка используется для дальнейшего "
+"исследования. Можно указать poudriere оставить клетку запущенной после "
+"завершения сборки с помощью `-I`. poudriere покажет команду для выполнения, "
+"когда клетка больше не нужна. Затем можно использовать man:jexec[8] для "
+"входа в неё:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:497
+#, 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 ""
+"# 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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:502
+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 ""
+"Неотъемлемой частью инфраструктуры сборки портов FreeBSD является "
+"возможность настройки портов под личные предпочтения с помощью опций. Их "
+"также можно тестировать с помощью poudriere. Добавление опции `-c`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:506
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -c -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -c -o www/firefox\n"
+
+#. 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 "
+"crossref:testing[testing-poudriere-sets, Using Sets]."
+msgstr ""
+"Представляет диалог настройки порта перед его сборкой. Порты, указанные "
+"после `-o` в формате `_категория_/_имя_порта_`, будут использовать указанные "
+"опции, все зависимости будут использовать опции по умолчанию. Тестирование "
+"зависимых портов с нестандартными опциями может быть выполнено с "
+"использованием наборов, см. crossref:testing[testing-poudriere-sets, "
+"Использование наборов]."
+
+#. 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 ""
+"При тестировании портов, где файл [.filename]#pkg-plist# изменяется во время "
+"сборки в зависимости от выбранных опций, рекомендуется выполнить тестовый "
+"запуск со всеми выбранными опциями _и_ один без выбранных опций."
+
+#. 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 ""
+"Для всех действий, связанных со сборкой, можно указать так называемый "
+"_набор_ с помощью `-z _имя_набора_`. Набор относится к полностью независимой "
+"сборке. Это позволяет, например, использовать `testport` с нестандартными "
+"параметрами для зависимых портов."
+
+#. 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 ""
+"Для использования наборов poudriere ожидает, что будет использована "
+"структура каталогов, аналогичная `PORT_DBDIR`, по умолчанию [.filename]#/var/"
+"db/ports#, в его конфигурационной директории. Этот каталог затем монтируется "
+"с помощью man:nullfs[5] в клетки, где собираются порты и их зависимости. "
+"Обычно подходящую начальную точку можно получить, рекурсивно скопировав "
+"существующий `PORT_DBDIR` в [.filename]#/usr/local/etc/poudriere.d/jailname-"
+"portname-setname-options#. Это подробно описано в man:poudriere[8]. "
+"Например, для тестирования package:www/firefox[] в определённом наборе с "
+"именем `devset`, добавьте параметр `-z devset` к команде `testport`:"
+
+#. 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 "# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox\n"
+
+#. 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 ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:541
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:542
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:543
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:544
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/development-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:545
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:546
+msgid "[.filename]#/usr/local/etc/poudriere.d/options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/options#"
+
+#. 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 ""
+"Из этого списка poudriere man:nullfs[5] монтирует _первое существующее_ "
+"дерево каталогов в директорию [.filename]#/var/db/ports# сборных клеток. "
+"Таким образом, все пользовательские настройки используются для всех портов "
+"во время этого запуска `testport`."
+
+#. 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 "# poudriere options -c www/firefox -z devset\n"
+
+#. 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 ""
+"Отображается диалог настройки package:www/firefox[], где можно редактировать "
+"параметры. Выбранные параметры сохраняются в набор `devset`."
+
+#. 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 ""
+"poudriere очень гибок в настройке опций. poudriere можно настроить для "
+"конкретных клеток, деревьев портов и для нескольких портов одной командой. "
+"Подробности см. в man:poudriere[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:569
+#, no-wrap
+msgid "Providing a Custom [.filename]#make.conf# File"
+msgstr "Предоставление пользовательского файла [.filename]#make.conf#"
+
+#. 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 ""
+"Подобно использованию наборов, poudriere также использует пользовательский "
+"[.filename]#make.conf#, если он предоставлен. Для этого не требуется "
+"специального аргумента командной строки. Вместо этого poudriere ищет "
+"существующие файлы, соответствующие схеме именования, производной от "
+"командной строки. Например:"
+
+#. 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 ""
+"заставляет poudriere проверять наличие этих файлов в следующем порядке:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:584
+msgid "[.filename]#/usr/local/etc/poudriere.d/make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:585
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:586
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:587
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#"
+
+#. 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 ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#"
+
+#. 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 "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#"
+
+#. 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 ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-"
+"make.conf#"
+
+#. 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 ""
+"В отличие от наборов, все найденные файлы будут добавлены, _в указанном "
+"порядке_, в один [.filename]#make.conf# внутри клеток сборки. Таким образом, "
+"можно задать общие переменные make, предназначенные для влияния на все "
+"сборки, в файле [.filename]#/usr/local/etc/poudriere.d/make.conf#. "
+"Специальные переменные, предназначенные только для определённых клеток или "
+"наборов, можно задать в специализированных файлах [.filename]#make.conf#, "
+"например, в [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-"
+"devset-make.conf#."
+
+#. 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 "Использование [.filename]#make.conf# для изменения Perl по умолчанию"
+
+#. 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 ""
+"Для сборки набора с нестандартной версией Perl, например, `5.20`, используя "
+"набор с именем `perl5-20`, создайте файл [.filename]#perl5-20-make.conf# со "
+"следующей строкой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:605
+#, no-wrap
+msgid "DEFAULT_VERSIONS+= perl=5.20\n"
+msgstr "DEFAULT_VERSIONS+= perl=5.20\n"
+
+#. 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 ""
+"Обратите внимание на использование `+=`, чтобы содержимое переменной не было "
+"перезаписано, если она уже установлена в стандартном [.filename]#make.conf#."
+
+#. 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 ""
+"poudriere имеет встроенный механизм для удаления устаревших файлов "
+"дистрибутива, которые больше не используются ни одним портом данного дерева. "
+"Команда"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:622
+#, no-wrap
+msgid "# poudriere distclean -p portstree\n"
+msgstr "# poudriere distclean -p portstree\n"
+
+#. 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 ""
+"будет сканировать папку файлов дистрибутива, `DISTFILES_CACHE` в "
+"[.filename]#poudriere.conf#, сравнивая ее с деревом портов, указанным "
+"аргументом `-p _portstree_`, и запрашивать подтверждение на удаление этих "
+"файлов дистрибутива. Чтобы пропустить запрос и удалить все неиспользуемые "
+"файлы без подтверждения, можно добавить аргумент `-y`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:631
+#, no-wrap
+msgid "# poudriere distclean -p portstree -y\n"
+msgstr "# poudriere distclean -p portstree -y\n"
+
+#. 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 ""
+"`WITH_DEBUG`. Если установлено, порты собираются с отладочными символами."
+
+#. 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 ""
+"`WITH_DEBUG_PORTS`. Указывает список портов, которые должны собираться с "
+"установленным `WITH_DEBUG`."
+
+#. 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 ""
+"`DEBUG_FLAGS`. Используется для указания дополнительных флагов для `CFLAGS`. "
+"По умолчанию `-g`."
+
+#. 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 ""
+"Когда `WITH_DEBUG` установлен, глобально или для списка портов, "
+"результирующие бинарные файлы не лишаются символов."
+
+#. 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 ""
+"Эти переменные могут быть указаны в [.filename]#make.conf# или в командной "
+"строке:"
+
+#. 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 "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n"
+
+#. 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 ""
+"Если порт собирается с использованием package:ports-mgmt/poudriere[], "
+"отладочные переменные должны быть указаны в [.filename]#make.conf# "
+"poudriere, а не в [.filename]#/etc/make.conf#. Подробности см. в "
+"документации package:ports-mgmt/poudriere[]."
+
+#. 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 ""
+"Пожалуйста, обратитесь к отладочной информации в extref:{developers-handbook}"
+"tools[Руководстве разработчика, отладка] для получения более подробной "
+"информации о доступных инструментах отладки."
+
+#~ 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 ""
+#~ "Так как для обнаружения ошибок `portlint` использует эвристические "
+#~ "методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, "
+#~ "время от времени нечто, отмечаемое как некорректность, из-за ограничений "
+#~ "механизма создания портов не может быть сделано никак иначе. pass:[<!-- "
+#~ "vale Vale.Terms = NO -->] Если вы сомневаетесь, то лучше всего спросить в "
+#~ "{freebsd-ports}. pass:[<!-- vale Vale.Terms = YES -->]"
+
+#~ 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 ""
+#~ "обновляет указанную клетку до последней доступной версии. pass:[<!-- "
+#~ "vale Vale.Terms = NO -->] Для релизов FreeBSD обновление до последнего "
+#~ "уровня исправлений с помощью man:freebsd-update[8]. pass:[<!-- vale "
+#~ "Vale.Terms = YES -->] Для версий FreeBSD, собранных из исходников, "
+#~ "обновление до последней ревизии git в ветке."
diff --git a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
index 863bd4ad3b..c6f3b2a5bb 100644
--- a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 10. Обновление отдельного порта
-prev: books/porters-handbook/testing
+description: 'Обновление порта FreeBSD'
next: books/porters-handbook/security
-showBookMenu: true
-weight: 10
params:
- path: "/books/porters-handbook/upgrading/"
+ path: /books/porters-handbook/upgrading/
+prev: books/porters-handbook/testing
+showBookMenu: true
+tags: ["upgrading", "port", "git"]
+title: 'Глава 11. Обновление отдельного порта'
+weight: 11
---
[[port-upgrading]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 10
+:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
@@ -46,32 +48,37 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Если вы заметите, что ваш порт устарел по сравнению с последней авторской версией, первым делом вы должны получить самую последнюю версия порта. Вы можете найти их в каталоге [.filename]#ports/ports-current# на зеркальных FTP-серверах FreeBSD. Однако если вы работаете с достаточно большим количеством портов, наверное, будет проще использовать Subversion или man:portsnap[8] для поддержания всей коллекции портов в актуальном состоянии, как это описано в extref:{handbook}ports/[Руководстве, ports-using]. К тому же это даст возможность отслеживать все зависимости портов.
+Когда порт не является самой последней версией, доступной от авторов, обновите локальную рабочую копию [.filename]#/usr/ports#. Возможно, порт уже был обновлён до новой версии.
-На следующем шаге необходимо выяснить, нет ожидает ли уже это обновление своей очереди. Для этого у вас есть две возможности. Существует интерфейс к http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[базе данных сообщений о проблемах FreeBSD (PR)] (известной также как `GNATS`) с поисковыми возможностями. Выберите из выпадающего списка `ports` и введите название порта.
+При работе с большим количеством портов, вероятно, будет проще использовать Git для поддержания всей коллекции портов в актуальном состоянии, как описано в extref:{handbook}ports[Использование коллекции портов, ports-using]. Это также позволит отслеживать все зависимости портов.
-Однако иногда люди забывают поместить название порта в поле Synopsis в точном виде. В таком случае вы можете воспользоваться <<portsmon,Системой мониторинга портов FreeBSD>> (которая известна также как `portsmon`). В рамках этой системы делается попытка классифицировать PR, касающиеся портов, по имени порта. Для поиска PR, относящихся к определённому порту, используйте механизм http://portsmon.FreeBSD.org/portoverview.py[Просмотра по одному порту].
+Следующий шаг — проверить, есть ли уже ожидающее обновление. Для этого есть два варианта. Доступен поиск в https://bugs.freebsd.org/search/[Сообщения о проблемах (PR) или база данных ошибок FreeBSD]. Выберите `Ports & Packages` в меню множественного выбора `Product` и введите название порта в поле `Summary`.
Если таких отложенных PR не существует, то на следующем этапе следует послать сообщение электронной почты человеку, поддерживающему порт, который выдаётся по команде `make maintainer`. Этот человек может уже работать над обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-за проблем со стабильностью функционирования новой версии); вам нет нужды дублировать их работу. Заметьте, что неподдерживаемые порты перечисляются с адресом сопровождающего `ports@FreeBSD.org`, который является всего лишь адресом общего списка рассылки, так что отправка туда сообщений, скорее всего, в данном случае не поможет.
Если сопровождающий просит вас выполнить обновление, либо сопровождающий отсутствует, то у вас появляется шанс помочь FreeBSD, приготовив обновление самим! Пожалуйста, делайте это с использованием команды man:diff[1] в основной системе.
-Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который нужно пропатчить, в _something.orig_, сохраните ваши изменения в _something_, а затем создайте ваше патч:
+Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который нужно пропатчить, в [.filename]#something.orig#, сохраните ваши изменения в [.filename]#something#, а затем создайте ваше патч:
-[source,shell]
+[source, shell]
....
% diff -u something.orig something > something.diff
....
-В противном случае, вам следует воспользоваться методом `svn diff` (<<svn-diff>>), либо скопировать содержимое порта в отдельный каталог и применить результат рекурсивной команды man:diff[1] между новым и старым каталогами порта (например, если каталог с модифицированным портом называется [.filename]#superedit#, а оригинальный, совпадающий с находящимся в нашем дереве портов, [.filename]#superedit.bak#, то сохраните результат выполнения команды `diff -ruN superedit.bak superedit`). Подойдёт как унифицированный, так и контекстный дифф, однако коммиттеры портов обычно предпочитают унифицированный формат. Отметьте использование опции `-N`-это одобряемый способ заставить diff корректно работать в случае добавления новых файлов или удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста, проверьте его, чтобы убедиться в значимости всех внесённых изменений. (В частности, убедитесь, что вы очистили рабочие каталоги командой `make clean`).
+В противном случае используйте метод `git diff` (crossref:upgrading[git-diff, Использование Git для создания патчей]) или скопируйте содержимое порта в совершенно другой каталог и используйте результат рекурсивного вывода man:diff[1] для новых и старых каталогов портов (например, если изменённый каталог порта называется [.filename]#superedit#, а исходный находится в нашем дереве как [.filename]#superedit.bak#, сохраните результат выполнения `diff -ruN superedit.bak superedit`). Подойдёт как унифицированный, так и контекстный diff, но коммиттеры портов обычно предпочитают унифицированные diff. Обратите внимание на использование опции `-N` — это общепринятый способ заставить diff корректно обрабатывать случаи добавления новых файлов или удаления старых. Перед отправкой diff, пожалуйста, проверьте вывод, чтобы убедиться, что все изменения имеют смысл. (В частности, не забудьте сначала очистить рабочие каталоги с помощью `make clean`).
-Для упрощения повторяющихся операций с файлами заплаток вы можете воспользоваться скриптом [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Перед тем, как его запускать, пожалуйста, прочтите [.filename]#/usr/ports/Tools/scripts/README.patchtool#.
+[NOTE]
+====
+Если некоторые файлы были добавлены, скопированы, перемещены или удалены, добавьте эту информацию в отчёт о проблеме, чтобы коммиттер, принимающий патч, знал, какие команды man:git[1] нужно выполнить.
+====
+
+Для упрощения стандартных операций с файлами исправлений используйте `make makepatch`, как описано в crossref:slow-porting[slow-patch,Применение партчей]. Существуют и другие инструменты, например [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Перед его использованием прочтите [.filename]#/usr/ports/Tools/scripts/README.patchtool#.
Если порт никем не поддерживается, а вы активно его используете, пожалуйста, подумайте над тем, чтобы добровольно стать его сопровождающим. Во FreeBSD имеется более 4000 портов без поддержки, и это как раз та область, где всегда нужны добровольцы. (Детальное описание обязанностей сопровождающего можно найти в разделе extref:{developers-handbook}[Руководства Разработчика, POLICIES-MAINTAINER].)
-Лучше всего послать нам diff-файл, включив его в посылку по команде man:send-pr[1] (категория `ports`). Если вы сопровождаете порт, обязательно поместите текст `[maintainer update]` в начале строки описания и задайте в поле "Class" вашего PR строчку `maintainer-update`. В противном случае в поле "Class" вашего PR должно быть указано `change-request`. Будьте добры, в сообщении отметьте все добавленные или удалённые файлы, так как они будут непосредственно указаны man:svn[1] при выполнении операции коммита. Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте утилитой uuencode; в противном случае просто включите его как есть в PR.
+Для отправки diff используйте https://bugs.freebsd.org/submit/[форму отправки багов] (продукт `Ports & Packages`, компонент `Individual Port(s)`). Всегда указывайте категорию с именем порта, за которой следует двоеточие и краткое описание проблемы. Примеры: `_категория/имя_порта_: _добавить опцию FOO_`; `_категория/имя_порта_: _Обновление до X.Y_`. Упоминайте в сообщении все добавленные или удалённые файлы, так как они должны быть явно указаны в man:git[1] при выполнении коммита. Не сжимайте и не кодируйте diff.
-Прежде чем пользоваться man:send-pr[1] просмотрите раздел о extref:{problem-reports}[Написании сообщений о проблемах, pr-writing] в статье о Сообщениях об ошибках. Он содержит гораздо больше информации о том, как писать полезные сообщения о проблемах.
+Прежде чем отправить сообщение об ошибке, ознакомьтесь с разделом extref:{problem-reports}[Написание отчета о проблеме, pr-writing] в статье "Отчеты о проблемах". В нем содержится гораздо больше информации о том, как составлять полезные отчеты о проблемах.
[IMPORTANT]
====
@@ -80,82 +87,100 @@ endif::[]
[NOTE]
====
-Повторяем еще раз - для посылки обновлений существующих портов используйте утилиту man:diff[1], а не man:shar[1]! Это поможет понять коммиттерам портов, что именно было изменено.
+Пожалуйста, используйте man:diff[1] или `git diff` для создания обновлений существующих портов. Другие форматы включают весь файл и делают невозможным увидеть только изменённые части. Если различия не включены, всё обновление может быть проигнорировано.
====
Теперь, когда вы проделали всё это, прочитайте о том, как поддерживать актуальное состояние, в crossref:keeping-up[keeping-up, Актуализация].
-[[svn-diff]]
-== Использование Subversion для создания патчей
+[[git-diff]]
+== Использование Git для создания патчей
-По возможности присылайте исправления в формате man:svn[1] diff. В таком виде их проще использовать по сравнению с разницей между "старым и новым" каталогами. Так проще увидеть изменения и обновить их в случае, если что-нибудь изменилось в Коллекции Портов с тех пор, как вы начали работу, либо если коммиттер просит что-то исправить.
+Когда это возможно, пожалуйста, предоставляйте патч или diff с помощью man:git[1]. Их проще обрабатывать, чем различия между «новым и старым» каталогом. Так легче увидеть, что изменилось, и обновить diff, если что-то было изменено в Коллекции портов с момента начала работы над ней, или если коммиттер просит что-то исправить. Кроме того, патч, созданный с помощью man:git-format-patch[1] или man:git-diff[1], можно легко применить с помощью man:git-am[1] или man:git-apply[1], что сэкономит время коммиттера. Наконец, git-патч, созданный man:git-format-patch[1], включает информацию об авторе и сообщения коммитов. Они будут записаны в лог репозитория, и это рекомендуемый способ отправки ваших изменений.
-[source,shell]
+[source, shell]
....
-% cd ~/my_wrkdir <.>
-% svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd <.>
-% cd ~/my_wrkdir/pdnsd
+% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>
+% cd ~/my_wrkdir
....
<.> Это может быть где угодно; место, в котором производится построение портов, не привязано к [.filename]#/usr/ports/#.
-<.> https://svn0.us-west.FreeBSD.org/[svn0.us-west.FreeBSD.org] - это общедоступный сервер Subversion. Выберите ближайшее зеркало и проверьте сертификат зеркалирующего сервера на наличие в перечне extref:{handbook}mirrors/[зеркалирующих сайтов Subversion, svn-mirrors].
+<.> https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный Git-сервер FreeBSD. Подробнее см. в extref:{handbook}mirrors[таблице URL-репозиториев FreeBSD Git, git-url-table].
-Находясь в рабочем каталоге, вносите любые изменения, которые обычно делают для порта. При добавлении или удалении файла используйте `svn` для отслеживания этих изменений:
+Находясь в каталоге порта, внесите необходимые изменения. Если требуется добавить, переместить или удалить файл, используйте `git` для отслеживания этих изменений:
-[source,shell]
+[source, shell]
....
-% svn add new_file
-% svn remove deleted_file
+% git add new_file
+% git mv old_name new_name
+% git rm deleted_file
....
-Убедитесь, что вы проверяете порт в соответствии с рекомендуемым порядком проверки, описанным в crossref:quick-porting[porting-testing, Тестирование порта] и crossref:quick-porting[porting-portlint, Проверка вашего порта утилитой `portlint`].
+Убедитесь, что проверили порт, используя контрольный список в crossref:quick-porting[porting-testing,Тестирование порта] и crossref:quick-porting[porting-portlint,Проверка порта с помощью `portlint`].
+
+Также обновите ссылку на контрольную сумму в distinfo с помощью `make makesum`.
-[source,shell]
+Прежде чем создавать патч, загрузите последнюю версию репозитория и перебазируйте изменения поверх неё. Внимательно следите за выводом и следуйте ему. Если какие-либо файлы не удалось перебазировать, это означает, что исходные файлы изменились во время вашего редактирования, и конфликты необходимо разрешить вручную.
+
+[source, shell]
....
-% svn status
-% svn update <.>
+% git fetch origin main
+% git rebase origin/main
....
-<.> Эта команда попытается выполнить слияние различий между вашим патчем и текущей версией репозитория; внимательно проверьте полученный вывод. Буква перед названием каждого файла означает тип изменения, сделанного с этим файлом. Для получения полного списка смотрите <<table-svn-up>>.
+Проверьте изменения, подготовленные для исправления:
-[[table-svn-up]]
-.Префиксы файлов для Subversion Update
-[cols="1,1", frame="none"]
-|===
-|U
-|Файл обновлен без проблем.
+[source, shell]
+....
+% git status
+% git diff --staged
+....
-|G
-|Файл обновлен без проблем (вы увидите это только при работе с удаленным репозиторием).
+Последний шаг — создать унифицированный diff или патч изменений:
-|M
-|Файл с локальными изменениями, слияние выполнено без конфликтов.
+Для создания патча с помощью man:git-format-patch[1]:
+[source, shell]
+....
+% git checkout -b my_branch
+% git commit
+% git format-patch main
+....
-|C
-|Файл с локальными изменениями, слияние выполнено с конфликтами.
-|===
+Это создаст файл исправления с именем вида `0001-foo.patch`. Это предпочтительный способ, так как он включает идентификацию автора, а также удобнее, когда вы делаете серию изменений, которые не должны объединяться вместе.
-Если в результате выполнения `svn update` отображается `C`, то это означает, что что-то изменилось в репозитории Subversion и man:svn[1] не смогла выполнить слияние локальных изменений с полученными из репозитория. В любом случае никогда не помешает просмотреть изменения, поскольку man:svn[1] ничего не знает о том, каким должен быть порт, поэтому эта команда может (и, вероятно, будет) делать слияние тех изменений, которые не имеют смысла.
+Или для создания унифицированного diff с помощью man:git-diff[1]:
+[source, shell]
+....
+% git diff --staged > ../`make -VPKGNAME`.diff
+....
+Это создаст файл с различиями с именем вида `foo-1.2.3.diff`. Здесь `foo` заменяется на первую строку сообщения коммита, то есть на тему сообщения коммита.
-Последним шагом является создание унифицированного man:diff[1] для полученных изменений:
+После создания патча вы можете переключиться на основную ветку для начала других разработок.
+[source, shell]
+....
+% git checkout main
+....
-[source,shell]
+После принятия и слияния патча вы можете удалить локальную ветку разработки, если хотите:
+[source, shell]
....
-% svn diff > ../`basename ${PWD}`.diff
+% git branch -D my_branch
....
[NOTE]
====
-Информация о любых удаляемых файлов должна быть явным образом указана в PR, поскольку необходимость в удалении файла для коммиттера может быть неочевидна.
+Если файлы были добавлены, перемещены или удалены, укажите использованные команды man:git[1] `add`, `mv` и `rm`. Команда `git mv` должна быть выполнена до применения патча. Команды `git add` или `git rm` должны быть выполнены после применения патча.
====
-Присылайте свои патчи в соответствии с руководством, описанном в <<port-upgrading>>.
+Отправьте исправление, следуя extref:{problem-reports}[рекомендациям по отправке отчетов о проблемах, pr-writing].
[[moved-and-updating-files]]
-== Файлы [.filename]#UPDATING# и [.filename]#MOVED#
+== UPDATING и MOVED
+
+[[moved-and-updating-updating]]
+=== /usr/ports/UPDATING
-Если при обновлении порта требуются специальные шаги, такие как изменение файлов конфигурации или запуск специальной программы, то вам следует это задокументировать в файле [.filename]#/usr/ports/UPDATING#. Формат записи в этом файле приводится ниже:
+Если обновление порта требует специальных действий, таких как изменение конфигурационных файлов или запуск определённой программы, это должно быть задокументировано в данном файле. Формат записи в этом файле следующий:
[.programlisting]
....
@@ -166,17 +191,55 @@ YYYYMMDD:
Special instructions
....
-Если вы включаете точные инструкции portmaster или portupgrade, пожалуйста, убедитесь в правильном экранировании символов внутри командной оболочки.
+[TIP]
+====
-Файл [.filename]#/usr/ports/MOVED# содержит записи об удалённых или перемещённых портах. Каждая строка в этом файле состоит из полей: название порта, место, куда он был перемещён, дата и причина перемещения. Если порт был удалён, то поле, указывающее новое место, может оставаться незаполненным. Поля должны разделяться символом `|` (pipe), как это показано ниже:
+При включении точных инструкций для portmaster, portupgrade и/или pkg, убедитесь в правильности экранирования в shell. Например, _не_ используйте:
+
+[source, shell]
+....
+# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*
+....
+
+Как показано, команда будет работать только с bourne-оболочками. Вместо этого используйте форму, приведённую ниже, которая будет работать как с bourne-оболочкой, так и с c-оболочкой:
+
+[source, shell]
+....
+# pkg delete -g -f docbook-xml\* docbook-sk\* docbook\[2345\]\?\?-\* docbook-4\*
+....
+
+====
+
+[NOTE]
+====
+Рекомендуется, чтобы строка AFFECTS содержала glob-выражение, соответствующее всем портам, затронутым записью, чтобы автоматизированные инструменты могли максимально легко её обработать. Если обновление касается всех существующих версий BIND 9, содержимое `AFFECTS` должно быть `users of dns/bind9*`, и оно _не должно_ быть `users of BIND 9`
+====
+
+[[moved-and-updating-moved]]
+=== /usr/ports/MOVED
+
+Этот файл используется для перечисления перемещённых или удалённых портов. Каждая строка в файле состоит из названия порта, места, куда порт был перемещён, даты и причины. Если порт был удалён, раздел с указанием места перемещения может быть оставлен пустым. Каждый раздел должен быть отделён символом `|` (вертикальная черта), например:
[.programlisting]
....
old name|new name (blank for deleted)|date of move|reason
....
-Дату следует вводить в формате `YYYY-MM-DD`. Новые записи следует добавлять в конец файла в хронологическом порядке.
+Дата должна быть введена в формате `ГГГГ-ММ-ДД`. Новые записи добавляются в конец списка, чтобы сохранить его в хронологическом порядке, при этом самая старая запись находится в начале списка.
+
+Если порт был удален, но затем восстановлен, удалите строку в этом файле, которая указывает, что он был удален.
+
+Если порт был переименован, а затем переименован обратно в исходное имя, добавьте новую запись с промежуточным именем для старого имени и удалите старую запись, чтобы не создавать цикл.
+
+[NOTE]
+====
+Любые изменения должны быть проверены с помощью `Tools/scripts/MOVEDlint.awk`.
-Если порт был перемещён, но в дальнейшем восстановлен на прежнем месте, удалите в этом файле строку, содержащую информацию о перемещении.
+Если используется каталог портов, отличный от [.filename]#/usr/ports#, следует указать:
-Полученные изменения можно проверить командой `Tools/scripts/MOVEDlint.awk`.
+[source, shell]
+....
+% cd /home/user/ports
+% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk
+....
+====
diff --git a/documentation/content/ru/books/porters-handbook/upgrading/_index.po b/documentation/content/ru/books/porters-handbook/upgrading/_index.po
new file mode 100644
index 0000000000..66343c9f72
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/upgrading/_index.po
@@ -0,0 +1,688 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookupgrading_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Upgrading a FreeBSD Port"
+msgstr "Обновление порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Upgrading a Port"
+msgstr "Глава 11. Обновление отдельного порта"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:14
+#, no-wrap
+msgid "Upgrading a Port"
+msgstr "Обновление отдельного порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:53
+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 ""
+"Когда порт не является самой последней версией, доступной от авторов, "
+"обновите локальную рабочую копию [.filename]#/usr/ports#. Возможно, порт уже "
+"был обновлён до новой версии."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:57
+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 ""
+"При работе с большим количеством портов, вероятно, будет проще использовать "
+"Git для поддержания всей коллекции портов в актуальном состоянии, как "
+"описано в extref:{handbook}ports[Использование коллекции портов, ports-"
+"using]. Это также позволит отслеживать все зависимости портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:62
+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 ""
+"Следующий шаг — проверить, есть ли уже ожидающее обновление. Для этого есть "
+"два варианта. Доступен поиск в https://bugs.freebsd.org/search/[Сообщения о "
+"проблемах (PR) или база данных ошибок FreeBSD]. Выберите `Ports & Packages` "
+"в меню множественного выбора `Product` и введите название порта в поле "
+"`Summary`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:66
+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 ""
+"Если таких отложенных PR не существует, то на следующем этапе следует "
+"послать сообщение электронной почты человеку, поддерживающему порт, который "
+"выдаётся по команде `make maintainer`. Этот человек может уже работать над "
+"обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-"
+"за проблем со стабильностью функционирования новой версии); вам нет нужды "
+"дублировать их работу. Заметьте, что неподдерживаемые порты перечисляются с "
+"адресом сопровождающего `ports@FreeBSD.org`, который является всего лишь "
+"адресом общего списка рассылки, так что отправка туда сообщений, скорее "
+"всего, в данном случае не поможет."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:68
+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 ""
+"Если сопровождающий просит вас выполнить обновление, либо сопровождающий "
+"отсутствует, то у вас появляется шанс помочь FreeBSD, приготовив обновление "
+"самим! Пожалуйста, делайте это с использованием команды man:diff[1] в "
+"основной системе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:70
+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 ""
+"Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который "
+"нужно пропатчить, в [.filename]#something.orig#, сохраните ваши изменения в "
+"[.filename]#something#, а затем создайте ваше патч:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:74
+#, no-wrap
+msgid "% diff -u something.orig something > something.diff\n"
+msgstr "% diff -u something.orig something > something.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:81
+msgid ""
+"Otherwise, either use the `git diff` method (crossref:upgrading[git-diff, "
+"Using Git to Make Patches]) 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 ""
+"В противном случае используйте метод `git diff` (crossref:upgrading[git-"
+"diff, Использование Git для создания патчей]) или скопируйте содержимое "
+"порта в совершенно другой каталог и используйте результат рекурсивного "
+"вывода man:diff[1] для новых и старых каталогов портов (например, если "
+"изменённый каталог порта называется [.filename]#superedit#, а исходный "
+"находится в нашем дереве как [.filename]#superedit.bak#, сохраните результат "
+"выполнения `diff -ruN superedit.bak superedit`). Подойдёт как "
+"унифицированный, так и контекстный diff, но коммиттеры портов обычно "
+"предпочитают унифицированные diff. Обратите внимание на использование опции "
+"`-N` — это общепринятый способ заставить diff корректно обрабатывать случаи "
+"добавления новых файлов или удаления старых. Перед отправкой diff, "
+"пожалуйста, проверьте вывод, чтобы убедиться, что все изменения имеют смысл. "
+"(В частности, не забудьте сначала очистить рабочие каталоги с помощью `make "
+"clean`)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:85
+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 ""
+"Если некоторые файлы были добавлены, скопированы, перемещены или удалены, "
+"добавьте эту информацию в отчёт о проблеме, чтобы коммиттер, принимающий "
+"патч, знал, какие команды man:git[1] нужно выполнить."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:90
+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 ""
+"Для упрощения стандартных операций с файлами исправлений используйте `make "
+"makepatch`, как описано в crossref:slow-porting[slow-patch,Применение "
+"партчей]. Существуют и другие инструменты, например [.filename]#/usr/ports/"
+"Tools/scripts/patchtool.py#. Перед его использованием прочтите [.filename]#/"
+"usr/ports/Tools/scripts/README.patchtool#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:94
+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 ""
+"Если порт никем не поддерживается, а вы активно его используете, пожалуйста, "
+"подумайте над тем, чтобы добровольно стать его сопровождающим. Во FreeBSD "
+"имеется более 4000 портов без поддержки, и это как раз та область, где "
+"всегда нужны добровольцы. (Детальное описание обязанностей сопровождающего "
+"можно найти в разделе extref:{developers-handbook}[Руководства Разработчика, "
+"POLICIES-MAINTAINER].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:100
+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 ""
+"Для отправки diff используйте https://bugs.freebsd.org/submit/[форму "
+"отправки багов] (продукт `Ports & Packages`, компонент `Individual "
+"Port(s)`). Всегда указывайте категорию с именем порта, за которой следует "
+"двоеточие и краткое описание проблемы. Примеры: `_категория/имя_порта_: "
+"_добавить опцию FOO_`; `_категория/имя_порта_: _Обновление до X.Y_`. "
+"Упоминайте в сообщении все добавленные или удалённые файлы, так как они "
+"должны быть явно указаны в man:git[1] при выполнении коммита. Не сжимайте и "
+"не кодируйте diff."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:103
+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 ""
+"Прежде чем отправить сообщение об ошибке, ознакомьтесь с разделом extref:"
+"{problem-reports}[Написание отчета о проблеме, pr-writing] в статье \"Отчеты "
+"о проблемах\". В нем содержится гораздо больше информации о том, как "
+"составлять полезные отчеты о проблемах."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:109
+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 ""
+"Если обновление вызвано соображениями информационной безопасности или "
+"наличием серьёзных ошибок в имеющемся порте, пожалуйста, оповестите "
+"{portmgr} о необходимости немедленного перепостроения и повторного "
+"распространения пакета данного порта. В противном случае ничего не "
+"подозревающие пользователи `pkg` будут продолжать устанавливать старую "
+"версию по команде `pkg install` в течение ещё нескольких недель."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:116
+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 ""
+"Пожалуйста, используйте man:diff[1] или `git diff` для создания обновлений "
+"существующих портов. Другие форматы включают весь файл и делают невозможным "
+"увидеть только изменённые части. Если различия не включены, всё обновление "
+"может быть проигнорировано."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:119
+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 ""
+"Теперь, когда вы проделали всё это, прочитайте о том, как поддерживать "
+"актуальное состояние, в crossref:keeping-up[keeping-up, Актуализация]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:121
+#, no-wrap
+msgid "Using Git to Make Patches"
+msgstr "Использование Git для создания патчей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:130
+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 ""
+"Когда это возможно, пожалуйста, предоставляйте патч или diff с помощью "
+"man:git[1]. Их проще обрабатывать, чем различия между «новым и старым» "
+"каталогом. Так легче увидеть, что изменилось, и обновить diff, если что-то "
+"было изменено в Коллекции портов с момента начала работы над ней, или если "
+"коммиттер просит что-то исправить. Кроме того, патч, созданный с помощью "
+"man:git-format-patch[1] или man:git-diff[1], можно легко применить с помощью "
+"man:git-am[1] или man:git-apply[1], что сэкономит время коммиттера. Наконец, "
+"git-патч, созданный man:git-format-patch[1], включает информацию об авторе и "
+"сообщения коммитов. Они будут записаны в лог репозитория, и это "
+"рекомендуемый способ отправки ваших изменений."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:135
+#, no-wrap
+msgid ""
+"% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>\n"
+"% cd ~/my_wrkdir\n"
+msgstr ""
+"% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>\n"
+"% cd ~/my_wrkdir\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:138
+msgid ""
+"This can be anywhere, of course. Building ports is not limited to within "
+"[.filename]#/usr/ports/#."
+msgstr ""
+"Это может быть где угодно; место, в котором производится построение портов, "
+"не привязано к [.filename]#/usr/ports/#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:140
+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 ""
+"https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный Git-сервер "
+"FreeBSD. Подробнее см. в extref:{handbook}mirrors[таблице URL-репозиториев "
+"FreeBSD Git, git-url-table]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:143
+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 ""
+"Находясь в каталоге порта, внесите необходимые изменения. Если требуется "
+"добавить, переместить или удалить файл, используйте `git` для отслеживания "
+"этих изменений:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:149
+#, no-wrap
+msgid ""
+"% git add new_file\n"
+"% git mv old_name new_name\n"
+"% git rm deleted_file\n"
+msgstr ""
+"% git add new_file\n"
+"% git mv old_name new_name\n"
+"% git rm deleted_file\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:152
+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 ""
+"Убедитесь, что проверили порт, используя контрольный список в crossref:quick-"
+"porting[porting-testing,Тестирование порта] и crossref:quick-porting[porting-"
+"portlint,Проверка порта с помощью `portlint`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:154
+msgid "Also, update the checksum reference in distinfo with `make makesum`."
+msgstr ""
+"Также обновите ссылку на контрольную сумму в distinfo с помощью `make "
+"makesum`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:158
+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:163
+#, no-wrap
+msgid ""
+"% git fetch origin main\n"
+"% git rebase origin/main\n"
+msgstr ""
+"% git fetch origin main\n"
+"% git rebase origin/main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:166
+msgid "Check the changes staged for the patch:"
+msgstr "Проверьте изменения, подготовленные для исправления:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:171
+#, no-wrap
+msgid ""
+"% git status\n"
+"% git diff --staged\n"
+msgstr ""
+"% git status\n"
+"% git diff --staged\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:174
+msgid "The last step is to make an unified diff or patch of the changes:"
+msgstr "Последний шаг — создать унифицированный diff или патч изменений:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:176
+msgid "To generate a patch with man:git-format-patch[1]:"
+msgstr "Для создания патча с помощью man:git-format-patch[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:181
+#, no-wrap
+msgid ""
+"% git checkout -b my_branch\n"
+"% git commit\n"
+"% git format-patch main\n"
+msgstr ""
+"% git checkout -b my_branch\n"
+"% git commit\n"
+"% git format-patch main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:187
+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 ""
+"Это создаст файл исправления с именем вида `0001-foo.patch`. Это "
+"предпочтительный способ, так как он включает идентификацию автора, а также "
+"удобнее, когда вы делаете серию изменений, которые не должны объединяться "
+"вместе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:189
+msgid "Alternatively, to generate an unified diff with man:git-diff[1]:"
+msgstr "Или для создания унифицированного diff с помощью man:git-diff[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:192
+#, no-wrap
+msgid "% git diff --staged > ../`make -VPKGNAME`.diff\n"
+msgstr "% git diff --staged > ../`make -VPKGNAME`.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:195
+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 ""
+"Это создаст файл с различиями с именем вида `foo-1.2.3.diff`. Здесь `foo` "
+"заменяется на первую строку сообщения коммита, то есть на тему сообщения "
+"коммита."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:197
+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:200
+#, no-wrap
+msgid "% git checkout main\n"
+msgstr "% git checkout main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:203
+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:206
+#, no-wrap
+msgid "% git branch -D my_branch\n"
+msgstr "% git branch -D my_branch\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:213
+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 ""
+"Если файлы были добавлены, перемещены или удалены, укажите использованные "
+"команды man:git[1] `add`, `mv` и `rm`. Команда `git mv` должна быть "
+"выполнена до применения патча. Команды `git add` или `git rm` должны быть "
+"выполнены после применения патча."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:216
+msgid ""
+"Send the patch following the extref:{problem-reports}[problem report "
+"submission guidelines, pr-writing]."
+msgstr ""
+"Отправьте исправление, следуя extref:{problem-reports}[рекомендациям по "
+"отправке отчетов о проблемах, pr-writing]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:218
+#, no-wrap
+msgid "UPDATING and MOVED"
+msgstr "UPDATING и MOVED"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:221
+#, no-wrap
+msgid "/usr/ports/UPDATING"
+msgstr "/usr/ports/UPDATING"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:225
+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:231
+#, no-wrap
+msgid ""
+"YYYYMMDD:\n"
+" AFFECTS: users of portcategory/portname\n"
+" AUTHOR: Your name <Your email address>\n"
+msgstr ""
+"YYYYMMDD:\n"
+" AFFECTS: users of portcategory/portname\n"
+" AUTHOR: Your name <Your email address>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:233
+#, no-wrap
+msgid " Special instructions\n"
+msgstr " Special instructions\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:240
+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 ""
+"При включении точных инструкций для portmaster, portupgrade и/или pkg, "
+"убедитесь в правильности экранирования в shell. Например, _не_ используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:244
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*\n"
+msgstr "# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:248
+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 ""
+"Как показано, команда будет работать только с bourne-оболочками. Вместо "
+"этого используйте форму, приведённую ниже, которая будет работать как с "
+"bourne-оболочкой, так и с c-оболочкой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:252
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml\\* docbook-sk\\* docbook\\[2345\\]\\?\\?-\\* docbook-4\\*\n"
+msgstr "# pkg delete -g -f docbook-xml\\* docbook-sk\\* docbook\\[2345\\]\\?\\?-\\* docbook-4\\*\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:260
+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 ""
+"Рекомендуется, чтобы строка AFFECTS содержала glob-выражение, "
+"соответствующее всем портам, затронутым записью, чтобы автоматизированные "
+"инструменты могли максимально легко её обработать. Если обновление касается "
+"всех существующих версий BIND 9, содержимое `AFFECTS` должно быть `users of "
+"dns/bind9*`, и оно _не должно_ быть `users of BIND 9`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:263
+#, no-wrap
+msgid "/usr/ports/MOVED"
+msgstr "/usr/ports/MOVED"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:269
+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:273
+#, no-wrap
+msgid "old name|new name (blank for deleted)|date of move|reason\n"
+msgstr "old name|new name (blank for deleted)|date of move|reason\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:277
+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:279
+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:281
+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:285
+msgid "Any changes must be validated with `Tools/scripts/MOVEDlint.awk`."
+msgstr ""
+"Любые изменения должны быть проверены с помощью `Tools/scripts/"
+"MOVEDlint.awk`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:287
+msgid "If using a ports directory other than [.filename]#/usr/ports#, use:"
+msgstr ""
+"Если используется каталог портов, отличный от [.filename]#/usr/ports#, "
+"следует указать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:292
+#, no-wrap
+msgid ""
+"% cd /home/user/ports\n"
+"% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk\n"
+msgstr ""
+"% cd /home/user/ports\n"
+"% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk\n"
diff --git a/documentation/content/ru/books/porters-handbook/uses/_index.adoc b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
index 3e441f697e..3f90e301f2 100644
--- a/documentation/content/ru/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
@@ -1,26 +1,27 @@
---
-title: Глава 15. Значения USES
-prev: books/porters-handbook/keeping-up
+description: 'Макросы USES упрощают объявление требований и настроек для порта FreeBSD'
next: books/porters-handbook/versions
-showBookMenu: true
-weight: 15
params:
- path: "/books/porters-handbook/uses/"
+ path: /books/porters-handbook/uses/
+prev: books/porters-handbook/keeping-up
+showBookMenu: true
+tags: ["uses", "macros", "introduction", "guide"]
+title: 'Глава 17. Использование макроса USES'
+weight: 17
---
[[uses]]
-= Значения `USES`
+= Использование макроса `USES`
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 15
+:sectnumoffset: 17
:partnums:
:source-highlighter: rouge
:experimental:
-:c-plus-plus: c++
:images-path: books/porters-handbook/
ifdef::env-beastie[]
@@ -48,17 +49,14 @@ include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[[uses-intro]]
-== An Introduction to `USES`
+== Введение в `USES`
-`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.
+Макросы `USES` упрощают объявление требований и настроек для порта. Они могут добавлять зависимости, изменять поведение при сборке, добавлять метаданные в пакеты и так далее, просто выбирая предустановленные значения.
-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 (`,`).
+Каждый раздел в этой главе описывает возможное значение для `USES`, а также его возможные аргументы. Аргументы добавляются к значению после двоеточия (`:`). Несколько аргументов разделяются запятыми (`,`).
[[uses-intro-ex1]]
-.Using Multiple Values
+.Использование нескольких значений
[example]
====
[.programlisting]
@@ -68,7 +66,7 @@ USES= bison perl
====
[[uses-intro-ex2]]
-.Adding an Argument
+.Добавление аргумента
[example]
====
[.programlisting]
@@ -78,7 +76,7 @@ USES= tar:xz
====
[[uses-intro-ex3]]
-.Adding Multiple Arguments
+.Добавление нескольких аргументов
[example]
====
[.programlisting]
@@ -88,7 +86,7 @@ USES= drupal:7,theme
====
[[uses-intro-ex4]]
-.Mixing it All Together
+.Смешивая Все Вместе
[example]
====
[.programlisting]
@@ -100,418 +98,721 @@ USES= pgsql:9.3+ cpe python:2.7,build
[[uses-7z]]
== `7z`
-Possible arguments: (none), `p7zip`, `partial`
+Возможные аргументы: (нет), `p7zip`, `partial`
-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.
+Извлечение с использованием man:7z[1] вместо man:bsdtar[1] и устанавливает `EXTRACT_SUFX=.7z`. Опция `p7zip` добавляет зависимость от `7z` из package:archivers/p7zip[], если версия из базовой системы не может извлечь файлы. `EXTRACT_SUFX` не изменяется, если используется опция `partial`, это может быть полезно, если основной дистрибутивный файл не имеет расширения [.filename]#.7z#.
[[uses-ada]]
== `ada`
-Possible arguments: (none), `5`, `6`
+Возможные аргументы: (нет), `6`, `12`, `(запуск)`
+
+Зависит от компилятора с поддержкой Ada и устанавливает `CC` соответствующим образом. По умолчанию используется `gcc6-aux` из портов.
+
+[[uses-angr]]
+== `angr`
+
+Возможные аргументы: `binaries`, `nose`
+
+Обеспечить поддержку портов, требующих https://github.com/angr/angr[платформу бинарного анализа angr].
+
+Если присутствует аргумент `binaries`, для тестирования порта требуются специальные бинарные файлы `angr`.
+
+Если присутствует аргумент `nose`, порт использует `nosetests` для цели тестирования. Этот аргумент подразумевает `USES=python:test`.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`ANGR_VERSION`::
+Версия программ проекта `angr`.
+
+`ANGR_BINARIES_TAGNAME`::
+Имя тега для бинарных файлов `angr`.
+
+`ANGR_NOSETESTS`::
+Путь к программе `nosetests`.
+
+[[uses-ansible]]
+== `ansible`
+
+Возможные аргументы: `env`, `module`, `plugin`
+
+Обеспечивает поддержку портов, зависящих от пакета package:sysutils/ansible[].
+
+Если присутствует аргумент `env`, порт не зависит от package:sysutils/ansible[], но требует установки некоторых переменных Ansible.
+
+Если присутствует аргумент `module`, то порт является модулем Ansible.
+
+Если присутствует аргумент `plugin`, то порт является плагином Ansible.
+
+Фреймворк предоставляет следующие переменные порту:
+
+`ANSIBLE_CMD`::
+Путь к программе ansible.
+
+`ANSIBLE_DOC_CMD`::
+Путь к программе ansible-doc.
+
+`ANSIBLE_RUN_DEPENDS`::
+RUN_DEPENDS с портом Ansible.
+
+`ANSIBLE_DATADIR`::
+Путь к корню структуры каталогов, где хранятся все модули и плагины Ansible.
+
+`ANSIBLE_ETCDIR`::
+Путь к каталогу etc Ansible.
+
+`ANSIBLE_PLUGINS_PREFIX`::
+Путь к директории "plugins" в `${ANSIBLE_DATADIR}`.
+`ANSIBLE_MODULESDIR`::
+Путь к каталогу для локальных модулей Ansible.
+
+`ANSIBLE_PLUGINSDIR`::
+Путь к каталогу для локальных плагинов Ansible.
+
+`ANSIBLE_PLUGIN_TYPE`::
+Тип плагина Ansible (например, "connection", "inventory" или "vars").
+
+[[uses-apache]]
+== `apache`
+
+Возможные аргументы: (нет), `2.4`, `build`, `run`, `server`
+
+Обеспечивает поддержку портов, зависящих от веб-сервера Apache.
+
+Аргумент `version` можно использовать для указания конкретной версии Apache httpd. Можно задать определённую версию (`USES=apache:2.4`), минимальную версию (`USES=apache:2.4+`) или максимальную версию (`USES=apache:-2.4`).
+
+Если указан аргумент `build`, к порту добавляется зависимость для сборки.
+
+Если указан аргумент `run`, к порту добавляется зависимость времени выполнения.
+
+Если указан аргумент `server`, это означает, что порт является серверным.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`AP_FAST_BUILD`::
+Автоматическая сборка модуля
+
+`AP_GENPLIST`::
+Автоматическое создание `PLIST` плюс добавление модуля в отключенном состоянии в [.filename]#httpd.conf# (только если нет файла `pkg-plist`)
+
+`MODULENAME`::
+Имя модуля Apache. По умолчанию: `${PORTNAME}`
+
+`SHORTMODNAME`::
+Краткое название модуля Apache. По умолчанию: `${MODULENAME:S/mod_//}`
+
+`SRC_FILE`::
+Исходный файл модуля APACHE. По умолчанию: `${MODULENAME}.c`
+
+Следующие переменные могут быть доступны для порта:
+
+`APACHE_VERSION`::
+Основная-вспомогательная версия выбранного сервера Apache, например 2.4
+
+`APACHEETCDIR`::
+Расположение каталога конфигурации Apache. По умолчанию: [.filename]#${LOCALBASE}/etc/apache24#
+
+`APACHEINCLUDEDIR`::
+Расположение include-файлов Apache. По умолчанию: [.filename]#${LOCALBASE}/include/apache24#
+
+`APACHEMODDIR`::
+Расположение модулей Apache. По умолчанию: [.filename]#${LOCALBASE}/libxexec/apache24#
+
+`APACHE_DEFAULT`::Версия Apache по умолчанию
-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.
[[uses-autoreconf]]
== `autoreconf`
-Possible arguments: (none), `build`
+Возможные аргументы: (нет), `build`
+
+Выполняет `autoreconf`. Эта команда объединяет функциональность `aclocal`, `autoconf`, `autoheader`, `automake`, `autopoint` и `libtoolize`. Каждая из этих команд применяется к [.filename]#${AUTORECONF_WRKSRC}/configure.ac# или его старому названию [.filename]#${AUTORECONF_WRKSRC}/configure.in#. Если [.filename]#configure.ac# определяет подкаталоги с их собственными [.filename]#configure.ac# с использованием `AC_CONFIG_SUBDIRS`, `autoreconf` также рекурсивно обновит их. Аргумент `:build` только добавляет зависимости времени сборки на эти инструменты, но не запускает `autoreconf`. Порт может установить `AUTORECONF_WRKSRC`, если `WRKSRC` не содержит путь к [.filename]#configure.ac#.
+
+[[uses-azurepy]]
+== `azurepy`
+
+Возможные аргументы: (отсутствуют)
-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#.
+Обеспечить поддержку портов `py-azure*`. Удаляет пространства имен `azure` и очищает общие файлы.
[[uses-blaslapack]]
== `blaslapack`
-Possible arguments: (none), `atlas`, `netlib` (default), `gotoblas`, `openblas`
+Возможные аргументы: (нет), `atlas`, `netlib` (по умолчанию), `gotoblas`, `openblas`
-Adds dependencies on Blas / Lapack libraries.
+Добавляет зависимости от библиотек Blas / Lapack.
[[uses-bdb]]
== `bdb`
-Possible arguments: (none), `48`, `5` (default), `6`
+Возможные аргументы: (отсутствуют), `5` (по умолчанию), `18`
-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:
+Добавить зависимость от библиотеки Berkeley DB. По умолчанию используется package:databases/db5[]. Также может зависеть от package:databases/db18[] при использовании аргумента `:18`. Можно объявить диапазон допустимых значений: `:5+` находит самую высокую установленную версию и возвращается к 5, если ничего другого не установлено. `INVALID_BDB_VER` можно использовать для указания версий, которые не работают с этим портом. Фреймворк предоставляет порту следующие переменные:
`BDB_LIB_NAME`::
-The name of the Berkeley DB library.
-For example, when using package:databases/db5[], it contains `db-5.3`.
+Имя библиотеки Berkeley DB. Например, при использовании package:databases/db5[] она содержит `db-5.3`.
`BDB_LIB_CXX_NAME`::
-The name of the Berkeley DBC++ library.
-For example, when using package:databases/db5[], it contains `db_cxx-5.3`.
+Название библиотеки Berkeley DBC++. Например, при использовании package:databases/db5[] она содержит `db_cxx-5.3`.
`BDB_INCLUDE_DIR`::
-The location of the Berkeley DB include directory.
-For example, when using package:databases/db5[], it will contain `${LOCALBASE}/include/db5`.
+Расположение каталога с заголовочными файлами Berkeley DB. Например, при использовании пакета package:databases/db5[], он будет содержать `${LOCALBASE}/include/db5`.
`BDB_LIB_DIR`::
-The location of the Berkeley DB library directory.
-For example, when using package:databases/db5[], it contains `${LOCALBASE}/lib`.
+Расположение каталога библиотеки Berkeley DB. Например, при использовании package:databases/db5[], он содержит `${LOCALBASE}/lib`.
`BDB_VER`::
-The detected Berkeley DB version.
-For example, if using `USES=bdb:48+` and Berkeley DB 5 is installed, it contains `5`.
+Обнаруженная версия Berkeley DB. Например, при использовании `USES=bdb:5+` и установленной Berkeley DB 18, будет содержать `18`.
[IMPORTANT]
====
-package:databases/db48[] is deprecated and unsupported.
-It must not be used by any port.
+package:databases/db48[] устарел и не поддерживается. Он не должен использоваться ни одним портом.
====
[[uses-bison]]
== `bison`
-Possible arguments: (none), `build`, `run`, `both`
+Возможные аргументы: (нет), `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.
+Использует пакет package:devel/bison[] По умолчанию, без аргументов или с аргументом `build`, подразумевается, что `bison` является зависимостью на этапе сборки, `run` — зависимостью на этапе выполнения, а `both` — зависимостью как на этапе сборки, так и на этапе выполнения.
+
+[[uses-budgie]]
+== `budgie`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку окружения рабочего стола Budgie. Используйте `USE_BUDGIE` для выбора необходимых компонентов порта. Дополнительную информацию см. в разделе crossref:special[using-budgie,Использование Budgie].
[[uses-cabal]]
== `cabal`
[IMPORTANT]
====
-Ports should not be created for Haskell libraries, see crossref:special[haskell-libs,Haskell Libraries] for more information.
+Порты не следует создавать для библиотек Haskell, подробнее см. в crossref:special[haskell-libs,Библиотеки Haskell].
====
-Possible arguments: (none), `hpack`
+Возможные аргументы: (отсутствуют), `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.
+Устанавливает значения и цели по умолчанию, используемые для сборки программного обеспечения на Haskell с помощью Cabal. Добавляется зависимость для сборки на порт компилятора Haskell (package:lang/ghc[]). Если в переменной `BUILD_DEPENDS` уже указана другая версия GHC (например, package:lang/ghc810[]), она будет использована вместо версии по умолчанию. Если указан аргумент `hpack`, добавляется зависимость для сборки на package:devel/hs-hpack[], и `hpack` вызывается на этапе конфигурации для генерации файла .cabal. Если указан аргумент `nodefault`, фреймворк не будет пытаться загрузить основной дистрибутивный файл из Hackage. Этот аргумент добавляется неявно, если присутствует `USE_GITHUB` или `USE_GITLAB`.
-The framework provides the following variables:
+Фреймворк предоставляет следующие переменные:
+
+`CABAL_REVISION`::
+Пакеты Haskell, размещённые на Hackage, могут иметь ревизии. Установите этот параметр в целочисленное значение, чтобы использовать исправленное описание пакета.
`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`].
+Если программное обеспечение использует зависимости на Haskell, перечислите их в этой переменной. Каждый элемент должен присутствовать на Hackage и быть указан в формате `имяпакета-_0.1.2_`. Зависимости также могут иметь ревизии, которые указываются после символа `_`. Поддерживается автоматическое формирование списка зависимостей, см. crossref:special[using-cabal,Сборка приложений на Haskell с помощью `cabal`].
`CABAL_FLAGS`::
-List of flags to be passed to `cabal-install` during the configuring and building stage.
-The flags are passed verbatim.
+Список флагов, передаваемых `cabal-install` на этапах настройки и сборки. Флаги передаются в исходном виде. Эта переменная обычно используется для включения или отключения флагов, объявленных в файле .cabal. Передайте `foo`, чтобы включить флаг `foo`, и `-foo`, чтобы отключить его.
-`EXECUTABLES`::
-List of executable files installed by the port.
-Default value: `${PORTNAME}`.
-Items from this list are automatically added to pkg-plist.
+`CABAL_EXECUTABLES`::
+Список исполняемых файлов, устанавливаемых портом. Значение по умолчанию: `${PORTNAME}`. Для получения списка возможных значений этой переменной обратитесь к файлу .cabal портируемого проекта. Каждое значение соответствует разделу `executable` в файле .cabal. Элементы из этого списка автоматически добавляются в pkg-plist.
`SKIP_CABAL_PLIST`::
-If defined, do not add items from `${EXECUTABLES}` to pkg-plist.
+Если определено, не добавлять элементы из `${CABAL_EXECUTABLES}` в pkg-plist.
`opt_USE_CABAL`::
-Adds items to `${USE_CABAL}` depending on `opt` option.
+Добавляет элементы в `${USE_CABAL}` в зависимости от опции `opt`.
-`opt_EXECUTABLES`::
-Adds items to `${EXECUTABLES}` depending on `opt` option.
+`opt_CABAL_EXECUTABLES`::
+Добавляет элементы в `${CABAL_EXECUTABLES}` в зависимости от опции `opt`.
`opt_CABAL_FLAGS`::
-If `opt` is enabled, append the value to `${CABAL_FLAGS}`.
-Otherwise, append `-value` to disable the flag.
+Если `opt` включён, добавить значение к `${CABAL_FLAGS}`. В противном случае добавить `-value`, чтобы отключить флаг. Обратите внимание, что это поведение немного отличается от простого `CABAL_FLAGS`, так как оно не принимает значения, начинающиеся с `-`.
+
+`CABAL_WRAPPER_SCRIPTS`::
+Подмножество `${CABAL_EXECUTABLES}`, содержащее программы на Haskell, которые будут обёрнуты в shell-скрипт, устанавливающий переменные окружения `*_datadir` перед запуском программы. Это также приводит к тому, что фактический бинарный файл Haskell устанавливается в директорию `libexec/cabal/`. Данная настройка необходима для программ на Haskell, которые устанавливают свои файлы данных в директорию `share/`.
`FOO_DATADIR_VARS`::
-For an executable named `FOO` list Haskell packages, whose data files should be accessible by the executable.
+Список дополнительных пакетов Haskell, чьи файлы данных должны быть доступны исполняемому файлу с именем `FOO`. Исполняемый файл должен быть частью `${CABAL_WRAPPER_SCRIPTS}`. Указанные пакеты Haskell не должны иметь суффикса версии.
+
+`CABAL_PROJECT`::
+Некоторые проекты на Haskell могут уже иметь файл `cabal.project`, который также создаётся фреймворком портов. Если это так, используйте эту переменную, чтобы указать, что делать с оригинальным файлом `cabal.project`. Установка этой переменной в значение `remove` приведёт к удалению оригинального файла. Установка этой переменной в значение `append` приведёт к следующему:
+. Исходный файл переместится в `cabal.project.${PORTNAME}` на этапе `extract`.
+. Исходный файл `cabal.project.${PORTNAME}` и сгенерированный `cabal.project` объединятся в один файл после этапа `patch`. Использование `append` позволяет выполнить патчинг исходного файла перед его объединением.
[[uses-cargo]]
== `cargo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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`].
+Использует Cargo для настройки, сборки и тестирования. Может применяться для портирования приложений на Rust, использующих систему сборки Cargo. Дополнительную информацию смотрите в crossref:special[using-cargo,Сборка приложений на Rust с помощью `cargo`].
[[uses-charsetfix]]
== `charsetfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Предотвращает установку файла [.filename]#charset.alias# портом. Этот файл должен устанавливаться только пакетом package:converters/libiconv[]. Переменная `CHARSETFIX_MAKEFILEIN` может быть установлена в путь относительно `WRKSRC`, если [.filename]#charset.alias# не устанавливается через [.filename]#${WRKSRC}/Makefile.in#.
+
+[[uses-cl]]
+== `cl`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставляет поддержку портов Common Lisp.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портами:
+
+`ASDF_MODULES`::
+Список модулей `ASDF` для сборки, когда установлен `FASL_TARGET` (по умолчанию `PORTNAME`)
+
+`FASL_TARGET`::
+Собрать fasl вариант порта (один из `ccl`, `clisp` или `sbcl`)
+
+`USE_ASDF`::
+Зависит от пакета package:devel/cl-asdf[]
+
+`USE_ASDF_FASL`::
+Зависит от `devel/cl-asdf-<FASL_TARGET>`
+
+`USE_CCL`::
+Зависит от пакета package:lang/ccl[]; подразумевается при `FASL_TARGET=ccl`
-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#.
+`USE_CLISP`::
+Зависит от пакета package:lang/clisp[]; подразумевается при `FASL_TARGET=clisp`
+
+`USE_SBCL`::
+Зависит от пакета package:lang/sbcl[]; подразумевается, если `FASL_TARGET=SBCL`
+
+
+Фреймворк предоставляет следующие переменные, которые могут быть прочитаны портами:
+
+`ASDF_PATHNAME`::
+Путь к исходному коду CL
+
+`ASDF_REGISTRY`::
+Путь к реестру CL, содержащему файлы asd
+
+`CCL`::
+Путь к компилятору Clozure Common Lisp
+
+`CLISP`::
+Путь к компилятору GNU Common Lisp
+
+`CL_LIBDIR_REL`::
+Каталог библиотек CL относительно `LOCALBASE` или `PREFIX`
+
+`FASL_DIR_REL`::
+Относительный путь к скомпилированным fasl-файлам; зависит от `FASL_TARGET`
+
+`FASL_PATHNAME`::
+Путь к CL fasl
+
+`LISP_EXTRA_ARG`::
+Дополнительные аргументы, используемые при сборке fasl
+
+`SBCL`::
+Путь к компилятору Steel Bank Common Lisp
[[uses-cmake]]
== `cmake`
-Possible arguments: (none), `insource`, `noninja`, `run`, `testing`
+Возможные аргументы: (отсутствуют), `insource`, `noninja`, `run`, `testing`
-Use CMake for configuring the port and generating a build system.
+Используйте CMake для настройки порта и генерации системы сборки.
-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.
+По умолчанию выполняется сборка в дереве вне исходного кода, оставляя исходные файлы в `WRKSRC` свободными от артефактов сборки. С аргументом `insource` вместо этого будет выполнена сборка в исходном коде. Этот аргумент должен быть исключением и использоваться только в случае, когда обычная сборка вне исходного кода не работает.
-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.
+По умолчанию для сборки используется Ninja (package:devel/ninja[]). В некоторых случаях это может работать некорректно. С аргументом `noninja` сборка будет использовать обычный `make`. Этот аргумент следует применять только если сборка на основе Ninja не работает.
-With the `run` argument, a run dependency is registered in addition to a build dependency.
+С аргументом `run` регистрируется зависимость во время выполнения в дополнение к зависимости при сборке.
-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.
+С аргументом `testing`, добавляется цель тестирования, использующая CTest. При запуске тестов порт будет переконфигурирован для тестирования и пересобран.
-For more information see crossref:special[using-cmake,Using `cmake`].
+Для получения дополнительной информации см. crossref:special[using-cmake,Использование `cmake`].
[[uses-compiler]]
== `compiler`
-Possible arguments: (none), `env` (default, implicit), `{c-plus-plus}17-lang`, `{c-plus-plus}14-lang`, `{c-plus-plus}11-lang`, `gcc-{c-plus-plus}11-lib`, `{c-plus-plus}11-lib`, `{c-plus-plus}0x`, `c11`, `nestedfct`, `features`
+Возможные аргументы: (нет), `env` (по умолчанию, подразумевается), `{cpp}17-lang`, `{cpp}14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, `{cpp}0x`, `c11`, `nestedfct`, `features`
-Determines which compiler to use based on any given wishes.
-Use `{c-plus-plus}17-lang` if the port needs a {c-plus-plus}17-capable compiler, `{c-plus-plus}14-lang` if the port needs a {c-plus-plus}14-capable compiler, `{c-plus-plus}11-lang` if the port needs a {c-plus-plus}11-capable compiler, `gcc-{c-plus-plus}11-lib` if the port needs the `g++` compiler with a {c-plus-plus}11 library, or `{c-plus-plus}11-lib` if the port needs a {c-plus-plus}11-ready standard library.
-If the port needs a compiler understanding {c-plus-plus}0X, C11 or nested functions, the corresponding parameters should be used.
+Определяет, какой компилятор использовать, исходя из заданных предпочтений. Используйте `{cpp}17-lang`, если порту требуется компилятор с поддержкой {cpp}17, `{cpp}14-lang`, если порту требуется компилятор с поддержкой {cpp}14, `{cpp}11-lang`, если порту требуется компилятор с поддержкой {cpp}11, `gcc-{cpp}11-lib`, если порту требуется компилятор `g++` с библиотекой {cpp}11, или `{cpp}11-lib`, если порту требуется стандартная библиотека с поддержкой {cpp}11. Если порту требуется компилятор, понимающий {cpp}0X, C11 или вложенные функции, следует использовать соответствующие параметры.
-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:
+Используйте `features` для запроса списка возможностей, поддерживаемых компилятором по умолчанию. После включения [.filename]#bsd.port.pre.mk# порт может проверить результаты с помощью следующих переменных:
-* `COMPILER_TYPE`: the default compiler on the system, either gcc or clang
-* `ALT_COMPILER_TYPE`: the alternative compiler on the system, either gcc or clang. Only set if two compilers are present in the base system.
-* `COMPILER_VERSION`: the first two digits of the version of the default compiler.
-* `ALT_COMPILER_VERSION`: the first two digits of the version of the alternative compiler, if present.
-* `CHOSEN_COMPILER_TYPE`: the chosen compiler, either gcc or clang
-* `COMPILER_FEATURES`: the features supported by the default compiler. It currently lists the {c-plus-plus} library.
+* `COMPILER_TYPE`: компилятор по умолчанию в системе, gcc или clang
+* `ALT_COMPILER_TYPE`: альтернативный компилятор в системе, gcc или clang. Устанавливается только при наличии двух компиляторов в базовой системе.
+* `COMPILER_VERSION`: первые две цифры версии компилятора по умолчанию.
+* `ALT_COMPILER_VERSION`: первые две цифры версии альтернативного компилятора, если он присутствует.
+* `CHOSEN_COMPILER_TYPE`: выбранный компилятор, gcc или clang
+* `COMPILER_FEATURES`: возможности, поддерживаемые компилятором по умолчанию. В настоящее время указана библиотека {cpp}.
[[uses-cpe]]
== `cpe`
-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.
-To add CPE information to a port, follow these steps:
+Включает информацию о Common Platform Enumeration (CPE) в манифест пакета в виде строки формата CPE 2.3. Подробности см. в https://scap.nist.gov/specifications/cpe/[спецификации CPE]. Чтобы добавить информацию CPE в порт, выполните следующие шаги:
[.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._
-. 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`.
-. If the version field (third field, defaults to `PORTVERSION`) is incorrect, define `CPE_VERSION`.
-. If the update field (fourth field, defaults to empty) is incorrect, define `CPE_UPDATE`.
-. If it is still not correct, check [.filename]#Mk/Uses/cpe.mk# for additional details, or contact the {ports-secteam}.
-. 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.
-. _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`.
+. Поищите официальную запись CPE для программного продукта, используя либо https://web.nvd.nist.gov/view/cpe/search[поисковую систему CPE] от NVD, либо https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz[официальный словарь CPE] (предупреждение: очень большой XML-файл). _Никогда не создавайте данные CPE самостоятельно._
+. Добавьте `cpe` в `USES` и сравните результат выполнения `make -V CPE_STR` с записью в словаре CPE. Продолжайте шаг за шагом, пока результат `make -V CPE_STR` не станет корректным.
+. Если название продукта (второе поле, по умолчанию `PORTNAME`) указано неверно, определите `CPE_PRODUCT`.
+. Если название производителя (первое поле, по умолчанию `CPE_PRODUCT`) указано неверно, определите `CPE_VENDOR`.
+. Если поле версии (третье поле, по умолчанию `PORTVERSION`) указано неверно, определите `CPE_VERSION`.
+. Если поле обновления (четвертое поле, по умолчанию пустое) указано неверно, определите `CPE_UPDATE`.
+. Если это всё ещё неверно, проверьте файл [.filename]#Mk/Uses/cpe.mk# для получения дополнительной информации или свяжитесь с {ports-secteam}.
+. Извлекайте как можно больше информации для имени CPE из существующих переменных, таких как `PORTNAME` и `PORTVERSION`. Используйте модификаторы переменных для извлечения соответствующих частей из этих переменных, вместо того чтобы жестко прописывать имя.
+. _Всегда_ выполняйте `make -V CPE_STR` и проверяйте вывод перед коммитом любых изменений, затрагивающих `PORTNAME`, `PORTVERSION` или любые другие переменные, используемые для формирования `CPE_STR`.
[[uses-cran]]
== `cran`
-Possible arguments: (none), `auto-plist`, `compiles`
+Возможные аргументы: (нет), `auto-plist`, `compiles`
-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.
+Использует Comprehensive R Archive Network. Укажите `auto-plist` для автоматического создания [.filename]#pkg-plist#. Укажите `compiles`, если порт содержит код, который необходимо компилировать.
[[uses-desktop-file-utils]]
== `desktop-file-utils`
-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.
+Использует update-desktop-database из пакета package:devel/desktop-file-utils[]. Дополнительный шаг post-install будет выполнен без вмешательства в уже существующие шаги post-install в [.filename]#Makefile# порта. Строка с crossref:plist[plist-keywords-desktop-file-utils,`@desktop-file-utils`] будет добавлена в plist. Используйте этот макрос только если порт предоставляет файл `.desktop`, содержащий запись `MimeType`.
[[uses-desthack]]
== `desthack`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Changes the behavior of GNU configure to properly support `DESTDIR` in case the original software does not.
+Изменяет поведение GNU configure для корректной поддержки `DESTDIR` в случае, если исходное программное обеспечение этого не делает.
[[uses-display]]
== `display`
-Possible arguments: (none), _ARGS_
+Возможные аргументы: (отсутствуют), _ARGS_
-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.
+Настраивает виртуальное окружение для отображения. Если переменная окружения `DISPLAY` не установлена, то Xvfb добавляется как зависимость при сборке, а `CONFIGURE_ENV` расширяется с указанием номера порта текущего запущенного экземпляра Xvfb. Параметр _ARGS_ по умолчанию имеет значение `install` и управляет фазой, вокруг которой запускается и останавливается виртуальный дисплей.
[[uses-dos2unix]]
== `dos2unix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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.
+Порт содержит файлы с символами конца строки в формате DOS, которые необходимо преобразовать. Несколько переменных могут быть установлены для контроля, какие файлы будут преобразованы. По умолчанию преобразуются _все_ файлы, включая бинарные. См. crossref:slow-porting[slow-patch-automatic-replacements,Простые автоматические замены] для примеров.
-* `DOS2UNIX_REGEX`: match file names based on a regular expression.
-* `DOS2UNIX_FILES`: match literal file names.
-* `DOS2UNIX_GLOB`: match file names based on a glob pattern.
-* `DOS2UNIX_WRKSRC`: the directory from which to start the conversions. Defaults to `${WRKSRC}`.
+* `DOS2UNIX_REGEX`: сопоставлять имена файлов на основе регулярного выражения.
+* `DOS2UNIX_FILES`: соответствуют точным именам файлов.
+* `DOS2UNIX_GLOB`: сопоставлять имена файлов на основе шаблона файлов оболочки.
+* `DOS2UNIX_WRKSRC`: каталог, с которого начинать преобразования. По умолчанию `${WRKSRC}`.
[[uses-drupal]]
== `drupal`
-Possible arguments: `7`, `module`, `theme`
+Возможные аргументы: `7`, `module`, `theme`
+
+Автоматизирует установку порта, который является темой или модулем Drupal. Использовать с версией Drupal, которую ожидает порт. Например, `USES=drupal:7,module` означает, что этот порт создает модуль Drupal 7. Тему Drupal 7 можно указать с помощью `USES=drupal:7,theme`.
+
+[[uses-ebur128]]
+== `ebur128`
-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.
-A Drupal 7 theme can be specified with `USES=drupal:7,theme`.
+Возможные аргументы: (нет), `build`, `lib`, `run`, `test`
+
+Добавляет зависимость от пакета package:audio/ebur128[]. Позволяет прозрачно зависеть от вариантов `rust` или `legacy`, используя `DEFAULT_VERSIONS` в [.filename]#make.conf#. Например, для использования устаревшей версии укажите `DEFAULT_VERSIONS+=ebur128=legacy`
+
+Без аргументов поведение аналогично случаю с предоставлением аргумента `lib`. Остальные аргументы указывают соответствующую категорию зависимости.
[[uses-eigen]]
== `eigen`
-Possible arguments: 2, 3, build (default), run
+Возможные аргументы: 2, 3, build (по умолчанию), run
+
+Добавить зависимость от пакета package:math/eigen[].
+
+[[uses-elextronfix]]
+== `electronfix`
+
+Возможные аргументы: `31`, `32`, `33`
+
+Предоставить поддержку для простого портирования Electron-приложений, распространяемых в бинарной форме. Добавляет зависимость на этапах сборки и выполнения от package:devel/electron31[], package:devel/electron32[] или package:devel/electron33[] в зависимости от используемого аргумента.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портами:
+
+`ELECTRONFIX_SYMLINK_FILES`::
+Список файлов для создания символьных ссылок из дистрибутива Electron.
-Add dependency on package:math/eigen[].
+`ELECTRONFIX_MAIN_EXECUTABLE`::
+Имя файла основного исполняемого файла, который будет заменен оригинальным бинарным файлом Electron.
+
+
+[[uses-elfctl]]
+== `elfctl`
+
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `stage`
+
+Установите управляющие заметки функций ELF-бинарных файлов, задав `ELF_FEATURES`.
+
+Когда не указан аргумент или указан аргумент `build`, операции выполняются над бинарными файлами в `BUILD_WRKSRC`, а файлы, перечисленные в `ELF_FEATURES`, указываются относительно `BUILD_WRKSRC`. Когда указан аргумент `stage`, операции выполняются над бинарными файлами в `STAGEDIR`, а файлы, перечисленные в `ELF_FEATURES`, указываются относительно `STAGEDIR`.
+
+[[uses-elfct-ex1]]
+.Uses=elfctl
+[example]
+====
+[.programlisting]
+....
+ELF_FEATURES= featurelist:path/to/file1 \
+ featurelist:path/to/file2
+....
+
+====
+
+Формат `featurelist` описан в man:elfctl[1].
+
+[[uses-elixir]]
+== `elixir`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для портов, использующих package:lang/elixir[]. Добавляет зависимость во время сборки и выполнения на package:lang/elixir[].
+
+Предоставляемые фреймворком переменные:
+
+`ELIXIR_APP_NAME`::
+Название приложения Elixir, как оно установлено в каталоге lib Elixir
+`ELIXIR_LIB_ROOT`::
+Путь к библиотекам Elixir по умолчанию
+`ELIXIR_APP_ROOT`::
+Корневая директория для этого приложения Elixir
+`ELIXIR_HIDDEN`::
+Приложения, которые необходимо скрыть из пути выполнения кода; обычно `${PORTNAME}`
+`ELIXIR_LOCALE`::
+Локаль UTF-8, которая будет использоваться Elixir во время сборки (подойдет любая локаль UTF-8)
+`MIX_CMD`::
+Команда `mix`
+`MIX_COMPILE`::
+Команда `mix`, используемая для компиляции приложения на Elixir
+`MIX_REWRITE`::
+Автоматически заменять зависимости Mix на пути к коду
+`MIX_BUILD_DEPS`::
+Список `BUILD_DEPENDS` в формате категория/имя_порта (часто упоминаемый как "deps" в Erlang и Elixir)
+`MIX_RUN_DEPS`::
+Список `RUN_DEPENDS` в формате категория/имя порта
+`MIX_DOC_DIRS`::
+Дополнительные каталоги документации для установки в `DOCSDIR`
+`MIX_DOC_FILES`::
+Дополнительные файлы документации для установки в `DOCSDIR` (обычно README.md)
+`MIX_ENV`::
+Окружение для сборки Mix (в том же формате, что и `MAKE_ENV`)
+`MIX_ENV_NAME`::
+Имя среды сборки Mix, обычно "prod"
+`MIX_BUILD_NAME`::
+Имя выходного файла сборки в _build/, обычно `${MIX_ENV_NAME}`
+`MIX_TARGET`::
+Имя цели Mix, обычно "compile"
+`MIX_EXTRA_APPS`::
+Список подприложений для сборки, если имеются
+`MIX_EXTRA_DIRS`::
+Список дополнительных каталогов для установки в `ELIXIR_APP_ROOT`
+`MIX_EXTRA_FILES`::
+Список дополнительных файлов для установки в `ELIXIR_APP_ROOT`
+
+[[uses-emacs]]
+== `emacs`
+
+Возможные аргументы: (нет) (по умолчанию), `build`, `run`, `noflavors`
+
+Предоставляет поддержку для портов, требующих Emacs. Аргумент `build` создает зависимость сборки от Emacs. Аргумент `run` создает зависимость выполнения от Emacs. Если оба аргумента `build` и `run` отсутствуют, создаются зависимости сборки и выполнения от Emacs. Аргумент `noflavors` запрещает флейворы и подразумевается, если нет зависимости выполнения от Emacs.
+
+Стандартный вариант Emacs для портов с `USES=emacs` можно определить в [.filename]#make.conf#. Например, для варианта `nox` используйте `DEFAULT_VERSIONS+= emacs=nox`. Допустимые флейворы: `full`, `canna`, `nox`, `wayland`, `devel_full`, `devel_nox`.
+
+Переменные, которые могут быть установлены портами:
+
+`EMACS_FLAVORS_EXCLUDE`::
+НЕ собирать эти флейворы Emacs. Если `EMACS_FLAVORS_EXCLUDE` не определена и:
+
+* существует зависимость во время выполнения от Emacs
+* аргумент noflavors не указан
+
++
+то предполагаются все допустимые флейворы Emacs.
+
+`EMACS_NO_DEPENDS`::
+НЕ добавлять зависимости сборки или выполнения от Emacs. Это предотвратит создание вариантов, и никакие файлы байт-кода не будут сгенерированы как часть пакета.
+
+Переменные, которые могут быть прочитаны портами:
+
+`EMACS_CMD`::
+Команда Emacs с полным путём (например, [.filename]#/usr/local/bin/emacs-30.1#)
+
+`EMACS_FLAVOR`::
+Используется для зависимостей (например, `BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR}`)
+
+`EMACS_LIBDIR`::
+Каталог библиотек Emacs без `${PREFIX}` (например, [.filename]#share/emacs#)
+
+`EMACS_LIBDIR_WITH_VER`::
+Каталог библиотеки без `${PREFIX}`, включая версию (например, [.filename]#share/emacs/30.1#)
+
+`EMACS_MAJOR_VER`::
+Основная версия Emacs (например, 30)
+
+`EMACS_PKGNAMESUFFIX`::
+`PKGNAMESUFFIX` для различия вариантов Emacs
+
+`EMACS_SITE_LISPDIR`::
+Каталог site-lisp Emacs без `${PREFIX}` (например, [.filename]#share/emacs/site-lisp#)
+
+`EMACS_VER`::
+Версия Emacs (например, 30.1)
+
+`EMACS_VERSION_SITE_LISPDIR`::
+Каталог site-lisp Emacs, включая номер версии (например, [.filename]#share/emacs/30.1/site-lisp#)
+
+[[uses-erlang]]
+== `erlang`
+
+Возможные аргументы: (нет), `enc`, `rebar`, `rebar3`
+
+Добавляет зависимость на время сборки и выполнения от package:lang/erlang[]. В зависимости от аргумента, добавляет дополнительные зависимости для сборки. `enc` добавляет зависимость от package:devel/erlang-native-compiler[], `rebar` добавляет зависимость от package:devel/rebar[], а `rebar3` добавляет зависимость от package:devel/rebar3[].
+
+В дополнение, следующие переменные доступны для порта:
+
+* `ERL_APP_NAME`: Имя приложения Erlang, как оно установлено в каталоге lib Erlang (без указания версии)
+* `ERL_APP_ROOT`: Корневой каталог для этого приложения Erlang
+* `REBAR_CMD`: Путь к команде "rebar"
+* `REBAR3_CMD`: Путь к команде "rebar3"
+* `REBAR_PROFILE`: Профиль Rebar
+* `REBAR_TARGETS`: Список целей Rebar (обычно compile, возможно escriptize)
+* `ERL_BUILD_NAME`: Имя сборки для rebar3
+* `ERL_BUILD_DEPS`: Список BUILD_DEPENDS в формате категория/имя_порта
+* `ERL_RUN_DEPS`: Список RUN_DEPENDS в формате категория/имя_порта
+* `ERL_DOCS`: Список файлов и каталогов документации
[[uses-fakeroot]]
== `fakeroot`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Changes some default behavior of build systems to allow installing as a user.
-See https://wiki.debian.org/FakeRoot[] for more information on `fakeroot`.
+Изменяет некоторые стандартные поведения систем сборки для разрешения установки от имени пользователя. Дополнительную информацию о `fakeroot` можно найти на https://wiki.debian.org/FakeRoot[].
[[uses-fam]]
== `fam`
-Possible arguments: (none), `fam`, `gamin`
+Возможные аргументы: (нет), `fam`, `gamin`
-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.
+Использует монитор изменений файлов (FAM — File Alteration Monitor) как зависимость от библиотеки, либо package:devel/fam[], либо package:devel/gamin[]. Конечные пользователи могут задать WITH_FAM_SYSTEM, чтобы указать свои предпочтения.
[[uses-firebird]]
== `firebird`
-Possible arguments: (none), `25`
+Возможные аргументы: (отсутствуют), `25`
-Add a dependency to the client library of the Firebird database.
+Добавить зависимость от клиентской библиотеке базы данных Firebird.
[[uses-fonts]]
== `fonts`
-Possible arguments: (none), `fc`, `fcfontsdir` (default), `fontsdir`, `none`
+Возможные аргументы: (отсутствуют), `fc`, `fontsdir` (по умолчанию), `none`
-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-fcfontsdir,@fcfontsdir] ${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`
+Добавляет зависимость во время выполнения на инструменты, необходимые для регистрации шрифтов. В зависимости от аргумента добавляет строку `crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}`, строку `crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` или не добавляет строку, если аргумент `none`, в plist. `FONTSDIR` по умолчанию имеет значение [.filename]#${PREFIX}/share/fonts/${FONTNAME}#, а `FONTNAME` — `${PORTNAME}`. Добавляет `FONTSDIR` в `PLIST_SUB` и `SUB_LIST`
[[uses-fortran]]
== `fortran`
-Possible arguments: `gcc` (default)
+Возможные аргументы: `gcc` (по умолчанию)
+
+Использует компилятор GNU Fortran.
-Uses the GNU Fortran compiler.
+[[uses-fpc]]
+== `fpc`
+
+Возможные аргументы: (нет), `run`
+
+Обеспечить поддержку портов на основе Free Pascal. Установит компилятор Free Pascal и модули.
+
+Добавляет зависимость сборки от package:lang/fpc[].
+
+Если указан аргумент `run`, также добавляется зависимость запуска.
[[uses-fuse]]
== `fuse`
-Possible arguments: `2` (default), `3`
+Возможные аргументы: `2` (по умолчанию), `3`
-The port will depend on the FUSE library and handle the dependency on the kernel module depending on the version of FreeBSD.
+Порт будет зависеть от библиотеки FUSE и обрабатывать зависимость от модуля ядра в зависимости от версии FreeBSD.
[[uses-gem]]
== `gem`
-Possible arguments: (none), `noautoplist`
+Возможные аргументы: (отсутствуют), `noautoplist`
+
+Обработка сборки с RubyGems. Если используется `noautoplist`, список упаковки не генерируется автоматически.
-Handle building with RubyGems.
-If `noautoplist` is used, the packing list is not generated automatically.
+Это подразумевает `USES=ruby`.
[[uses-gettext]]
== `gettext`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Deprecated.
-Will include both <<uses-gettext-runtime,`gettext-runtime`>> and <<uses-gettext-tools,`gettext-tools`>>.
+Устарело. Будет включать как crossref:uses[uses-gettext-runtime,`gettext-runtime`], так и crossref:uses[uses-gettext-tools,`gettext-tools`].
[[uses-gettext-runtime]]
== `gettext-runtime`
-Possible arguments: (none), `lib` (default), `build`, `run`
+Возможные аргументы: (отсутствуют), `lib` (по умолчанию), `build`, `run`
-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#.
+Использует пакет package:devel/gettext-runtime[]. По умолчанию, без аргументов или с аргументом `lib`, подразумевает зависимость от библиотеки [.filename]#libintl.so#. Аргументы `build` и `run` подразумевают, соответственно, зависимость во время сборки и во время выполнения от [.filename]#gettext#.
[[uses-gettext-tools]]
== `gettext-tools`
-Possible arguments: (none), `build` (default), `run`
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`
-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.
+Использует пакет package:devel/gettext-tools[]. По умолчанию, без аргумента или с аргументом `build`, регистрируется зависимость во время сборки от [.filename]#msgfmt#. С аргументом `run` регистрируется зависимость во время выполнения.
[[uses-ghostscript]]
== `ghostscript`
-Possible arguments: _X_, `build`, `run`, `nox11`
+Возможные аргументы: _X_, `build`, `run`, `nox11`
-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.
+Можно указать конкретную версию _X_. Доступные версии: `7`, `8`, `9` и `agpl` (по умолчанию). `nox11` указывает, что требуется версия порта `-nox11`. `build` и `run` добавляют зависимости на Ghostscript во время сборки и выполнения соответственно. По умолчанию добавляются зависимости как на сборку, так и на выполнение.
[[uses-gl]]
== `gl`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on GL components.
-The components should be listed in `USE_GL`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов GL. Компоненты должны быть перечислены в `USE_GL`. Доступные компоненты:
`egl`::
-add a library dependency on [.filename]#libEGL.so# from package:graphics/libglvnd[]
+добавить зависимость от библиотеки [.filename]#libEGL.so# из пакета package:graphics/libglvnd[]
`gbm`::
-Add a library dependency on [.filename]#libgbm.so# from package:graphics/mesa-libs[]
+Добавить зависимость от библиотеки [.filename]#libgbm.so# из пакета package:graphics/mesa-libs[]
`gl`::
-Add a library dependency on [.filename]#libGL.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libGL.so# из пакета package:graphics/libglvnd[]
`glesv2`::
-Add a library dependency on [.filename]#libGLESv2.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libGLESv2.so# из пакета package:graphics/libglvnd[]
`glew`::
-Add a library dependency on [.filename]#libGLEW.so# from package:graphics/glew[]
+Добавить зависимость от библиотеки [.filename]#libGLEW.so# из пакета package:graphics/glew[]
`glu`::
-Add a library dependency on [.filename]#libGLU.so# from package:graphics/libGLU[]
+Добавить зависимость от библиотеки [.filename]#libGLU.so# из package:graphics/libGLU[]
`glut`::
-Add a library dependency on [.filename]#libglut.so# from package:graphics/freeglut[]
+Добавить зависимость от библиотеки [.filename]#libglut.so# из package:graphics/freeglut[]
`opengl`::
-Add a library dependency on [.filename]#libOpenGL.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libOpenGL.so# из package:graphics/libglvnd[]
[[uses-gmake]]
== `gmake`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Uses package:devel/gmake[] as a build-time dependency and sets up the environment to use `gmake` as the default `make` for the build.
+Использует пакет package:devel/gmake[] как зависимость во время сборки и настраивает окружение для использования `gmake` в качестве стандартного `make` при сборке.
[[uses-gnome]]
== `gnome`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on GNOME components.
-The components should be listed in `USE_GNOME`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов GNOME. Компоненты должны быть перечислены в `USE_GNOME`. Доступные компоненты:
* `atk`
* `atkmm`
@@ -529,6 +830,7 @@ The available components are:
* `glibmm`
* `gnomecontrolcenter3`
* `gnomedesktop3`
+* `gnomedesktop4`
* `gnomedocutils`
* `gnomemenus3`
* `gnomemimedata`
@@ -595,8 +897,7 @@ The available components are:
* `vte`
* `vte3`
-The default dependency is build- and run-time, it can be changed with `:build` or `:run`.
-For example:
+Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с помощью `:build` или `:run`. Например:
[.programlisting]
....
@@ -604,105 +905,79 @@ USES= gnome
USE_GNOME= gnomemenus3:build intlhack
....
-See crossref:special[using-gnome,Using GNOME] for more information.
+См. crossref:special[using-gnome,Использование GNOME] для получения дополнительной информации.
[[uses-go]]
== `go`
[IMPORTANT]
====
-Ports should not be created for Go libs, see crossref:special[go-libs,Go Libraries] for more information.
+Порты не следует создавать для библиотек Go, дополнительную информацию см. в crossref:special[go-libs,Библиотеки Go].
====
-Possible arguments: (none), `modules`, `no_targets`, `run`
+Возможные аргументы: (нет), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, `run`
-Sets default values and targets used to build Go software.
-A build dependency on the Go compiler port selected via `GO_PORT` is added.
-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 `post-extract` and `do-{build,install,test}` targets.
-`run` will also add a run dependency on what is in `GO_PORT`.
+Устанавливает значения и цели по умолчанию, используемые для сборки ПО на Go. Добавляется зависимость сборки от порта компилятора Go, сопровождающие порта могут установить требуемую версию. По умолчанию сборка выполняется в режиме GOPATH. Если ПО на Go использует модули, режим с поддержкой модулей можно включить с помощью аргумента `modules`. `no_targets` настроит окружение сборки, как `GO_ENV`, `GO_BUILDFLAGS`, но пропустит создание целей извлечения (extract) и сборки (build). `run` также добавит зависимость выполнения от порта компилятора Go.
-The build process is controlled by several variables:
+Процесс сборки контролируется несколькими переменными:
`GO_MODULE`::
-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.
+Имя модуля приложения, указанное директивой `module` в `go.mod`. В большинстве случаев это единственная необходимая переменная для портов, использующих модули Go.
`GO_PKGNAME`::
-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.
+Имя пакета Go при сборке в режиме GOPATH. Это каталог, который будет создан в `${GOPATH}/src`. Если не задано явно и присутствует `GH_SUBDIR` или `GL_SUBDIR`, то `GO_PKGNAME` будет выведено из них. Не требуется при сборке в режиме с поддержкой модулей.
`GO_TARGET`::
-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}`.
+Пакеты для сборки. Значение по умолчанию — `${GO_PKGNAME}`. `GO_TARGET` также может быть кортежем в формате `package:path`, где path может быть либо простым именем файла, либо полным путём, начинающимся с `${PREFIX}`.
`GO_TESTTARGET`::
-The packages to test.
-The default value is `./...` (the current package and all subpackages).
+Пакеты для тестирования. Значение по умолчанию — `./...` (текущий пакет и все подпакеты).
`CGO_CFLAGS`::
-Additional `CFLAGS` values to be passed to the C compiler by `go`.
+Дополнительные значения `CFLAGS`, передаваемые компилятору C с помощью `go`.
`CGO_LDFLAGS`::
-Additional `LDFLAGS` values to be passed to the C compiler by `go`.
+Дополнительные значения `LDFLAGS`, передаваемые компилятору C через `go`.
`GO_BUILDFLAGS`::
-Additional build arguments to be passed to `go build`.
+Дополнительные аргументы сборки, передаваемые в `go build`.
`GO_TESTFLAGS`::
-Additional build arguments to be passed to `go test`.
+Дополнительные аргументы сборки, передаваемые в `go test`.
-`GO_PORT`::
-The Go compiler port to use.
-By default this is package:lang/go[] but can be set to package:lang/go-devel[] in `make.conf` for testing with future Go versions.
-+
-[WARNING]
-====
-This variable must not be set by individual ports!
-====
-
-See crossref:special[using-go,Building Go Applications] for usage examples.
+См. crossref:special[using-go,Сборка приложений на Go] для примеров использования.
[[uses-gperf]]
== `gperf`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Add a buildtime dependency on package:devel/gperf[] if `gperf` is not present in the base system.
+Добавить зависимость во время сборки на package:devel/gperf[], если `gperf` отсутствует в базовой системе.
[[uses-grantlee]]
== `grantlee`
-Possible arguments: `5`, `selfbuild`
+Возможные аргументы: `5`, `selfbuild`
-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.
+Обработать зависимость от Grantlee. Указать `5` для зависимости от версии на основе Qt5, package:devel/grantlee5[]. `selfbuild` используется внутри package:devel/grantlee5[] для получения номеров их версий.
[[uses-groff]]
== `groff`
-Possible arguments: `build`, `run`, `both`
+Возможные аргументы: `build`, `run`, `both`
-Registers a dependency on package:textproc/groff[] if not present in the base system.
+Регистрирует зависимость от package:textproc/groff[], если пакет отсутствует в базовой системе.
[[uses-gssapi]]
== `gssapi`
-Possible arguments: (none), `base` (default), `heimdal`, `mit`, `flags`, `bootstrap`
+Возможные аргументы: (отсутствуют), `base` (по умолчанию), `heimdal`, `mit`, `flags`, `bootstrap`
-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[].
+Обрабатывает зависимости, необходимые для использования GSS-API. Доступны только библиотеки, предоставляющие механизм Kerberos. По умолчанию (или при значении `base`) используется библиотека GSS-API из базовой системы. Также можно установить значение `heimdal` для использования package:security/heimdal[] или `mit` для использования package:security/krb5[].
-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.
+Если локальная установка Kerberos не находится в `LOCALBASE`, установите `HEIMDAL_HOME` (для `heimdal`) или `KRB5_HOME` (для `krb5`) на каталог установки Kerberos.
-These variables are exported for the ports to use:
+Эти переменные экспортируются для использования портами:
* `GSSAPIBASEDIR`
* `GSSAPICPPFLAGS`
@@ -712,14 +987,12 @@ These variables are exported for the ports to use:
* `GSSAPILIBS`
* `GSSAPI_CONFIGURE_ARGS`
-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`.
+Опция `flags` может быть указана вместе с `base`, `heimdal` или `mit` для автоматического добавления `GSSAPICPPFLAGS`, `GSSAPILDFLAGS` и `GSSAPILIBS` в `CFLAGS`, `LDFLAGS` и `LDADD` соответственно. Например, используйте `base,flags`.
-The `bootstrap` option is a special prefix only for use by package:security/krb5[] and package:security/heimdal[].
-For example, use `bootstrap,mit`.
+Опция `bootstrap` — это специальный префикс, предназначенный только для использования в package:security/krb5[] и package:security/heimdal[]. Например, используйте `bootstrap,mit`.
[[uses-gssapi-ex1]]
-.Typical Use
+.Типичное использование
[example]
====
[.programlisting]
@@ -738,98 +1011,375 @@ GSSAPI_NONE_CONFIGURE_ON= --without-gssapi
====
+[[uses-gstreamer]]
+== `gstreamer`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставляет простой способ зависимости от компонентов GStreamer. Компоненты должны быть перечислены в `USE_GSTREAMER`. Доступные компоненты:
+
+* `a52dec`
+* `aalib`
+* `amrnb`
+* `amrwbdec`
+* `aom`
+* `assrender`
+* `bad`
+* `bs2b`
+* `cairo`
+* `cdio`
+* `cdparanoia`
+* `chromaprint`
+* `curl`
+* `dash`
+* `dtls`
+* `dts`
+* `dv`
+* `dvd`
+* `dvdread`
+* `editing-services`
+* `faac`
+* `faad`
+* `flac`
+* `flite`
+* `gdkpixbuf`
+* `gl`
+* `gme`
+* `gnonlin`
+* `good`
+* `gsm`
+* `gtk4`
+* `gtk`
+* `hal`
+* `hls`
+* `jack`
+* `jpeg`
+* `kate`
+* `kms`
+* `ladspa`
+* `lame`
+* `libav`
+* `libcaca`
+* `libde265`
+* `libmms`
+* `libvisual`
+* `lv2`
+* `mm`
+* `modplug`
+* `mpeg2dec`
+* `mpeg2enc`
+* `mpg123`
+* `mplex`
+* `musepack`
+* `neon`
+* `ogg`
+* `opencv`
+* `openexr`
+* `openh264`
+* `openjpeg`
+* `openmpt`
+* `opus`
+* `pango`
+* `png`
+* `pulse`
+* `qt`
+* `resindvd`
+* `rsvg`
+* `rtmp`
+* `shout2`
+* `sidplay`
+* `smoothstreaming`
+* `sndfile`
+* `sndio`
+* `soundtouch`
+* `soup`
+* `spandsp`
+* `speex`
+* `srtp`
+* `taglib`
+* `theora`
+* `ttml`
+* `twolame`
+* `ugly`
+* `v4l2`
+* `vorbis`
+* `vpx`
+* `vulkan`
+* `wavpack`
+* `webp`
+* `webrtcdsp`
+* `x264`
+* `x265`
+* `x`
+* `ximagesrc`
+* `zbar`
+
+[[uses-guile]]
+== `guile`
+
+Возможные аргументы: (нет), `_X.Y_`, `flavors`, `build`, `run`, `alias`, `conflicts`
+
+Добавляет зависимость от Guile. По умолчанию это зависимость от соответствующей библиотеки `libguile*.so`, если не переопределено опциями `build` и/или `run`. Опция `alias` настраивает `BINARY_ALIAS` соответствующим образом (см. crossref:makefiles[binary-alias,Использование `BINARY_ALIAS`]).
+
+Версия по умолчанию устанавливается с помощью обычного механизма `DEFAULT_VERSIONS`; если версия по умолчанию не входит в список указанных версий, то используется последняя доступная версия из списка.
+
+Приложения, использующие Guile, обычно собираются только для одной версии Guile. Однако модули расширений или библиотек должны использовать опцию `flavors` для сборки с несколькими флейворами.
+
+Для получения дополнительной информации см. crossref:special[using-guile,Использование Guile].
+
[[uses-horde]]
== `horde`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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.
+Добавить зависимости времени сборки и выполнения для package:devel/pear-channel-horde[]. Другие зависимости Horde можно добавить с помощью `USE_HORDE_BUILD` и `USE_HORDE_RUN`. Дополнительную информацию см. в разделе crossref:special[php-horde,Модули Horde].
[[uses-iconv]]
== `iconv`
-Possible arguments: (none), `lib`, `build`, `patch`, `translit`, `wchar_t`
+Возможные аргументы: (нет), `lib`, `build`, `patch`, `translit`, `wchar_t`
-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`].
+Использует функции `iconv`, либо из порта package:converters/libiconv[] как зависимость на этапе сборки и выполнения, либо из базовой системы. По умолчанию, без аргументов или с аргументом `lib`, подразумевает `iconv` с зависимостями на этапе сборки и выполнения. `build` подразумевает зависимость на этапе сборки, а `patch` — на этапе патчинга. Если порт использует расширения `WCHAR_T` или `//TRANSLIT` для `iconv`, добавьте соответствующие аргументы, чтобы использовалась правильная версия `iconv`. Для получения дополнительной информации см. crossref:special[using-iconv,Использование `iconv`].
[[uses-imake]]
== `imake`
-Possible arguments: (none), `env`, `notall`, `noman`
+Возможные аргументы: (нет), `env`, `notall`, `noman`
+
+Добавить package:devel/imake[] как зависимость на этапе сборки и выполнить `xmkmf -a` на этапе `configure`. Если указан аргумент `env`, цель `configure` не устанавливается. Если флаг `-a` вызывает проблемы для порта, добавьте аргумент `notall`. Если `xmkmf` не генерирует цель `install.man`, добавьте аргумент `noman`.
+
+[[uses-java]]
+== `java`
+
+Возможные аргументы: (нет), `ant`, `build`, `extract`, `run`
+
+По умолчанию используется `USES=java:build,run`, если аргументы не предоставлены и `NO_BUILD` не определен. Если `NO_BUILD` определен, используется `USES=java:run`. Если указан аргумент `ant`, порт использует Apache Ant. Если указан аргумент `build`, порт JDK добавляется в зависимости сборки. Если указан аргумент `extract`, порт JDK добавляется в зависимости извлечения. Если указан аргумент `run`, порт JDK добавляется в зависимости выполнения.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`JAVA_VERSION`::
+Список подходящих версий Java для порта, разделенных пробелами. Необязательный символ `\+` позволяет указать диапазон версий. (допустимые значения `8[+]`, `11[\+]`, `17[+]`, `18[\+]`, `19[+]`, `20[\+]`, `21[+]`, `22[\+]`, `22[+]`)
+
+`JAVA_OS`::
+Список поддерживаемых операционных систем для порта JDK, разделённых пробелами. (допустимые значения: `native`, `linux`)
+
+`JAVA_VENDOR`::
+Список подходящих поставщиков портов JDK для порта, разделенных пробелами. (допустимые значения: `openjdk`, `oracle`)
+
+Фреймворк предоставляет следующие переменные для чтения портом:
+
+`JAVA_PORT`::
+Имя порта JDK. (например, 'java/openjdk8')
+
+`JAVA_PORT_VERSION`::
+Версия порта JDK. (например, '8')
+
+`JAVA_PORT_OS`::
+Используемая операционная система для порта JDK. (например, 'linux')
+
+`JAVA_PORT_VENDOR`::
+Поставщик порта JDK. (например, 'openjdk')
+
+`JAVA_PORT_OS_DESCRIPTION`::
+Описание операционной системы, используемой портом JDK. (например, 'Linux')
+
+`JAVA_PORT_VENDOR_DESCRIPTION`::
+Описание поставщика порта JDK. (например, 'OpenJDK BSD Porting Team')
+
+`JAVA_HOME`::
+Путь к каталогу установки JDK. (например, [.filename]#/usr/local/openjdk8#)
+
+`JAVAC`::
+Путь к используемому компилятору Java. (например, [.filename]#/usr/local/openjdk8/bin/javac# или [.filename]#/usr/local/bin/javac#)
+
+`JAR`::
+Путь к используемому инструменту JAR. (например, [.filename]#/usr/local/openjdk8/bin/jar# или [.filename]#/usr/local/bin/fastjar#)
+
+`APPLETVIEWER`::
+Путь к утилите appletviewer. (например, [.filename]#/usr/local/linux-jdk1.8.0/bin/appletviewer#)
+
+`JAVA`::
+Путь к исполняемому файлу `java`. Используется для запуска программ на Java. (например, [.filename]#/usr/local/openjdk8/bin/java#)
+
+`JAVADOC`::
+Путь к программе `javadoc`.
+
+`JAVAH`::
+Путь к программе `javah`.
+
+`JAVAP`::
+Путь к программе `javap`.
+
+`JAVA_KEYTOOL`::
+Путь к утилите `keytool`.
+
+`JAVA_N2A`::
+Путь к инструменту `native2ascii`.
+
+`JAVA_POLICYTOOL`::
+Путь к программе `policytool`.
+
+`JAVA_SERIALVER`::
+Путь к утилите `serialver`.
+
+`RMIC`::
+Путь к генератору RMI-заглушек/скелетов, `rmic`.
+
+`RMIREGISTRY`::
+Путь к программе реестра RMI, `rmiregistry`.
+
+`RMID`::
+Путь к программе демона RMI.
+
+`JAVA_CLASSES`::
+Путь к архиву, содержащему файлы классов JDK. В большинстве JDK это [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
+
+`JAVASHAREDIR`::
+Базовый каталог для всех общих ресурсов Java.
+
+`JAVAJARDIR`::
+Каталог, в котором порт должен устанавливать JAR-файлы.
+
+`JAVALIBDIR`::
+Каталог, в котором находятся JAR-файлы, установленные другими портами.
-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.
+[[uses-jpeg]]
+== `jpeg`
+
+Возможные аргументы: `lib` (по умолчанию, подразумевается), `build`, `run`
+
+Помощь в обработке зависимостей от `jpeg`.
+
+Если указан аргумент `lib` или аргументы не предоставлены, то в порт добавляется зависимость от библиотеки.
+
+Если указан аргумент `build`, то в порт добавляется зависимость сборки.
+
+Если указан аргумент `run`, то к порту добавляется зависимость времени выполнения.
+
+Если указан аргумент `both`, то к порту добавляется зависимость для сборки и зависимость для выполнения.
+
+Фреймворк предоставляет следующую переменную, которая может быть установлена портами:
+
+`JPEG_PORT`::
+Указывает реализацию JPEG для использования. Возможные значения:
+
+* package:graphics/jpeg-turbo[] (по умолчанию)
+* package:graphics/mozjpeg[]
[[uses-kde]]
== `kde`
-Possible arguments: `5`
+Возможные аргументы: `5`
-Add dependency on KDE components.
-See crossref:special[using-kde,Using KDE] for more information.
+Добавить зависимость от компонентов KDE. Подробнее см. в crossref:special[using-kde,Использование KDE].
[[uses-kmod]]
== `kmod`
-Possible arguments: (none), `debug`
+Возможные аргументы: (отсутствуют), `debug`
+
+Заполняет шаблон для портов модулей ядра, в настоящее время:
+
+* Добавьте `kld` в `CATEGORIES`.
+* Установите `SSP_UNSAFE`.
+* Установите `IGNORE`, если исходные коды ядра не найдены в `SRC_BASE`.
+* Определить `KMODDIR` по умолчанию как [.filename]#/boot/modules#, добавить его в `PLIST_SUB` и `MAKE_ENV`, а также создать его при установке. Если `KMODDIR` установлен в [.filename]#/boot/kernel#, он будет перезаписан в [.filename]#/boot/modules#. Это предотвращает повреждение пакетов при обновлении ядра из-за переименования [.filename]#/boot/kernel# в [.filename]#/boot/kernel.old# в процессе.
+* Обрабатывать перекрестные ссылки на модули ядра при установке и удалении, используя crossref:plist[plist-keywords-kld,`@kld`].
+* Если указан аргумент `debug`, порт может установить отладочную версию модуля в [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. По умолчанию `KERN_DEBUGDIR` копируется из `DEBUGDIR` и устанавливается в [.filename]#/usr/lib/debug#. Фреймворк позаботится о создании и удалении необходимых каталогов.
+
+[[uses-kodi]]
+== `kodi`
+
+Возможные аргументы: (отсутствуют), `noautoplist`
+
+Обеспечить поддержку дополнений для package:multimedia/kodi[]. Если указан аргумент `noautoplist`, автоматическое создание `plist` не выполняется.
+
+[[uses-lazarus]]
+== `lazarus`
+
+Возможные аргументы: (отсутствуют), `gtk2` (по умолчанию), `qt5`, `qt6`, `flavors`
+
+Обеспечить поддержку портов на основе package:editors/lazarus[].
+
+Если аргументы не предоставлены или указан `gtk2`, приложение lazarus-app будет собрано с интерфейсом `gtk2`, и порт package:editors/lazarus[] будет собран с интерфейсом `gtk2`.
+
+Если указан аргумент `qt5`, приложение lazarus-app собирается с интерфейсом `qt5`.
+
+Если указан аргумент `qt6`, приложение lazarus-app собирается с интерфейсом `qt6`.
+
+Если указан аргумент `flavors`, приложение `lazarus-app` собирается с поддержкой функций флейворов.
+
+Если порт не требует автоматической компиляции файлов проекта lazarus, можно определить следующую переменную:
+
+`NO_LAZBUILD`= `yes`
-Fills in the boilerplate for kernel module ports, currently:
+Доступны следующие переменные для портов:
-* Add `kld` to `CATEGORIES`.
-* Set `SSP_UNSAFE`.
-* Set `IGNORE` if the kernel sources are not found in `SRC_BASE`.
-* 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.
-* 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.
+`LAZARUS_PROJECT_FILES`::
+Список lpi-файлов. Он не должен быть пустым. По умолчанию: пусто
+
+`LAZARUS_DIR`::
+Путь к директории установки lazarus. По умолчанию: [.filename]#${LOCALBASE}/share/lazarus-${LAZARUS_VER}#
+
+`LAZBUILD_ARGS`::
+Дополнительные аргументы lazbuild. В большинстве случаев это может быть `-d`. Подробнее см. man:lazbuild[1]. По умолчанию: пусто
+
+`LAZARUS_NO_FLAVORS`::
+Не собирать эти флейворы lazarus. Если `LAZARUS_NO_FLAVORS` не определена, то предполагаются все допустимые флейворы lazarus.
+
+`WANT_LAZARUS_DEVEL`::
+Если установлено значение `yes`, то используйте package:lazarus/devel[] как зависимость сборки.
+
+[[uses-ldap]]
+== `ldap`
+
+Возможные аргументы: (нет), <версия>, клиент, сервер
+
+Регистрирует зависимость от пакета package:net/openldap[]. Использует конкретную `<версию>` (без точечной нотации), если она указана. В противном случае пытается найти установленную версию. При необходимости возвращается к версии по умолчанию, указанной в `bsd.default-versions.mk`. `client` указывает на зависимость во время выполнения от клиентской библиотеки. Это также значение по умолчанию. `server` указывает на зависимость во время выполнения от сервера.
+
+Следующие переменные могут быть доступны для порта:
+
+`IGNORE_WITH_OPENLDAP`::
+Эта переменная может быть определена, если порты не поддерживают одну или несколько версий OpenLDAP.
+`WITH_OPENLDAP_VER`::
+Пользовательская переменная для установки версии OpenLDAP.
+`OPENLDAP_VER`::
+Обнаруженная версия OpenLDAP.
[[uses-lha]]
== `lha`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Set `EXTRACT_SUFX` to `.lzh`
+Установите `EXTRACT_SUFX` в `.lzh`
[[uses-libarchive]]
== `libarchive`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Registers a dependency on package:archivers/libarchive[].
-Any ports depending on libarchive must include `USES=libarchive`.
+Регистрирует зависимость от package:archivers/libarchive[]. Любые порты, зависящие от libarchive, должны включать `USES=libarchive`.
[[uses-libedit]]
== `libedit`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Registers a dependency on package:devel/libedit[].
-Any ports depending on libedit must include `USES=libedit`.
+Регистрирует зависимость от package:devel/libedit[]. Все порты, зависящие от libedit, должны включать `USES=libedit`.
[[uses-libtool]]
== `libtool`
-Possible arguments: (none), `keepla`, `build`
+Возможные аргументы: (нет), `keepla`, `build`
-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.
+Исправляет скрипты `libtool`. Это должно быть добавлено во все порты, использующие `libtool`. Аргумент `keepla` может быть использован для сохранения файлов [.filename]#.la#. Некоторые порты не поставляются с собственной копией libtool и требуют зависимость во время сборки от package:devel/libtool[], используйте аргумент `:build` для добавления такой зависимости.
[[uses-linux]]
== `linux`
-Possible arguments: `c6`, `c7`
+Возможные аргументы: `c6`, `c7`
-Ports Linux compatibility framework.
-Specify `c6` to depend on CentOS 6 packags.
-Specify `c7` to depend on CentOS 7 packages. The available packages are:
+Порт фреймворка совместимости с Linux. Укажите `c6` для зависимостей от пакетов CentOS 6. Укажите `c7` для зависимостей от пакетов CentOS 7. Доступные пакеты:
* `allegro`
* `alsa-plugins-oss`
@@ -904,63 +1454,96 @@ Specify `c7` to depend on CentOS 7 packages. The available packages are:
* `ucl`
* `xorglibs`
+[[uses-llvm]]
+== `llvm`
+
+Возможные аргументы: (нет), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib
+
+Добавляет зависимость от LLVM. По умолчанию это зависимость для сборки, если не переопределено опциями `run` или `lib`. Версия по умолчанию задаётся в `LLVM_DEFAULT`. Также можно указать конкретную версию. Минимальную и максимальную версии можно указать с помощью параметров `min` и `max` соответственно. Фреймворк портов экспортирует следующие переменные в порт:
+
+`LLVM_VERSION`::
+Версия, выбранная из аргументов к llvm.mk
+`LLVM_PORT`::
+Выбранный порт llvm
+`LLVM_CONFIG`::
+`llvm-config` выбранного порта
+`LLVM_LIBLLVM`::
+`libLLVM.so` выбранного порта
+`LLVM_PREFIX`::
+Префикс инсталляции выбранного порта
+
[[uses-localbase]]
== `localbase`
-Possible arguments: (none), `ldflags`
+Возможные аргументы: (отсутствуют), `ldflags`
-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`.
+Гарантирует использование библиотек из зависимостей в `LOCALBASE` вместо библиотек из базовой системы. Указывает `ldflags` для добавления `-L${LOCALBASE}/lib` в `LDFLAGS` вместо `LIBS`. Порты, зависящие от библиотек, которые также присутствуют в базовой системе, должны использовать эту опцию. Она также используется внутри несколькими другими `USES`.
[[uses-lua]]
== `lua`
-Possible arguments: (none), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, `flavors`, `build`, `run`, `env`
+Возможные аргументы: (нет), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, `flavors`, `build`, `run`, `env`
+
+Добавляет зависимость от Lua. По умолчанию это зависимость от библиотеки, если не переопределено опциями `build` и/или `run`. Опция `env` предотвращает добавление любой зависимости, при этом все обычные переменные остаются определенными.
+
+Версия по умолчанию устанавливается с помощью обычного механизма `DEFAULT_VERSIONS`, если только версия или диапазон версий не указаны в качестве аргумента, например, `51` или `51-54`.
+
+Приложения, использующие Lua, обычно собираются только для одной версии Lua. Однако модули библиотек, предназначенные для загрузки кодом Lua, должны использовать опцию `module` для сборки с несколькими вариантами.
+
+Для получения дополнительной информации см. crossref:special[using-lua,Использование Lua].
-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.
+[[uses-luajit]]
+== `luajit`
-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`.
+Возможные аргументы: (нет), `_X_`
-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.
+Добавляет зависимость от среды выполнения luajit. Можно указать конкретную версию _X_. Доступные версии: `luajit`, `luajit-devel`, `luajit-openresty`
-For more information see crossref:special[using-lua,Using Lua].
+После включения [.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk# порт может проверять эти переменные:
+
+`LUAJIT_VER`::
+Выбранная версия luajit
+`LUAJIT_INCDIR`::
+Путь к заголовочным файлам luajit
+`LUAJIT_LUAVER`::
+Какой версии спецификации luajit выбрана (2.0 для luajit, иначе 2.1)
+
+Для получения дополнительной информации см. crossref:special[using-lua,Использование Lua].
[[uses-lxqt]]
== `lxqt`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Обработка зависимостей для рабочей среды LXQt. Используйте `USE_LXQT` для выбора необходимых компонентов для порта. Дополнительную информацию см. в разделе crossref:special[using-lxqt,Использование LXQt].
+
+[[uses-magick]]
+== `magick`
+
+Возможные аргументы: (нет), `_X_`, `build`, `nox11`, `run`, `test`
-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.
+Добавить зависимость библиотеки от `ImageMagick`. Можно указать конкретную версию _X_. Доступные версии: `6` и `7` (по умолчанию). `nox11` означает, что требуется версия порта `-nox11`. `build`, `run` и `test` добавляют зависимости на сборку, выполнение и тестирование для ImageMagick.
[[uses-makeinfo]]
== `makeinfo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Add a build-time dependency on `makeinfo` if it is not present in the base system.
+Добавить зависимость во время сборки на `makeinfo`, если его нет в базовой системе.
[[uses-makeself]]
== `makeself`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Indicates that the distribution files are makeself archives and sets the appropriate dependencies.
+Указывает, что файлы дистрибутива являются архивами makeself и устанавливает соответствующие зависимости.
[[uses-mate]]
== `mate`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on MATE components.
-The components should be listed in `USE_MATE`.
-The available components are:
+Предоставляет простой способ зависимостей от компонентов MATE. Компоненты должны быть перечислены в `USE_MATE`. Доступные компоненты:
* `autogen`
* `caja`
@@ -983,8 +1566,7 @@ The available components are:
* `session`
* `settingsdaemon`
-The default dependency is build- and run-time, it can be changed with `:build` or `:run`.
-For example:
+Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с помощью `:build` или `:run`. Например:
[.programlisting]
....
@@ -995,138 +1577,233 @@ USE_MATE= menus:build intlhack
[[uses-meson]]
== `meson`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provide support for Meson based projects.
-For more information see crossref:special[using-meson,Using `meson`].
+Предоставить поддержку для проектов на основе Meson. Дополнительную информацию смотрите в crossref:special[using-meson,Использование `meson`].
[[uses-metaport]]
== `metaport`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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`.
+Устанавливает следующие переменные для упрощения создания метапорта: `MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, `NO_MTREE`, `NO_ARCH`.
+
+[[uses-minizip]]
+== `minizip`
+
+Возможные аргументы: (отсутствуют), `ng`
+
+Добавляет зависимость библиотеки от package:archivers/minizip[] или package:archivers/minizip-ng[] соответственно.
+
+[[uses-mlt]]
+== `mlt`
+
+Возможные аргументы: `7`, `nodepend`
+
+Обеспечить поддержку портов, зависящих от package:multimedia/mlt7[].
+
+Если указан аргумент `nodepend`, зависимости от библиотек не создаются. Этот аргумент имеет смысл только для портов multimedia/mlt7*.
[[uses-mysql]]
== `mysql`
-Possible arguments: (none), `_version_`, `client` (default), `server`, `embedded`
+Возможные аргументы: (отсутствуют), `_версия_`, `client` (по умолчанию), `server`, `embedded`
-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.
+Предоставить поддержку MySQL. Если версия не указана, попытаться определить установленную версию. В случае неудачи использовать версию по умолчанию, MySQL-5.6. Возможные версии: `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, `57p`, `80`, `100m`, `101m` и `102m`. Суффиксы `m` и `p` обозначают флейворс MariaDB и Percona для MySQL. Параметры `server` и `embedded` добавляют зависимости во время сборки и выполнения на сервер MySQL. При использовании `server` или `embedded` добавьте `client`, чтобы также включить зависимость от [.filename]#libmysqlclient.so#. Порт может установить `IGNORE_WITH_MYSQL`, если некоторые версии не поддерживаются.
-The framework sets `MYSQL_VER` to the detected MySQL version.
+Фреймворк устанавливает `MYSQL_VER` в обнаруженную версию MySQL.
[[uses-mono]]
== `mono`
-Possible arguments: (none), `nuget`
+Возможные аргументы: (отсутствуют), `nuget`
-Adds a dependency on the Mono (currently only C#) framework by setting the appropriate dependencies.
+Добавляет зависимость от фреймворка Mono (в настоящее время только C#), устанавливая соответствующие зависимости.
-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_`.
+Укажите `nuget`, если порт использует пакеты nuget. `NUGET_DEPENDS` должен содержать имена и версии пакетов nuget в формате `_имя_=_версия_`. Можно добавить необязательное расположение пакета (origin), используя `_имя_=_версия_:_ расположение _`.
-The helper target, `buildnuget`, will output the content of the `NUGET_DEPENDS` based on the provided [.filename]#packages.config#.
+Вспомогательная цель `buildnuget` выведет содержимое `NUGET_DEPENDS` на основе предоставленного файла [.filename]#packages.config#.
[[uses-motif]]
== `motif`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Использует package:x11-toolkits/open-motif[] как зависимость библиотеки. Конечные пользователи могут установить `WANT_LESSTIF` в [.filename]#make.conf#, чтобы использовать package:x11-toolkits/lesstif[] как зависимость вместо package:x11-toolkits/open-motif[]. Аналогично, установка `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf# добавит зависимость от package:x11-toolkits/open-motif-devel[]
+
+[[uses-mpi]]
+== `mpi`
+
+Возможные аргументы: `mpich` (по умолчанию), `openmpi`
+
+Обеспечить поддержку портов, зависящих от `MPI`.
+
+Если указан аргумент `mpich`, в порт добавляется зависимость от package:net/mpich[].
+
+Если указан аргумент `openmpi`, в порт добавляется зависимость от package:net/openmpi[].
+
+Фреймворк портов предоставляет следующие переменные, которые могут быть прочитаны портом:
+
+`MPI_LIBS`::
+Библиотеки, необходимые для связывания программ с использованием `MPI`.
+
+`MPI_CFLAGS`::
+Флаги компилятора, необходимые для сборки программ с использованием `MPI`.
+
+`MPICC`::
+Расположение исполняемого файла `mpicc`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpicc#.
+
+`MPICXX`::
+Расположение исполняемого файла `mpicxx`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpicxx#.
+
+`MPIF90`::
+Расположение исполняемого файла `mpif90`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpif90#.
+
+`MPIFC`::
+То же, что и выше.
+
+`MPI_HOME`::
+Каталог установки `MPI`. По умолчанию используется `${LOCALBASE}` для `MPICH`.
+
+`MPIEXEC`::
+Расположение исполняемого файла `mpiexec`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpiexec#.
+
+`MPIRUN`::
+Расположение исполняемого файла `mpirun`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpirun#.
-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[].
[[uses-ncurses]]
== `ncurses`
-Possible arguments: (none), `base`, `port`
+Возможные аргументы: (нет), `base`, `port`
+
+Использует ncurses и устанавливает некоторые полезные переменные.
+
+[[uses-nextcloud]]
+== `nextcloud`
-Uses ncurses, and causes some useful variables to be set.
+Возможные аргументы: (отсутствуют)
+
+Добавляет поддержку приложений Nextcloud, добавляя зависимость во время выполнения на package:www/nextcloud[].
[[uses-ninja]]
== `ninja`
-Possible arguments: (none)
+Возможные аргументы: (нет), `build`, `make` (по умолчанию), `run`
+
+Если указаны аргументы `build` или `run`, это соответственно добавляет зависимость во время сборки или выполнения от пакета package:devel/ninja[]. Если указан `make` или аргументы не предоставлены, используется ninja для сборки порта вместо make. `make` подразумевает `build`. Если переменная `NINJA_DEFAULT` установлена в `samurai`, тогда зависимости устанавливаются для пакета package:devel/samurai[] вместо этого.
+
+[[uses-nodejs]]
+== `nodejs`
-Uses ninja to build the port.
+Возможные аргументы: (нет), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,
+ `17`.
+
+Использует nodejs. Добавляет зависимость от пакета package:www/node*[]. Если указана поддерживаемая версия, то также необходимо указать `run` и/или `build`.
[[uses-objc]]
== `objc`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Добавить зависимости Objective C (компилятор, библиотека времени выполнения), если базовая система их не поддерживает.
+
+[[uses-ocaml]]
+== `ocaml`
+
+Возможные аргументы: (нет), `build`, `camlp4`, `dune`, `findlib`, `findplist`, `ldconfig`, `run`, `tk`, `tkbuild`, `tkrun`, `wash`
+
+Обеспечить поддержку OCaml.
+
+Если аргументы не указаны, по умолчанию используются `build`, `run`.
+
+Если указан аргумент `build`, то package:lang/ocamlc[] добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`.
+
+Если указан аргумент `camlp4`, то для сборки используется package:devel/ocamlp4[].
+
+Если указан аргумент `dune`, то package:devel/ocaml-dune[] используется как система сборки.
+
+Если указан аргумент `findlib`, то для установки пакетов будет использоваться `ocamlfind`. Директории пакетов будут автоматически удалены.
+
+Если указан аргумент `findplist`, то содержимое целевых каталогов `findlib` будет добавлено автоматически.
+
+Если указан аргумент `ldconfig`, то файл [.filename]#ld.conf# OCaml будет обработан автоматически. При использовании `dune` Dune может устанавливать stublibs в директориях пакетов site-lib или в отдельной директории ниже `DUNE_LIBDIR` site-lib. Установите, если ваш порт устанавливает общие библиотеки в ocaml
+
+Если указан аргумент `run`, добавить ocamlc в `RUN_DEPENDS`.
+
+Если указан аргумент `tk`, то в порт добавляется зависимость на сборку и выполнение от пакета package:x11-toolkits/ocaml-labltk[]. Подразумевает `tkbuild` и `tkrun`.
+
+Если указан аргумент `tkbuild`, то пакет package:x11-toolkits/ocaml-labltk[] добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`.
+
+Если указан аргумент `tkrun`, то package:x11-toolkits/ocaml-labltk[] добавляется в `RUN_DEPENDS`.
-Add objective C dependencies (compiler, runtime library) if the base system does not support it.
+Если указан аргумент `wash`, общие каталоги Ocaml будут очищены при удалении. Полезно при установке в нестандартный `PREFIX`.
+
+Портом могут быть установлены следующие переменные:
+
+`OCAML_PKGDIRS`::
+Каталоги в site-lib для обработки, если указан аргумент `findlib`. По умолчанию: `${PORTNAME}`
+
+`OCAML_LDLIBS`::
+Каталоги в `PREFIX`, которые будут автоматически добавлены/удалены из [.filename]#ld.conf#. По умолчанию: `${OCAML_SITELIBDIR}/${PORTNAME}`
+
+`OCAML_PACKAGES`::
+Список пакетов для сборки и установки. По умолчанию `${PORTNAME}`
+
+
+[[uses-octave]]
+== `octave`
+
+Возможные аргументы: (нет), env
+
+Использует package:math/octave[]. `env` загружает только одну переменную окружения `OCTAVE_VERSION`.
[[uses-openal]]
== `openal`
-Possible arguments: `al`, `soft` (default), `si`, `alut`
+Возможные аргументы: `al`, `soft` (по умолчанию), `si`, `alut`
-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`.
+Использует OpenAL. Бэкенд может быть указан, с программной реализацией по умолчанию. Пользователь может указать предпочтительный бэкенд с помощью `WANT_OPENAL`. Допустимые значения для этой настройки: `soft` (по умолчанию) и `si`.
[[uses-pathfix]]
== `pathfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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.
+Ищите [.filename]#Makefile.in# и [.filename]#configure# в `PATHFIX_WRKSRC` (по умолчанию `WRKSRC`) и исправляйте стандартные пути, чтобы они соответствовали иерархии FreeBSD. Например, исправляется каталог установки для файлов [.filename]#.pc# `pkgconfig` на [.filename]#${PREFIX}/libdata/pkgconfig#. Если порт использует `USES=autoreconf`, [.filename]#Makefile.am# будет автоматически добавлен в `PATHFIX_MAKEFILEIN`.
-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`.
+Если порт crossref:uses[uses-cmake,`USES=cmake`], он будет искать файл [.filename]#CMakeLists.txt# в `PATHFIX_WRKSRC`. При необходимости это имя файла по умолчанию можно изменить с помощью `PATHFIX_CMAKELISTSTXT`.
[[uses-pear]]
== `pear`
-Possible arguments: `env`
+Возможные аргументы: `env`
-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.
+Добавляет зависимость от пакета package:devel/pear[]. Настраивает поведение по умолчанию для программного обеспечения, использующего PHP Extension and Application Repository. Использование аргументов `env` только устанавливает переменные окружения PEAR. Дополнительную информацию см. в crossref:special[php-pear,Модули PEAR].
[[uses-perl5]]
== `perl5`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Depends on Perl. The configuration is done using `USE_PERL5`.
+Зависит от Perl. Настройка выполняется с помощью `USE_PERL5`.
-`USE_PERL5` can contain the phases in which to use Perl, can be `extract`, `patch`, `build`, `run`, or `test`.
+`USE_PERL5` может содержать фазы, в которых используется Perl: `extract`, `patch`, `build`, `run` или `test`.
-`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.
+`USE_PERL5` также может содержать `configure`, `modbuild` или `modbuildtiny`, если требуется [.filename]#Makefile.PL#, [.filename]#Build.PL# или вариант [.filename]#Build.PL# для Module::Build::Tiny.
-`USE_PERL5` defaults to `build run`.
-When using `configure`, `modbuild`, or `modbuildtiny`, `build` and `run` are implied.
+`USE_PERL5` по умолчанию имеет значение `build run`. При использовании `configure`, `modbuild` или `modbuildtiny`, `build` и `run` подразумеваются автоматически.
-See crossref:special[using-perl,Using Perl] for more information.
+См. crossref:special[using-perl,Использование Perl] для получения дополнительной информации.
[[uses-pgsql]]
== `pgsql`
-Possible arguments: (none), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`
+Возможные аргументы: (нет), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`
-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.`
+Предоставить поддержку PostgreSQL. Ответственный за порт может указать требуемую версию. Можно указать минимальную и максимальную версии или диапазон; например, `9.0-`, `8.4+`, `8.4-9.2`
-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:
+По умолчанию добавляемая зависимость будет клиентской, но если порту требуются дополнительные компоненты, это можно указать с помощью `WANT_PGSQL=_компонент[:цель]_`; например, `WANT_PGSQL=server:configure pltcl plperl`. Доступные компоненты:
* `client`
* `contrib`
@@ -1140,83 +1817,67 @@ The available components are:
[[uses-php]]
== `php`
-Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, `mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`
+Возможные аргументы: (нет), `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[].
+Обеспечить поддержку PHP. Добавить зависимость во время выполнения на версию PHP по умолчанию, package:lang/php81[].
`phpize`::
-Use to build a PHP extension.
-Enables flavors.
+Используется для создания расширения PHP. Поддерживает флейворы.
`ext`::
-Use to build, install and register a PHP extension.
-Enables flavors.
+Используется для сборки, установки и регистрации расширения PHP. Поддерживает флейворы.
`zend`::
-Use to build, install and register a Zend extension.
-Enables flavors.
+Используется для сборки, установки и регистрации Zend-расширения. Поддерживает флейворы.
`build`::
-Set PHP also as a build-time dependency.
+Установить PHP также как зависимость во время сборки.
`cli`::
-Needs the CLI version of PHP.
+Требуется версия PHP для командной строки.
`cgi`::
-Needs the CGI version of PHP.
+Требуется CGI-версия PHP.
`mod`::
-Needs the Apache module for PHP.
+Требуется модуль Apache для PHP.
`web`::
-Needs the Apache module or the CGI version of PHP.
+Требуется модуль Apache или CGI-версия PHP.
`embed`::
-Needs the embedded library version of PHP.
+Требуется встроенная версия библиотеки PHP.
`pecl`::
-Provide defaults for fetching PHP extensions from the PECL repository.
-Enables flavors.
+Установить значения по умолчанию для загрузки расширений PHP из репозитория PECL. Включает флейворы.
`flavors`::
-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`>>.
+Включить автоматическую генерацию crossref:flavors[flavors-auto-php,флейворов PHP]. Флейворы будут созданы для всех версий PHP, за исключением указанных в crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`].
`noflavors`::
-Disable automatic PHP flavors generation.
-_Must only_ be used with extensions provided by PHP itself.
+Отключить автоматическое создание флейворов PHP. _Должно_ использоваться только с расширениями, предоставляемыми самим PHP.
-Variables are used to specify which PHP modules are required, as well as which version of PHP are supported.
+Переменные используются для указания необходимых модулей PHP, а также версий PHP, которые поддерживаются.
`USE_PHP`::
-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`
+Список необходимых расширений PHP во время выполнения. Добавьте `:build` к названию расширения, чтобы указать зависимость во время сборки. Пример: `pcre xml:build gettext`
[[uses-php-ignore]]
`IGNORE_WITH_PHP`::
-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#.
+Порт не работает с PHP указанной версии. Возможные значения можно посмотреть в содержимом `_ALL_PHP_VERSIONS` в [.filename]#Mk/Uses/php.mk#.
-When building a PHP or Zend extension with `:ext` or `:zend`, these variables can be set:
+При сборке расширения PHP или Zend с помощью `:ext` или `:zend`, можно задать следующие переменные:
`PHP_MODNAME`::
-The name of the PHP or Zend extension.
-Default value is `${PORTNAME}`.
+Имя расширения PHP или Zend. Значение по умолчанию: `${PORTNAME}`.
`PHP_HEADER_DIRS`::
-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.
+Список подкаталогов, из которых следует устанавливать заголовочные файлы. Фреймворк всегда будет устанавливать заголовочные файлы, находящиеся в том же каталоге, что и расширение.
`PHP_MOD_PRIO`::
-The priority at which to load the extension.
-It is a number between `00` and `99`.
+Приоритет загрузки расширения. Это число от `00` до `99`.
+
-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:
+Для расширений, которые не зависят от других расширений, приоритет автоматически устанавливается в `20`, а для расширений, зависящих от другого расширения, приоритет автоматически устанавливается в `30`. Некоторые расширения могут требовать загрузки перед всеми остальными, например, package:www/php56-opcache[]. Некоторые могут требовать загрузки после расширения с приоритетом `30`. В таком случае добавьте `PHP_MOD_PRIO=_XX_` в Makefile порта. Например:
+
[.programlisting]
....
@@ -1225,52 +1886,42 @@ USE_PHP= wddx
PHP_MOD_PRIO= 40
....
-These variables are available to use in `PKGNAMEPREFIX` or `PKGNAMESUFFIX`:
+Эти переменные доступны для использования в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`:
`PHP_PKGNAMEPREFIX`::
-Contains `php_XY_-` where _XY_ is the current flavor's PHP version.
-Use with PHP extensions and modules.
+Содержит `php_XY_-`, где _XY_ — версия PHP текущей редакции. Используется с расширениями и модулями PHP.
`PHP_PKGNAMESUFFIX`::
-Contains `-php_XY_` where _XY_ is the current flavor's PHP version.
-Use with PHP applications.
+Содержит `-php_XY_`, где _XY_ — версия PHP текущего варианта. Используется с PHP-приложениями.
`PECL_PKGNAMEPREFIX`::
-Contains `php_XY_-pecl-` where _XY_ is the current flavor's PHP version.
-Use with PECL modules.
+Содержит `php_XY_-pecl-`, где _XY_ — версия PHP текущей редакции. Используется с модулями PECL.
[IMPORTANT]
====
-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`.
+С вариантами сборки все расширения PHP, расширения PECL, модули PEAR _должны иметь_ разные имена пакетов, поэтому они должны использовать одну из трёх переменных в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`.
====
[[uses-pkgconfig]]
== `pkgconfig`
-Possible arguments: (none), `build` (default), `run`, `both`
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`, `both`
-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.
+Использует package:devel/pkgconf[]. Без аргументов или с аргументом `build` подразумевает зависимость от `pkg-config` во время сборки. `run` подразумевает зависимость во время выполнения, а `both` — зависимости как во время выполнения, так и во время сборки.
[[uses-pure]]
== `pure`
-Possible arguments: (none), `ffi`
+Возможные аргументы: (нет), `ffi`
-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.
+Использует package:lang/pure[]. В основном применяется для сборки портов, зависящих от pure. С аргументом `ffi` подразумевает package:devel/pure-ffi[] как зависимость во время выполнения.
[[uses-pyqt]]
== `pyqt`
-Possible arguments: (none), `4`, `5`
+Возможные аргументы: (нет), `4`, `5`
-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:
+Использует PyQt. Если порт является частью самого PyQT, установите `PYQT_DIST`. Используйте `USE_PYQT` для выбора необходимых порту компонентов. Доступные компоненты:
* `core`
* `dbus`
@@ -1292,7 +1943,7 @@ The available components are:
* `xml`
* `xmlpatterns`
-These components are only available with PyQT4:
+Эти компоненты доступны только с PyQT4:
* `assistant`
* `declarative`
@@ -1301,7 +1952,7 @@ These components are only available with PyQT4:
* `script`
* `scripttools`
-These components are only available with PyQT5:
+Эти компоненты доступны только с PyQT5:
* `multimediawidgets`
* `printsupport`
@@ -1310,7 +1961,7 @@ These components are only available with PyQT5:
* `webkitwidgets`
* `widgets`
-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:
+Зависимость по умолчанию для каждого компонента — это время сборки и выполнения. Чтобы выбрать только сборку или выполнение, добавьте `_build` или `_run` к имени компонента. Например:
[.programlisting]
....
@@ -1318,58 +1969,76 @@ USES= pyqt
USE_PYQT= core doc_build designer_run
....
+[[uses-pytest]]
+== `pytest`
+
+Возможные аргументы: (нет), 4
+
+Вводит новую зависимость от package:devel/pytest[]. Он определяет цель `do-test`, которая будет правильно запускать тесты. Используйте аргумент, чтобы зависеть от определённой версии package:devel/pytest[]. Для портов, использующих package:devel/pytest[], рекомендуется использовать это вместо конкретной цели `do-test`. Фреймворк предоставляет порту следующие переменные:
+
+`PYTEST_ARGS`::
+Дополнительные аргументы для pytest (по умолчанию пусто).
+
+`PYTEST_IGNORED_TESTS`::
+списки шаблонов `pytest -k` для игнорирования тестов (по умолчанию пустые). Для тестов, которые не должны проходить, например, требующих доступа к базе данных.
+
+`PYTEST_BROKEN_TESTS`::
+списки шаблонов `pytest -k` тестов для игнорирования (по умолчанию пустые). Для сломанных тестов, которые требуют исправления.
+
+В дополнение следующие переменные могут быть заданы пользователем:
+
+`PYTEST_ENABLE_IGNORED_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_IGNORED_TESTS`.
+
+`PYTEST_ENABLE_BROKEN_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_BROKEN_TESTS`.
+
+`PYTEST_ENABLE_ALL_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_IGNORED_TESTS` и `PYTEST_BROKEN_TESTS`.
+
+
[[uses-python]]
== `python`
-Possible arguments: (none), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, `patch`, `build`, `run`, `test`
+Возможные аргументы: (нет), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, `patch`, `build`, `run`, `test`
-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.
+Использует Python. Можно указать поддерживаемую версию или диапазон версий. Если Python требуется только во время сборки, выполнения или тестирования, его можно установить как зависимость для сборки, выполнения или тестирования с помощью `build`, `run` или `test`. Если Python также требуется на этапе исправлений, используйте `patch`. Дополнительную информацию см. в разделе crossref:special[using-python,Использование Python].
-`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.
+`USES=python:env` можно использовать, когда необходимы переменные, экспортируемые фреймворком, но зависимость от Python не требуется. Это может быть полезно при использовании с crossref:uses[uses-shebangfix,`USES=shebangfix`], если цель состоит только в исправлении shebang без добавления зависимости от Python.
[[uses-qmail]]
== `qmail`
-Possible arguments: (none), `build`, `run`, `both`, `vars`
+Возможные аргументы: (нет), `build`, `run`, `both`, `vars`
-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.
+Использует package:mail/qmail[]. С аргументом `build` подразумевается зависимость от `qmail` во время сборки. Аргумент `run` подразумевает зависимость во время выполнения. Использование без аргументов или с аргументом `both` подразумевает зависимости как во время выполнения, так и во время сборки. Аргумент `vars` только устанавливает переменные QMAIL для использования в порте.
[[uses-qmake]]
== `qmake`
-Possible arguments: (none), `norecursive`, `outsource`, `no_env`, `no_configure`
+Возможные аргументы: (отсутствуют), `norecursive`, `outsource`, `no_env`, `no_configure`
-Uses QMake for configuring. For more information see crossref:special[using-qmake,Using `qmake`].
+Использует QMake для настройки. Для получения дополнительной информации см. crossref:special[using-qmake,Использование `qmake`].
[[uses-qt]]
== `qt`
-Possible arguments: `5`, `no_env`
+Возможные аргументы: `5`, `6`, `no_env`
-Add dependency on Qt components.
-`no_env` is passed directly to `USES= qmake`.
-See crossref:special[using-qt,Using Qt] for more information.
+Добавить зависимость от компонентов Qt. `no_env` передаётся напрямую в `USES= qmake`. Подробнее см. в crossref:special[using-qt,Использование Qt].
[[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.
-It takes care of setting up the appropriate configuration environment for the port to build.
+Предоставляет поддержку сборки компонентов Qt 5 и Qt 6. Обеспечивает настройку соответствующей конфигурации окружения для сборки порта.
[[qt5-dist-example]]
-.Building Qt 5 Components
+.Сборка компонентов Qt 5
[example]
====
-The port is Qt 5's `networkauth` component, which is part of the `networkauth` distribution file.
+Порт представляет собой компонент `networkauth` из Qt 5, который входит в файл дистрибутива `networkauth`.
[.programlisting]
....
@@ -1381,13 +2050,30 @@ USES= qt-dist:5
====
-If `PORTNAME` does not match the component name, it can be passed as an argument to `qt-dist`.
+
+[[qt6-dist-example]]
+.Сборка компонентов Qt 6
+[example]
+====
+Порт представляет собой компонент `websockets` из Qt 6, который входит в файл дистрибутива `websockets`.
+
+[.programlisting]
+....
+PORTNAME= websockets
+PORTVERSION= ${QT6_VERSION}
+
+USES= qt-dist:6
+....
+
+====
+
+Если `PORTNAME` не совпадает с именем компонента, его можно передать как аргумент в `qt-dist`.
[[qt5-dist-example-explicit]]
-.Building Qt 5 Components with Different Names
+.Сборка компонентов Qt 5 с разными именами
[example]
====
-The port is Qt 5's `gui` component, which is part of the `base` distribution file.
+Порт представляет собой компонент `gui` из Qt 5, который входит в файл дистрибутива `base`.
[.programlisting]
....
@@ -1402,116 +2088,181 @@ USES= qt-dist:5,base
[[uses-readline]]
== `readline`
-Possible arguments: (none), `port`
+Возможные аргументы: (нет), `port`
+
+Использует readline в качестве зависимости библиотеки и устанавливает `CPPFLAGS` и `LDFLAGS` по необходимости. Если используется аргумент `port` или если readline отсутствует в базовой системе, добавляет зависимость от package:devel/readline[]
+
+
+[[uses-ruby]]
+== `ruby`
+
+Возможные аргументы: (нет), `build`, `extconf`, `run`, `setup`
+
+Предоставить поддержку для портов, связанных с Ruby. `(none)` без аргументов добавляет зависимость во время выполнения на package:lang/ruby[]. `build` добавляет зависимость на package:lang/ruby[] во время сборки. `extconf` указывает, что порт использует extconf.rb для настройки. `run` добавляет зависимость на package:lang/ruby[] во время выполнения. Это также значение по умолчанию. `setup` указывает, что порт использует setup.rb для настройки и сборки.
+
+Пользователь может определить следующие переменные:
+
+`RUBY_VER`::
+Альтернативная короткая версия ruby в виде `x.y`.
+
+`RUBY_DEFAULT_VER`::
+Установите (например) `2.7`, чтобы использовать `ruby27` в качестве версии по умолчанию.
+
+`RUBY_ARCH`::
+Установите имя архитектуры (например, i386-freebsd7).
+
+Следующие переменные экспортируются для использования портом:
+
+`RUBY`::
+Установлена в полный путь к ruby. Если задано, значения следующих переменных автоматически получаются из исполняемого файла ruby: `RUBY_ARCH`, `RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, `RUBY_VER` и `RUBY_VERSION`
+
+`RUBY_VER`::
+Установлена в альтернативную короткую версию ruby в формате `x.y`.
+
+`RUBY_EXTCONF`::
+Установлена в альтернативное имя для extconf.rb (по умолчанию: extconf.rb).
+
+`RUBY_EXTCONF_SUBDIRS`::
+Установлена в список подкаталогов, если включено несколько модулей.
+
+`RUBY_SETUP`::
+Установлена в альтернативное имя для setup.rb (по умолчанию: setup.rb).
-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-samba]]
== `samba`
-Possible arguments: `build`, `env`, `lib`, `run`
+Возможные аргументы: `build`, `env`, `lib`, `run`
+
+Обработать зависимость от Samba. `env` не добавит никаких зависимостей, а только установит переменные. `build` и `run` добавят зависимости во время сборки и выполнения на [.filename]#smbd#. `lib` добавит зависимость на [.filename]#libsmbclient.so#. Экспортируемые переменные:
+
+`SAMBA_PORT`::
+Расположение порта Samba по умолчанию.
-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:
+`SAMBA_INCLUDEDIR`::
+Расположение заголовочных файлов Samba.
-`SAMBAPORT`::
-The origin of the default Samba port.
+`SAMBA_LIBS`::
+Каталог, в котором доступны общие библиотеки Samba.
-`SAMBAINCLUDES`::
-The location of the Samba header files.
+`SAMBA_LDB_PORT`::
+Расположение порта ldb, используемого выбранной версией Samba (например, package:databases/ldb28[]). Он должен использоваться, если порту требуется зависимость от той же версии ldb, что и у выбранной версии Samba.
-`SAMBALIBS`::
-The directory where the Samba shared libraries are available.
+`SAMBA_TALLOC_PORT`::
+Расположение порта talloc, используемого выбранной версией Samba. Следует использовать, если порту требуется зависеть от той же версии talloc, что и выбранная версия Samba.
+
+`SAMBA_TDB_PORT`::
+Расположение порта TDB, используемого выбранной версией Samba. Его следует использовать, если порту требуется зависеть от той же версии TDB, что и выбранная версия Samba.
+
+`SAMBA_TEVENT_PORT`::
+Расположение порта tevent, используемого выбранной версией Samba. Это следует использовать, если порту необходимо зависеть от той же версии tevent, что и выбранная версия Samba.
[[uses-scons]]
== `scons`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для использования package:devel/scons[]. Дополнительную информацию смотрите в crossref:special[using-scons,Использование `scons`].
+
+[[uses-sdl]]
+== `sdl`
+
+Возможные аргументы: `sdl`
+
+Обеспечить поддержку использования пакетов `SDL`. Переменная `USE_SDL` является обязательной и указывает, какие компоненты добавить в зависимости.
+
+Поддерживаемые в настоящее время модули `SDL1.2`:
+
+* sdl
+* console
+* gfx
+* image
+* mixer
+* mm
+* net
+* pango
+* sound
+* ttf
-Provide support for the use of package:devel/scons[].
-See crossref:special[using-scons,Using `scons`] for more information.
+Текущие поддерживаемые модули `SDL2`:
+
+ * sdl2
+ * gfx2
+ * image2
+ * mixer2
+ * net2
+ * sound2
+ * ttf2
+
+Текущие поддерживаемые модули `SDL3`:
+
+ * sdl3
+ * image3
+ * ttf3
[[uses-shared-mime-info]]
== `shared-mime-info`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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.
+Использует update-mime-database из пакета package:misc/shared-mime-info[]. Это автоматически добавит шаг post-install таким образом, что сам порт всё ещё может указать собственный шаг post-install при необходимости. Также добавляет запись crossref:plist[plist-keywords-shared-mime-info,`@shared-mime-info`] в plist.
[[uses-shebangfix]]
== `shebangfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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`.
+Множество программ используют некорректные расположения для интерпретаторов скриптов, особенно [.filename]#/usr/bin/perl# и [.filename]#/bin/bash#. Макрос shebangfix исправляет строки shebang в скриптах, перечисленных в `SHEBANG_REGEX`, `SHEBANG_GLOB` или `SHEBANG_FILES`.
`SHEBANG_REGEX`::
-Contains _one_ extended regular expressions, and is used with the `-iregex` argument of man:find[1].
-See <<uses-shebangfix-ex-regex>>.
+Содержит _одно_ расширенное регулярное выражение и используется с аргументом `-iregex` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-regex,`USESshebangfix` с `SHEBANG_REGEX`].
`SHEBANG_GLOB`::
-Contains a list of patterns used with the `-name` argument of man:find[1].
-See <<uses-shebangfix-ex-glob>>.
+Содержит список шаблонов, используемых с аргументом `-name` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` с `SHEBANG_GLOB`].
`SHEBANG_FILES`::
-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>>.
+Содержит список файлов или шаблонов man:sh[1]. Макрос shebangfix выполняется из `${WRKSRC}`, поэтому `SHEBANG_FILES` может содержать пути, относительные к `${WRKSRC}`. Также он может работать с абсолютными путями, если требуется исправление файлов вне `${WRKSRC}`. См. crossref:uses[uses-shebangfix-ex-files,`USESshebangfix` с `SHEBANG_FILES`].
-Currently Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl, and Tk are supported by default.
+В настоящее время Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl и Tk поддерживаются по умолчанию.
-There are three configuration variables:
+Существует три переменных конфигурации:
`SHEBANG_LANG`::
-The list of supported interpreters.
+Список поддерживаемых интерпретаторов.
`_interp__CMD`::
-The path to the command interpreter on FreeBSD.
-The default value is `${LOCALBASE}/bin/_interp_`.
+Путь к интерпретатору команд в FreeBSD. Значение по умолчанию — `${LOCALBASE}/bin/_interp_`.
`_interp__OLD_CMD`::
-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`.
+Список неправильных вызовов интерпретаторов. Обычно это устаревшие пути или пути, используемые в других операционных системах, которые неверны в FreeBSD. Они будут заменены на правильные пути в `_interp__CMD`.
+
[NOTE]
====
-These will _always_ be part of `_interp__OLD_CMD`: `"/usr/bin/env _interp_" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`.
+Эти пути _всегда_ будут частью `_interp__OLD_CMD`: `"/usr/bin/env _interp_" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`.
====
+
[TIP]
====
-`_interp__OLD_CMD` contain multiple values.
-Any entry with spaces must be quoted.
-See <<uses-shebangfix-ex-ksh>>.
+`_interp__OLD_CMD` содержит несколько значений. Любая запись с пробелами должна быть заключена в кавычки. См. crossref:uses[uses-shebangfix-ex-ksh,Указание всех путей при добавлении интерпретатора в `USESshebangfix`].
====
[IMPORTANT]
====
-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.
+Исправление шебанг-строк выполняется на этапе `patch`. Если скрипты создаются с некорректными шебанг-строками на этапе `build`, процесс сборки (например, скрипт [.filename]#configure# или [.filename]#Makefiles#) должен быть исправлен или ему должен быть указан правильный путь (например, с помощью `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV` или `MAKE_ARGS`) для генерации корректных шебанг-строк.
-Correct paths for supported interpreters are available in `_interp__CMD`.
+Правильные пути для поддерживаемых интерпретаторов доступны в `_interp__CMD`.
====
[TIP]
====
-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`.
+При использовании с crossref:uses[uses-python,`USES=python`], если цель состоит только в исправлении shebang, но зависимость от самого Python не требуется, используйте `USES=python:env`.
====
[[uses-shebangfix-ex-lua]]
-.Adding Another Interpreter to `USES=shebangfix`
+.Добавление другого интерпретатора в `USES=shebangfix`
[example]
====
-To add another interpreter, set `SHEBANG_LANG`.
-For example:
+Чтобы добавить другой интерпретатор, установите `SHEBANG_LANG`. Например:
[.programlisting]
....
@@ -1521,10 +2272,10 @@ SHEBANG_LANG= lua
====
[[uses-shebangfix-ex-ksh]]
-.Specifying all the Paths When Adding an Interpreter to `USES=shebangfix`
+.Указание всех путей при добавлении интерпретатора в `USES=shebangfix`
[example]
====
-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:
+Если они еще не были определены и не было значений по умолчанию для `_interp__OLD_CMD` и `_interp__CMD`, запись Ksh можно определить как:
[.programlisting]
....
@@ -1536,12 +2287,10 @@ ksh_CMD= ${LOCALBASE}/bin/ksh
====
[[uses-shebangfix-ex-strange]]
-.Adding a Strange Location for an Interpreter
+.Добавление нестандартного расположения интерпретатора
[example]
====
-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#:
+Некоторое программное обеспечение использует нестандартные пути для интерпретатора. Например, приложение может ожидать, что Python будет расположен в [.filename]#/opt/bin/python2.7#. Нестандартный путь, который нужно заменить, можно указать в [.filename]#Makefile# порта:
[.programlisting]
....
@@ -1551,10 +2300,10 @@ python_OLD_CMD= /opt/bin/python2.7
====
[[uses-shebangfix-ex-regex]]
-.`USES=shebangfix` with `SHEBANG_REGEX`
+.`USES=shebangfix` с `SHEBANG_REGEX`
[example]
====
-To fix all the files in `${WRKSRC}/scripts` ending in [.filename]#.pl#, [.filename]#.sh#, or [.filename]#.cgi# do:
+Для исправления всех файлов в `${WRKSRC}/scripts`, оканчивающихся на [.filename]#.pl#, [.filename]#.sh# или [.filename]#.cgi#, выполните:
[.programlisting]
....
@@ -1564,17 +2313,16 @@ SHEBANG_REGEX= ./scripts/.*\.(sh|pl|cgi)
[NOTE]
======
-`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.
+`SHEBANG_REGEX` используется при выполнении `find -E`, который применяет современные регулярные выражения, также известные как расширенные регулярные выражения. Подробнее см. в man:re_format[7].
======
====
[[uses-shebangfix-ex-glob]]
-.`USES=shebangfix` with `SHEBANG_GLOB`
+.`USES=shebangfix` с `SHEBANG_GLOB`
[example]
====
-To fix all the files in `${WRKSRC}` ending in [.filename]#.pl# or [.filename]#.sh#, do:
+Для исправления всех файлов в `${WRKSRC}` с окончанием [.filename]#.pl# или [.filename]#.sh# выполните:
[.programlisting]
....
@@ -1585,10 +2333,10 @@ SHEBANG_GLOB= *.sh *.pl
====
[[uses-shebangfix-ex-files]]
-.`USES=shebangfix` with `SHEBANG_FILES`
+.`USES=shebangfix` с `SHEBANG_FILES`
[example]
====
-To fix the files [.filename]#script/foobar.pl# and [.filename]#script/*.sh# in `${WRKSRC}`, do:
+Для исправления файлов [.filename]#script/foobar.pl# и [.filename]#script/*.sh# в `${WRKSRC}` выполните:
[.programlisting]
....
@@ -1601,38 +2349,42 @@ SHEBANG_FILES= scripts/foobar.pl scripts/*.sh
[[uses-sqlite]]
== `sqlite`
-Possible arguments: (none), `2`, `3`
+Возможные аргументы: (нет), `2`, `3`
+
+Добавить зависимость от SQLite. Используемая по умолчанию версия — 3, но также возможна версия 2 с использованием модификатора `:2`.
+
+[[uses-sbrk]]
+== `sbrk`
+
+Возможные аргументы: (отсутствуют)
-Add a dependency on SQLite.
-The default version used is 3, but version 2 is also possible using the `:2` modifier.
+Помечает порт как `BROKEN` для `aarch64` и `riscv64`.
[[uses-ssl]]
== `ssl`
-Possible arguments: (none), `build`, `run`
+Возможные аргументы: (нет), `build`, `run`
-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`:
+Обеспечить поддержку OpenSSL. Зависимость только для сборки или выполнения может быть указана с использованием `build` или `run`. Эти переменные доступны для использования портом, а также добавлены в `MAKE_ENV`:
`OPENSSLBASE`::
-Path to the OpenSSL installation base.
+Путь к базовой установке OpenSSL.
`OPENSSLDIR`::
-Path to OpenSSL's configuration files.
+Путь к файлам конфигурации OpenSSL.
`OPENSSLLIB`::
-Path to the OpenSSL libraries.
+Путь к библиотекам OpenSSL.
`OPENSSLINC`::
-Path to the OpenSSL includes.
+Путь к заголовочным файлам OpenSSL.
`OPENSSLRPATH`::
-If defined, the path the linker needs to use to find the OpenSSL libraries.
+Если определено, путь, который требуется компоновщику для поиска библиотек OpenSSL.
[TIP]
====
-If a port does not build with an OpenSSL flavor, set the `BROKEN_SSL` variable, and possibly the `BROKEN_SSL_REASON__flavor_`:
+Если порт не собирается с вариантом OpenSSL, установите переменную `BROKEN_SSL`, а также, возможно, `BROKEN_SSL_REASON__flavor_`:
[.programlisting]
....
@@ -1645,282 +2397,351 @@ BROKEN_SSL_REASON_libressl= needs features only available in OpenSSL
[[uses-tar]]
== `tar`
-Possible arguments: (none), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, `tgz`, `txz`, `xz`
+Возможные аргументы: (нет), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, `tgz`, `txz`, `xz`, `zst`, `zstd`
-Set `EXTRACT_SUFX` to `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz` or `.tar.xz` respectively.
+Установите `EXTRACT_SUFX` в `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` или `.tar.zstd` соответственно.
[[uses-tcl]]
== `tcl`
-Possible arguments: _version_, `wrapper`, `build`, `run`, `tea`
+Возможные аргументы: _version_, `wrapper`, `build`, `run`, `tea`
-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:
+Добавьте зависимость от Tcl. Конкретная версия может быть запрошена с помощью _version_. Версия может быть пустой, одной или несколькими точными номерами версий (в настоящее время `84`, `85` или `86`), либо минимальным номером версии (в настоящее время `84+`, `85+` или `86+`). Чтобы запросить только неспецифичную для версии обёртку, используйте `wrapper`. Зависимость только на время сборки или выполнения может быть указана с помощью `build` или `run`. Для сборки порта с использованием Tcl Extension Architecture используйте `tea`. После включения [.filename]#bsd.port.pre.mk# порт может проверить результаты с помощью этих переменных:
-* `TCL_VER`: chosen major.minor version of Tcl
-* `TCLSH`: full path of the Tcl interpreter
-* `TCL_LIBDIR`: path of the Tcl libraries
-* `TCL_INCLUDEDIR`: path of the Tcl C header files
-* `TK_VER`: chosen major.minor version of Tk
-* `WISH`: full path of the Tk interpreter
-* `TK_LIBDIR`: path of the Tk libraries
-* `TK_INCLUDEDIR`: path of the Tk C header files
+* `TCL_VER`: выбранная версия Tcl в формате major.minor
+* `TCLSH`: полный путь к интерпретатору Tcl
+* `TCL_LIBDIR`: путь к библиотекам Tcl
+* `TCL_INCLUDEDIR`: путь к заголовочным файлам Tcl на языке C
+* `TCL_PKG_LIB_PREFIX`: Префикс библиотеки, согласно TIP595
+* `TCL_PKG_STUB_POSTFIX`: Постфикс библиотеки заглушки
+* `TK_VER`: выбранная версия Tk в формате major.minor
+* `WISH`: полный путь к интерпретатору Tk
+* `TK_LIBDIR`: путь к библиотекам Tk
+* `TK_INCLUDEDIR`: путь к заголовочным файлам Tk на языке C
[[uses-terminfo]]
== `terminfo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Добавляет crossref:plist[plist-keywords-terminfo,`@terminfo`] в файл [.filename]#plist#. Используется, когда порт устанавливает файлы [.filename]#*.terminfo# в каталог [.filename]#${PREFIX}/share/misc#.
+
+[[uses-tex]]
+== `tex`
+
+Возможные аргументы: (отсутствуют)
+
+Обеспечить поддержку tex. Загружает все стандартные переменные для портов, связанных с TEX, и не добавляет зависимостей от других портов.
+
+Переменные используются для указания того, какие модули TEX требуются.
-Adds crossref:plist[plist-keywords-terminfo,`@terminfo`] to the [.filename]#plist#.
-Use when the port installs [.filename]#*.terminfo# files in [.filename]#${PREFIX}/share/misc#.
+`USE_TEX`::
+Список необходимых расширений TEX во время выполнения. Добавьте `:build` к названию расширения, чтобы добавить зависимость на время сборки, `:run` — для зависимости во время выполнения, `:test` — для зависимости во время тестирования, `:extract` — для зависимости во время извлечения. Пример: `base texmf:build source:run`
+
+Текущие возможные аргументы следующие:
+
+* `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`
-Same as arguments for `tcl`
+Так же, как аргументы для `tcl`
+
+Небольшая обертка при использовании Tcl и Tk. Возвращаются те же переменные, что и при использовании Tcl.
+
+[[uses-trigger]]
+== `trigger`
-Small wrapper when using both Tcl and Tk.
-The same variables are returned as when using Tcl.
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для портов, требующих выполнения триггеров с помощью man:pkg[8]. Триггеры выполняются в конце транзакции, если условия выполнены.
+
+Следующая переменная может быть установлена портами:
+
+`TRIGGERS`::
+Список триггеров для пакета. По умолчанию используется `${PORTNAME}`.
+
+Триггеры указываются в формате UCL и обычно размещаются в каталоге [.filename]#files/# порта.
[[uses-uidfix]]
== `uidfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-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.
+Изменяет некоторые стандартные настройки (в основном переменные) системы сборки, чтобы позволить установку этого порта обычным пользователем. Попробуйте это в порте перед использованием crossref:uses[uses-fakeroot,`USES=fakeroot`] или исправлением.
[[uses-uniquefiles]]
== `uniquefiles`
-Possible arguments: (none), `dirs`
+Возможные аргументы: (нет), `dirs`
+
+Сделать файлы или каталоги 'уникальными', добавляя префикс или суффикс. Если используется аргумент `dirs`, порту требуется префикс (и только префикс) на основе `UNIQUE_PREFIX` для стандартных каталогов `DOCSDIR`, `EXAMPLESDIR`, `DATADIR`, `WWWDIR`, `ETCDIR`. Эти переменные доступны для портов:
-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:
+* `UNIQUE_PREFIX`: Префикс, используемый для каталогов и файлов. По умолчанию: `${PKGNAMEPREFIX}`.
+* `UNIQUE_PREFIX_FILES`: Список файлов, которые необходимо предварить префиксом. По умолчанию: пусто.
+* `UNIQUE_SUFFIX`: Суффикс, используемый для файлов. По умолчанию: `${PKGNAMESUFFIX}`.
+* `UNIQUE_SUFFIX_FILES`: Список файлов, к которым необходимо добавить суффикс. По умолчанию: пусто.
-* `UNIQUE_PREFIX`: The prefix to be used for directories and files. Default: `${PKGNAMEPREFIX}`.
-* `UNIQUE_PREFIX_FILES`: A list of files that need to be prefixed. Default: empty.
-* `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`
+
+Возможные аргументы: `build`, `lib`, `no_depend`
+
+Добавляет зависимости сборки или библиотеки на package:lang/vala[]. Аргумент `no_depend` зарезервирован для самого package:lang/vala[].
[[uses-varnish]]
== `varnish`
-Possible arguments: `4`, `6`
+Возможные аргументы: `4` (по умолчанию), `6`, `7`
+
+Обрабатывает зависимости для Varnish Cache. Добавляет зависимость от пакета `package:www/varnish*[]`.
+
+[[uses-waf]]
+== `waf`
+
+Возможные аргументы: (отсутствуют)
+
+Обеспечить поддержку портов, использующих систему сборки `waf`.
+
+Это подразумевает `USES=python:build`.
+
+Следующие переменные экспортируются для использования портом:
+
+`WAF_CMD`::
+Расположение скрипта `waf`. Установите этот параметр, если скрипт `waf` не находится в [.filename]#WRKSRC/waf#.
+
+`CONFIGURE_TARGET`::
+Цель для `configure`. По умолчанию – `configure`.
+
+`ALL_TARGET`::
+Цель для `all`. По умолчанию `build`.
-Handle dependencies on Varnish Cache.
-`4` will add a dependency on package:www/varnish4[].
-`6` will add a dependency on package:www/varnish6[].
+`INSTALL_TARGET`::
+Цель для `install`. По умолчанию `install`.
[[uses-webplugin]]
== `webplugin`
-Possible arguments: (none), `ARGS`
+Возможные аргументы: (нет), `ARGS`
-Automatically create and remove symbolic links for each application that supports the webplugin framework.
-`ARGS` can be one of:
+Автоматически создавать и удалять символические ссылки для каждого приложения, поддерживающего фреймворк webplugin. `ARGS` может быть одним из:
-* `gecko`: support plug-ins based on Gecko
-* `native`: support plug-ins for Gecko, Opera, and WebKit-GTK
-* `linux`: support Linux plug-ins
-* `all` (default, implicit): support all plug-in types
-* (individual entries): support only the browsers listed
+* `gecko`: поддержка плагинов на основе Gecko
+* `native`: поддержка плагинов для Gecko, Opera и WebKit-GTK
+* `linux`: поддержка Linux плагинов
+* `all` (по умолчанию, неявно): поддержка всех типов плагинов
+* (отдельные записи): поддерживаются только перечисленные браузеры
-These variables can be adjusted:
+Эти переменные можно настроить:
-* `WEBPLUGIN_FILES`: No default, must be set manually. The plug-in files to install.
-* `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.
-* `WEBPLUGIN_NAME`: The final directory to install the plug-in files into, default `PKGBASE`.
+* `WEBPLUGIN_FILES`: Значение по умолчанию отсутствует, должно быть установлено вручную. Файлы плагинов для установки.
+* `WEBPLUGIN_DIR`: Каталог для установки файлов плагина, по умолчанию [.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Установите это значение, если порт устанавливает файлы плагина вне стандартного каталога, чтобы избежать битых символических ссылок.
+* `WEBPLUGIN_NAME`: Конечный каталог для установки файлов плагина, по умолчанию `PKGBASE`.
[[uses-xfce]]
== `xfce`
-Possible arguments: (none), `gtk2`
+Возможные аргументы: (нет), `gtk2`
-Provide support for Xfce related ports.
-See crossref:special[using-xfce,Using Xfce] for details.
+Предоставить поддержку для портов, связанных с Xfce. Подробности см. в crossref:special[using-xfce,Использование Xfce].
-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[].
+Аргумент `gtk2` указывает, что порт требует поддержки GTK2. Он добавляет дополнительные возможности, предоставляемые некоторыми основными компонентами, например, package:x11/libxfce4menu[] и package:x11-wm/xfce4-panel[].
[[uses-xorg]]
== `xorg`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on X.org components.
-The components should be listed in `USE_XORG`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов X.org. Компоненты должны быть перечислены в `USE_XORG`. Доступные компоненты:
[[using-x11-components]]
-.Available X.Org Components
+.Доступные компоненты X.Org
[cols="1,1", frame="none", options="header"]
|===
-| Name
-| Description
+| Имя
+| Описание
|`dmx`
-|DMX extension library
+|Библиотека расширений DMX
|`fontenc`
-|The fontenc Library
+|Библиотека fontenc
|`fontutil`
-|Create an index of X font files in a directory
+|Создать индекс файлов шрифтов X в каталоге
|`ice`
-|Inter Client Exchange library for X11
+|Библиотека Inter Client Exchange для X11
|`libfs`
-|The FS library
+|Библиотека FS
|`pciaccess`
-|Generic PCI access library
+|Универсальная библиотека доступа к PCI
|`pixman`
-|Low-level pixel manipulation library
+|Библиотека для низкоуровневого управления пикселями
|`sm`
-|Session Management library for X11
+|Библиотека управления сеансами для X11
|`x11`
-|X11 library
+|Библиотека X11
|`xau`
-|Authentication Protocol library for X11
+|Библиотека протокола аутентификации для X11
|`xaw`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xaw6`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xaw7`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xbitmaps`
-|X.Org bitmaps data
+|Данные растровых изображений X.Org
|`xcb`
-|The X protocol C-language Binding (XCB) library
+|Библиотека с интерфейсом языка С для X протокола (XCB)
|`xcomposite`
-|X Composite extension library
+|Библиотека расширения X Composite
|`xcursor`
-|X client-side cursor loading library
+|X библиотека загрузки курсоров на стороне клиента
|`xdamage`
-|X Damage extension library
+|Библиотека расширения X Damage
|`xdmcp`
-|X Display Manager Control Protocol library
+|Библиотека протокола управления дисплейным менеджером X (XDMCP)
|`xext`
-|X11 Extension library
+|Библиотека расширений X11
|`xfixes`
-|X Fixes extension library
+|Библиотека расширений X Fixes
|`xfont`
-|X font library
+|Библиотека шрифтов X
|`xfont2`
-|X font library
+|Библиотека шрифтов X
|`xft`
-|Client-sided font API for X applications
+|Клиентский API шрифтов для приложений X
|`xi`
-|X Input extension library
+|Библиотека расширения X Input
|`xinerama`
-|X11 Xinerama library
+|Библиотека X11 Xinerama
|`xkbfile`
-|XKB file library
+|Библиотека файлов XKB
|`xmu`
-|X Miscellaneous Utilities libraries
+|Библиотека X Miscellaneous Utilities
|`xmuu`
-|X Miscellaneous Utilities libraries
+|Библиотека X Miscellaneous Utilities
|`xorg-macros`
-|X.Org development aclocal macros
+|X.Org макросы разработки aclocal
|`xorg-server`
-|X.Org X server and related programs
+|Сервер X.Org X и относящиеся к нему программы
|`xorgproto`
-|xorg protocol headers
+|Заголовочные файлы протокола xorg
|`xpm`
-|X Pixmap library
+|Библиотека X Pixmap
|`xpresent`
-|X Present Extension library
+|Библиотека расширений X Present
|`xrandr`
-|X Resize and Rotate extension library
+|Библиотека расширений X Resize and Rotate
|`xrender`
-|X Render extension library
+|Библиотека расширения X Render
|`xres`
-|X Resource usage library
+|Библиотека мониторинга ресурсов X Resource usage
|`xscrnsaver`
-|The XScrnSaver library
+|Библиотека XScrnSaver
|`xshmfence`
-|Shared memory 'SyncFence' synchronization primitive
+|Примитив синхронизации "SyncFence" в разделяемой памяти
|`xt`
-|X Toolkit library
+|Библиотека X Toolkit
|`xtrans`
-|Abstract network code for X
+|Абстрактный сетевой код для X
|`xtst`
-|X Test extension
+|Расширение X Test
|`xv`
-|X Video Extension library
+|Библиотека расширения X Video
|`xvmc`
-|X Video Extension Motion Compensation library
+|Библиотека X Video Extension Motion Compensation
|`xxf86dga`
-|X DGA Extension
+|Расширение X DGA
|`xxf86vm`
-|X Vidmode Extension
+|Расширение X Vidmode
|===
[[uses-xorg-cat]]
== `xorg-cat`
-Possible arguments: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, `util`, `xserver` and (none) or one off `autotools` (default), `meson`
+Возможные аргументы: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, `util`, `xserver` и (без аргументов) или один из `autotools` (по умолчанию), `meson`
-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.
+Обеспечивает поддержку сборки компонентов Xorg. Управляет настройкой общих зависимостей и необходимой конфигурационной среды. Предназначено только для компонентов Xorg.
-The category has to match upstream categories.
+Категория должна соответствовать категориям вышестоящего репозитория.
-The second argument is the build system to use.
-autotools is the default, but meson is also supported.
+Второй аргумент — используемая система сборки. По умолчанию используется `autotools`, но также поддерживается `meson`.
[[uses-zip]]
== `zip`
-Possible arguments: (none), `infozip`
+Возможные аргументы: (нет), `infozip`
-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.
+Указывает, что файлы дистрибутива используют алгоритм сжатия ZIP. Для файлов, использующих алгоритм InfoZip, необходимо передать аргумент `infozip`, чтобы установить соответствующие зависимости.
diff --git a/documentation/content/ru/books/porters-handbook/uses/_index.po b/documentation/content/ru/books/porters-handbook/uses/_index.po
new file mode 100644
index 0000000000..8326053acb
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/uses/_index.po
@@ -0,0 +1,9971 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookuses_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Макросы USES упрощают объявление требований и настроек для порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1
+#, no-wrap
+msgid "Chapter 17. Using USES Macros"
+msgstr "Глава 17. Использование макроса USES"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:14
+#, no-wrap
+msgid "Using `USES` Macros"
+msgstr "Использование макроса `USES`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to `USES`"
+msgstr "Введение в `USES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:56
+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 ""
+"Макросы `USES` упрощают объявление требований и настроек для порта. Они "
+"могут добавлять зависимости, изменять поведение при сборке, добавлять "
+"метаданные в пакеты и так далее, просто выбирая предустановленные значения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:60
+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 ""
+"Каждый раздел в этой главе описывает возможное значение для `USES`, а также "
+"его возможные аргументы. Аргументы добавляются к значению после двоеточия "
+"(`:`). Несколько аргументов разделяются запятыми (`,`)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:62
+#, no-wrap
+msgid "Using Multiple Values"
+msgstr "Использование нескольких значений"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:68
+#, no-wrap
+msgid "USES=\tbison perl\n"
+msgstr "USES=\tbison perl\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:72
+#, no-wrap
+msgid "Adding an Argument"
+msgstr "Добавление аргумента"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:78
+#, no-wrap
+msgid "USES=\ttar:xz\n"
+msgstr "USES=\ttar:xz\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:82
+#, no-wrap
+msgid "Adding Multiple Arguments"
+msgstr "Добавление нескольких аргументов"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:88
+#, no-wrap
+msgid "USES=\tdrupal:7,theme\n"
+msgstr "USES=\tdrupal:7,theme\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:92
+#, no-wrap
+msgid "Mixing it All Together"
+msgstr "Смешивая Все Вместе"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:98
+#, no-wrap
+msgid "USES=\tpgsql:9.3+ cpe python:2.7,build\n"
+msgstr "USES=\tpgsql:9.3+ cpe python:2.7,build\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:102
+#, no-wrap
+msgid "`7z`"
+msgstr "`7z`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:105
+msgid "Possible arguments: (none), `p7zip`, `partial`"
+msgstr "Возможные аргументы: (нет), `p7zip`, `partial`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:109
+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 ""
+"Извлечение с использованием man:7z[1] вместо man:bsdtar[1] и устанавливает "
+"`EXTRACT_SUFX=.7z`. Опция `p7zip` добавляет зависимость от `7z` из "
+"package:archivers/p7zip[], если версия из базовой системы не может извлечь "
+"файлы. `EXTRACT_SUFX` не изменяется, если используется опция `partial`, это "
+"может быть полезно, если основной дистрибутивный файл не имеет расширения "
+"[.filename]#.7z#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:111
+#, no-wrap
+msgid "`ada`"
+msgstr "`ada`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:114
+msgid "Possible arguments: (none), `6`, `12`, `(run)`"
+msgstr "Возможные аргументы: (нет), `6`, `12`, `(запуск)`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:117
+msgid ""
+"Depends on an Ada-capable compiler, and sets `CC` accordingly. Defaults to "
+"use `gcc6-aux` from ports."
+msgstr ""
+"Зависит от компилятора с поддержкой Ada и устанавливает `CC` соответствующим "
+"образом. По умолчанию используется `gcc6-aux` из портов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:119
+#, no-wrap
+msgid "`angr`"
+msgstr "`angr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:122
+msgid "Possible arguments: `binaries`, `nose`"
+msgstr "Возможные аргументы: `binaries`, `nose`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:124
+msgid ""
+"Provide support for ports that need the https://github.com/angr/"
+"angr[angrinary analysis platform]."
+msgstr ""
+"Обеспечить поддержку портов, требующих https://github.com/angr/"
+"angr[платформу бинарного анализа angr]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:127
+msgid ""
+"If the `binaries` argument is present, the port requires the special `angr` "
+"binaries for testing."
+msgstr ""
+"Если присутствует аргумент `binaries`, для тестирования порта требуются "
+"специальные бинарные файлы `angr`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:130
+msgid ""
+"If the `nose` argument is present, the port uses `nosetests` for the test "
+"target. This argument implies `USES=python:test`."
+msgstr ""
+"Если присутствует аргумент `nose`, порт использует `nosetests` для цели "
+"тестирования. Этот аргумент подразумевает `USES=python:test`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:132
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:203
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1331
+msgid "The framework provides the following variables to be set by the port:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть установлены "
+"портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:133
+#, no-wrap
+msgid "`ANGR_VERSION`"
+msgstr "`ANGR_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:135
+msgid "The version of the `angr` project programs."
+msgstr "Версия программ проекта `angr`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:136
+#, no-wrap
+msgid "`ANGR_BINARIES_TAGNAME`"
+msgstr "`ANGR_BINARIES_TAGNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:138
+msgid "The tagname of the `angr` binaries."
+msgstr "Имя тега для бинарных файлов `angr`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:139
+#, no-wrap
+msgid "`ANGR_NOSETESTS`"
+msgstr "`ANGR_NOSETESTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:141
+msgid "The path to the `nosetests` program."
+msgstr "Путь к программе `nosetests`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:143
+#, no-wrap
+msgid "`ansible`"
+msgstr "`ansible`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:146
+msgid "Possible arguments: `env`, `module`, `plugin`"
+msgstr "Возможные аргументы: `env`, `module`, `plugin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:148
+msgid "Provide support for ports depending on package:sysutils/ansible[]."
+msgstr ""
+"Обеспечивает поддержку портов, зависящих от пакета package:sysutils/"
+"ansible[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:151
+msgid ""
+"If the `env` argument is present, the port does not depend on "
+"package:sysutils/ansible[] but needs some Ansible variables set."
+msgstr ""
+"Если присутствует аргумент `env`, порт не зависит от package:sysutils/"
+"ansible[], но требует установки некоторых переменных Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:153
+msgid "If the `module` argument is present then the port is an Ansible module."
+msgstr "Если присутствует аргумент `module`, то порт является модулем Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:155
+msgid "If the `plugin` argument is present then the port is an Ansible plugin."
+msgstr ""
+"Если присутствует аргумент `plugin`, то порт является плагином Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:157
+msgid "The framework exposes the following variables to the port:"
+msgstr "Фреймворк предоставляет следующие переменные порту:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:158
+#, no-wrap
+msgid "`ANSIBLE_CMD`"
+msgstr "`ANSIBLE_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:160
+msgid "Path to the ansible program."
+msgstr "Путь к программе ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:161
+#, no-wrap
+msgid "`ANSIBLE_DOC_CMD`"
+msgstr "`ANSIBLE_DOC_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:163
+msgid "Path to the ansible-doc program."
+msgstr "Путь к программе ansible-doc."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:164
+#, no-wrap
+msgid "`ANSIBLE_RUN_DEPENDS`"
+msgstr "`ANSIBLE_RUN_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:166
+msgid "RUN_DEPENDS with the Ansible port."
+msgstr "RUN_DEPENDS с портом Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:167
+#, no-wrap
+msgid "`ANSIBLE_DATADIR`"
+msgstr "`ANSIBLE_DATADIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:169
+msgid ""
+"Path to the root of the directory structure where all Ansible's modules and "
+"plugins are stored."
+msgstr ""
+"Путь к корню структуры каталогов, где хранятся все модули и плагины Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:170
+#, no-wrap
+msgid "`ANSIBLE_ETCDIR`"
+msgstr "`ANSIBLE_ETCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:172
+msgid "Path to the Ansible etc directory."
+msgstr "Путь к каталогу etc Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:173
+#, no-wrap
+msgid "`ANSIBLE_PLUGINS_PREFIX`"
+msgstr "`ANSIBLE_PLUGINS_PREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:175
+msgid "Path to the \"plugins\" directory within `${ANSIBLE_DATADIR}`."
+msgstr "Путь к директории \"plugins\" в `${ANSIBLE_DATADIR}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:175
+#, no-wrap
+msgid "`ANSIBLE_MODULESDIR`"
+msgstr "`ANSIBLE_MODULESDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:177
+msgid "Path to the directory for local Ansible modules."
+msgstr "Путь к каталогу для локальных модулей Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:178
+#, no-wrap
+msgid "`ANSIBLE_PLUGINSDIR`"
+msgstr "`ANSIBLE_PLUGINSDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:180
+msgid "Path to the directory for local Ansible plugins."
+msgstr "Путь к каталогу для локальных плагинов Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:181
+#, no-wrap
+msgid "`ANSIBLE_PLUGIN_TYPE`"
+msgstr "`ANSIBLE_PLUGIN_TYPE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:183
+msgid "Ansible plugin type (e.g., \"connection\", \"inventory\", or \"vars\")."
+msgstr ""
+"Тип плагина Ansible (например, \"connection\", \"inventory\" или \"vars\")."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:185
+#, no-wrap
+msgid "`apache`"
+msgstr "`apache`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:188
+msgid "Possible arguments: (none), `2.4`, `build`, `run`, `server`"
+msgstr "Возможные аргументы: (нет), `2.4`, `build`, `run`, `server`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:190
+msgid "Provide support for ports depending on the Apache web server."
+msgstr "Обеспечивает поддержку портов, зависящих от веб-сервера Apache."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:194
+msgid ""
+"The version argument can be used to require a specific Apache httpd "
+"version. It is possible to set a specific version (`USES=apache:2.4`) a "
+"minimum version (`USES=apache:2.4+`) or a maximum version "
+"(`USES=apache:-2.4`)."
+msgstr ""
+"Аргумент `version` можно использовать для указания конкретной версии Apache "
+"httpd. Можно задать определённую версию (`USES=apache:2.4`), минимальную "
+"версию (`USES=apache:2.4+`) или максимальную версию (`USES=apache:-2.4`)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:196
+msgid ""
+"If the `build` argument is provided a build dependency is added to the port."
+msgstr ""
+"Если указан аргумент `build`, к порту добавляется зависимость для сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:198
+msgid ""
+"If the `run` argument is provided a run dependency is added to the port."
+msgstr ""
+"Если указан аргумент `run`, к порту добавляется зависимость времени "
+"выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:201
+msgid ""
+"If the `server` argument is provided then it indicates the port is a server "
+"port."
+msgstr ""
+"Если указан аргумент `server`, это означает, что порт является серверным."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:204
+#, no-wrap
+msgid "`AP_FAST_BUILD`"
+msgstr "`AP_FAST_BUILD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:206
+msgid "Automatic module build"
+msgstr "Автоматическая сборка модуля"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:207
+#, no-wrap
+msgid "`AP_GENPLIST`"
+msgstr "`AP_GENPLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:209
+msgid ""
+"Automatic `PLIST` generation plus add the module disabled into "
+"[.filename]#httpd.conf# (only if no `pkg-plist` exist)"
+msgstr ""
+"Автоматическое создание `PLIST` плюс добавление модуля в отключенном "
+"состоянии в [.filename]#httpd.conf# (только если нет файла `pkg-plist`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:210
+#, no-wrap
+msgid "`MODULENAME`"
+msgstr "`MODULENAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:212
+msgid "Name of the Apache module. Default: `${PORTNAME}`"
+msgstr "Имя модуля Apache. По умолчанию: `${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:213
+#, no-wrap
+msgid "`SHORTMODNAME`"
+msgstr "`SHORTMODNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:215
+msgid "Short name of the Apache module. Default: `${MODULENAME:S/mod_//}`"
+msgstr "Краткое название модуля Apache. По умолчанию: `${MODULENAME:S/mod_//}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:216
+#, no-wrap
+msgid "`SRC_FILE`"
+msgstr "`SRC_FILE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:218
+msgid "Source file of the APACHE module. Default: `${MODULENAME}.c`"
+msgstr "Исходный файл модуля APACHE. По умолчанию: `${MODULENAME}.c`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:220
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1544
+msgid "The following variables can be accessed by the port:"
+msgstr "Следующие переменные могут быть доступны для порта:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:221
+#, no-wrap
+msgid "`APACHE_VERSION`"
+msgstr "`APACHE_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:223
+msgid "The major-minor release version of the chosen Apache server, e.g. 2.4"
+msgstr ""
+"Основная-вспомогательная версия выбранного сервера Apache, например 2.4"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:224
+#, no-wrap
+msgid "`APACHEETCDIR`"
+msgstr "`APACHEETCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:226
+msgid ""
+"Location of the Apache configuration directory. Default: [.filename]#$"
+"{LOCALBASE}/etc/apache24#"
+msgstr ""
+"Расположение каталога конфигурации Apache. По умолчанию: [.filename]#$"
+"{LOCALBASE}/etc/apache24#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:227
+#, no-wrap
+msgid "`APACHEINCLUDEDIR`"
+msgstr "`APACHEINCLUDEDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:229
+msgid ""
+"Location of the Apache include files Default: [.filename]#${LOCALBASE}/"
+"include/apache24#"
+msgstr ""
+"Расположение include-файлов Apache. По умолчанию: [.filename]#${LOCALBASE}/"
+"include/apache24#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:230
+#, no-wrap
+msgid "`APACHEMODDIR`"
+msgstr "`APACHEMODDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:232
+msgid ""
+"Location of the Apache modules Default: [.filename]#${LOCALBASE}/libxexec/"
+"apache24#"
+msgstr ""
+"Расположение модулей Apache. По умолчанию: [.filename]#${LOCALBASE}/libxexec/"
+"apache24#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:234
+msgid "`APACHE_DEFAULT`::Default Apache version"
+msgstr "`APACHE_DEFAULT`::Версия Apache по умолчанию"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:237
+#, no-wrap
+msgid "`autoreconf`"
+msgstr "`autoreconf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:240
+msgid "Possible arguments: (none), `build`"
+msgstr "Возможные аргументы: (нет), `build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:247
+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 ""
+"Выполняет `autoreconf`. Эта команда объединяет функциональность `aclocal`, "
+"`autoconf`, `autoheader`, `automake`, `autopoint` и `libtoolize`. Каждая из "
+"этих команд применяется к [.filename]#${AUTORECONF_WRKSRC}/configure.ac# или "
+"его старому названию [.filename]#${AUTORECONF_WRKSRC}/configure.in#. Если "
+"[.filename]#configure.ac# определяет подкаталоги с их собственными "
+"[.filename]#configure.ac# с использованием `AC_CONFIG_SUBDIRS`, `autoreconf` "
+"также рекурсивно обновит их. Аргумент `:build` только добавляет зависимости "
+"времени сборки на эти инструменты, но не запускает `autoreconf`. Порт может "
+"установить `AUTORECONF_WRKSRC`, если `WRKSRC` не содержит путь к "
+"[.filename]#configure.ac#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:249
+#, no-wrap
+msgid "`azurepy`"
+msgstr "`azurepy`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:252
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:313
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:399
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:408
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:417
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:519
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:548
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:559
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:575
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:663
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:797
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:867
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:904
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:937
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:944
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1099
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1170
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1292
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1556
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1563
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1571
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1739
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1758
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1765
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1772
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1811
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1819
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1872
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1933
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1961
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2039
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2061
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2505
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2551
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2560
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2723
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2798
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2806
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2861
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2877
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2915
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2970
+msgid "Possible arguments: (none)"
+msgstr "Возможные аргументы: (отсутствуют)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:255
+msgid ""
+"Provide support for `py-azure*` ports. Removes `azure` namespaces and "
+"cleans up common files."
+msgstr ""
+"Обеспечить поддержку портов `py-azure*`. Удаляет пространства имен `azure` и "
+"очищает общие файлы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:257
+#, no-wrap
+msgid "`blaslapack`"
+msgstr "`blaslapack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:260
+msgid ""
+"Possible arguments: (none), `atlas`, `netlib` (default), `gotoblas`, "
+"`openblas`"
+msgstr ""
+"Возможные аргументы: (нет), `atlas`, `netlib` (по умолчанию), `gotoblas`, "
+"`openblas`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:262
+msgid "Adds dependencies on Blas / Lapack libraries."
+msgstr "Добавляет зависимости от библиотек Blas / Lapack."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:264
+#, no-wrap
+msgid "`bdb`"
+msgstr "`bdb`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:267
+msgid "Possible arguments: (none), `5` (default), `18`"
+msgstr "Возможные аргументы: (отсутствуют), `5` (по умолчанию), `18`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:275
+msgid ""
+"Add dependency on the Berkeley DB library. Default to package:databases/"
+"db5[]. It can also depend on package:databases/db18[] when using the `:18` "
+"argument. It is possible to declare a range of acceptable values, `:5+` "
+"finds the highest installed version, and falls back to 5 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 ""
+"Добавить зависимость от библиотеки Berkeley DB. По умолчанию используется "
+"package:databases/db5[]. Также может зависеть от package:databases/db18[] "
+"при использовании аргумента `:18`. Можно объявить диапазон допустимых "
+"значений: `:5+` находит самую высокую установленную версию и возвращается к "
+"5, если ничего другого не установлено. `INVALID_BDB_VER` можно использовать "
+"для указания версий, которые не работают с этим портом. Фреймворк "
+"предоставляет порту следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:276
+#, no-wrap
+msgid "`BDB_LIB_NAME`"
+msgstr "`BDB_LIB_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:279
+msgid ""
+"The name of the Berkeley DB library. For example, when using "
+"package:databases/db5[], it contains `db-5.3`."
+msgstr ""
+"Имя библиотеки Berkeley DB. Например, при использовании package:databases/"
+"db5[] она содержит `db-5.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:280
+#, no-wrap
+msgid "`BDB_LIB_CXX_NAME`"
+msgstr "`BDB_LIB_CXX_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:283
+msgid ""
+"The name of the Berkeley DBC++ library. For example, when using "
+"package:databases/db5[], it contains `db_cxx-5.3`."
+msgstr ""
+"Название библиотеки Berkeley DBC++. Например, при использовании "
+"package:databases/db5[] она содержит `db_cxx-5.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:284
+#, no-wrap
+msgid "`BDB_INCLUDE_DIR`"
+msgstr "`BDB_INCLUDE_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:287
+msgid ""
+"The location of the Berkeley DB include directory. For example, when using "
+"package:databases/db5[], it will contain `${LOCALBASE}/include/db5`."
+msgstr ""
+"Расположение каталога с заголовочными файлами Berkeley DB. Например, при "
+"использовании пакета package:databases/db5[], он будет содержать `$"
+"{LOCALBASE}/include/db5`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:288
+#, no-wrap
+msgid "`BDB_LIB_DIR`"
+msgstr "`BDB_LIB_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:291
+msgid ""
+"The location of the Berkeley DB library directory. For example, when using "
+"package:databases/db5[], it contains `${LOCALBASE}/lib`."
+msgstr ""
+"Расположение каталога библиотеки Berkeley DB. Например, при использовании "
+"package:databases/db5[], он содержит `${LOCALBASE}/lib`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:292
+#, no-wrap
+msgid "`BDB_VER`"
+msgstr "`BDB_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:295
+msgid ""
+"The detected Berkeley DB version. For example, if using `USES=bdb:5+` and "
+"Berkeley DB 18 is installed, it contains `18`."
+msgstr ""
+"Обнаруженная версия Berkeley DB. Например, при использовании `USES=bdb:5+` и "
+"установленной Berkeley DB 18, будет содержать `18`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:300
+msgid ""
+"package:databases/db48[] is deprecated and unsupported. It must not be used "
+"by any port."
+msgstr ""
+"package:databases/db48[] устарел и не поддерживается. Он не должен "
+"использоваться ни одним портом."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:303
+#, no-wrap
+msgid "`bison`"
+msgstr "`bison`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:306
+msgid "Possible arguments: (none), `build`, `run`, `both`"
+msgstr "Возможные аргументы: (нет), `build`, `run`, `both`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:308
+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 ""
+"Использует пакет package:devel/bison[] По умолчанию, без аргументов или с "
+"аргументом `build`, подразумевается, что `bison` является зависимостью на "
+"этапе сборки, `run` — зависимостью на этапе выполнения, а `both` — "
+"зависимостью как на этапе сборки, так и на этапе выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:310
+#, no-wrap
+msgid "`budgie`"
+msgstr "`budgie`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:317
+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 ""
+"Предоставить поддержку окружения рабочего стола Budgie. Используйте "
+"`USE_BUDGIE` для выбора необходимых компонентов порта. Дополнительную "
+"информацию см. в разделе crossref:special[using-budgie,Использование Budgie]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:319
+#, no-wrap
+msgid "`cabal`"
+msgstr "`cabal`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:324
+msgid ""
+"Ports should not be created for Haskell libraries, see "
+"crossref:special[haskell-libs,Haskell Libraries] for more information."
+msgstr ""
+"Порты не следует создавать для библиотек Haskell, подробнее см. в "
+"crossref:special[haskell-libs,Библиотеки Haskell]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:327
+msgid "Possible arguments: (none), `hpack`, `nodefault`"
+msgstr "Возможные аргументы: (отсутствуют), `hpack`, `nodefault`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:335
+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 ""
+"Устанавливает значения и цели по умолчанию, используемые для сборки "
+"программного обеспечения на Haskell с помощью Cabal. Добавляется зависимость "
+"для сборки на порт компилятора Haskell (package:lang/ghc[]). Если в "
+"переменной `BUILD_DEPENDS` уже указана другая версия GHC (например, "
+"package:lang/ghc810[]), она будет использована вместо версии по умолчанию. "
+"Если указан аргумент `hpack`, добавляется зависимость для сборки на "
+"package:devel/hs-hpack[], и `hpack` вызывается на этапе конфигурации для "
+"генерации файла .cabal. Если указан аргумент `nodefault`, фреймворк не будет "
+"пытаться загрузить основной дистрибутивный файл из Hackage. Этот аргумент "
+"добавляется неявно, если присутствует `USE_GITHUB` или `USE_GITLAB`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:337
+msgid "The framework provides the following variables:"
+msgstr "Фреймворк предоставляет следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:338
+#, no-wrap
+msgid "`CABAL_REVISION`"
+msgstr "`CABAL_REVISION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:341
+msgid ""
+"Haskell packages hosted on Hackage may have revisions. Set this knob to an "
+"integer number to pull in revised package description."
+msgstr ""
+"Пакеты Haskell, размещённые на Hackage, могут иметь ревизии. Установите этот "
+"параметр в целочисленное значение, чтобы использовать исправленное описание "
+"пакета."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:342
+#, no-wrap
+msgid "`USE_CABAL`"
+msgstr "`USE_CABAL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:347
+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 ""
+"Если программное обеспечение использует зависимости на Haskell, перечислите "
+"их в этой переменной. Каждый элемент должен присутствовать на Hackage и быть "
+"указан в формате `имяпакета-_0.1.2_`. Зависимости также могут иметь ревизии, "
+"которые указываются после символа `_`. Поддерживается автоматическое "
+"формирование списка зависимостей, см. crossref:special[using-cabal,Сборка "
+"приложений на Haskell с помощью `cabal`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:348
+#, no-wrap
+msgid "`CABAL_FLAGS`"
+msgstr "`CABAL_FLAGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:353
+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 ""
+"Список флагов, передаваемых `cabal-install` на этапах настройки и сборки. "
+"Флаги передаются в исходном виде. Эта переменная обычно используется для "
+"включения или отключения флагов, объявленных в файле .cabal. Передайте "
+"`foo`, чтобы включить флаг `foo`, и `-foo`, чтобы отключить его."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:354
+#, no-wrap
+msgid "`CABAL_EXECUTABLES`"
+msgstr "`CABAL_EXECUTABLES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:360
+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 ""
+"Список исполняемых файлов, устанавливаемых портом. Значение по умолчанию: `$"
+"{PORTNAME}`. Для получения списка возможных значений этой переменной "
+"обратитесь к файлу .cabal портируемого проекта. Каждое значение "
+"соответствует разделу `executable` в файле .cabal. Элементы из этого списка "
+"автоматически добавляются в pkg-plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:361
+#, no-wrap
+msgid "`SKIP_CABAL_PLIST`"
+msgstr "`SKIP_CABAL_PLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:363
+msgid "If defined, do not add items from `${CABAL_EXECUTABLES}` to pkg-plist."
+msgstr ""
+"Если определено, не добавлять элементы из `${CABAL_EXECUTABLES}` в pkg-plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:364
+#, no-wrap
+msgid "`opt_USE_CABAL`"
+msgstr "`opt_USE_CABAL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:366
+msgid "Adds items to `${USE_CABAL}` depending on `opt` option."
+msgstr "Добавляет элементы в `${USE_CABAL}` в зависимости от опции `opt`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:367
+#, no-wrap
+msgid "`opt_CABAL_EXECUTABLES`"
+msgstr "`opt_CABAL_EXECUTABLES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:369
+msgid "Adds items to `${CABAL_EXECUTABLES}` depending on `opt` option."
+msgstr ""
+"Добавляет элементы в `${CABAL_EXECUTABLES}` в зависимости от опции `opt`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:370
+#, no-wrap
+msgid "`opt_CABAL_FLAGS`"
+msgstr "`opt_CABAL_FLAGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:374
+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 ""
+"Если `opt` включён, добавить значение к `${CABAL_FLAGS}`. В противном случае "
+"добавить `-value`, чтобы отключить флаг. Обратите внимание, что это "
+"поведение немного отличается от простого `CABAL_FLAGS`, так как оно не "
+"принимает значения, начинающиеся с `-`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:375
+#, no-wrap
+msgid "`CABAL_WRAPPER_SCRIPTS`"
+msgstr "`CABAL_WRAPPER_SCRIPTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:380
+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 ""
+"Подмножество `${CABAL_EXECUTABLES}`, содержащее программы на Haskell, "
+"которые будут обёрнуты в shell-скрипт, устанавливающий переменные окружения "
+"`*_datadir` перед запуском программы. Это также приводит к тому, что "
+"фактический бинарный файл Haskell устанавливается в директорию `libexec/"
+"cabal/`. Данная настройка необходима для программ на Haskell, которые "
+"устанавливают свои файлы данных в директорию `share/`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:381
+#, no-wrap
+msgid "`FOO_DATADIR_VARS`"
+msgstr "`FOO_DATADIR_VARS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:385
+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 ""
+"Список дополнительных пакетов Haskell, чьи файлы данных должны быть доступны "
+"исполняемому файлу с именем `FOO`. Исполняемый файл должен быть частью `$"
+"{CABAL_WRAPPER_SCRIPTS}`. Указанные пакеты Haskell не должны иметь суффикса "
+"версии."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:386
+#, no-wrap
+msgid "`CABAL_PROJECT`"
+msgstr "`CABAL_PROJECT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:391
+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 ""
+"Некоторые проекты на Haskell могут уже иметь файл `cabal.project`, который "
+"также создаётся фреймворком портов. Если это так, используйте эту "
+"переменную, чтобы указать, что делать с оригинальным файлом `cabal.project`. "
+"Установка этой переменной в значение `remove` приведёт к удалению "
+"оригинального файла. Установка этой переменной в значение `append` приведёт "
+"к следующему:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:392
+msgid ""
+"Move the original file to `cabal.project.${PORTNAME}` during the `extract` "
+"stage."
+msgstr ""
+"Исходный файл переместится в `cabal.project.${PORTNAME}` на этапе `extract`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:394
+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 ""
+"Исходный файл `cabal.project.${PORTNAME}` и сгенерированный `cabal.project` "
+"объединятся в один файл после этапа `patch`. Использование `append` "
+"позволяет выполнить патчинг исходного файла перед его объединением."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:396
+#, no-wrap
+msgid "`cargo`"
+msgstr "`cargo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:403
+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 ""
+"Использует Cargo для настройки, сборки и тестирования. Может применяться для "
+"портирования приложений на Rust, использующих систему сборки Cargo. "
+"Дополнительную информацию смотрите в crossref:special[using-cargo,Сборка "
+"приложений на Rust с помощью `cargo`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:405
+#, no-wrap
+msgid "`charsetfix`"
+msgstr "`charsetfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:412
+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 ""
+"Предотвращает установку файла [.filename]#charset.alias# портом. Этот файл "
+"должен устанавливаться только пакетом package:converters/libiconv[]. "
+"Переменная `CHARSETFIX_MAKEFILEIN` может быть установлена в путь "
+"относительно `WRKSRC`, если [.filename]#charset.alias# не устанавливается "
+"через [.filename]#${WRKSRC}/Makefile.in#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:414
+#, no-wrap
+msgid "`cl`"
+msgstr "`cl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:419
+msgid "Provides support for Common Lisp ports."
+msgstr "Предоставляет поддержку портов Common Lisp."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:421
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:627
+msgid ""
+"The framework provides the following variables that can be set by ports:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть установлены "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:422
+#, no-wrap
+msgid "`ASDF_MODULES`"
+msgstr "`ASDF_MODULES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:424
+msgid ""
+"List of `ASDF` modules to build when `FASL_TARGET` is set (defaults to "
+"`PORTNAME`)"
+msgstr ""
+"Список модулей `ASDF` для сборки, когда установлен `FASL_TARGET` (по "
+"умолчанию `PORTNAME`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:425
+#, no-wrap
+msgid "`FASL_TARGET`"
+msgstr "`FASL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:427
+msgid "Build fasl variant of port (one of `ccl`, `clisp`, or `sbcl`)"
+msgstr "Собрать fasl вариант порта (один из `ccl`, `clisp` или `sbcl`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:428
+#, no-wrap
+msgid "`USE_ASDF`"
+msgstr "`USE_ASDF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:430
+msgid "Depend on package:devel/cl-asdf[]"
+msgstr "Зависит от пакета package:devel/cl-asdf[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:431
+#, no-wrap
+msgid "`USE_ASDF_FASL`"
+msgstr "`USE_ASDF_FASL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:433
+msgid "Depend on `devel/cl-asdf-<FASL_TARGET>`"
+msgstr "Зависит от `devel/cl-asdf-<FASL_TARGET>`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:434
+#, no-wrap
+msgid "`USE_CCL`"
+msgstr "`USE_CCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:436
+msgid "Depend on package:lang/ccl[]; implied when `FASL_TARGET=ccl`"
+msgstr ""
+"Зависит от пакета package:lang/ccl[]; подразумевается при `FASL_TARGET=ccl`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:437
+#, no-wrap
+msgid "`USE_CLISP`"
+msgstr "`USE_CLISP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:439
+msgid "Depend on package:lang/clisp[]; implied when `FASL_TARGET=clisp`"
+msgstr ""
+"Зависит от пакета package:lang/clisp[]; подразумевается при "
+"`FASL_TARGET=clisp`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:440
+#, no-wrap
+msgid "`USE_SBCL`"
+msgstr "`USE_SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:442
+msgid "Depend on package:lang/sbcl[]; implied when `FASL_TARGET=SBCL`"
+msgstr ""
+"Зависит от пакета package:lang/sbcl[]; подразумевается, если "
+"`FASL_TARGET=SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:445
+msgid ""
+"The framework provides the following variables that can be read by ports:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть прочитаны "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:446
+#, no-wrap
+msgid "`ASDF_PATHNAME`"
+msgstr "`ASDF_PATHNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:448
+msgid "Path to CL source"
+msgstr "Путь к исходному коду CL"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:449
+#, no-wrap
+msgid "`ASDF_REGISTRY`"
+msgstr "`ASDF_REGISTRY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:451
+msgid "Path to CL registry containing asd files"
+msgstr "Путь к реестру CL, содержащему файлы asd"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:452
+#, no-wrap
+msgid "`CCL`"
+msgstr "`CCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:454
+msgid "Path to the Clozure Common Lisp compiler"
+msgstr "Путь к компилятору Clozure Common Lisp"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:455
+#, no-wrap
+msgid "`CLISP`"
+msgstr "`CLISP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:457
+msgid "Path to the GNU Common Lisp compiler"
+msgstr "Путь к компилятору GNU Common Lisp"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:458
+#, no-wrap
+msgid "`CL_LIBDIR_REL`"
+msgstr "`CL_LIBDIR_REL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:460
+msgid "CL library directory relative to `LOCALBASE` or `PREFIX`"
+msgstr "Каталог библиотек CL относительно `LOCALBASE` или `PREFIX`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:461
+#, no-wrap
+msgid "`FASL_DIR_REL`"
+msgstr "`FASL_DIR_REL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:463
+msgid "Relative path to compiled fasl files; depends on `FASL_TARGET`"
+msgstr ""
+"Относительный путь к скомпилированным fasl-файлам; зависит от `FASL_TARGET`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:464
+#, no-wrap
+msgid "`FASL_PATHNAME`"
+msgstr "`FASL_PATHNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:466
+msgid "Path to CL fasl"
+msgstr "Путь к CL fasl"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:467
+#, no-wrap
+msgid "`LISP_EXTRA_ARG`"
+msgstr "`LISP_EXTRA_ARG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:469
+msgid "Extra arguments used when building fasl"
+msgstr "Дополнительные аргументы, используемые при сборке fasl"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:470
+#, no-wrap
+msgid "`SBCL`"
+msgstr "`SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:472
+msgid "Path to the Steel Bank Common Lisp compiler"
+msgstr "Путь к компилятору Steel Bank Common Lisp"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:474
+#, no-wrap
+msgid "`cmake`"
+msgstr "`cmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:477
+msgid "Possible arguments: (none), `insource`, `noninja`, `run`, `testing`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `insource`, `noninja`, `run`, `testing`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:479
+msgid "Use CMake for configuring the port and generating a build system."
+msgstr "Используйте CMake для настройки порта и генерации системы сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:483
+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 ""
+"По умолчанию выполняется сборка в дереве вне исходного кода, оставляя "
+"исходные файлы в `WRKSRC` свободными от артефактов сборки. С аргументом "
+"`insource` вместо этого будет выполнена сборка в исходном коде. Этот "
+"аргумент должен быть исключением и использоваться только в случае, когда "
+"обычная сборка вне исходного кода не работает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:488
+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 ""
+"По умолчанию для сборки используется Ninja (package:devel/ninja[]). В "
+"некоторых случаях это может работать некорректно. С аргументом `noninja` "
+"сборка будет использовать обычный `make`. Этот аргумент следует применять "
+"только если сборка на основе Ninja не работает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:490
+msgid ""
+"With the `run` argument, a run dependency is registered in addition to a "
+"build dependency."
+msgstr ""
+"С аргументом `run` регистрируется зависимость во время выполнения в "
+"дополнение к зависимости при сборке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:493
+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 ""
+"С аргументом `testing`, добавляется цель тестирования, использующая CTest. "
+"При запуске тестов порт будет переконфигурирован для тестирования и "
+"пересобран."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:495
+msgid "For more information see crossref:special[using-cmake,Using `cmake`]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"cmake,Использование `cmake`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:497
+#, no-wrap
+msgid "`compiler`"
+msgstr "`compiler`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:500
+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 ""
+"Возможные аргументы: (нет), `env` (по умолчанию, подразумевается), `{cpp}17-"
+"lang`, `{cpp}14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, "
+"`{cpp}0x`, `c11`, `nestedfct`, `features`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:504
+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 ""
+"Определяет, какой компилятор использовать, исходя из заданных предпочтений. "
+"Используйте `{cpp}17-lang`, если порту требуется компилятор с поддержкой "
+"{cpp}17, `{cpp}14-lang`, если порту требуется компилятор с поддержкой {cpp}"
+"14, `{cpp}11-lang`, если порту требуется компилятор с поддержкой {cpp}11, "
+"`gcc-{cpp}11-lib`, если порту требуется компилятор `g++` с библиотекой {cpp}"
+"11, или `{cpp}11-lib`, если порту требуется стандартная библиотека с "
+"поддержкой {cpp}11. Если порту требуется компилятор, понимающий {cpp}0X, C11 "
+"или вложенные функции, следует использовать соответствующие параметры."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:507
+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 ""
+"Используйте `features` для запроса списка возможностей, поддерживаемых "
+"компилятором по умолчанию. После включения [.filename]#bsd.port.pre.mk# порт "
+"может проверить результаты с помощью следующих переменных:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:509
+msgid ""
+"`COMPILER_TYPE`: the default compiler on the system, either gcc or clang"
+msgstr "`COMPILER_TYPE`: компилятор по умолчанию в системе, gcc или clang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:510
+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 ""
+"`ALT_COMPILER_TYPE`: альтернативный компилятор в системе, gcc или clang. "
+"Устанавливается только при наличии двух компиляторов в базовой системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:511
+msgid ""
+"`COMPILER_VERSION`: the first two digits of the version of the default "
+"compiler."
+msgstr "`COMPILER_VERSION`: первые две цифры версии компилятора по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:512
+msgid ""
+"`ALT_COMPILER_VERSION`: the first two digits of the version of the "
+"alternative compiler, if present."
+msgstr ""
+"`ALT_COMPILER_VERSION`: первые две цифры версии альтернативного компилятора, "
+"если он присутствует."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:513
+msgid "`CHOSEN_COMPILER_TYPE`: the chosen compiler, either gcc or clang"
+msgstr "`CHOSEN_COMPILER_TYPE`: выбранный компилятор, gcc или clang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:514
+msgid ""
+"`COMPILER_FEATURES`: the features supported by the default compiler. It "
+"currently lists the {cpp} library."
+msgstr ""
+"`COMPILER_FEATURES`: возможности, поддерживаемые компилятором по умолчанию. "
+"В настоящее время указана библиотека {cpp}."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:516
+#, no-wrap
+msgid "`cpe`"
+msgstr "`cpe`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:523
+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 ""
+"Включает информацию о Common Platform Enumeration (CPE) в манифест пакета в "
+"виде строки формата CPE 2.3. Подробности см. в https://scap.nist.gov/"
+"specifications/cpe/[спецификации CPE]. Чтобы добавить информацию CPE в порт, "
+"выполните следующие шаги:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:526
+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 ""
+"Поищите официальную запись CPE для программного продукта, используя либо "
+"https://web.nvd.nist.gov/view/cpe/search[поисковую систему CPE] от NVD, либо "
+"https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-"
+"dictionary_v2.3.xml.gz[официальный словарь CPE] (предупреждение: очень "
+"большой XML-файл). _Никогда не создавайте данные CPE самостоятельно._"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:527
+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 ""
+"Добавьте `cpe` в `USES` и сравните результат выполнения `make -V CPE_STR` с "
+"записью в словаре CPE. Продолжайте шаг за шагом, пока результат `make -V "
+"CPE_STR` не станет корректным."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:528
+msgid ""
+"If the product name (second field, defaults to `PORTNAME`) is incorrect, "
+"define `CPE_PRODUCT`."
+msgstr ""
+"Если название продукта (второе поле, по умолчанию `PORTNAME`) указано "
+"неверно, определите `CPE_PRODUCT`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:529
+msgid ""
+"If the vendor name (first field, defaults to `CPE_PRODUCT`) is incorrect, "
+"define `CPE_VENDOR`."
+msgstr ""
+"Если название производителя (первое поле, по умолчанию `CPE_PRODUCT`) "
+"указано неверно, определите `CPE_VENDOR`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:530
+msgid ""
+"If the version field (third field, defaults to `PORTVERSION`) is incorrect, "
+"define `CPE_VERSION`."
+msgstr ""
+"Если поле версии (третье поле, по умолчанию `PORTVERSION`) указано неверно, "
+"определите `CPE_VERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:531
+msgid ""
+"If the update field (fourth field, defaults to empty) is incorrect, define "
+"`CPE_UPDATE`."
+msgstr ""
+"Если поле обновления (четвертое поле, по умолчанию пустое) указано неверно, "
+"определите `CPE_UPDATE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:532
+msgid ""
+"If it is still not correct, check [.filename]#Mk/Uses/cpe.mk# for additional "
+"details, or contact the {ports-secteam}."
+msgstr ""
+"Если это всё ещё неверно, проверьте файл [.filename]#Mk/Uses/cpe.mk# для "
+"получения дополнительной информации или свяжитесь с {ports-secteam}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:533
+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 ""
+"Извлекайте как можно больше информации для имени CPE из существующих "
+"переменных, таких как `PORTNAME` и `PORTVERSION`. Используйте модификаторы "
+"переменных для извлечения соответствующих частей из этих переменных, вместо "
+"того чтобы жестко прописывать имя."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:534
+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 ""
+"_Всегда_ выполняйте `make -V CPE_STR` и проверяйте вывод перед коммитом "
+"любых изменений, затрагивающих `PORTNAME`, `PORTVERSION` или любые другие "
+"переменные, используемые для формирования `CPE_STR`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:536
+#, no-wrap
+msgid "`cran`"
+msgstr "`cran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:539
+msgid "Possible arguments: (none), `auto-plist`, `compiles`"
+msgstr "Возможные аргументы: (нет), `auto-plist`, `compiles`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:543
+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 ""
+"Использует Comprehensive R Archive Network. Укажите `auto-plist` для "
+"автоматического создания [.filename]#pkg-plist#. Укажите `compiles`, если "
+"порт содержит код, который необходимо компилировать."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:545
+#, no-wrap
+msgid "`desktop-file-utils`"
+msgstr "`desktop-file-utils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:554
+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 "
+"crossref:plist[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."
+msgstr ""
+"Использует update-desktop-database из пакета package:devel/desktop-file-"
+"utils[]. Дополнительный шаг post-install будет выполнен без вмешательства в "
+"уже существующие шаги post-install в [.filename]#Makefile# порта. Строка с "
+"crossref:plist[plist-keywords-desktop-file-utils,`@desktop-file-utils`] "
+"будет добавлена в plist. Используйте этот макрос только если порт "
+"предоставляет файл `.desktop`, содержащий запись `MimeType`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:556
+#, no-wrap
+msgid "`desthack`"
+msgstr "`desthack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:561
+msgid ""
+"Changes the behavior of GNU configure to properly support `DESTDIR` in case "
+"the original software does not."
+msgstr ""
+"Изменяет поведение GNU configure для корректной поддержки `DESTDIR` в "
+"случае, если исходное программное обеспечение этого не делает."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:563
+#, no-wrap
+msgid "`display`"
+msgstr "`display`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:566
+msgid "Possible arguments: (none), _ARGS_"
+msgstr "Возможные аргументы: (отсутствуют), _ARGS_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:570
+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 ""
+"Настраивает виртуальное окружение для отображения. Если переменная окружения "
+"`DISPLAY` не установлена, то Xvfb добавляется как зависимость при сборке, а "
+"`CONFIGURE_ENV` расширяется с указанием номера порта текущего запущенного "
+"экземпляра Xvfb. Параметр _ARGS_ по умолчанию имеет значение `install` и "
+"управляет фазой, вокруг которой запускается и останавливается виртуальный "
+"дисплей."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:572
+#, no-wrap
+msgid "`dos2unix`"
+msgstr "`dos2unix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:580
+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 ""
+"Порт содержит файлы с символами конца строки в формате DOS, которые "
+"необходимо преобразовать. Несколько переменных могут быть установлены для "
+"контроля, какие файлы будут преобразованы. По умолчанию преобразуются _все_ "
+"файлы, включая бинарные. См. crossref:slow-porting[slow-patch-automatic-"
+"replacements,Простые автоматические замены] для примеров."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:582
+msgid "`DOS2UNIX_REGEX`: match file names based on a regular expression."
+msgstr ""
+"`DOS2UNIX_REGEX`: сопоставлять имена файлов на основе регулярного выражения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:583
+msgid "`DOS2UNIX_FILES`: match literal file names."
+msgstr "`DOS2UNIX_FILES`: соответствуют точным именам файлов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:584
+msgid "`DOS2UNIX_GLOB`: match file names based on a glob pattern."
+msgstr ""
+"`DOS2UNIX_GLOB`: сопоставлять имена файлов на основе шаблона файлов оболочки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:585
+msgid ""
+"`DOS2UNIX_WRKSRC`: the directory from which to start the conversions. "
+"Defaults to `${WRKSRC}`."
+msgstr ""
+"`DOS2UNIX_WRKSRC`: каталог, с которого начинать преобразования. По умолчанию "
+"`${WRKSRC}`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:587
+#, no-wrap
+msgid "`drupal`"
+msgstr "`drupal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:590
+msgid "Possible arguments: `7`, `module`, `theme`"
+msgstr "Возможные аргументы: `7`, `module`, `theme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:595
+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 ""
+"Автоматизирует установку порта, который является темой или модулем Drupal. "
+"Использовать с версией Drupal, которую ожидает порт. Например, "
+"`USES=drupal:7,module` означает, что этот порт создает модуль Drupal 7. Тему "
+"Drupal 7 можно указать с помощью `USES=drupal:7,theme`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:597
+#, no-wrap
+msgid "`ebur128`"
+msgstr "`ebur128`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:600
+msgid "Possible arguments: (none), `build`, `lib`, `run`, `test`"
+msgstr "Возможные аргументы: (нет), `build`, `lib`, `run`, `test`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:605
+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 ""
+"Добавляет зависимость от пакета package:audio/ebur128[]. Позволяет прозрачно "
+"зависеть от вариантов `rust` или `legacy`, используя `DEFAULT_VERSIONS` в "
+"[.filename]#make.conf#. Например, для использования устаревшей версии "
+"укажите `DEFAULT_VERSIONS+=ebur128=legacy`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:609
+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 ""
+"Без аргументов поведение аналогично случаю с предоставлением аргумента "
+"`lib`. Остальные аргументы указывают соответствующую категорию зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:611
+#, no-wrap
+msgid "`eigen`"
+msgstr "`eigen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:614
+msgid "Possible arguments: 2, 3, build (default), run"
+msgstr "Возможные аргументы: 2, 3, build (по умолчанию), run"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:616
+msgid "Add dependency on package:math/eigen[]."
+msgstr "Добавить зависимость от пакета package:math/eigen[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:618
+#, no-wrap
+msgid "`electronfix`"
+msgstr "`electronfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:621
+msgid "Possible arguments: `31`, `32`, `33`"
+msgstr "Возможные аргументы: `31`, `32`, `33`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:625
+msgid ""
+"Provide support for easy porting of Electron applications that are "
+"distributed in binary form. Adds a build and run time dependency on "
+"package:devel/electron31[], package:devel/electron32[], or package:devel/"
+"electron33[] depending on the argument used."
+msgstr ""
+"Предоставить поддержку для простого портирования Electron-приложений, "
+"распространяемых в бинарной форме. Добавляет зависимость на этапах сборки и "
+"выполнения от package:devel/electron31[], package:devel/electron32[] или "
+"package:devel/electron33[] в зависимости от используемого аргумента."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:628
+#, no-wrap
+msgid "`ELECTRONFIX_SYMLINK_FILES`"
+msgstr "`ELECTRONFIX_SYMLINK_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:630
+msgid "List of files to be symlinked from Electron distribution."
+msgstr "Список файлов для создания символьных ссылок из дистрибутива Electron."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:631
+#, no-wrap
+msgid "`ELECTRONFIX_MAIN_EXECUTABLE`"
+msgstr "`ELECTRONFIX_MAIN_EXECUTABLE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:633
+msgid ""
+"File name of the main executable to be replaced with the original Electron "
+"binary."
+msgstr ""
+"Имя файла основного исполняемого файла, который будет заменен оригинальным "
+"бинарным файлом Electron."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:636
+#, no-wrap
+msgid "`elfctl`"
+msgstr "`elfctl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:639
+msgid "Possible arguments: (none), `build` (default), `stage`"
+msgstr "Возможные аргументы: (отсутствуют), `build` (по умолчанию), `stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:641
+msgid "Set ELF binary feature control notes by setting `ELF_FEATURES`."
+msgstr ""
+"Установите управляющие заметки функций ELF-бинарных файлов, задав "
+"`ELF_FEATURES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:644
+msgid ""
+"When either no argument or the `build` argument is supplied, binaries under "
+"`BUILD_WRKSRC` are operated on, and files listed in `ELF_FEATURES` are "
+"relative to `BUILD_WRKSRC`. When the `stage` argument is supplied, binaries "
+"under `STAGEDIR` are operated on and files listed in `ELF_FEATURES` are "
+"relative to `STAGEDIR`."
+msgstr ""
+"Когда не указан аргумент или указан аргумент `build`, операции выполняются "
+"над бинарными файлами в `BUILD_WRKSRC`, а файлы, перечисленные в "
+"`ELF_FEATURES`, указываются относительно `BUILD_WRKSRC`. Когда указан "
+"аргумент `stage`, операции выполняются над бинарными файлами в `STAGEDIR`, а "
+"файлы, перечисленные в `ELF_FEATURES`, указываются относительно `STAGEDIR`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:646
+#, no-wrap
+msgid "Uses=elfctl"
+msgstr "Uses=elfctl"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:653
+#, no-wrap
+msgid ""
+"ELF_FEATURES=\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file2\n"
+msgstr ""
+"ELF_FEATURES=\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:658
+msgid "The format of `featurelist` is described in man:elfctl[1]."
+msgstr "Формат `featurelist` описан в man:elfctl[1]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:660
+#, no-wrap
+msgid "`elixir`"
+msgstr "`elixir`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:666
+msgid ""
+"Provide support for ports using package:lang/elixir[]. Adds a build and run "
+"time dependency on package:lang/elixir[]."
+msgstr ""
+"Предоставить поддержку для портов, использующих package:lang/elixir[]. "
+"Добавляет зависимость во время сборки и выполнения на package:lang/elixir[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:668
+msgid "Variables provided by the framework:"
+msgstr "Предоставляемые фреймворком переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:669
+#, no-wrap
+msgid "`ELIXIR_APP_NAME`"
+msgstr "`ELIXIR_APP_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:671
+msgid "Elixir app name as installed in Elixir's lib directory"
+msgstr "Название приложения Elixir, как оно установлено в каталоге lib Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:671
+#, no-wrap
+msgid "`ELIXIR_LIB_ROOT`"
+msgstr "`ELIXIR_LIB_ROOT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:673
+msgid "Elixir default library path"
+msgstr "Путь к библиотекам Elixir по умолчанию"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:673
+#, no-wrap
+msgid "`ELIXIR_APP_ROOT`"
+msgstr "`ELIXIR_APP_ROOT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:675
+msgid "Root directory for this Elixir app"
+msgstr "Корневая директория для этого приложения Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:675
+#, no-wrap
+msgid "`ELIXIR_HIDDEN`"
+msgstr "`ELIXIR_HIDDEN`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:677
+msgid "Applications to be hidden from the code path; usually ${PORTNAME}"
+msgstr ""
+"Приложения, которые необходимо скрыть из пути выполнения кода; обычно `$"
+"{PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:677
+#, no-wrap
+msgid "`ELIXIR_LOCALE`"
+msgstr "`ELIXIR_LOCALE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:679
+msgid ""
+"An UTF-8 locale to be used by Elixir during builds (any UTF-8 locale is good)"
+msgstr ""
+"Локаль UTF-8, которая будет использоваться Elixir во время сборки (подойдет "
+"любая локаль UTF-8)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:679
+#, no-wrap
+msgid "`MIX_CMD`"
+msgstr "`MIX_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:681
+msgid "The `mix` command"
+msgstr "Команда `mix`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:681
+#, no-wrap
+msgid "`MIX_COMPILE`"
+msgstr "`MIX_COMPILE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:683
+msgid "The `mix` command used to compile an Elixir app"
+msgstr "Команда `mix`, используемая для компиляции приложения на Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:683
+#, no-wrap
+msgid "`MIX_REWRITE`"
+msgstr "`MIX_REWRITE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:685
+msgid "Automatically replace Mix dependencies with code paths"
+msgstr "Автоматически заменять зависимости Mix на пути к коду"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:685
+#, no-wrap
+msgid "`MIX_BUILD_DEPS`"
+msgstr "`MIX_BUILD_DEPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:687
+msgid ""
+"List of `BUILD_DEPENDS` in category/portname format (commonly referenced to "
+"as \"deps\" in Erlang and Elixir)"
+msgstr ""
+"Список `BUILD_DEPENDS` в формате категория/имя_порта (часто упоминаемый как "
+"\"deps\" в Erlang и Elixir)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:687
+#, no-wrap
+msgid "`MIX_RUN_DEPS`"
+msgstr "`MIX_RUN_DEPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:689
+msgid "List of `RUN_DEPENDS` in category/portname format"
+msgstr "Список `RUN_DEPENDS` в формате категория/имя порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:689
+#, no-wrap
+msgid "`MIX_DOC_DIRS`"
+msgstr "`MIX_DOC_DIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:691
+msgid "Extra doc directories to be installed in `DOCSDIR`"
+msgstr "Дополнительные каталоги документации для установки в `DOCSDIR`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:691
+#, no-wrap
+msgid "`MIX_DOC_FILES`"
+msgstr "`MIX_DOC_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:693
+msgid "Extra doc files to be installed in `DOCSDIR` (usually README.md)"
+msgstr ""
+"Дополнительные файлы документации для установки в `DOCSDIR` (обычно "
+"README.md)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:693
+#, no-wrap
+msgid "`MIX_ENV`"
+msgstr "`MIX_ENV`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:695
+msgid "Environment for the Mix build (same format as `MAKE_ENV`)"
+msgstr "Окружение для сборки Mix (в том же формате, что и `MAKE_ENV`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:695
+#, no-wrap
+msgid "`MIX_ENV_NAME`"
+msgstr "`MIX_ENV_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:697
+msgid "Name of the Mix build environment, usually \"prod\""
+msgstr "Имя среды сборки Mix, обычно \"prod\""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:697
+#, no-wrap
+msgid "`MIX_BUILD_NAME`"
+msgstr "`MIX_BUILD_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:699
+msgid "Name of the build output in _build/, usually `${MIX_ENV_NAME}`"
+msgstr "Имя выходного файла сборки в _build/, обычно `${MIX_ENV_NAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:699
+#, no-wrap
+msgid "`MIX_TARGET`"
+msgstr "`MIX_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:701
+msgid "Name of the Mix target, usually \"compile\""
+msgstr "Имя цели Mix, обычно \"compile\""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:701
+#, no-wrap
+msgid "`MIX_EXTRA_APPS`"
+msgstr "`MIX_EXTRA_APPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:703
+msgid "List of sub-applications to be built, if any"
+msgstr "Список подприложений для сборки, если имеются"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:703
+#, no-wrap
+msgid "`MIX_EXTRA_DIRS`"
+msgstr "`MIX_EXTRA_DIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:705
+msgid "List of extra directories to be installed in `ELIXIR_APP_ROOT`"
+msgstr "Список дополнительных каталогов для установки в `ELIXIR_APP_ROOT`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:705
+#, no-wrap
+msgid "`MIX_EXTRA_FILES`"
+msgstr "`MIX_EXTRA_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:707
+msgid "List of extra files to be installed in `ELIXIR_APP_ROOT`"
+msgstr "Список дополнительных файлов для установки в `ELIXIR_APP_ROOT`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:709
+#, no-wrap
+msgid "`emacs`"
+msgstr "`emacs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:712
+msgid "Possible arguments: (none) (default), `build`, `run`, `noflavors`"
+msgstr "Возможные аргументы: (нет) (по умолчанию), `build`, `run`, `noflavors`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:719
+msgid ""
+"Provides support for ports requiring Emacs. The `build` argument creates a "
+"build dependency on Emacs. The `run` argument creates a run dependency on "
+"Emacs. If both the `build` and `run` arguments are absent, create build and "
+"run dependencies on Emacs. The `noflavors` argument prevents flavors, and "
+"is implied if there is no run dependency on Emacs."
+msgstr ""
+"Предоставляет поддержку для портов, требующих Emacs. Аргумент `build` "
+"создает зависимость сборки от Emacs. Аргумент `run` создает зависимость "
+"выполнения от Emacs. Если оба аргумента `build` и `run` отсутствуют, "
+"создаются зависимости сборки и выполнения от Emacs. Аргумент `noflavors` "
+"запрещает флейворы и подразумевается, если нет зависимости выполнения от "
+"Emacs."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:723
+msgid ""
+"The default Emacs flavor for ports with `USES=emacs` can be defined in "
+"[.filename]#make.conf#. For example, for the `nox` flavor, use "
+"`DEFAULT_VERSIONS+= emacs=nox`. The valid flavors are: `full`, `canna`, "
+"`nox`, `wayland`, `devel_full`, `devel_nox`."
+msgstr ""
+"Стандартный вариант Emacs для портов с `USES=emacs` можно определить в "
+"[.filename]#make.conf#. Например, для варианта `nox` используйте "
+"`DEFAULT_VERSIONS+= emacs=nox`. Допустимые флейворы: `full`, `canna`, `nox`, "
+"`wayland`, `devel_full`, `devel_nox`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:725
+msgid "Variables, which can be set by ports:"
+msgstr "Переменные, которые могут быть установлены портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:726
+#, no-wrap
+msgid "`EMACS_FLAVORS_EXCLUDE`"
+msgstr "`EMACS_FLAVORS_EXCLUDE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:729
+msgid ""
+"Do NOT build these Emacs flavors. If `EMACS_FLAVORS_EXCLUDE` is not defined "
+"and:"
+msgstr ""
+"НЕ собирать эти флейворы Emacs. Если `EMACS_FLAVORS_EXCLUDE` не определена и:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:731
+msgid "there is a run dependency on Emacs"
+msgstr "существует зависимость во время выполнения от Emacs"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:732
+msgid "the noflavors argument is not specified"
+msgstr "аргумент noflavors не указан"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:735
+msgid "then all valid Emacs flavors are assumed."
+msgstr "то предполагаются все допустимые флейворы Emacs."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:736
+#, no-wrap
+msgid "`EMACS_NO_DEPENDS`"
+msgstr "`EMACS_NO_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:740
+msgid ""
+"Do NOT add build or run dependencies on Emacs. This will prevent flavors, "
+"and no byte code files will be generated as part of the package."
+msgstr ""
+"НЕ добавлять зависимости сборки или выполнения от Emacs. Это предотвратит "
+"создание вариантов, и никакие файлы байт-кода не будут сгенерированы как "
+"часть пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:742
+msgid "Variables, which can be read by ports:"
+msgstr "Переменные, которые могут быть прочитаны портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:743
+#, no-wrap
+msgid "`EMACS_CMD`"
+msgstr "`EMACS_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:745
+msgid ""
+"Emacs command with full path (e.g. [.filename]#/usr/local/bin/emacs-30.1#)"
+msgstr ""
+"Команда Emacs с полным путём (например, [.filename]#/usr/local/bin/"
+"emacs-30.1#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:746
+#, no-wrap
+msgid "`EMACS_FLAVOR`"
+msgstr "`EMACS_FLAVOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:748
+msgid ""
+"Used for dependencies (e.g. `BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}"
+">0:devel/dash@${EMACS_FLAVOR}`)"
+msgstr ""
+"Используется для зависимостей (например, `BUILD_DEPENDS= dash.el$"
+"{EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR}`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:749
+#, no-wrap
+msgid "`EMACS_LIBDIR`"
+msgstr "`EMACS_LIBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:751
+msgid ""
+"Emacs Library directory without `${PREFIX}` (e.g. [.filename]#share/emacs#)"
+msgstr ""
+"Каталог библиотек Emacs без `${PREFIX}` (например, [.filename]#share/emacs#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:752
+#, no-wrap
+msgid "`EMACS_LIBDIR_WITH_VER`"
+msgstr "`EMACS_LIBDIR_WITH_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:754
+msgid ""
+"Library directory without `${PREFIX}` including version (e.g. "
+"[.filename]#share/emacs/30.1#)"
+msgstr ""
+"Каталог библиотеки без `${PREFIX}`, включая версию (например, "
+"[.filename]#share/emacs/30.1#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:755
+#, no-wrap
+msgid "`EMACS_MAJOR_VER`"
+msgstr "`EMACS_MAJOR_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:757
+msgid "Emacs major version (e.g. 30)"
+msgstr "Основная версия Emacs (например, 30)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:758
+#, no-wrap
+msgid "`EMACS_PKGNAMESUFFIX`"
+msgstr "`EMACS_PKGNAMESUFFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:760
+msgid "`PKGNAMESUFFIX` to distinguish Emacs flavors"
+msgstr "`PKGNAMESUFFIX` для различия вариантов Emacs"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:761
+#, no-wrap
+msgid "`EMACS_SITE_LISPDIR`"
+msgstr "`EMACS_SITE_LISPDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:763
+msgid ""
+"Emacs site-lisp directory without `${PREFIX}` (e.g. [.filename]#share/emacs/"
+"site-lisp#)"
+msgstr ""
+"Каталог site-lisp Emacs без `${PREFIX}` (например, [.filename]#share/emacs/"
+"site-lisp#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:764
+#, no-wrap
+msgid "`EMACS_VER`"
+msgstr "`EMACS_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:766
+msgid "Emacs version (e.g. 30.1)"
+msgstr "Версия Emacs (например, 30.1)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:767
+#, no-wrap
+msgid "`EMACS_VERSION_SITE_LISPDIR`"
+msgstr "`EMACS_VERSION_SITE_LISPDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:769
+msgid "Include version (e.g. [.filename]#share/emacs/30.1/site-lisp#)"
+msgstr ""
+"Каталог site-lisp Emacs, включая номер версии (например, [.filename]#share/"
+"emacs/30.1/site-lisp#)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:771
+#, no-wrap
+msgid "`erlang`"
+msgstr "`erlang`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:774
+msgid "Possible arguments: (none), `enc`, `rebar`, `rebar3`"
+msgstr "Возможные аргументы: (нет), `enc`, `rebar`, `rebar3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:779
+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 ""
+"Добавляет зависимость на время сборки и выполнения от package:lang/erlang[]. "
+"В зависимости от аргумента, добавляет дополнительные зависимости для сборки. "
+"`enc` добавляет зависимость от package:devel/erlang-native-compiler[], "
+"`rebar` добавляет зависимость от package:devel/rebar[], а `rebar3` добавляет "
+"зависимость от package:devel/rebar3[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:781
+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:783
+msgid ""
+"`ERL_APP_NAME`: Erlang app name as installed in Erlang's lib dir (minus "
+"version)"
+msgstr ""
+"`ERL_APP_NAME`: Имя приложения Erlang, как оно установлено в каталоге lib "
+"Erlang (без указания версии)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:784
+msgid "`ERL_APP_ROOT`: Root directory for this Erlang app"
+msgstr "`ERL_APP_ROOT`: Корневой каталог для этого приложения Erlang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:785
+msgid "`REBAR_CMD`: Path to the \"rebar\" command"
+msgstr "`REBAR_CMD`: Путь к команде \"rebar\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:786
+msgid "`REBAR3_CMD`: Path to the \"rebar3\" command"
+msgstr "`REBAR3_CMD`: Путь к команде \"rebar3\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:787
+msgid "`REBAR_PROFILE`: Rebar profile"
+msgstr "`REBAR_PROFILE`: Профиль Rebar"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:788
+msgid "`REBAR_TARGETS`: Rebar target list (usually compile, maybe escriptize)"
+msgstr ""
+"`REBAR_TARGETS`: Список целей Rebar (обычно compile, возможно escriptize)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:789
+msgid "`ERL_BUILD_NAME`: Build name for rebar3"
+msgstr "`ERL_BUILD_NAME`: Имя сборки для rebar3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:790
+msgid "`ERL_BUILD_DEPS`: List of BUILD_DEPENDS in category/portname format"
+msgstr "`ERL_BUILD_DEPS`: Список BUILD_DEPENDS в формате категория/имя_порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:791
+msgid "`ERL_RUN_DEPS`: List of RUN_DEPENDS in category/portname format"
+msgstr "`ERL_RUN_DEPS`: Список RUN_DEPENDS в формате категория/имя_порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:792
+msgid "`ERL_DOCS`: List of documentation files and directories"
+msgstr "`ERL_DOCS`: Список файлов и каталогов документации"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:794
+#, no-wrap
+msgid "`fakeroot`"
+msgstr "`fakeroot`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:800
+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 ""
+"Изменяет некоторые стандартные поведения систем сборки для разрешения "
+"установки от имени пользователя. Дополнительную информацию о `fakeroot` "
+"можно найти на https://wiki.debian.org/FakeRoot[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:802
+#, no-wrap
+msgid "`fam`"
+msgstr "`fam`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:805
+msgid "Possible arguments: (none), `fam`, `gamin`"
+msgstr "Возможные аргументы: (нет), `fam`, `gamin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:808
+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 ""
+"Использует монитор изменений файлов (FAM — File Alteration Monitor) как "
+"зависимость от библиотеки, либо package:devel/fam[], либо package:devel/"
+"gamin[]. Конечные пользователи могут задать WITH_FAM_SYSTEM, чтобы указать "
+"свои предпочтения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:810
+#, no-wrap
+msgid "`firebird`"
+msgstr "`firebird`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:813
+msgid "Possible arguments: (none), `25`"
+msgstr "Возможные аргументы: (отсутствуют), `25`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:815
+msgid "Add a dependency to the client library of the Firebird database."
+msgstr "Добавить зависимость от клиентской библиотеке базы данных Firebird."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:817
+#, no-wrap
+msgid "`fonts`"
+msgstr "`fonts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:820
+msgid "Possible arguments: (none), `fc`, `fontsdir` (default), `none`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `fc`, `fontsdir` (по умолчанию), `none`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:826
+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 ""
+"Добавляет зависимость во время выполнения на инструменты, необходимые для "
+"регистрации шрифтов. В зависимости от аргумента добавляет строку "
+"`crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}`, строку "
+"`crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` или не "
+"добавляет строку, если аргумент `none`, в plist. `FONTSDIR` по умолчанию "
+"имеет значение [.filename]#${PREFIX}/share/fonts/${FONTNAME}#, а `FONTNAME` "
+"— `${PORTNAME}`. Добавляет `FONTSDIR` в `PLIST_SUB` и `SUB_LIST`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:828
+#, no-wrap
+msgid "`fortran`"
+msgstr "`fortran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:831
+msgid "Possible arguments: `gcc` (default)"
+msgstr "Возможные аргументы: `gcc` (по умолчанию)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:833
+msgid "Uses the GNU Fortran compiler."
+msgstr "Использует компилятор GNU Fortran."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:835
+#, no-wrap
+msgid "`fpc`"
+msgstr "`fpc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:838
+msgid "Possible arguments: (none), `run`"
+msgstr "Возможные аргументы: (нет), `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:841
+msgid ""
+"Provide support for Free Pascal based ports. It will install Free Pascal "
+"compiler and units."
+msgstr ""
+"Обеспечить поддержку портов на основе Free Pascal. Установит компилятор Free "
+"Pascal и модули."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:843
+msgid "Adds a build dependency on package:lang/fpc[]."
+msgstr "Добавляет зависимость сборки от package:lang/fpc[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:845
+msgid "If the `run` argument is given a run dependency is also added."
+msgstr "Если указан аргумент `run`, также добавляется зависимость запуска."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:847
+#, no-wrap
+msgid "`fuse`"
+msgstr "`fuse`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:850
+msgid "Possible arguments: `2` (default), `3`"
+msgstr "Возможные аргументы: `2` (по умолчанию), `3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:852
+msgid ""
+"The port will depend on the FUSE library and handle the dependency on the "
+"kernel module depending on the version of FreeBSD."
+msgstr ""
+"Порт будет зависеть от библиотеки FUSE и обрабатывать зависимость от модуля "
+"ядра в зависимости от версии FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:854
+#, no-wrap
+msgid "`gem`"
+msgstr "`gem`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:857
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1479
+msgid "Possible arguments: (none), `noautoplist`"
+msgstr "Возможные аргументы: (отсутствуют), `noautoplist`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:860
+msgid ""
+"Handle building with RubyGems. If `noautoplist` is used, the packing list "
+"is not generated automatically."
+msgstr ""
+"Обработка сборки с RubyGems. Если используется `noautoplist`, список "
+"упаковки не генерируется автоматически."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:862
+msgid "This implies `USES=ruby`."
+msgstr "Это подразумевает `USES=ruby`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:864
+#, no-wrap
+msgid "`gettext`"
+msgstr "`gettext`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:871
+msgid ""
+"Deprecated. Will include both crossref:uses[uses-gettext-runtime,`gettext-"
+"runtime`] and crossref:uses[uses-gettext-tools,`gettext-tools`]."
+msgstr ""
+"Устарело. Будет включать как crossref:uses[uses-gettext-runtime,`gettext-"
+"runtime`], так и crossref:uses[uses-gettext-tools,`gettext-tools`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:873
+#, no-wrap
+msgid "`gettext-runtime`"
+msgstr "`gettext-runtime`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:876
+msgid "Possible arguments: (none), `lib` (default), `build`, `run`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `lib` (по умолчанию), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:880
+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 ""
+"Использует пакет package:devel/gettext-runtime[]. По умолчанию, без "
+"аргументов или с аргументом `lib`, подразумевает зависимость от библиотеки "
+"[.filename]#libintl.so#. Аргументы `build` и `run` подразумевают, "
+"соответственно, зависимость во время сборки и во время выполнения от "
+"[.filename]#gettext#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:882
+#, no-wrap
+msgid "`gettext-tools`"
+msgstr "`gettext-tools`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:885
+msgid "Possible arguments: (none), `build` (default), `run`"
+msgstr "Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:889
+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 ""
+"Использует пакет package:devel/gettext-tools[]. По умолчанию, без аргумента "
+"или с аргументом `build`, регистрируется зависимость во время сборки от "
+"[.filename]#msgfmt#. С аргументом `run` регистрируется зависимость во время "
+"выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:891
+#, no-wrap
+msgid "`ghostscript`"
+msgstr "`ghostscript`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:894
+msgid "Possible arguments: _X_, `build`, `run`, `nox11`"
+msgstr "Возможные аргументы: _X_, `build`, `run`, `nox11`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:899
+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 ""
+"Можно указать конкретную версию _X_. Доступные версии: `7`, `8`, `9` и "
+"`agpl` (по умолчанию). `nox11` указывает, что требуется версия порта `-"
+"nox11`. `build` и `run` добавляют зависимости на Ghostscript во время "
+"сборки и выполнения соответственно. По умолчанию добавляются зависимости "
+"как на сборку, так и на выполнение."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:901
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:915
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1201
+#, no-wrap
+msgid "`gl`"
+msgstr "`gl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:908
+msgid ""
+"Provides an easy way to depend on GL components. The components should be "
+"listed in `USE_GL`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов GL. Компоненты должны "
+"быть перечислены в `USE_GL`. Доступные компоненты:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:909
+#, no-wrap
+msgid "`egl`"
+msgstr "`egl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:911
+msgid ""
+"add a library dependency on [.filename]#libEGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"добавить зависимость от библиотеки [.filename]#libEGL.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:912
+#, no-wrap
+msgid "`gbm`"
+msgstr "`gbm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:914
+msgid ""
+"Add a library dependency on [.filename]#libgbm.so# from package:graphics/"
+"mesa-libs[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libgbm.so# из пакета "
+"package:graphics/mesa-libs[]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:917
+msgid ""
+"Add a library dependency on [.filename]#libGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGL.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:918
+#, no-wrap
+msgid "`glesv2`"
+msgstr "`glesv2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:920
+msgid ""
+"Add a library dependency on [.filename]#libGLESv2.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLESv2.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:921
+#, no-wrap
+msgid "`glew`"
+msgstr "`glew`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:923
+msgid ""
+"Add a library dependency on [.filename]#libGLEW.so# from package:graphics/"
+"glew[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLEW.so# из пакета "
+"package:graphics/glew[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:924
+#, no-wrap
+msgid "`glu`"
+msgstr "`glu`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:926
+msgid ""
+"Add a library dependency on [.filename]#libGLU.so# from package:graphics/"
+"libGLU[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLU.so# из "
+"package:graphics/libGLU[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:927
+#, no-wrap
+msgid "`glut`"
+msgstr "`glut`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:929
+msgid ""
+"Add a library dependency on [.filename]#libglut.so# from package:graphics/"
+"freeglut[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libglut.so# из "
+"package:graphics/freeglut[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:930
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2244
+#, no-wrap
+msgid "`opengl`"
+msgstr "`opengl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:932
+msgid ""
+"Add a library dependency on [.filename]#libOpenGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libOpenGL.so# из "
+"package:graphics/libglvnd[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:934
+#, no-wrap
+msgid "`gmake`"
+msgstr "`gmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:939
+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 ""
+"Использует пакет package:devel/gmake[] как зависимость во время сборки и "
+"настраивает окружение для использования `gmake` в качестве стандартного "
+"`make` при сборке."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:941
+#, no-wrap
+msgid "`gnome`"
+msgstr "`gnome`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:948
+msgid ""
+"Provides an easy way to depend on GNOME components. The components should "
+"be listed in `USE_GNOME`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов GNOME. Компоненты "
+"должны быть перечислены в `USE_GNOME`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:950
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1598
+msgid "`atk`"
+msgstr "`atk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:951
+msgid "`atkmm`"
+msgstr "`atkmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:952
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1184
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1601
+msgid "`cairo`"
+msgstr "`cairo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:953
+msgid "`cairomm`"
+msgstr "`cairomm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:954
+msgid "`dconf`"
+msgstr "`dconf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:955
+msgid "`esound`"
+msgstr "`esound`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:956
+msgid "`evolutiondataserver3`"
+msgstr "`evolutiondataserver3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:957
+msgid "`gconf2`"
+msgstr "`gconf2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:958
+msgid "`gconfmm26`"
+msgstr "`gconfmm26`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:959
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1200
+msgid "`gdkpixbuf`"
+msgstr "`gdkpixbuf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:960
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1612
+msgid "`gdkpixbuf2`"
+msgstr "`gdkpixbuf2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:961
+msgid "`glib12`"
+msgstr "`glib12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:962
+msgid "`glib20`"
+msgstr "`glib20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:963
+msgid "`glibmm`"
+msgstr "`glibmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:964
+msgid "`gnomecontrolcenter3`"
+msgstr "`gnomecontrolcenter3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:965
+msgid "`gnomedesktop3`"
+msgstr "`gnomedesktop3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:966
+msgid "`gnomedesktop4`"
+msgstr "`gnomedesktop4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:967
+msgid "`gnomedocutils`"
+msgstr "`gnomedocutils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:968
+msgid "`gnomemenus3`"
+msgstr "`gnomemenus3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:969
+msgid "`gnomemimedata`"
+msgstr "`gnomemimedata`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:970
+msgid "`gnomeprefix`"
+msgstr "`gnomeprefix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:971
+msgid "`gnomesharp20`"
+msgstr "`gnomesharp20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:972
+msgid "`gnomevfs2`"
+msgstr "`gnomevfs2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:973
+msgid "`gsound`"
+msgstr "`gsound`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:974
+msgid "`gtk-update-icon-cache`"
+msgstr "`gtk-update-icon-cache`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:975
+msgid "`gtk12`"
+msgstr "`gtk12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:976
+msgid "`gtk20`"
+msgstr "`gtk20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:977
+msgid "`gtk30`"
+msgstr "`gtk30`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:978
+msgid "`gtkhtml3`"
+msgstr "`gtkhtml3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:979
+msgid "`gtkhtml4`"
+msgstr "`gtkhtml4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:980
+msgid "`gtkmm20`"
+msgstr "`gtkmm20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:981
+msgid "`gtkmm24`"
+msgstr "`gtkmm24`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:982
+msgid "`gtkmm30`"
+msgstr "`gtkmm30`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:983
+msgid "`gtksharp20`"
+msgstr "`gtksharp20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:984
+msgid "`gtksourceview`"
+msgstr "`gtksourceview`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:985
+msgid "`gtksourceview2`"
+msgstr "`gtksourceview2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:986
+msgid "`gtksourceview3`"
+msgstr "`gtksourceview3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:987
+msgid "`gtksourceviewmm3`"
+msgstr "`gtksourceviewmm3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:988
+msgid "`gvfs`"
+msgstr "`gvfs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:989
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1786
+msgid "`intlhack`"
+msgstr "`intlhack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:990
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1787
+msgid "`intltool`"
+msgstr "`intltool`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:991
+msgid "`introspection`"
+msgstr "`introspection`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:992
+msgid "`libartlgpl2`"
+msgstr "`libartlgpl2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:993
+msgid "`libbonobo`"
+msgstr "`libbonobo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:994
+msgid "`libbonoboui`"
+msgstr "`libbonoboui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:995
+msgid "`libgda5`"
+msgstr "`libgda5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:996
+msgid "`libgda5-ui`"
+msgstr "`libgda5-ui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:997
+msgid "`libgdamm5`"
+msgstr "`libgdamm5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:998
+msgid "`libglade2`"
+msgstr "`libglade2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:999
+msgid "`libgnome`"
+msgstr "`libgnome`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1000
+msgid "`libgnomecanvas`"
+msgstr "`libgnomecanvas`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1001
+msgid "`libgnomekbd`"
+msgstr "`libgnomekbd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1002
+msgid "`libgnomeprint`"
+msgstr "`libgnomeprint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1003
+msgid "`libgnomeprintui`"
+msgstr "`libgnomeprintui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1004
+msgid "`libgnomeui`"
+msgstr "`libgnomeui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1005
+msgid "`libgsf`"
+msgstr "`libgsf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1006
+msgid "`libgtkhtml`"
+msgstr "`libgtkhtml`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1007
+msgid "`libgtksourceviewmm`"
+msgstr "`libgtksourceviewmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1008
+msgid "`libidl`"
+msgstr "`libidl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1009
+msgid "`librsvg2`"
+msgstr "`librsvg2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1010
+msgid "`libsigc++12`"
+msgstr "`libsigc++12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1011
+msgid "`libsigc++20`"
+msgstr "`libsigc++20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1012
+msgid "`libwnck`"
+msgstr "`libwnck`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1013
+msgid "`libwnck3`"
+msgstr "`libwnck3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1014
+msgid "`libxml++26`"
+msgstr "`libxml++26`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1015
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1637
+msgid "`libxml2`"
+msgstr "`libxml2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1016
+msgid "`libxslt`"
+msgstr "`libxslt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1017
+msgid "`metacity`"
+msgstr "`metacity`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1018
+msgid "`nautilus3`"
+msgstr "`nautilus3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1019
+msgid "`orbit2`"
+msgstr "`orbit2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1020
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1237
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1648
+msgid "`pango`"
+msgstr "`pango`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1021
+msgid "`pangomm`"
+msgstr "`pangomm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1022
+msgid "`pangox-compat`"
+msgstr "`pangox-compat`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1023
+msgid "`py3gobject3`"
+msgstr "`py3gobject3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1024
+msgid "`pygnome2`"
+msgstr "`pygnome2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1025
+msgid "`pygobject`"
+msgstr "`pygobject`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1026
+msgid "`pygobject3`"
+msgstr "`pygobject3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1027
+msgid "`pygtk2`"
+msgstr "`pygtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1028
+msgid "`pygtksourceview`"
+msgstr "`pygtksourceview`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1029
+msgid "`referencehack`"
+msgstr "`referencehack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1030
+msgid "`vte`"
+msgstr "`vte`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1031
+msgid "`vte3`"
+msgstr "`vte3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1034
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1800
+msgid ""
+"The default dependency is build- and run-time, it can be changed with "
+"`:build` or `:run`. For example:"
+msgstr ""
+"Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с "
+"помощью `:build` или `:run`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1039
+#, no-wrap
+msgid ""
+"USES=\t\tgnome\n"
+"USE_GNOME=\tgnomemenus3:build intlhack\n"
+msgstr ""
+"USES=\t\tgnome\n"
+"USE_GNOME=\tgnomemenus3:build intlhack\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1042
+msgid "See crossref:special[using-gnome,Using GNOME] for more information."
+msgstr ""
+"См. crossref:special[using-gnome,Использование GNOME] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1044
+#, no-wrap
+msgid "`go`"
+msgstr "`go`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1049
+msgid ""
+"Ports should not be created for Go libs, see crossref:special[go-libs,Go "
+"Libraries] for more information."
+msgstr ""
+"Порты не следует создавать для библиотек Go, дополнительную информацию см. в "
+"crossref:special[go-libs,Библиотеки Go]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1052
+msgid ""
+"Possible arguments: (none), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, "
+"`run`"
+msgstr ""
+"Возможные аргументы: (нет), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, "
+"`run`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1059
+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 ""
+"Устанавливает значения и цели по умолчанию, используемые для сборки ПО на "
+"Go. Добавляется зависимость сборки от порта компилятора Go, сопровождающие "
+"порта могут установить требуемую версию. По умолчанию сборка выполняется в "
+"режиме GOPATH. Если ПО на Go использует модули, режим с поддержкой модулей "
+"можно включить с помощью аргумента `modules`. `no_targets` настроит "
+"окружение сборки, как `GO_ENV`, `GO_BUILDFLAGS`, но пропустит создание целей "
+"извлечения (extract) и сборки (build). `run` также добавит зависимость "
+"выполнения от порта компилятора Go."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1061
+msgid "The build process is controlled by several variables:"
+msgstr "Процесс сборки контролируется несколькими переменными:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1062
+#, no-wrap
+msgid "`GO_MODULE`"
+msgstr "`GO_MODULE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1065
+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 ""
+"Имя модуля приложения, указанное директивой `module` в `go.mod`. В "
+"большинстве случаев это единственная необходимая переменная для портов, "
+"использующих модули Go."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1066
+#, no-wrap
+msgid "`GO_PKGNAME`"
+msgstr "`GO_PKGNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1071
+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 ""
+"Имя пакета Go при сборке в режиме GOPATH. Это каталог, который будет создан "
+"в `${GOPATH}/src`. Если не задано явно и присутствует `GH_SUBDIR` или "
+"`GL_SUBDIR`, то `GO_PKGNAME` будет выведено из них. Не требуется при сборке "
+"в режиме с поддержкой модулей."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1072
+#, no-wrap
+msgid "`GO_TARGET`"
+msgstr "`GO_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1076
+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 ""
+"Пакеты для сборки. Значение по умолчанию — `${GO_PKGNAME}`. `GO_TARGET` "
+"также может быть кортежем в формате `package:path`, где path может быть либо "
+"простым именем файла, либо полным путём, начинающимся с `${PREFIX}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1077
+#, no-wrap
+msgid "`GO_TESTTARGET`"
+msgstr "`GO_TESTTARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1080
+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:1081
+#, no-wrap
+msgid "`CGO_CFLAGS`"
+msgstr "`CGO_CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1083
+msgid "Additional `CFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+"Дополнительные значения `CFLAGS`, передаваемые компилятору C с помощью `go`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1084
+#, no-wrap
+msgid "`CGO_LDFLAGS`"
+msgstr "`CGO_LDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1086
+msgid "Additional `LDFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+"Дополнительные значения `LDFLAGS`, передаваемые компилятору C через `go`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1087
+#, no-wrap
+msgid "`GO_BUILDFLAGS`"
+msgstr "`GO_BUILDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1089
+msgid "Additional build arguments to be passed to `go build`."
+msgstr "Дополнительные аргументы сборки, передаваемые в `go build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1090
+#, no-wrap
+msgid "`GO_TESTFLAGS`"
+msgstr "`GO_TESTFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1092
+msgid "Additional build arguments to be passed to `go test`."
+msgstr "Дополнительные аргументы сборки, передаваемые в `go test`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1094
+msgid ""
+"See crossref:special[using-go,Building Go Applications] for usage examples."
+msgstr ""
+"См. crossref:special[using-go,Сборка приложений на Go] для примеров "
+"использования."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1096
+#, no-wrap
+msgid "`gperf`"
+msgstr "`gperf`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1101
+msgid ""
+"Add a buildtime dependency on package:devel/gperf[] if `gperf` is not "
+"present in the base system."
+msgstr ""
+"Добавить зависимость во время сборки на package:devel/gperf[], если `gperf` "
+"отсутствует в базовой системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1103
+#, no-wrap
+msgid "`grantlee`"
+msgstr "`grantlee`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1106
+msgid "Possible arguments: `5`, `selfbuild`"
+msgstr "Возможные аргументы: `5`, `selfbuild`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1110
+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 ""
+"Обработать зависимость от Grantlee. Указать `5` для зависимости от версии на "
+"основе Qt5, package:devel/grantlee5[]. `selfbuild` используется внутри "
+"package:devel/grantlee5[] для получения номеров их версий."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1112
+#, no-wrap
+msgid "`groff`"
+msgstr "`groff`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1115
+msgid "Possible arguments: `build`, `run`, `both`"
+msgstr "Возможные аргументы: `build`, `run`, `both`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1117
+msgid ""
+"Registers a dependency on package:textproc/groff[] if not present in the "
+"base system."
+msgstr ""
+"Регистрирует зависимость от package:textproc/groff[], если пакет отсутствует "
+"в базовой системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1119
+#, no-wrap
+msgid "`gssapi`"
+msgstr "`gssapi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1122
+msgid ""
+"Possible arguments: (none), `base` (default), `heimdal`, `mit`, `flags`, "
+"`bootstrap`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `base` (по умолчанию), `heimdal`, `mit`, "
+"`flags`, `bootstrap`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1127
+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 ""
+"Обрабатывает зависимости, необходимые для использования GSS-API. Доступны "
+"только библиотеки, предоставляющие механизм Kerberos. По умолчанию (или при "
+"значении `base`) используется библиотека GSS-API из базовой системы. Также "
+"можно установить значение `heimdal` для использования package:security/"
+"heimdal[] или `mit` для использования package:security/krb5[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1129
+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 ""
+"Если локальная установка Kerberos не находится в `LOCALBASE`, установите "
+"`HEIMDAL_HOME` (для `heimdal`) или `KRB5_HOME` (для `krb5`) на каталог "
+"установки Kerberos."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1131
+msgid "These variables are exported for the ports to use:"
+msgstr "Эти переменные экспортируются для использования портами:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1133
+msgid "`GSSAPIBASEDIR`"
+msgstr "`GSSAPIBASEDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1134
+msgid "`GSSAPICPPFLAGS`"
+msgstr "`GSSAPICPPFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1135
+msgid "`GSSAPIINCDIR`"
+msgstr "`GSSAPIINCDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1136
+msgid "`GSSAPILDFLAGS`"
+msgstr "`GSSAPILDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1137
+msgid "`GSSAPILIBDIR`"
+msgstr "`GSSAPILIBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1138
+msgid "`GSSAPILIBS`"
+msgstr "`GSSAPILIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1139
+msgid "`GSSAPI_CONFIGURE_ARGS`"
+msgstr "`GSSAPI_CONFIGURE_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1142
+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 ""
+"Опция `flags` может быть указана вместе с `base`, `heimdal` или `mit` для "
+"автоматического добавления `GSSAPICPPFLAGS`, `GSSAPILDFLAGS` и `GSSAPILIBS` "
+"в `CFLAGS`, `LDFLAGS` и `LDADD` соответственно. Например, используйте "
+"`base,flags`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1145
+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 ""
+"Опция `bootstrap` — это специальный префикс, предназначенный только для "
+"использования в package:security/krb5[] и package:security/heimdal[]. "
+"Например, используйте `bootstrap,mit`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1147
+#, no-wrap
+msgid "Typical Use"
+msgstr "Типичное использование"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1154
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\tGSSAPI\n"
+"OPTIONS_SINGLE_GSSAPI=\tGSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE\n"
+msgstr ""
+"OPTIONS_SINGLE=\tGSSAPI\n"
+"OPTIONS_SINGLE_GSSAPI=\tGSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1162
+#, 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 ""
+"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"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1167
+#, no-wrap
+msgid "`gstreamer`"
+msgstr "`gstreamer`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1174
+msgid ""
+"Provides an easy way to depend on GStreamer components. The components "
+"should be listed in `USE_GSTREAMER`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависимости от компонентов GStreamer. "
+"Компоненты должны быть перечислены в `USE_GSTREAMER`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1176
+msgid "`a52dec`"
+msgstr "`a52dec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1177
+msgid "`aalib`"
+msgstr "`aalib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1178
+msgid "`amrnb`"
+msgstr "`amrnb`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1179
+msgid "`amrwbdec`"
+msgstr "`amrwbdec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1180
+msgid "`aom`"
+msgstr "`aom`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1181
+msgid "`assrender`"
+msgstr "`assrender`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1182
+msgid "`bad`"
+msgstr "`bad`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1183
+msgid "`bs2b`"
+msgstr "`bs2b`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1185
+msgid "`cdio`"
+msgstr "`cdio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1186
+msgid "`cdparanoia`"
+msgstr "`cdparanoia`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1187
+msgid "`chromaprint`"
+msgstr "`chromaprint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1188
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1603
+msgid "`curl`"
+msgstr "`curl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1189
+msgid "`dash`"
+msgstr "`dash`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1190
+msgid "`dtls`"
+msgstr "`dtls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1191
+msgid "`dts`"
+msgstr "`dts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1192
+msgid "`dv`"
+msgstr "`dv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1193
+msgid "`dvd`"
+msgstr "`dvd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1194
+msgid "`dvdread`"
+msgstr "`dvdread`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1195
+msgid "`editing-services`"
+msgstr "`editing-services`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1196
+msgid "`faac`"
+msgstr "`faac`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1197
+msgid "`faad`"
+msgstr "`faad`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1198
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1610
+msgid "`flac`"
+msgstr "`flac`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1199
+msgid "`flite`"
+msgstr "`flite`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1202
+msgid "`gme`"
+msgstr "`gme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1203
+msgid "`gnonlin`"
+msgstr "`gnonlin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1204
+msgid "`good`"
+msgstr "`good`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1205
+msgid "`gsm`"
+msgstr "`gsm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1206
+msgid "`gtk4`"
+msgstr "`gtk4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1207
+msgid "`gtk`"
+msgstr "`gtk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1208
+msgid "`hal`"
+msgstr "`hal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1209
+msgid "`hls`"
+msgstr "`hls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1210
+msgid "`jack`"
+msgstr "`jack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1211
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1427
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1619
+#, no-wrap
+msgid "`jpeg`"
+msgstr "`jpeg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1212
+msgid "`kate`"
+msgstr "`kate`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1213
+msgid "`kms`"
+msgstr "`kms`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1214
+msgid "`ladspa`"
+msgstr "`ladspa`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1215
+msgid "`lame`"
+msgstr "`lame`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1216
+msgid "`libav`"
+msgstr "`libav`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1217
+msgid "`libcaca`"
+msgstr "`libcaca`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1218
+msgid "`libde265`"
+msgstr "`libde265`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1219
+msgid "`libmms`"
+msgstr "`libmms`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1220
+msgid "`libvisual`"
+msgstr "`libvisual`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1221
+msgid "`lv2`"
+msgstr "`lv2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1222
+msgid "`mm`"
+msgstr "`mm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1223
+msgid "`modplug`"
+msgstr "`modplug`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1224
+msgid "`mpeg2dec`"
+msgstr "`mpeg2dec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1225
+msgid "`mpeg2enc`"
+msgstr "`mpeg2enc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1226
+msgid "`mpg123`"
+msgstr "`mpg123`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1227
+msgid "`mplex`"
+msgstr "`mplex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1228
+msgid "`musepack`"
+msgstr "`musepack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1229
+msgid "`neon`"
+msgstr "`neon`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1230
+msgid "`ogg`"
+msgstr "`ogg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1231
+msgid "`opencv`"
+msgstr "`opencv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1232
+msgid "`openexr`"
+msgstr "`openexr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1233
+msgid "`openh264`"
+msgstr "`openh264`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1234
+msgid "`openjpeg`"
+msgstr "`openjpeg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1235
+msgid "`openmpt`"
+msgstr "`openmpt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1236
+msgid "`opus`"
+msgstr "`opus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1238
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1650
+msgid "`png`"
+msgstr "`png`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1239
+msgid "`pulse`"
+msgstr "`pulse`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1240
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1652
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2346
+#, no-wrap
+msgid "`qt`"
+msgstr "`qt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1241
+msgid "`resindvd`"
+msgstr "`resindvd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1242
+msgid "`rsvg`"
+msgstr "`rsvg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1243
+msgid "`rtmp`"
+msgstr "`rtmp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1244
+msgid "`shout2`"
+msgstr "`shout2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1245
+msgid "`sidplay`"
+msgstr "`sidplay`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1246
+msgid "`smoothstreaming`"
+msgstr "`smoothstreaming`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1247
+msgid "`sndfile`"
+msgstr "`sndfile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1248
+msgid "`sndio`"
+msgstr "`sndio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1249
+msgid "`soundtouch`"
+msgstr "`soundtouch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1250
+msgid "`soup`"
+msgstr "`soup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1251
+msgid "`spandsp`"
+msgstr "`spandsp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1252
+msgid "`speex`"
+msgstr "`speex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1253
+msgid "`srtp`"
+msgstr "`srtp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1254
+msgid "`taglib`"
+msgstr "`taglib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1255
+msgid "`theora`"
+msgstr "`theora`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1256
+msgid "`ttml`"
+msgstr "`ttml`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1257
+msgid "`twolame`"
+msgstr "`twolame`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1258
+msgid "`ugly`"
+msgstr "`ugly`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1259
+msgid "`v4l2`"
+msgstr "`v4l2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1260
+msgid "`vorbis`"
+msgstr "`vorbis`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1261
+msgid "`vpx`"
+msgstr "`vpx`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1262
+msgid "`vulkan`"
+msgstr "`vulkan`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1263
+msgid "`wavpack`"
+msgstr "`wavpack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1264
+msgid "`webp`"
+msgstr "`webp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1265
+msgid "`webrtcdsp`"
+msgstr "`webrtcdsp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1266
+msgid "`x264`"
+msgstr "`x264`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1267
+msgid "`x265`"
+msgstr "`x265`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1268
+msgid "`x`"
+msgstr "`x`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1269
+msgid "`ximagesrc`"
+msgstr "`ximagesrc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1270
+msgid "`zbar`"
+msgstr "`zbar`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1272
+#, no-wrap
+msgid "`guile`"
+msgstr "`guile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1275
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `flavors`, `build`, `run`, `alias`, "
+"`conflicts`"
+msgstr ""
+"Возможные аргументы: (нет), `_X.Y_`, `flavors`, `build`, `run`, `alias`, "
+"`conflicts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1279
+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 ""
+"Добавляет зависимость от Guile. По умолчанию это зависимость от "
+"соответствующей библиотеки `libguile*.so`, если не переопределено опциями "
+"`build` и/или `run`. Опция `alias` настраивает `BINARY_ALIAS` "
+"соответствующим образом (см. crossref:makefiles[binary-alias,Использование "
+"`BINARY_ALIAS`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1282
+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 ""
+"Версия по умолчанию устанавливается с помощью обычного механизма "
+"`DEFAULT_VERSIONS`; если версия по умолчанию не входит в список указанных "
+"версий, то используется последняя доступная версия из списка."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1285
+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 ""
+"Приложения, использующие Guile, обычно собираются только для одной версии "
+"Guile. Однако модули расширений или библиотек должны использовать опцию "
+"`flavors` для сборки с несколькими флейворами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1287
+msgid "For more information see crossref:special[using-guile,Using Guile]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"guile,Использование Guile]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1289
+#, no-wrap
+msgid "`horde`"
+msgstr "`horde`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1296
+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 ""
+"Добавить зависимости времени сборки и выполнения для package:devel/pear-"
+"channel-horde[]. Другие зависимости Horde можно добавить с помощью "
+"`USE_HORDE_BUILD` и `USE_HORDE_RUN`. Дополнительную информацию см. в разделе "
+"crossref:special[php-horde,Модули Horde]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1298
+#, no-wrap
+msgid "`iconv`"
+msgstr "`iconv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1301
+msgid ""
+"Possible arguments: (none), `lib`, `build`, `patch`, `translit`, `wchar_t`"
+msgstr ""
+"Возможные аргументы: (нет), `lib`, `build`, `patch`, `translit`, `wchar_t`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1307
+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 ""
+"Использует функции `iconv`, либо из порта package:converters/libiconv[] как "
+"зависимость на этапе сборки и выполнения, либо из базовой системы. По "
+"умолчанию, без аргументов или с аргументом `lib`, подразумевает `iconv` с "
+"зависимостями на этапе сборки и выполнения. `build` подразумевает "
+"зависимость на этапе сборки, а `patch` — на этапе патчинга. Если порт "
+"использует расширения `WCHAR_T` или `//TRANSLIT` для `iconv`, добавьте "
+"соответствующие аргументы, чтобы использовалась правильная версия `iconv`. "
+"Для получения дополнительной информации см. crossref:special[using-"
+"iconv,Использование `iconv`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1309
+#, no-wrap
+msgid "`imake`"
+msgstr "`imake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1312
+msgid "Possible arguments: (none), `env`, `notall`, `noman`"
+msgstr "Возможные аргументы: (нет), `env`, `notall`, `noman`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1317
+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 ""
+"Добавить package:devel/imake[] как зависимость на этапе сборки и выполнить "
+"`xmkmf -a` на этапе `configure`. Если указан аргумент `env`, цель "
+"`configure` не устанавливается. Если флаг `-a` вызывает проблемы для порта, "
+"добавьте аргумент `notall`. Если `xmkmf` не генерирует цель `install.man`, "
+"добавьте аргумент `noman`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1319
+#, no-wrap
+msgid "`java`"
+msgstr "`java`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1322
+msgid "Possible arguments: (none), `ant`, `build`, `extract`, `run`"
+msgstr "Возможные аргументы: (нет), `ant`, `build`, `extract`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1329
+msgid ""
+"Defaults to `USES=java:build,run` if no arguments are provided and "
+"`NO_BUILD` is undefined. If `NO_BUILD` is defined, `USES=java:run` is used. "
+"If the `ant` argument is given, the port uses Apache Ant. If the `build` "
+"argument is given, a JDK port is added to the build dependencies. If the "
+"`extract` argument is given, a JDK port is added to the extract "
+"dependencies. If the `run` argument is given, a JDK port is added to the "
+"run dependencies."
+msgstr ""
+"По умолчанию используется `USES=java:build,run`, если аргументы не "
+"предоставлены и `NO_BUILD` не определен. Если `NO_BUILD` определен, "
+"используется `USES=java:run`. Если указан аргумент `ant`, порт использует "
+"Apache Ant. Если указан аргумент `build`, порт JDK добавляется в зависимости "
+"сборки. Если указан аргумент `extract`, порт JDK добавляется в зависимости "
+"извлечения. Если указан аргумент `run`, порт JDK добавляется в зависимости "
+"выполнения."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1332
+#, no-wrap
+msgid "`JAVA_VERSION`"
+msgstr "`JAVA_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1336
+msgid ""
+"List of space-separated suitable java versions for the port. An optional `\\"
+"+` allows you to specify a range of versions. (allowed values `8[+]`, `11[\\"
+"+]`, `17[+]`, `18[\\+]`, `19[+]`, `20[\\+]`, `21[+]`, `22[\\+]`, `22[+]`)"
+msgstr ""
+"Список подходящих версий Java для порта, разделенных пробелами. "
+"Необязательный символ `\\+` позволяет указать диапазон версий. (допустимые "
+"значения `8[+]`, `11[\\+]`, `17[+]`, `18[\\+]`, `19[+]`, `20[\\+]`, `21[+]`, "
+"`22[\\+]`, `22[+]`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1337
+#, no-wrap
+msgid "`JAVA_OS`"
+msgstr "`JAVA_OS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1340
+msgid ""
+"List of space-separated suitable JDK port operating systems for the port. "
+"(allowed values: `native`, `linux`)"
+msgstr ""
+"Список поддерживаемых операционных систем для порта JDK, разделённых "
+"пробелами. (допустимые значения: `native`, `linux`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1341
+#, no-wrap
+msgid "`JAVA_VENDOR`"
+msgstr "`JAVA_VENDOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1344
+msgid ""
+"List of space-separated suitable JDK port vendors for the port. (allowed "
+"values: `openjdk`, `oracle`)"
+msgstr ""
+"Список подходящих поставщиков портов JDK для порта, разделенных пробелами. "
+"(допустимые значения: `openjdk`, `oracle`)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1346
+msgid "The framework exposes the following variables to be read by the port:"
+msgstr "Фреймворк предоставляет следующие переменные для чтения портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1347
+#, no-wrap
+msgid "`JAVA_PORT`"
+msgstr "`JAVA_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1349
+msgid "The name of the JDK port. (e.g. 'java/openjdk8')"
+msgstr "Имя порта JDK. (например, 'java/openjdk8')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1350
+#, no-wrap
+msgid "`JAVA_PORT_VERSION`"
+msgstr "`JAVA_PORT_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1352
+msgid "The version of the JDK port. (e.g. '8')"
+msgstr "Версия порта JDK. (например, '8')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1353
+#, no-wrap
+msgid "`JAVA_PORT_OS`"
+msgstr "`JAVA_PORT_OS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1355
+msgid "The operating system used by the JDK port. (e.g. 'linux')"
+msgstr "Используемая операционная система для порта JDK. (например, 'linux')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1356
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR`"
+msgstr "`JAVA_PORT_VENDOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1358
+msgid "The vendor of the JDK port. (e.g. 'openjdk')"
+msgstr "Поставщик порта JDK. (например, 'openjdk')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1359
+#, no-wrap
+msgid "`JAVA_PORT_OS_DESCRIPTION`"
+msgstr "`JAVA_PORT_OS_DESCRIPTION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1361
+msgid ""
+"Description of the operating system used by the JDK port. (e.g. 'Linux')"
+msgstr ""
+"Описание операционной системы, используемой портом JDK. (например, 'Linux')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1362
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR_DESCRIPTION`"
+msgstr "`JAVA_PORT_VENDOR_DESCRIPTION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1364
+msgid ""
+"Description of the vendor of the JDK port. (e.g. 'OpenJDK BSD Porting Team')"
+msgstr "Описание поставщика порта JDK. (например, 'OpenJDK BSD Porting Team')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1365
+#, no-wrap
+msgid "`JAVA_HOME`"
+msgstr "`JAVA_HOME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1367
+msgid ""
+"Path to the installation directory of the JDK. (e.g. [.filename]#/usr/local/"
+"openjdk8#)"
+msgstr ""
+"Путь к каталогу установки JDK. (например, [.filename]#/usr/local/openjdk8#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1368
+#, no-wrap
+msgid "`JAVAC`"
+msgstr "`JAVAC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1371
+msgid ""
+"Path to the Java compiler to use. (e.g. [.filename]#/usr/local/openjdk8/bin/"
+"javac# or [.filename]#/usr/local/bin/javac#)"
+msgstr ""
+"Путь к используемому компилятору Java. (например, [.filename]#/usr/local/"
+"openjdk8/bin/javac# или [.filename]#/usr/local/bin/javac#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1372
+#, no-wrap
+msgid "`JAR`"
+msgstr "`JAR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1375
+msgid ""
+"Path to the JAR tool to use. (e.g. [.filename]#/usr/local/openjdk8/bin/jar# "
+"or [.filename]#/usr/local/bin/fastjar#)"
+msgstr ""
+"Путь к используемому инструменту JAR. (например, [.filename]#/usr/local/"
+"openjdk8/bin/jar# или [.filename]#/usr/local/bin/fastjar#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1376
+#, no-wrap
+msgid "`APPLETVIEWER`"
+msgstr "`APPLETVIEWER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1379
+msgid ""
+"Path to the appletviewer utility. (e.g. [.filename]#/usr/local/linux-"
+"jdk1.8.0/bin/appletviewer#)"
+msgstr ""
+"Путь к утилите appletviewer. (например, [.filename]#/usr/local/linux-"
+"jdk1.8.0/bin/appletviewer#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1380
+#, no-wrap
+msgid "`JAVA`"
+msgstr "`JAVA`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1382
+msgid ""
+"Path to the `java` executable. Use this for executing Java programs. (e.g. "
+"[.filename]#/usr/local/openjdk8/bin/java#)"
+msgstr ""
+"Путь к исполняемому файлу `java`. Используется для запуска программ на Java. "
+"(например, [.filename]#/usr/local/openjdk8/bin/java#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1383
+#, no-wrap
+msgid "`JAVADOC`"
+msgstr "`JAVADOC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1385
+msgid "Path to the `javadoc` utility program."
+msgstr "Путь к программе `javadoc`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1386
+#, no-wrap
+msgid "`JAVAH`"
+msgstr "`JAVAH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1388
+msgid "Path to the `javah` program."
+msgstr "Путь к программе `javah`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1389
+#, no-wrap
+msgid "`JAVAP`"
+msgstr "`JAVAP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1391
+msgid "Path to the `javap` program."
+msgstr "Путь к программе `javap`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1392
+#, no-wrap
+msgid "`JAVA_KEYTOOL`"
+msgstr "`JAVA_KEYTOOL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1394
+msgid "Path to the `keytool` utility program."
+msgstr "Путь к утилите `keytool`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1395
+#, no-wrap
+msgid "`JAVA_N2A`"
+msgstr "`JAVA_N2A`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1397
+msgid "Path to the `native2ascii` tool."
+msgstr "Путь к инструменту `native2ascii`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1398
+#, no-wrap
+msgid "`JAVA_POLICYTOOL`"
+msgstr "`JAVA_POLICYTOOL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1400
+msgid "Path to the `policytool` program."
+msgstr "Путь к программе `policytool`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1401
+#, no-wrap
+msgid "`JAVA_SERIALVER`"
+msgstr "`JAVA_SERIALVER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1403
+msgid "Path to the `serialver` utility program."
+msgstr "Путь к утилите `serialver`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1404
+#, no-wrap
+msgid "`RMIC`"
+msgstr "`RMIC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1406
+msgid "Path to the RMI stub/skeleton generator, `rmic`."
+msgstr "Путь к генератору RMI-заглушек/скелетов, `rmic`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1407
+#, no-wrap
+msgid "`RMIREGISTRY`"
+msgstr "`RMIREGISTRY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1409
+msgid "Path to the RMI registry program, `rmiregistry`."
+msgstr "Путь к программе реестра RMI, `rmiregistry`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1410
+#, no-wrap
+msgid "`RMID`"
+msgstr "`RMID`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1412
+msgid "Path to the RMI daemon program."
+msgstr "Путь к программе демона RMI."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1413
+#, no-wrap
+msgid "`JAVA_CLASSES`"
+msgstr "`JAVA_CLASSES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1416
+msgid ""
+"Path to the archive that contains the JDK class files. On most JDKs, this is "
+"[.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+msgstr ""
+"Путь к архиву, содержащему файлы классов JDK. В большинстве JDK это "
+"[.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1417
+#, no-wrap
+msgid "`JAVASHAREDIR`"
+msgstr "`JAVASHAREDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1419
+msgid "The base directory for all shared Java resources."
+msgstr "Базовый каталог для всех общих ресурсов Java."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1420
+#, no-wrap
+msgid "`JAVAJARDIR`"
+msgstr "`JAVAJARDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1422
+msgid "The directory where a port should install JAR files."
+msgstr "Каталог, в котором порт должен устанавливать JAR-файлы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1423
+#, no-wrap
+msgid "`JAVALIBDIR`"
+msgstr "`JAVALIBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1425
+msgid "The directory where JAR files installed by other ports are located."
+msgstr "Каталог, в котором находятся JAR-файлы, установленные другими портами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1430
+msgid "Possible arguments: `lib` (default, implicit), `build`, `run`"
+msgstr ""
+"Возможные аргументы: `lib` (по умолчанию, подразумевается), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1432
+msgid "Help handling dependencies on `jpeg`."
+msgstr "Помощь в обработке зависимостей от `jpeg`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1435
+msgid ""
+"If the `lib` argument is provided or no arguments are provided then a lib "
+"dependency is added to the port."
+msgstr ""
+"Если указан аргумент `lib` или аргументы не предоставлены, то в порт "
+"добавляется зависимость от библиотеки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1438
+msgid ""
+"If the `build` argument is provided then a build dependency is added to the "
+"port."
+msgstr ""
+"Если указан аргумент `build`, то в порт добавляется зависимость сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1441
+msgid ""
+"If the `run` argument is provided then a run dependency is added to the port."
+msgstr ""
+"Если указан аргумент `run`, то к порту добавляется зависимость времени "
+"выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1444
+msgid ""
+"If the `both` argument is provided then a build dependency and a run "
+"dependency are added to the port."
+msgstr ""
+"Если указан аргумент `both`, то к порту добавляется зависимость для сборки и "
+"зависимость для выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1446
+msgid "The framework provides the following variable that can be set by ports:"
+msgstr ""
+"Фреймворк предоставляет следующую переменную, которая может быть установлена "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1447
+#, no-wrap
+msgid "`JPEG_PORT`"
+msgstr "`JPEG_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1449
+msgid "Specifies the JPEG implementation to use. Possible values are:"
+msgstr "Указывает реализацию JPEG для использования. Возможные значения:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1451
+msgid "package:graphics/jpeg-turbo[] (default)"
+msgstr "package:graphics/jpeg-turbo[] (по умолчанию)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1452
+msgid "package:graphics/mozjpeg[]"
+msgstr "package:graphics/mozjpeg[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1454
+#, no-wrap
+msgid "`kde`"
+msgstr "`kde`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1457
+msgid "Possible arguments: `5`"
+msgstr "Возможные аргументы: `5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1460
+msgid ""
+"Add dependency on KDE components. See crossref:special[using-kde,Using KDE] "
+"for more information."
+msgstr ""
+"Добавить зависимость от компонентов KDE. Подробнее см. в "
+"crossref:special[using-kde,Использование KDE]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1462
+#, no-wrap
+msgid "`kmod`"
+msgstr "`kmod`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1465
+msgid "Possible arguments: (none), `debug`"
+msgstr "Возможные аргументы: (отсутствуют), `debug`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1467
+msgid "Fills in the boilerplate for kernel module ports, currently:"
+msgstr "Заполняет шаблон для портов модулей ядра, в настоящее время:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1469
+msgid "Add `kld` to `CATEGORIES`."
+msgstr "Добавьте `kld` в `CATEGORIES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1470
+msgid "Set `SSP_UNSAFE`."
+msgstr "Установите `SSP_UNSAFE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1471
+msgid "Set `IGNORE` if the kernel sources are not found in `SRC_BASE`."
+msgstr "Установите `IGNORE`, если исходные коды ядра не найдены в `SRC_BASE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1472
+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 ""
+"Определить `KMODDIR` по умолчанию как [.filename]#/boot/modules#, добавить "
+"его в `PLIST_SUB` и `MAKE_ENV`, а также создать его при установке. Если "
+"`KMODDIR` установлен в [.filename]#/boot/kernel#, он будет перезаписан в "
+"[.filename]#/boot/modules#. Это предотвращает повреждение пакетов при "
+"обновлении ядра из-за переименования [.filename]#/boot/kernel# в "
+"[.filename]#/boot/kernel.old# в процессе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1473
+msgid ""
+"Handle cross-referencing kernel modules upon installation and "
+"deinstallation, using crossref:plist[plist-keywords-kld,`@kld`]."
+msgstr ""
+"Обрабатывать перекрестные ссылки на модули ядра при установке и удалении, "
+"используя crossref:plist[plist-keywords-kld,`@kld`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1474
+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 ""
+"Если указан аргумент `debug`, порт может установить отладочную версию модуля "
+"в [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. По умолчанию "
+"`KERN_DEBUGDIR` копируется из `DEBUGDIR` и устанавливается в [.filename]#/"
+"usr/lib/debug#. Фреймворк позаботится о создании и удалении необходимых "
+"каталогов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1476
+#, no-wrap
+msgid "`kodi`"
+msgstr "`kodi`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1483
+msgid ""
+"Provide support for package:multimedia/kodi[] add-ons. If the `noautoplist` "
+"argument is provided it does not generate the `plist` automatically."
+msgstr ""
+"Обеспечить поддержку дополнений для package:multimedia/kodi[]. Если указан "
+"аргумент `noautoplist`, автоматическое создание `plist` не выполняется."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1485
+#, no-wrap
+msgid "`lazarus`"
+msgstr "`lazarus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1488
+msgid "Possible arguments: (none), `gtk2` (default), `qt5`, `qt6`, `flavors`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `gtk2` (по умолчанию), `qt5`, `qt6`, "
+"`flavors`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1490
+msgid "Provide support for package:editors/lazarus[] based ports."
+msgstr "Обеспечить поддержку портов на основе package:editors/lazarus[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1494
+msgid ""
+"If no arguments are provided or if `gtk2` is provided the lazarus-app is "
+"built with a `gtk2` interface the package:editors/lazarus[] port will be "
+"built with the `gtk2` interface."
+msgstr ""
+"Если аргументы не предоставлены или указан `gtk2`, приложение lazarus-app "
+"будет собрано с интерфейсом `gtk2`, и порт package:editors/lazarus[] будет "
+"собран с интерфейсом `gtk2`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1497
+msgid ""
+"If the `qt5` argument is provided, the lazarus-app is built with a `qt5` "
+"interface."
+msgstr ""
+"Если указан аргумент `qt5`, приложение lazarus-app собирается с интерфейсом "
+"`qt5`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1500
+msgid ""
+"If the `qt6` argument is provided, the lazarus-app is built with a `qt6` "
+"interface."
+msgstr ""
+"Если указан аргумент `qt6`, приложение lazarus-app собирается с интерфейсом "
+"`qt6`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1503
+msgid ""
+"If the `flavors` argument is provided the lazarus-app is built with flavors "
+"feature."
+msgstr ""
+"Если указан аргумент `flavors`, приложение `lazarus-app` собирается с "
+"поддержкой функций флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1506
+msgid ""
+"If the port does not require compiling lazarus project files automatically, "
+"the following variable can be defined:"
+msgstr ""
+"Если порт не требует автоматической компиляции файлов проекта lazarus, можно "
+"определить следующую переменную:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1508
+msgid "`NO_LAZBUILD`= `yes`"
+msgstr "`NO_LAZBUILD`= `yes`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1510
+msgid "The following variables are available for ports:"
+msgstr "Доступны следующие переменные для портов:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1511
+#, no-wrap
+msgid "`LAZARUS_PROJECT_FILES`"
+msgstr "`LAZARUS_PROJECT_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1513
+msgid "List of lpi files. It must not be empty. Default: empty"
+msgstr "Список lpi-файлов. Он не должен быть пустым. По умолчанию: пусто"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1514
+#, no-wrap
+msgid "`LAZARUS_DIR`"
+msgstr "`LAZARUS_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1517
+msgid ""
+"Path to lazarus installation directory Default: [.filename]#${LOCALBASE}/"
+"share/lazarus-${LAZARUS_VER}#"
+msgstr ""
+"Путь к директории установки lazarus. По умолчанию: [.filename]#${LOCALBASE}/"
+"share/lazarus-${LAZARUS_VER}#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1518
+#, no-wrap
+msgid "`LAZBUILD_ARGS`"
+msgstr "`LAZBUILD_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1522
+msgid ""
+"lazbuild extra args. It could be `-d` in most of cases. See man:lazbuild[1] "
+"for more information. Default: empty"
+msgstr ""
+"Дополнительные аргументы lazbuild. В большинстве случаев это может быть `-"
+"d`. Подробнее см. man:lazbuild[1]. По умолчанию: пусто"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1523
+#, no-wrap
+msgid "`LAZARUS_NO_FLAVORS`"
+msgstr "`LAZARUS_NO_FLAVORS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1526
+msgid ""
+"Do not build these lazarus flavors. If `LAZARUS_NO_FLAVORS` is not defined "
+"then all valid lazarus flavors are assumed."
+msgstr ""
+"Не собирать эти флейворы lazarus. Если `LAZARUS_NO_FLAVORS` не определена, "
+"то предполагаются все допустимые флейворы lazarus."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1527
+#, no-wrap
+msgid "`WANT_LAZARUS_DEVEL`"
+msgstr "`WANT_LAZARUS_DEVEL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1529
+msgid "If set to `yes` then use package:lazarus/devel[] as build dependency."
+msgstr ""
+"Если установлено значение `yes`, то используйте package:lazarus/devel[] как "
+"зависимость сборки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1531
+#, no-wrap
+msgid "`ldap`"
+msgstr "`ldap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1534
+msgid "Possible arguments: (none), <version>, client, server"
+msgstr "Возможные аргументы: (нет), <версия>, клиент, сервер"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1542
+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 ""
+"Регистрирует зависимость от пакета package:net/openldap[]. Использует "
+"конкретную `<версию>` (без точечной нотации), если она указана. В противном "
+"случае пытается найти установленную версию. При необходимости возвращается к "
+"версии по умолчанию, указанной в `bsd.default-versions.mk`. `client` "
+"указывает на зависимость во время выполнения от клиентской библиотеки. Это "
+"также значение по умолчанию. `server` указывает на зависимость во время "
+"выполнения от сервера."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1545
+#, no-wrap
+msgid "`IGNORE_WITH_OPENLDAP`"
+msgstr "`IGNORE_WITH_OPENLDAP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1547
+msgid ""
+"This variable can be defined if the ports does not support one or more "
+"versions of OpenLDAP."
+msgstr ""
+"Эта переменная может быть определена, если порты не поддерживают одну или "
+"несколько версий OpenLDAP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1547
+#, no-wrap
+msgid "`WITH_OPENLDAP_VER`"
+msgstr "`WITH_OPENLDAP_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1549
+msgid "User defined variable to set OpenLDAP version."
+msgstr "Пользовательская переменная для установки версии OpenLDAP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1549
+#, no-wrap
+msgid "`OPENLDAP_VER`"
+msgstr "`OPENLDAP_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1551
+msgid "Detected OpenLDAP version."
+msgstr "Обнаруженная версия OpenLDAP."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1553
+#, no-wrap
+msgid "`lha`"
+msgstr "`lha`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1558
+msgid "Set `EXTRACT_SUFX` to `.lzh`"
+msgstr "Установите `EXTRACT_SUFX` в `.lzh`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1560
+#, no-wrap
+msgid "`libarchive`"
+msgstr "`libarchive`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1566
+msgid ""
+"Registers a dependency on package:archivers/libarchive[]. Any ports "
+"depending on libarchive must include `USES=libarchive`."
+msgstr ""
+"Регистрирует зависимость от package:archivers/libarchive[]. Любые порты, "
+"зависящие от libarchive, должны включать `USES=libarchive`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1568
+#, no-wrap
+msgid "`libedit`"
+msgstr "`libedit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1574
+msgid ""
+"Registers a dependency on package:devel/libedit[]. Any ports depending on "
+"libedit must include `USES=libedit`."
+msgstr ""
+"Регистрирует зависимость от package:devel/libedit[]. Все порты, зависящие от "
+"libedit, должны включать `USES=libedit`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1576
+#, no-wrap
+msgid "`libtool`"
+msgstr "`libtool`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1579
+msgid "Possible arguments: (none), `keepla`, `build`"
+msgstr "Возможные аргументы: (нет), `keepla`, `build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1583
+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 ""
+"Исправляет скрипты `libtool`. Это должно быть добавлено во все порты, "
+"использующие `libtool`. Аргумент `keepla` может быть использован для "
+"сохранения файлов [.filename]#.la#. Некоторые порты не поставляются с "
+"собственной копией libtool и требуют зависимость во время сборки от "
+"package:devel/libtool[], используйте аргумент `:build` для добавления такой "
+"зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1585
+#, no-wrap
+msgid "`linux`"
+msgstr "`linux`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1588
+msgid "Possible arguments: `c6`, `c7`"
+msgstr "Возможные аргументы: `c6`, `c7`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1592
+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 ""
+"Порт фреймворка совместимости с Linux. Укажите `c6` для зависимостей от "
+"пакетов CentOS 6. Укажите `c7` для зависимостей от пакетов CentOS 7. "
+"Доступные пакеты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1594
+msgid "`allegro`"
+msgstr "`allegro`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1595
+msgid "`alsa-plugins-oss`"
+msgstr "`alsa-plugins-oss`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1596
+msgid "`alsa-plugins-pulseaudio`"
+msgstr "`alsa-plugins-pulseaudio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1597
+msgid "`alsalib`"
+msgstr "`alsalib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1599
+msgid "`avahi-libs`"
+msgstr "`avahi-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1600
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2820
+msgid "`base`"
+msgstr "`base`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1602
+msgid "`cups-libs`"
+msgstr "`cups-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1604
+msgid "`cyrus-sasl2`"
+msgstr "`cyrus-sasl2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1605
+msgid "`dbusglib`"
+msgstr "`dbusglib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1606
+msgid "`dbuslibs`"
+msgstr "`dbuslibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1607
+msgid "`devtools`"
+msgstr "`devtools`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1608
+msgid "`dri`"
+msgstr "`dri`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1609
+msgid "`expat`"
+msgstr "`expat`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1611
+msgid "`fontconfig`"
+msgstr "`fontconfig`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1613
+msgid "`gnutls`"
+msgstr "`gnutls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1614
+msgid "`graphite2`"
+msgstr "`graphite2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1615
+msgid "`gtk2`"
+msgstr "`gtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1616
+msgid "`harfbuzz`"
+msgstr "`harfbuzz`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1617
+msgid "`jasper`"
+msgstr "`jasper`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1618
+msgid "`jbigkit`"
+msgstr "`jbigkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1620
+msgid "`libasyncns`"
+msgstr "`libasyncns`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1621
+msgid "`libaudiofile`"
+msgstr "`libaudiofile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1622
+msgid "`libelf`"
+msgstr "`libelf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1623
+msgid "`libgcrypt`"
+msgstr "`libgcrypt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1624
+msgid "`libgfortran`"
+msgstr "`libgfortran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1625
+msgid "`libgpg-error`"
+msgstr "`libgpg-error`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1626
+msgid "`libmng`"
+msgstr "`libmng`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1627
+msgid "`libogg`"
+msgstr "`libogg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1628
+msgid "`libpciaccess`"
+msgstr "`libpciaccess`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1629
+msgid "`libsndfile`"
+msgstr "`libsndfile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1630
+msgid "`libsoup`"
+msgstr "`libsoup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1631
+msgid "`libssh2`"
+msgstr "`libssh2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1632
+msgid "`libtasn1`"
+msgstr "`libtasn1`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1633
+msgid "`libthai`"
+msgstr "`libthai`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1634
+msgid "`libtheora`"
+msgstr "`libtheora`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1635
+msgid "`libv4l`"
+msgstr "`libv4l`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1636
+msgid "`libvorbis`"
+msgstr "`libvorbis`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1638
+msgid "`mikmod`"
+msgstr "`mikmod`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1639
+msgid "`naslibs`"
+msgstr "`naslibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1640
+msgid "`ncurses-base`"
+msgstr "`ncurses-base`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1641
+msgid "`nspr`"
+msgstr "`nspr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1642
+msgid "`nss`"
+msgstr "`nss`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1643
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2026
+#, no-wrap
+msgid "`openal`"
+msgstr "`openal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1644
+msgid "`openal-soft`"
+msgstr "`openal-soft`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1645
+msgid "`openldap`"
+msgstr "`openldap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1646
+msgid "`openmotif`"
+msgstr "`openmotif`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1647
+msgid "`openssl`"
+msgstr "`openssl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1649
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3001
+#, no-wrap
+msgid "`pixman`"
+msgstr "`pixman`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1651
+msgid "`pulseaudio-libs`"
+msgstr "`pulseaudio-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1653
+msgid "`qt-x11`"
+msgstr "`qt-x11`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1654
+msgid "`qtwebkit`"
+msgstr "`qtwebkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1655
+msgid "`scimlibs`"
+msgstr "`scimlibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1656
+msgid "`sdl12`"
+msgstr "`sdl12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1657
+msgid "`sdlimage`"
+msgstr "`sdlimage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1658
+msgid "`sdlmixer`"
+msgstr "`sdlmixer`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1659
+msgid "`sqlite3`"
+msgstr "`sqlite3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1660
+msgid "`tcl85`"
+msgstr "`tcl85`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1661
+msgid "`tcp_wrappers-libs`"
+msgstr "`tcp_wrappers-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1662
+msgid "`tiff`"
+msgstr "`tiff`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1663
+msgid "`tk85`"
+msgstr "`tk85`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1664
+msgid "`ucl`"
+msgstr "`ucl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1665
+msgid "`xorglibs`"
+msgstr "`xorglibs`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1667
+#, no-wrap
+msgid "`llvm`"
+msgstr "`llvm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1670
+msgid ""
+"Possible arguments: (none), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib"
+msgstr ""
+"Возможные аргументы: (нет), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1678
+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 ""
+"Добавляет зависимость от LLVM. По умолчанию это зависимость для сборки, если "
+"не переопределено опциями `run` или `lib`. Версия по умолчанию задаётся в "
+"`LLVM_DEFAULT`. Также можно указать конкретную версию. Минимальную и "
+"максимальную версии можно указать с помощью параметров `min` и `max` "
+"соответственно. Фреймворк портов экспортирует следующие переменные в порт:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1679
+#, no-wrap
+msgid "`LLVM_VERSION`"
+msgstr "`LLVM_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1681
+msgid "Version chosen from the arguments to llvm.mk"
+msgstr "Версия, выбранная из аргументов к llvm.mk"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1681
+#, no-wrap
+msgid "`LLVM_PORT`"
+msgstr "`LLVM_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1683
+msgid "Chosen llvm port"
+msgstr "Выбранный порт llvm"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1683
+#, no-wrap
+msgid "`LLVM_CONFIG`"
+msgstr "`LLVM_CONFIG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1685
+msgid "llvm-config of the chosen port"
+msgstr "`llvm-config` выбранного порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1685
+#, no-wrap
+msgid "`LLVM_LIBLLVM`"
+msgstr "`LLVM_LIBLLVM`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1687
+msgid "libLLVM.so of the chosen port"
+msgstr "`libLLVM.so` выбранного порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1687
+#, no-wrap
+msgid "`LLVM_PREFIX`"
+msgstr "`LLVM_PREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1689
+msgid "Installation prefix of the chosen port"
+msgstr "Префикс инсталляции выбранного порта"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1691
+#, no-wrap
+msgid "`localbase`"
+msgstr "`localbase`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1694
+msgid "Possible arguments: (none), `ldflags`"
+msgstr "Возможные аргументы: (отсутствуют), `ldflags`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1699
+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 ""
+"Гарантирует использование библиотек из зависимостей в `LOCALBASE` вместо "
+"библиотек из базовой системы. Указывает `ldflags` для добавления `-L$"
+"{LOCALBASE}/lib` в `LDFLAGS` вместо `LIBS`. Порты, зависящие от библиотек, "
+"которые также присутствуют в базовой системе, должны использовать эту опцию. "
+"Она также используется внутри несколькими другими `USES`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1701
+#, no-wrap
+msgid "`lua`"
+msgstr "`lua`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1704
+msgid ""
+"Possible arguments: (none), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, "
+"`flavors`, `build`, `run`, `env`"
+msgstr ""
+"Возможные аргументы: (нет), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, "
+"`flavors`, `build`, `run`, `env`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1708
+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 ""
+"Добавляет зависимость от Lua. По умолчанию это зависимость от библиотеки, "
+"если не переопределено опциями `build` и/или `run`. Опция `env` "
+"предотвращает добавление любой зависимости, при этом все обычные переменные "
+"остаются определенными."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1710
+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 ""
+"Версия по умолчанию устанавливается с помощью обычного механизма "
+"`DEFAULT_VERSIONS`, если только версия или диапазон версий не указаны в "
+"качестве аргумента, например, `51` или `51-54`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1713
+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 ""
+"Приложения, использующие Lua, обычно собираются только для одной версии Lua. "
+"Однако модули библиотек, предназначенные для загрузки кодом Lua, должны "
+"использовать опцию `module` для сборки с несколькими вариантами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1715
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1734
+msgid "For more information see crossref:special[using-lua,Using Lua]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"lua,Использование Lua]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1717
+#, no-wrap
+msgid "`luajit`"
+msgstr "`luajit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1720
+msgid "Possible arguments: (none), `_X_`"
+msgstr "Возможные аргументы: (нет), `_X_`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1723
+msgid ""
+"Adds a dependency on luajit runtime. A specific version _X_ can be used. "
+"Possible versions are `luajit`, `luajit-devel`, `luajit-openresty`"
+msgstr ""
+"Добавляет зависимость от среды выполнения luajit. Можно указать конкретную "
+"версию _X_. Доступные версии: `luajit`, `luajit-devel`, `luajit-openresty`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1725
+msgid ""
+"After including [.filename]#bsd.port.options.mk# or "
+"[.filename]#bsd.port.pre.mk# the port can inspect these variables:"
+msgstr ""
+"После включения [.filename]#bsd.port.options.mk# или "
+"[.filename]#bsd.port.pre.mk# порт может проверять эти переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1726
+#, no-wrap
+msgid "`LUAJIT_VER`"
+msgstr "`LUAJIT_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1728
+msgid "The selected luajit version"
+msgstr "Выбранная версия luajit"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1728
+#, no-wrap
+msgid "`LUAJIT_INCDIR`"
+msgstr "`LUAJIT_INCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1730
+msgid "The path to luajit's header files"
+msgstr "Путь к заголовочным файлам luajit"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1730
+#, no-wrap
+msgid "`LUAJIT_LUAVER`"
+msgstr "`LUAJIT_LUAVER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1732
+msgid "Which luajit spec version is selected (2.0 for luajit, else 2.1)"
+msgstr "Какой версии спецификации luajit выбрана (2.0 для luajit, иначе 2.1)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1736
+#, no-wrap
+msgid "`lxqt`"
+msgstr "`lxqt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1743
+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 ""
+"Обработка зависимостей для рабочей среды LXQt. Используйте `USE_LXQT` для "
+"выбора необходимых компонентов для порта. Дополнительную информацию см. в "
+"разделе crossref:special[using-lxqt,Использование LXQt]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1745
+#, no-wrap
+msgid "`magick`"
+msgstr "`magick`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1748
+msgid "Possible arguments: (none), `_X_`, `build`, `nox11`, `run`, `test`"
+msgstr "Возможные аргументы: (нет), `_X_`, `build`, `nox11`, `run`, `test`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1753
+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 ""
+"Добавить зависимость библиотеки от `ImageMagick`. Можно указать конкретную "
+"версию _X_. Доступные версии: `6` и `7` (по умолчанию). `nox11` означает, "
+"что требуется версия порта `-nox11`. `build`, `run` и `test` добавляют "
+"зависимости на сборку, выполнение и тестирование для ImageMagick."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1755
+#, no-wrap
+msgid "`makeinfo`"
+msgstr "`makeinfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1760
+msgid ""
+"Add a build-time dependency on `makeinfo` if it is not present in the base "
+"system."
+msgstr ""
+"Добавить зависимость во время сборки на `makeinfo`, если его нет в базовой "
+"системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1762
+#, no-wrap
+msgid "`makeself`"
+msgstr "`makeself`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1767
+msgid ""
+"Indicates that the distribution files are makeself archives and sets the "
+"appropriate dependencies."
+msgstr ""
+"Указывает, что файлы дистрибутива являются архивами makeself и устанавливает "
+"соответствующие зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1769
+#, no-wrap
+msgid "`mate`"
+msgstr "`mate`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1776
+msgid ""
+"Provides an easy way to depend on MATE components. The components should be "
+"listed in `USE_MATE`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависимостей от компонентов MATE. Компоненты "
+"должны быть перечислены в `USE_MATE`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1778
+msgid "`autogen`"
+msgstr "`autogen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1779
+msgid "`caja`"
+msgstr "`caja`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1780
+msgid "`common`"
+msgstr "`common`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1781
+msgid "`controlcenter`"
+msgstr "`controlcenter`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1782
+msgid "`desktop`"
+msgstr "`desktop`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1783
+msgid "`dialogs`"
+msgstr "`dialogs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1784
+msgid "`docutils`"
+msgstr "`docutils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1785
+msgid "`icontheme`"
+msgstr "`icontheme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1788
+msgid "`libmatekbd`"
+msgstr "`libmatekbd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1789
+msgid "`libmateweather`"
+msgstr "`libmateweather`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1790
+msgid "`marco`"
+msgstr "`marco`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1791
+msgid "`menus`"
+msgstr "`menus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1792
+msgid "`notificationdaemon`"
+msgstr "`notificationdaemon`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1793
+msgid "`panel`"
+msgstr "`panel`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1794
+msgid "`pluma`"
+msgstr "`pluma`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1795
+msgid "`polkit`"
+msgstr "`polkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1796
+msgid "`session`"
+msgstr "`session`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1797
+msgid "`settingsdaemon`"
+msgstr "`settingsdaemon`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1805
+#, no-wrap
+msgid ""
+"USES=\t\tmate\n"
+"USE_MATE=\tmenus:build intlhack\n"
+msgstr ""
+"USES=\t\tmate\n"
+"USE_MATE=\tmenus:build intlhack\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1808
+#, no-wrap
+msgid "`meson`"
+msgstr "`meson`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1814
+msgid ""
+"Provide support for Meson based projects. For more information see "
+"crossref:special[using-meson,Using `meson`]."
+msgstr ""
+"Предоставить поддержку для проектов на основе Meson. Дополнительную "
+"информацию смотрите в crossref:special[using-meson,Использование `meson`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1816
+#, no-wrap
+msgid "`metaport`"
+msgstr "`metaport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1821
+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 ""
+"Устанавливает следующие переменные для упрощения создания метапорта: "
+"`MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, "
+"`NO_MTREE`, `NO_ARCH`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1823
+#, no-wrap
+msgid "`minizip`"
+msgstr "`minizip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1826
+msgid "Possible arguments: (none), `ng`"
+msgstr "Возможные аргументы: (отсутствуют), `ng`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1828
+msgid ""
+"Adds a library dependency on package:archivers/minizip[] or "
+"package:archivers/minizip-ng[] respectively."
+msgstr ""
+"Добавляет зависимость библиотеки от package:archivers/minizip[] или "
+"package:archivers/minizip-ng[] соответственно."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1830
+#, no-wrap
+msgid "`mlt`"
+msgstr "`mlt`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1833
+msgid "Possible arguments: `7`, `nodepend`"
+msgstr "Возможные аргументы: `7`, `nodepend`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1835
+msgid "Provide support for ports depending on package:multimedia/mlt7[]."
+msgstr "Обеспечить поддержку портов, зависящих от package:multimedia/mlt7[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1838
+msgid ""
+"If the `nodepend` argument is provided no library dependency is generated. "
+"This argument only makes sense for multimedia/mlt7* ports."
+msgstr ""
+"Если указан аргумент `nodepend`, зависимости от библиотек не создаются. Этот "
+"аргумент имеет смысл только для портов multimedia/mlt7*."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1840
+#, no-wrap
+msgid "`mysql`"
+msgstr "`mysql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1843
+msgid ""
+"Possible arguments: (none), `_version_`, `client` (default), `server`, "
+"`embedded`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `_версия_`, `client` (по умолчанию), "
+"`server`, `embedded`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1852
+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 ""
+"Предоставить поддержку MySQL. Если версия не указана, попытаться определить "
+"установленную версию. В случае неудачи использовать версию по умолчанию, "
+"MySQL-5.6. Возможные версии: `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, "
+"`57p`, `80`, `100m`, `101m` и `102m`. Суффиксы `m` и `p` обозначают флейворс "
+"MariaDB и Percona для MySQL. Параметры `server` и `embedded` добавляют "
+"зависимости во время сборки и выполнения на сервер MySQL. При использовании "
+"`server` или `embedded` добавьте `client`, чтобы также включить зависимость "
+"от [.filename]#libmysqlclient.so#. Порт может установить "
+"`IGNORE_WITH_MYSQL`, если некоторые версии не поддерживаются."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1854
+msgid "The framework sets `MYSQL_VER` to the detected MySQL version."
+msgstr "Фреймворк устанавливает `MYSQL_VER` в обнаруженную версию MySQL."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1856
+#, no-wrap
+msgid "`mono`"
+msgstr "`mono`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1859
+msgid "Possible arguments: (none), `nuget`"
+msgstr "Возможные аргументы: (отсутствуют), `nuget`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1861
+msgid ""
+"Adds a dependency on the Mono (currently only C#) framework by setting the "
+"appropriate dependencies."
+msgstr ""
+"Добавляет зависимость от фреймворка Mono (в настоящее время только C#), "
+"устанавливая соответствующие зависимости."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1865
+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 ""
+"Укажите `nuget`, если порт использует пакеты nuget. `NUGET_DEPENDS` должен "
+"содержать имена и версии пакетов nuget в формате `_имя_=_версия_`. Можно "
+"добавить необязательное расположение пакета (origin), используя "
+"`_имя_=_версия_:_ расположение _`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1867
+msgid ""
+"The helper target, `buildnuget`, will output the content of the "
+"`NUGET_DEPENDS` based on the provided [.filename]#packages.config#."
+msgstr ""
+"Вспомогательная цель `buildnuget` выведет содержимое `NUGET_DEPENDS` на "
+"основе предоставленного файла [.filename]#packages.config#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1869
+#, no-wrap
+msgid "`motif`"
+msgstr "`motif`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1878
+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 ""
+"Использует package:x11-toolkits/open-motif[] как зависимость библиотеки. "
+"Конечные пользователи могут установить `WANT_LESSTIF` в "
+"[.filename]#make.conf#, чтобы использовать package:x11-toolkits/lesstif[] "
+"как зависимость вместо package:x11-toolkits/open-motif[]. Аналогично, "
+"установка `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf# добавит "
+"зависимость от package:x11-toolkits/open-motif-devel[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1880
+#, no-wrap
+msgid "`mpi`"
+msgstr "`mpi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1883
+msgid "Possible arguments: `mpich` (default), `openmpi`"
+msgstr "Возможные аргументы: `mpich` (по умолчанию), `openmpi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1885
+msgid "Provide support for ports depending on `MPI`."
+msgstr "Обеспечить поддержку портов, зависящих от `MPI`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1888
+msgid ""
+"If the `mpich` argument is provided a dependency on package:net/mpich[] is "
+"added to the port."
+msgstr ""
+"Если указан аргумент `mpich`, в порт добавляется зависимость от package:net/"
+"mpich[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1891
+msgid ""
+"If the `openmpi` argument is provided a dependency on package:net/openmpi[] "
+"is added to the port."
+msgstr ""
+"Если указан аргумент `openmpi`, в порт добавляется зависимость от "
+"package:net/openmpi[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1893
+msgid ""
+"The ports framework provides the following variables that can be read by the "
+"port:"
+msgstr ""
+"Фреймворк портов предоставляет следующие переменные, которые могут быть "
+"прочитаны портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1894
+#, no-wrap
+msgid "`MPI_LIBS`"
+msgstr "`MPI_LIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1896
+msgid "Libraries needed to link programs using `MPI`."
+msgstr ""
+"Библиотеки, необходимые для связывания программ с использованием `MPI`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1897
+#, no-wrap
+msgid "`MPI_CFLAGS`"
+msgstr "`MPI_CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1899
+msgid "Compiler flags necessary to build programs using `MPI`."
+msgstr ""
+"Флаги компилятора, необходимые для сборки программ с использованием `MPI`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1900
+#, no-wrap
+msgid "`MPICC`"
+msgstr "`MPICC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1902
+msgid ""
+"Location of the `mpicc` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpicc#."
+msgstr ""
+"Расположение исполняемого файла `mpicc`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpicc#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1903
+#, no-wrap
+msgid "`MPICXX`"
+msgstr "`MPICXX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1905
+msgid ""
+"Location of the `mpicxx` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpicxx#."
+msgstr ""
+"Расположение исполняемого файла `mpicxx`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpicxx#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1906
+#, no-wrap
+msgid "`MPIF90`"
+msgstr "`MPIF90`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1908
+msgid ""
+"Location of the `mpif90` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpif90#."
+msgstr ""
+"Расположение исполняемого файла `mpif90`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpif90#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1909
+#, no-wrap
+msgid "`MPIFC`"
+msgstr "`MPIFC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1911
+msgid "Same as above."
+msgstr "То же, что и выше."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1912
+#, no-wrap
+msgid "`MPI_HOME`"
+msgstr "`MPI_HOME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1914
+msgid ""
+"Installation directory of `MPI`. Defaults to `${LOCALBASE}` for `MPICH`."
+msgstr ""
+"Каталог установки `MPI`. По умолчанию используется `${LOCALBASE}` для "
+"`MPICH`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1915
+#, no-wrap
+msgid "`MPIEXEC`"
+msgstr "`MPIEXEC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1917
+msgid ""
+"Location of the `mpiexec` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpiexec#."
+msgstr ""
+"Расположение исполняемого файла `mpiexec`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpiexec#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1918
+#, no-wrap
+msgid "`MPIRUN`"
+msgstr "`MPIRUN`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1920
+msgid ""
+"Location of the `mpirun` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpirun#."
+msgstr ""
+"Расположение исполняемого файла `mpirun`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpirun#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1923
+#, no-wrap
+msgid "`ncurses`"
+msgstr "`ncurses`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1926
+msgid "Possible arguments: (none), `base`, `port`"
+msgstr "Возможные аргументы: (нет), `base`, `port`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1928
+msgid "Uses ncurses, and causes some useful variables to be set."
+msgstr "Использует ncurses и устанавливает некоторые полезные переменные."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1930
+#, no-wrap
+msgid "`nextcloud`"
+msgstr "`nextcloud`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1935
+msgid ""
+"Adds support for Nextcloud applications by adding a run time dependency on "
+"package:www/nextcloud[]."
+msgstr ""
+"Добавляет поддержку приложений Nextcloud, добавляя зависимость во время "
+"выполнения на package:www/nextcloud[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1937
+#, no-wrap
+msgid "`ninja`"
+msgstr "`ninja`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1940
+msgid "Possible arguments: (none), `build`, `make` (default), `run`"
+msgstr "Возможные аргументы: (нет), `build`, `make` (по умолчанию), `run`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1947
+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 ""
+"Если указаны аргументы `build` или `run`, это соответственно добавляет "
+"зависимость во время сборки или выполнения от пакета package:devel/ninja[]. "
+"Если указан `make` или аргументы не предоставлены, используется ninja для "
+"сборки порта вместо make. `make` подразумевает `build`. Если переменная "
+"`NINJA_DEFAULT` установлена в `samurai`, тогда зависимости устанавливаются "
+"для пакета package:devel/samurai[] вместо этого."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1949
+#, no-wrap
+msgid "`nodejs`"
+msgstr "`nodejs`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1953
+#, no-wrap
+msgid ""
+"Possible arguments: (none), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,\n"
+" `17`.\n"
+msgstr ""
+"Возможные аргументы: (нет), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,\n"
+" `17`.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1956
+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 ""
+"Использует nodejs. Добавляет зависимость от пакета package:www/node*[]. Если "
+"указана поддерживаемая версия, то также необходимо указать `run` и/или "
+"`build`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1958
+#, no-wrap
+msgid "`objc`"
+msgstr "`objc`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1963
+msgid ""
+"Add objective C dependencies (compiler, runtime library) if the base system "
+"does not support it."
+msgstr ""
+"Добавить зависимости Objective C (компилятор, библиотека времени "
+"выполнения), если базовая система их не поддерживает."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1965
+#, no-wrap
+msgid "`ocaml`"
+msgstr "`ocaml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1968
+msgid ""
+"Possible arguments: (none), "
+"`build`,`camlp4`,`dune`,`findlib`,`findplist`,`ldconfig`,`run`,`tk`,`tkbuild`,`tkrun`,`wash`"
+msgstr ""
+"Возможные аргументы: (нет), `build`, `camlp4`, `dune`, `findlib`, "
+"`findplist`, `ldconfig`, `run`, `tk`, `tkbuild`, `tkrun`, `wash`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1970
+msgid "Provide support for OCaml."
+msgstr "Обеспечить поддержку OCaml."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1972
+msgid "If no arguments are provided, it defaults to `build`, `run`."
+msgstr "Если аргументы не указаны, по умолчанию используются `build`, `run`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1975
+msgid ""
+"If the `build` argument is provided then package:lang/ocamlc[] is added to "
+"`BUILD_DEPENDS`, `EXTRACT` and `PATCH_DEPENDS`."
+msgstr ""
+"Если указан аргумент `build`, то package:lang/ocamlc[] добавляется в "
+"`BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1977
+msgid ""
+"If the `camlp4` argument is provided then package:devel/ocamlp4[] is used to "
+"build."
+msgstr ""
+"Если указан аргумент `camlp4`, то для сборки используется package:devel/"
+"ocamlp4[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1979
+msgid ""
+"If the `dune` argument is provided then package:devel/ocaml-dune[] is used "
+"as build system."
+msgstr ""
+"Если указан аргумент `dune`, то package:devel/ocaml-dune[] используется как "
+"система сборки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1981
+msgid ""
+"If the `findlib` argument is provided then `ocamlfind` will be used to "
+"install packages. Package directories will be automatically deleted."
+msgstr ""
+"Если указан аргумент `findlib`, то для установки пакетов будет "
+"использоваться `ocamlfind`. Директории пакетов будут автоматически удалены."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1983
+msgid ""
+"If the `findplist` argument is provided then contents of the `findlib` "
+"target directories will be added automatically."
+msgstr ""
+"Если указан аргумент `findplist`, то содержимое целевых каталогов `findlib` "
+"будет добавлено автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1988
+msgid ""
+"If the `ldconfig` argument is provided then OCaml's [.filename]#ld.conf# "
+"file will be automatically processed. When `dune` is used Dune may install "
+"stublibs in site-lib package directory(ies) or in a single directory below "
+"`DUNE_LIBDIR` site-lib directory. Set if your port installs shared "
+"libraries into ocaml"
+msgstr ""
+"Если указан аргумент `ldconfig`, то файл [.filename]#ld.conf# OCaml будет "
+"обработан автоматически. При использовании `dune` Dune может устанавливать "
+"stublibs в директориях пакетов site-lib или в отдельной директории ниже "
+"`DUNE_LIBDIR` site-lib. Установите, если ваш порт устанавливает общие "
+"библиотеки в ocaml"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1990
+msgid "If the `run` argument is provided add ocamlc to `RUN_DEPENDS`."
+msgstr "Если указан аргумент `run`, добавить ocamlc в `RUN_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1994
+msgid ""
+"If the `tk` argument is provided then a build and run dependency on "
+"package:x11-toolkits/ocaml-labltk[] is added to the port. Implies `tkbuild` "
+"and `tkrun`."
+msgstr ""
+"Если указан аргумент `tk`, то в порт добавляется зависимость на сборку и "
+"выполнение от пакета package:x11-toolkits/ocaml-labltk[]. Подразумевает "
+"`tkbuild` и `tkrun`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1997
+msgid ""
+"If the `tkbuild` argument is provided then package:x11-toolkits/ocaml-"
+"labltk[] is added to `BUILD_DEPENDS`, `EXTRACT` and `PATCH_DEPENDS`."
+msgstr ""
+"Если указан аргумент `tkbuild`, то пакет package:x11-toolkits/ocaml-labltk[] "
+"добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2000
+msgid ""
+"If the `tkrun` argument is provided then package:x11-toolkits/ocaml-labltk[] "
+"is added to `RUN_DEPENDS`."
+msgstr ""
+"Если указан аргумент `tkrun`, то package:x11-toolkits/ocaml-labltk[] "
+"добавляется в `RUN_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2003
+msgid ""
+"If the `wash` argument is provided Ocaml's shared directories will be purged "
+"on uninstall. Useful when installing to non-standard `PREFIX`."
+msgstr ""
+"Если указан аргумент `wash`, общие каталоги Ocaml будут очищены при "
+"удалении. Полезно при установке в нестандартный `PREFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2005
+msgid "The following variables can be set by the port:"
+msgstr "Портом могут быть установлены следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2006
+#, no-wrap
+msgid "`OCAML_PKGDIRS`"
+msgstr "`OCAML_PKGDIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2008
+msgid ""
+"Directories under site-lib to be processed if the `findlib` argument is "
+"specified. Default: `${PORTNAME}`"
+msgstr ""
+"Каталоги в site-lib для обработки, если указан аргумент `findlib`. По "
+"умолчанию: `${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2009
+#, no-wrap
+msgid "`OCAML_LDLIBS`"
+msgstr "`OCAML_LDLIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2012
+msgid ""
+"Directories under `PREFIX` to be automatically added/removed from "
+"[.filename]#ld.conf#. Default: `${OCAML_SITELIBDIR}/${PORTNAME}`"
+msgstr ""
+"Каталоги в `PREFIX`, которые будут автоматически добавлены/удалены из "
+"[.filename]#ld.conf#. По умолчанию: `${OCAML_SITELIBDIR}/${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2013
+#, no-wrap
+msgid "`OCAML_PACKAGES`"
+msgstr "`OCAML_PACKAGES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2015
+msgid "List of packages to build and install. Default to `${PORTNAME}`"
+msgstr "Список пакетов для сборки и установки. По умолчанию `${PORTNAME}`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2018
+#, no-wrap
+msgid "`octave`"
+msgstr "`octave`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2021
+msgid "Possible arguments: (none), env"
+msgstr "Возможные аргументы: (нет), env"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2024
+msgid ""
+"Uses package:math/octave[]. `env` loads only one `OCTAVE_VERSION` "
+"environmental variable."
+msgstr ""
+"Использует package:math/octave[]. `env` загружает только одну переменную "
+"окружения `OCTAVE_VERSION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2029
+msgid "Possible arguments: `al`, `soft` (default), `si`, `alut`"
+msgstr "Возможные аргументы: `al`, `soft` (по умолчанию), `si`, `alut`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2034
+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 ""
+"Использует OpenAL. Бэкенд может быть указан, с программной реализацией по "
+"умолчанию. Пользователь может указать предпочтительный бэкенд с помощью "
+"`WANT_OPENAL`. Допустимые значения для этой настройки: `soft` (по умолчанию) "
+"и `si`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2036
+#, no-wrap
+msgid "`pathfix`"
+msgstr "`pathfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2043
+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 ""
+"Ищите [.filename]#Makefile.in# и [.filename]#configure# в `PATHFIX_WRKSRC` "
+"(по умолчанию `WRKSRC`) и исправляйте стандартные пути, чтобы они "
+"соответствовали иерархии FreeBSD. Например, исправляется каталог установки "
+"для файлов [.filename]#.pc# `pkgconfig` на [.filename]#${PREFIX}/libdata/"
+"pkgconfig#. Если порт использует `USES=autoreconf`, [.filename]#Makefile.am# "
+"будет автоматически добавлен в `PATHFIX_MAKEFILEIN`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2046
+msgid ""
+"If the port crossref:uses[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 ""
+"Если порт crossref:uses[uses-cmake,`USES=cmake`], он будет искать файл "
+"[.filename]#CMakeLists.txt# в `PATHFIX_WRKSRC`. При необходимости это имя "
+"файла по умолчанию можно изменить с помощью `PATHFIX_CMAKELISTSTXT`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2048
+#, no-wrap
+msgid "`pear`"
+msgstr "`pear`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2051
+msgid "Possible arguments: `env`"
+msgstr "Возможные аргументы: `env`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2056
+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 ""
+"Добавляет зависимость от пакета package:devel/pear[]. Настраивает поведение "
+"по умолчанию для программного обеспечения, использующего PHP Extension and "
+"Application Repository. Использование аргументов `env` только устанавливает "
+"переменные окружения PEAR. Дополнительную информацию см. в "
+"crossref:special[php-pear,Модули PEAR]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2058
+#, no-wrap
+msgid "`perl5`"
+msgstr "`perl5`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2063
+msgid "Depends on Perl. The configuration is done using `USE_PERL5`."
+msgstr "Зависит от Perl. Настройка выполняется с помощью `USE_PERL5`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2065
+msgid ""
+"`USE_PERL5` can contain the phases in which to use Perl, can be `extract`, "
+"`patch`, `build`, `run`, or `test`."
+msgstr ""
+"`USE_PERL5` может содержать фазы, в которых используется Perl: `extract`, "
+"`patch`, `build`, `run` или `test`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2068
+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 ""
+"`USE_PERL5` также может содержать `configure`, `modbuild` или "
+"`modbuildtiny`, если требуется [.filename]#Makefile.PL#, "
+"[.filename]#Build.PL# или вариант [.filename]#Build.PL# для "
+"Module::Build::Tiny."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2071
+msgid ""
+"`USE_PERL5` defaults to `build run`. When using `configure`, `modbuild`, or "
+"`modbuildtiny`, `build` and `run` are implied."
+msgstr ""
+"`USE_PERL5` по умолчанию имеет значение `build run`. При использовании "
+"`configure`, `modbuild` или `modbuildtiny`, `build` и `run` подразумеваются "
+"автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2073
+msgid "See crossref:special[using-perl,Using Perl] for more information."
+msgstr ""
+"См. crossref:special[using-perl,Использование Perl] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2075
+#, no-wrap
+msgid "`pgsql`"
+msgstr "`pgsql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2078
+msgid "Possible arguments: (none), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`"
+msgstr "Возможные аргументы: (нет), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2082
+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 ""
+"Предоставить поддержку PostgreSQL. Ответственный за порт может указать "
+"требуемую версию. Можно указать минимальную и максимальную версии или "
+"диапазон; например, `9.0-`, `8.4+`, `8.4-9.2`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2087
+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 ""
+"По умолчанию добавляемая зависимость будет клиентской, но если порту "
+"требуются дополнительные компоненты, это можно указать с помощью "
+"`WANT_PGSQL=_компонент[:цель]_`; например, `WANT_PGSQL=server:configure "
+"pltcl plperl`. Доступные компоненты:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2089
+msgid "`client`"
+msgstr "`client`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2090
+msgid "`contrib`"
+msgstr "`contrib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2091
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2823
+msgid "`docs`"
+msgstr "`docs`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2092
+msgid "`pgtcl`"
+msgstr "`pgtcl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2093
+msgid "`plperl`"
+msgstr "`plperl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2094
+msgid "`plpython`"
+msgstr "`plpython`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2095
+msgid "`pltcl`"
+msgstr "`pltcl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2096
+msgid "`server`"
+msgstr "`server`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2098
+#, no-wrap
+msgid "`php`"
+msgstr "`php`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2101
+msgid ""
+"Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, "
+"`mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`"
+msgstr ""
+"Возможные аргументы: (нет), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, "
+"`mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2104
+msgid ""
+"Provide support for PHP. Add a runtime dependency on the default PHP "
+"version, package:lang/php81[]."
+msgstr ""
+"Обеспечить поддержку PHP. Добавить зависимость во время выполнения на версию "
+"PHP по умолчанию, package:lang/php81[]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2105
+#, no-wrap
+msgid "`phpize`"
+msgstr "`phpize`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2108
+msgid "Use to build a PHP extension. Enables flavors."
+msgstr "Используется для создания расширения PHP. Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2109
+#, no-wrap
+msgid "`ext`"
+msgstr "`ext`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2112
+msgid "Use to build, install and register a PHP extension. Enables flavors."
+msgstr ""
+"Используется для сборки, установки и регистрации расширения PHP. "
+"Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2113
+#, no-wrap
+msgid "`zend`"
+msgstr "`zend`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2116
+msgid "Use to build, install and register a Zend extension. Enables flavors."
+msgstr ""
+"Используется для сборки, установки и регистрации Zend-расширения. "
+"Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2117
+#, no-wrap
+msgid "`build`"
+msgstr "`build`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2119
+msgid "Set PHP also as a build-time dependency."
+msgstr "Установить PHP также как зависимость во время сборки."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2120
+#, no-wrap
+msgid "`cli`"
+msgstr "`cli`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2122
+msgid "Needs the CLI version of PHP."
+msgstr "Требуется версия PHP для командной строки."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2123
+#, no-wrap
+msgid "`cgi`"
+msgstr "`cgi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2125
+msgid "Needs the CGI version of PHP."
+msgstr "Требуется CGI-версия PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2126
+#, no-wrap
+msgid "`mod`"
+msgstr "`mod`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2128
+msgid "Needs the Apache module for PHP."
+msgstr "Требуется модуль Apache для PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2129
+#, no-wrap
+msgid "`web`"
+msgstr "`web`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2131
+msgid "Needs the Apache module or the CGI version of PHP."
+msgstr "Требуется модуль Apache или CGI-версия PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2132
+#, no-wrap
+msgid "`embed`"
+msgstr "`embed`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2134
+msgid "Needs the embedded library version of PHP."
+msgstr "Требуется встроенная версия библиотеки PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2135
+#, no-wrap
+msgid "`pecl`"
+msgstr "`pecl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2138
+msgid ""
+"Provide defaults for fetching PHP extensions from the PECL repository. "
+"Enables flavors."
+msgstr ""
+"Установить значения по умолчанию для загрузки расширений PHP из репозитория "
+"PECL. Включает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2139
+#, no-wrap
+msgid "`flavors`"
+msgstr "`flavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2143
+msgid ""
+"Enable automatic crossref:flavors[flavors-auto-php,PHP flavors] generation. "
+"Flavors will be generated for all PHP versions, except the ones present in "
+"crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`]."
+msgstr ""
+"Включить автоматическую генерацию crossref:flavors[flavors-auto-"
+"php,флейворов PHP]. Флейворы будут созданы для всех версий PHP, за "
+"исключением указанных в crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2144
+#, no-wrap
+msgid "`noflavors`"
+msgstr "`noflavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2147
+msgid ""
+"Disable automatic PHP flavors generation. _Must only_ be used with "
+"extensions provided by PHP itself."
+msgstr ""
+"Отключить автоматическое создание флейворов PHP. _Должно_ использоваться "
+"только с расширениями, предоставляемыми самим PHP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2149
+msgid ""
+"Variables are used to specify which PHP modules are required, as well as "
+"which version of PHP are supported."
+msgstr ""
+"Переменные используются для указания необходимых модулей PHP, а также версий "
+"PHP, которые поддерживаются."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2150
+#, no-wrap
+msgid "`USE_PHP`"
+msgstr "`USE_PHP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2154
+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 ""
+"Список необходимых расширений PHP во время выполнения. Добавьте `:build` к "
+"названию расширения, чтобы указать зависимость во время сборки. Пример: "
+"`pcre xml:build gettext`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2156
+#, no-wrap
+msgid "`IGNORE_WITH_PHP`"
+msgstr "`IGNORE_WITH_PHP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2159
+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 ""
+"Порт не работает с PHP указанной версии. Возможные значения можно посмотреть "
+"в содержимом `_ALL_PHP_VERSIONS` в [.filename]#Mk/Uses/php.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2161
+msgid ""
+"When building a PHP or Zend extension with `:ext` or `:zend`, these "
+"variables can be set:"
+msgstr ""
+"При сборке расширения PHP или Zend с помощью `:ext` или `:zend`, можно "
+"задать следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2162
+#, no-wrap
+msgid "`PHP_MODNAME`"
+msgstr "`PHP_MODNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2165
+msgid "The name of the PHP or Zend extension. Default value is `${PORTNAME}`."
+msgstr "Имя расширения PHP или Zend. Значение по умолчанию: `${PORTNAME}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2166
+#, no-wrap
+msgid "`PHP_HEADER_DIRS`"
+msgstr "`PHP_HEADER_DIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2169
+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:2170
+#, no-wrap
+msgid "`PHP_MOD_PRIO`"
+msgstr "`PHP_MOD_PRIO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2173
+msgid ""
+"The priority at which to load the extension. It is a number between `00` "
+"and `99`."
+msgstr "Приоритет загрузки расширения. Это число от `00` до `99`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2178
+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 ""
+"Для расширений, которые не зависят от других расширений, приоритет "
+"автоматически устанавливается в `20`, а для расширений, зависящих от другого "
+"расширения, приоритет автоматически устанавливается в `30`. Некоторые "
+"расширения могут требовать загрузки перед всеми остальными, например, "
+"package:www/php56-opcache[]. Некоторые могут требовать загрузки после "
+"расширения с приоритетом `30`. В таком случае добавьте `PHP_MOD_PRIO=_XX_` в "
+"Makefile порта. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2184
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"USE_PHP=\twddx\n"
+"PHP_MOD_PRIO=\t40\n"
+msgstr ""
+"USES=\t\tphp:ext\n"
+"USE_PHP=\twddx\n"
+"PHP_MOD_PRIO=\t40\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2187
+msgid ""
+"These variables are available to use in `PKGNAMEPREFIX` or `PKGNAMESUFFIX`:"
+msgstr ""
+"Эти переменные доступны для использования в `PKGNAMEPREFIX` или "
+"`PKGNAMESUFFIX`:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2188
+#, no-wrap
+msgid "`PHP_PKGNAMEPREFIX`"
+msgstr "`PHP_PKGNAMEPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2191
+msgid ""
+"Contains `php_XY_-` where _XY_ is the current flavor's PHP version. Use "
+"with PHP extensions and modules."
+msgstr ""
+"Содержит `php_XY_-`, где _XY_ — версия PHP текущей редакции. Используется с "
+"расширениями и модулями PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2192
+#, no-wrap
+msgid "`PHP_PKGNAMESUFFIX`"
+msgstr "`PHP_PKGNAMESUFFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2195
+msgid ""
+"Contains `-php_XY_` where _XY_ is the current flavor's PHP version. Use "
+"with PHP applications."
+msgstr ""
+"Содержит `-php_XY_`, где _XY_ — версия PHP текущего варианта. Используется с "
+"PHP-приложениями."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2196
+#, no-wrap
+msgid "`PECL_PKGNAMEPREFIX`"
+msgstr "`PECL_PKGNAMEPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2199
+msgid ""
+"Contains `php_XY_-pecl-` where _XY_ is the current flavor's PHP version. "
+"Use with PECL modules."
+msgstr ""
+"Содержит `php_XY_-pecl-`, где _XY_ — версия PHP текущей редакции. "
+"Используется с модулями PECL."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2204
+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 ""
+"С вариантами сборки все расширения PHP, расширения PECL, модули PEAR _должны "
+"иметь_ разные имена пакетов, поэтому они должны использовать одну из трёх "
+"переменных в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2207
+#, no-wrap
+msgid "`pkgconfig`"
+msgstr "`pkgconfig`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2210
+msgid "Possible arguments: (none), `build` (default), `run`, `both`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`, `both`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2214
+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 ""
+"Использует package:devel/pkgconf[]. Без аргументов или с аргументом `build` "
+"подразумевает зависимость от `pkg-config` во время сборки. `run` "
+"подразумевает зависимость во время выполнения, а `both` — зависимости как во "
+"время выполнения, так и во время сборки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2216
+#, no-wrap
+msgid "`pure`"
+msgstr "`pure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2219
+msgid "Possible arguments: (none), `ffi`"
+msgstr "Возможные аргументы: (нет), `ffi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2223
+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 ""
+"Использует package:lang/pure[]. В основном применяется для сборки портов, "
+"зависящих от pure. С аргументом `ffi` подразумевает package:devel/pure-ffi[] "
+"как зависимость во время выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2225
+#, no-wrap
+msgid "`pyqt`"
+msgstr "`pyqt`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2228
+msgid "Possible arguments: (none), `4`, `5`"
+msgstr "Возможные аргументы: (нет), `4`, `5`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2232
+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 ""
+"Использует PyQt. Если порт является частью самого PyQT, установите "
+"`PYQT_DIST`. Используйте `USE_PYQT` для выбора необходимых порту "
+"компонентов. Доступные компоненты:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2234
+msgid "`core`"
+msgstr "`core`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2235
+msgid "`dbus`"
+msgstr "`dbus`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2236
+msgid "`dbussupport`"
+msgstr "`dbussupport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2237
+msgid "`demo`"
+msgstr "`demo`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2238
+msgid "`designer`"
+msgstr "`designer`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2239
+msgid "`designerplugin`"
+msgstr "`designerplugin`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2240
+msgid "`doc`"
+msgstr "`doc`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2241
+msgid "`gui`"
+msgstr "`gui`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2242
+msgid "`multimedia`"
+msgstr "`multimedia`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2243
+msgid "`network`"
+msgstr "`network`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2245
+msgid "`qscintilla2`"
+msgstr "`qscintilla2`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2246
+msgid "`sip`"
+msgstr "`sip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2247
+msgid "`sql`"
+msgstr "`sql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2248
+msgid "`svg`"
+msgstr "`svg`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2249
+msgid "`test`"
+msgstr "`test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2250
+msgid "`webkit`"
+msgstr "`webkit`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2251
+msgid "`xml`"
+msgstr "`xml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2252
+msgid "`xmlpatterns`"
+msgstr "`xmlpatterns`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2254
+msgid "These components are only available with PyQT4:"
+msgstr "Эти компоненты доступны только с PyQT4:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2256
+msgid "`assistant`"
+msgstr "`assistant`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2257
+msgid "`declarative`"
+msgstr "`declarative`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2258
+msgid "`help`"
+msgstr "`help`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2259
+msgid "`phonon`"
+msgstr "`phonon`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2260
+msgid "`script`"
+msgstr "`script`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2261
+msgid "`scripttools`"
+msgstr "`scripttools`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2263
+msgid "These components are only available with PyQT5:"
+msgstr "Эти компоненты доступны только с PyQT5:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2265
+msgid "`multimediawidgets`"
+msgstr "`multimediawidgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2266
+msgid "`printsupport`"
+msgstr "`printsupport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2267
+msgid "`qml`"
+msgstr "`qml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2268
+msgid "`serialport`"
+msgstr "`serialport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2269
+msgid "`webkitwidgets`"
+msgstr "`webkitwidgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2270
+msgid "`widgets`"
+msgstr "`widgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2272
+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 ""
+"Зависимость по умолчанию для каждого компонента — это время сборки и "
+"выполнения. Чтобы выбрать только сборку или выполнение, добавьте `_build` "
+"или `_run` к имени компонента. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2277
+#, no-wrap
+msgid ""
+"USES=\t\tpyqt\n"
+"USE_PYQT=\tcore doc_build designer_run\n"
+msgstr ""
+"USES=\t\tpyqt\n"
+"USE_PYQT=\tcore doc_build designer_run\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2280
+#, no-wrap
+msgid "`pytest`"
+msgstr "`pytest`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2283
+msgid "Possible arguments: (none), 4"
+msgstr "Возможные аргументы: (нет), 4"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2290
+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 ""
+"Вводит новую зависимость от package:devel/pytest[]. Он определяет цель `do-"
+"test`, которая будет правильно запускать тесты. Используйте аргумент, чтобы "
+"зависеть от определённой версии package:devel/pytest[]. Для портов, "
+"использующих package:devel/pytest[], рекомендуется использовать это вместо "
+"конкретной цели `do-test`. Фреймворк предоставляет порту следующие "
+"переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2291
+#, no-wrap
+msgid "`PYTEST_ARGS`"
+msgstr "`PYTEST_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2293
+msgid "Additional arguments to pytest (defaults to empty)."
+msgstr "Дополнительные аргументы для pytest (по умолчанию пусто)."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2294
+#, no-wrap
+msgid "`PYTEST_IGNORED_TESTS`"
+msgstr "`PYTEST_IGNORED_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2297
+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 ""
+"списки шаблонов `pytest -k` для игнорирования тестов (по умолчанию пустые). "
+"Для тестов, которые не должны проходить, например, требующих доступа к базе "
+"данных."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2298
+#, no-wrap
+msgid "`PYTEST_BROKEN_TESTS`"
+msgstr "`PYTEST_BROKEN_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2301
+msgid ""
+"lists of `pytest -k` patterns of tests to ignore (defaults to empty). For "
+"broken tests which require fixing."
+msgstr ""
+"списки шаблонов `pytest -k` тестов для игнорирования (по умолчанию пустые). "
+"Для сломанных тестов, которые требуют исправления."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2303
+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:2304
+#, no-wrap
+msgid "`PYTEST_ENABLE_IGNORED_TESTS`"
+msgstr "`PYTEST_ENABLE_IGNORED_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2306
+msgid "Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_IGNORED_TESTS`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2307
+#, no-wrap
+msgid "`PYTEST_ENABLE_BROKEN_TESTS`"
+msgstr "`PYTEST_ENABLE_BROKEN_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2309
+msgid "Enable tests which are otherwise ignored by `PYTEST_BROKEN_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_BROKEN_TESTS`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2310
+#, no-wrap
+msgid "`PYTEST_ENABLE_ALL_TESTS`"
+msgstr "`PYTEST_ENABLE_ALL_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2313
+msgid ""
+"Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS` and "
+"`PYTEST_BROKEN_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_IGNORED_TESTS` и `PYTEST_BROKEN_TESTS`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2316
+#, no-wrap
+msgid "`python`"
+msgstr "`python`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2319
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, "
+"`patch`, `build`, `run`, `test`"
+msgstr ""
+"Возможные аргументы: (нет), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, "
+"`patch`, `build`, `run`, `test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2324
+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 ""
+"Использует Python. Можно указать поддерживаемую версию или диапазон версий. "
+"Если Python требуется только во время сборки, выполнения или тестирования, "
+"его можно установить как зависимость для сборки, выполнения или тестирования "
+"с помощью `build`, `run` или `test`. Если Python также требуется на этапе "
+"исправлений, используйте `patch`. Дополнительную информацию см. в разделе "
+"crossref:special[using-python,Использование Python]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2327
+msgid ""
+"`USES=python:env` 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 "
+"crossref:uses[uses-shebangfix,`USES=shebangfix`], and the goal is only to "
+"fix the shebangs but not add a dependency on Python."
+msgstr ""
+"`USES=python:env` можно использовать, когда необходимы переменные, "
+"экспортируемые фреймворком, но зависимость от Python не требуется. Это может "
+"быть полезно при использовании с crossref:uses[uses-"
+"shebangfix,`USES=shebangfix`], если цель состоит только в исправлении "
+"shebang без добавления зависимости от Python."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2329
+#, no-wrap
+msgid "`qmail`"
+msgstr "`qmail`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2332
+msgid "Possible arguments: (none), `build`, `run`, `both`, `vars`"
+msgstr "Возможные аргументы: (нет), `build`, `run`, `both`, `vars`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2337
+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 ""
+"Использует package:mail/qmail[]. С аргументом `build` подразумевается "
+"зависимость от `qmail` во время сборки. Аргумент `run` подразумевает "
+"зависимость во время выполнения. Использование без аргументов или с "
+"аргументом `both` подразумевает зависимости как во время выполнения, так и "
+"во время сборки. Аргумент `vars` только устанавливает переменные QMAIL для "
+"использования в порте."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2339
+#, no-wrap
+msgid "`qmake`"
+msgstr "`qmake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2342
+msgid ""
+"Possible arguments: (none), `norecursive`, `outsource`, `no_env`, "
+"`no_configure`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `norecursive`, `outsource`, `no_env`, "
+"`no_configure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2344
+msgid ""
+"Uses QMake for configuring. For more information see crossref:special[using-"
+"qmake,Using `qmake`]."
+msgstr ""
+"Использует QMake для настройки. Для получения дополнительной информации см. "
+"crossref:special[using-qmake,Использование `qmake`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2349
+msgid "Possible arguments: `5`, `6`, `no_env`"
+msgstr "Возможные аргументы: `5`, `6`, `no_env`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2353
+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 ""
+"Добавить зависимость от компонентов Qt. `no_env` передаётся напрямую в "
+"`USES= qmake`. Подробнее см. в crossref:special[using-qt,Использование Qt]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2355
+#, no-wrap
+msgid "`qt-dist`"
+msgstr "`qt-dist`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2358
+#, fuzzy
+#| 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"
+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`."
+msgstr ""
+"Возможные аргументы: (нет) или `5` и (нет) или `6` и (нет) или один из `3d`, "
+"`5compat`, `base`, `charts`, `connectivity`, `datavis3d`, `declarative`, "
+"`doc`, `languageserver`, `gamepad`, `graphicaleffects`, `imageformats`, "
+"`location`, `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"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2361
+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 ""
+"Предоставляет поддержку сборки компонентов Qt 5 и Qt 6. Обеспечивает "
+"настройку соответствующей конфигурации окружения для сборки порта."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2363
+#, no-wrap
+msgid "Building Qt 5 Components"
+msgstr "Сборка компонентов Qt 5"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2367
+msgid ""
+"The port is Qt 5's `networkauth` component, which is part of the "
+"`networkauth` distribution file."
+msgstr ""
+"Порт представляет собой компонент `networkauth` из Qt 5, который входит в "
+"файл дистрибутива `networkauth`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2372
+#, no-wrap
+msgid ""
+"PORTNAME=\tnetworkauth\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+"PORTNAME=\tnetworkauth\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2374
+#, no-wrap
+msgid "USES=\t\tqt-dist:5\n"
+msgstr "USES=\t\tqt-dist:5\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2380
+#, no-wrap
+msgid "Building Qt 6 Components"
+msgstr "Сборка компонентов Qt 6"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2384
+msgid ""
+"The port is Qt 6's `websockets` component, which is part of the `websockets` "
+"distribution file."
+msgstr ""
+"Порт представляет собой компонент `websockets` из Qt 6, который входит в "
+"файл дистрибутива `websockets`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2389
+#, no-wrap
+msgid ""
+"PORTNAME= websockets\n"
+"PORTVERSION= ${QT6_VERSION}\n"
+msgstr ""
+"PORTNAME= websockets\n"
+"PORTVERSION= ${QT6_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2391
+#, no-wrap
+msgid "USES= qt-dist:6\n"
+msgstr "USES= qt-dist:6\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2396
+msgid ""
+"If `PORTNAME` does not match the component name, it can be passed as an "
+"argument to `qt-dist`."
+msgstr ""
+"Если `PORTNAME` не совпадает с именем компонента, его можно передать как "
+"аргумент в `qt-dist`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2398
+#, no-wrap
+msgid "Building Qt 5 Components with Different Names"
+msgstr "Сборка компонентов Qt 5 с разными именами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2402
+msgid ""
+"The port is Qt 5's `gui` component, which is part of the `base` distribution "
+"file."
+msgstr ""
+"Порт представляет собой компонент `gui` из Qt 5, который входит в файл "
+"дистрибутива `base`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2407
+#, no-wrap
+msgid ""
+"PORTNAME=\tgui\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+"PORTNAME=\tgui\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2409
+#, no-wrap
+msgid "USES=\t\tqt-dist:5,base\n"
+msgstr "USES=\t\tqt-dist:5,base\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2414
+#, no-wrap
+msgid "`readline`"
+msgstr "`readline`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2417
+msgid "Possible arguments: (none), `port`"
+msgstr "Возможные аргументы: (нет), `port`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2420
+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 ""
+"Использует readline в качестве зависимости библиотеки и устанавливает "
+"`CPPFLAGS` и `LDFLAGS` по необходимости. Если используется аргумент `port` "
+"или если readline отсутствует в базовой системе, добавляет зависимость от "
+"package:devel/readline[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2423
+#, no-wrap
+msgid "`ruby`"
+msgstr "`ruby`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2426
+msgid "Possible arguments: (none), `build`, `extconf`, `run`, `setup`"
+msgstr "Возможные аргументы: (нет), `build`, `extconf`, `run`, `setup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2433
+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 ""
+"Предоставить поддержку для портов, связанных с Ruby. `(none)` без "
+"аргументов добавляет зависимость во время выполнения на package:lang/"
+"ruby[]. `build` добавляет зависимость на package:lang/ruby[] во время "
+"сборки. `extconf` указывает, что порт использует extconf.rb для настройки. "
+"`run` добавляет зависимость на package:lang/ruby[] во время выполнения. Это "
+"также значение по умолчанию. `setup` указывает, что порт использует "
+"setup.rb для настройки и сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2435
+msgid "The user may have the following variables defined:"
+msgstr "Пользователь может определить следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2436
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2453
+#, no-wrap
+msgid "`RUBY_VER`"
+msgstr "`RUBY_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2438
+msgid "Alternative short version of ruby in the form of `x.y'."
+msgstr "Альтернативная короткая версия ruby в виде `x.y`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2439
+#, no-wrap
+msgid "`RUBY_DEFAULT_VER`"
+msgstr "`RUBY_DEFAULT_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2441
+msgid "Set to (e.g.) `2.7` to use `ruby27` as the default version."
+msgstr ""
+"Установите (например) `2.7`, чтобы использовать `ruby27` в качестве версии "
+"по умолчанию."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2442
+#, no-wrap
+msgid "`RUBY_ARCH`"
+msgstr "`RUBY_ARCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2444
+msgid "Set the architecture name (e.g. i386-freebsd7)."
+msgstr "Установите имя архитектуры (например, i386-freebsd7)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2446
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2921
+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:2447
+#, no-wrap
+msgid "`RUBY`"
+msgstr "`RUBY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2452
+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 ""
+"Установлена в полный путь к ruby. Если задано, значения следующих переменных "
+"автоматически получаются из исполняемого файла ruby: `RUBY_ARCH`, "
+"`RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, "
+"`RUBY_VER` и `RUBY_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2455
+msgid "Set to the alternative short version of ruby in the form of `x.y'."
+msgstr "Установлена в альтернативную короткую версию ruby в формате `x.y`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2456
+#, no-wrap
+msgid "`RUBY_EXTCONF`"
+msgstr "`RUBY_EXTCONF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2458
+msgid "Set to the alternative name of extconf.rb (default: extconf.rb)."
+msgstr ""
+"Установлена в альтернативное имя для extconf.rb (по умолчанию: extconf.rb)."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2459
+#, no-wrap
+msgid "`RUBY_EXTCONF_SUBDIRS`"
+msgstr "`RUBY_EXTCONF_SUBDIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2461
+msgid "Set to list of subdirectories, if multiple modules are included."
+msgstr "Установлена в список подкаталогов, если включено несколько модулей."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2462
+#, no-wrap
+msgid "`RUBY_SETUP`"
+msgstr "`RUBY_SETUP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2464
+msgid "Set to the alternative name of setup.rb (default: setup.rb)."
+msgstr ""
+"Установлена в альтернативное имя для setup.rb (по умолчанию: setup.rb)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2467
+#, no-wrap
+msgid "`samba`"
+msgstr "`samba`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2470
+msgid "Possible arguments: `build`, `env`, `lib`, `run`"
+msgstr "Возможные аргументы: `build`, `env`, `lib`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2475
+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 ""
+"Обработать зависимость от Samba. `env` не добавит никаких зависимостей, а "
+"только установит переменные. `build` и `run` добавят зависимости во время "
+"сборки и выполнения на [.filename]#smbd#. `lib` добавит зависимость на "
+"[.filename]#libsmbclient.so#. Экспортируемые переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2476
+#, no-wrap
+msgid "`SAMBA_PORT`"
+msgstr "`SAMBA_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2478
+msgid "The origin of the default Samba port."
+msgstr "Расположение порта Samba по умолчанию."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2479
+#, no-wrap
+msgid "`SAMBA_INCLUDEDIR`"
+msgstr "`SAMBA_INCLUDEDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2481
+msgid "The location of the Samba header files."
+msgstr "Расположение заголовочных файлов Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2482
+#, no-wrap
+msgid "`SAMBA_LIBS`"
+msgstr "`SAMBA_LIBS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2484
+msgid "The directory where the Samba shared libraries are available."
+msgstr "Каталог, в котором доступны общие библиотеки Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2485
+#, no-wrap
+msgid "`SAMBA_LDB_PORT`"
+msgstr "`SAMBA_LDB_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2488
+msgid ""
+"The origin of the ldb port used by the selected Samba version (e.g., "
+"package:databases/ldb28[]). It should be used if a port needs to depend on "
+"the same ldb version as the selected Samba version."
+msgstr ""
+"Расположение порта ldb, используемого выбранной версией Samba (например, "
+"package:databases/ldb28[]). Он должен использоваться, если порту требуется "
+"зависимость от той же версии ldb, что и у выбранной версии Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2489
+#, no-wrap
+msgid "`SAMBA_TALLOC_PORT`"
+msgstr "`SAMBA_TALLOC_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2492
+msgid ""
+"The origin of the talloc port used by the selected Samba version. It should "
+"be used if a port needs to depend on the same talloc version as the selected "
+"Samba version."
+msgstr ""
+"Расположение порта talloc, используемого выбранной версией Samba. Следует "
+"использовать, если порту требуется зависеть от той же версии talloc, что и "
+"выбранная версия Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2493
+#, no-wrap
+msgid "`SAMBA_TDB_PORT`"
+msgstr "`SAMBA_TDB_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2496
+msgid ""
+"The origin of the TDB port used by the selected Samba version. It should be "
+"used if a port needs to depend on the same TDB version as the selected Samba "
+"version."
+msgstr ""
+"Расположение порта TDB, используемого выбранной версией Samba. Его следует "
+"использовать, если порту требуется зависеть от той же версии TDB, что и "
+"выбранная версия Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2497
+#, no-wrap
+msgid "`SAMBA_TEVENT_PORT`"
+msgstr "`SAMBA_TEVENT_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2500
+msgid ""
+"The origin of the tevent port used by the selected Samba version. It should "
+"be used if a port needs to depend on the same tevent version as the selected "
+"Samba version."
+msgstr ""
+"Расположение порта tevent, используемого выбранной версией Samba. Это "
+"следует использовать, если порту необходимо зависеть от той же версии "
+"tevent, что и выбранная версия Samba."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2502
+#, no-wrap
+msgid "`scons`"
+msgstr "`scons`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2508
+msgid ""
+"Provide support for the use of package:devel/scons[]. See "
+"crossref:special[using-scons,Using `scons`] for more information."
+msgstr ""
+"Предоставить поддержку для использования package:devel/scons[]. "
+"Дополнительную информацию смотрите в crossref:special[using-"
+"scons,Использование `scons`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2510
+#, no-wrap
+msgid "`sdl`"
+msgstr "`sdl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2513
+msgid "Possible arguments: `sdl`"
+msgstr "Возможные аргументы: `sdl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2517
+msgid ""
+"Provide support for the use of `SDL` packages. The variable `USE_SDL` is "
+"mandatory and specifies which components to add as dependencies."
+msgstr ""
+"Обеспечить поддержку использования пакетов `SDL`. Переменная `USE_SDL` "
+"является обязательной и указывает, какие компоненты добавить в зависимости."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2519
+msgid "The current supported `SDL1.2` modules are:"
+msgstr "Поддерживаемые в настоящее время модули `SDL1.2`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2521
+msgid "sdl"
+msgstr "sdl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2522
+msgid "console"
+msgstr "console"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2523
+msgid "gfx"
+msgstr "gfx"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2524
+msgid "image"
+msgstr "image"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2525
+msgid "mixer"
+msgstr "mixer"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2526
+msgid "mm"
+msgstr "mm"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2527
+msgid "net"
+msgstr "net"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2528
+msgid "pango"
+msgstr "pango"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2529
+msgid "sound"
+msgstr "sound"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2530
+msgid "ttf"
+msgstr "ttf"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2532
+msgid "The current supported `SDL2` modules are:"
+msgstr "Текущие поддерживаемые модули `SDL2`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2534
+msgid "sdl2"
+msgstr "sdl2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2535
+msgid "gfx2"
+msgstr "gfx2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2536
+msgid "image2"
+msgstr "image2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2537
+msgid "mixer2"
+msgstr "mixer2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2538
+msgid "net2"
+msgstr "net2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2539
+msgid "sound2"
+msgstr "sound2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2540
+msgid "ttf2"
+msgstr "ttf2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2542
+msgid "The current supported `SDL3` modules are:"
+msgstr "Текущие поддерживаемые модули `SDL3`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2544
+msgid "sdl3"
+msgstr "sdl3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2545
+msgid "image3"
+msgstr "image3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2546
+msgid "ttf3"
+msgstr "ttf3"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2548
+#, no-wrap
+msgid "`shared-mime-info`"
+msgstr "`shared-mime-info`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2555
+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 ""
+"Использует update-mime-database из пакета package:misc/shared-mime-info[]. "
+"Это автоматически добавит шаг post-install таким образом, что сам порт всё "
+"ещё может указать собственный шаг post-install при необходимости. Также "
+"добавляет запись crossref:plist[plist-keywords-shared-mime-info,`@shared-"
+"mime-info`] в plist."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2557
+#, no-wrap
+msgid "`shebangfix`"
+msgstr "`shebangfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2563
+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 ""
+"Множество программ используют некорректные расположения для интерпретаторов "
+"скриптов, особенно [.filename]#/usr/bin/perl# и [.filename]#/bin/bash#. "
+"Макрос shebangfix исправляет строки shebang в скриптах, перечисленных в "
+"`SHEBANG_REGEX`, `SHEBANG_GLOB` или `SHEBANG_FILES`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2564
+#, no-wrap
+msgid "`SHEBANG_REGEX`"
+msgstr "`SHEBANG_REGEX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2567
+msgid ""
+"Contains _one_ extended regular expressions, and is used with the `-iregex` "
+"argument of man:find[1]. See crossref:uses[uses-shebangfix-ex-"
+"regex,`USESshebangfix` with `SHEBANG_REGEX`]."
+msgstr ""
+"Содержит _одно_ расширенное регулярное выражение и используется с аргументом "
+"`-iregex` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-"
+"regex,`USESshebangfix` с `SHEBANG_REGEX`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2568
+#, no-wrap
+msgid "`SHEBANG_GLOB`"
+msgstr "`SHEBANG_GLOB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2571
+msgid ""
+"Contains a list of patterns used with the `-name` argument of man:find[1]. "
+"See crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` with "
+"`SHEBANG_GLOB`]."
+msgstr ""
+"Содержит список шаблонов, используемых с аргументом `-name` в man:find[1]. "
+"См. crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` с `SHEBANG_GLOB`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2572
+#, no-wrap
+msgid "`SHEBANG_FILES`"
+msgstr "`SHEBANG_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2577
+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 crossref:uses[uses-shebangfix-ex-"
+"files,`USESshebangfix` with `SHEBANG_FILES`]."
+msgstr ""
+"Содержит список файлов или шаблонов man:sh[1]. Макрос shebangfix выполняется "
+"из `${WRKSRC}`, поэтому `SHEBANG_FILES` может содержать пути, относительные "
+"к `${WRKSRC}`. Также он может работать с абсолютными путями, если требуется "
+"исправление файлов вне `${WRKSRC}`. См. crossref:uses[uses-shebangfix-ex-"
+"files,`USESshebangfix` с `SHEBANG_FILES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2579
+msgid ""
+"Currently Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl, and Tk are "
+"supported by default."
+msgstr ""
+"В настоящее время Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl и Tk "
+"поддерживаются по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2581
+msgid "There are three configuration variables:"
+msgstr "Существует три переменных конфигурации:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2582
+#, no-wrap
+msgid "`SHEBANG_LANG`"
+msgstr "`SHEBANG_LANG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2584
+msgid "The list of supported interpreters."
+msgstr "Список поддерживаемых интерпретаторов."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2585
+#, no-wrap
+msgid "`_interp__CMD`"
+msgstr "`_interp__CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2588
+msgid ""
+"The path to the command interpreter on FreeBSD. The default value is `$"
+"{LOCALBASE}/bin/_interp_`."
+msgstr ""
+"Путь к интерпретатору команд в FreeBSD. Значение по умолчанию — `$"
+"{LOCALBASE}/bin/_interp_`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2589
+#, no-wrap
+msgid "`_interp__OLD_CMD`"
+msgstr "`_interp__OLD_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2593
+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 ""
+"Список неправильных вызовов интерпретаторов. Обычно это устаревшие пути или "
+"пути, используемые в других операционных системах, которые неверны в "
+"FreeBSD. Они будут заменены на правильные пути в `_interp__CMD`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2597
+msgid ""
+"These will _always_ be part of `_interp__OLD_CMD`: `\"/usr/bin/env "
+"_interp_\" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`."
+msgstr ""
+"Эти пути _всегда_ будут частью `_interp__OLD_CMD`: `\"/usr/bin/env "
+"_interp_\" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2604
+msgid ""
+"`_interp__OLD_CMD` contain multiple values. Any entry with spaces must be "
+"quoted. See crossref:uses[uses-shebangfix-ex-ksh,Specifying all the Paths "
+"When Adding an Interpreter to `USESshebangfix`]."
+msgstr ""
+"`_interp__OLD_CMD` содержит несколько значений. Любая запись с пробелами "
+"должна быть заключена в кавычки. См. crossref:uses[uses-shebangfix-ex-"
+"ksh,Указание всех путей при добавлении интерпретатора в `USESshebangfix`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2610
+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 ""
+"Исправление шебанг-строк выполняется на этапе `patch`. Если скрипты "
+"создаются с некорректными шебанг-строками на этапе `build`, процесс сборки "
+"(например, скрипт [.filename]#configure# или [.filename]#Makefiles#) должен "
+"быть исправлен или ему должен быть указан правильный путь (например, с "
+"помощью `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV` или `MAKE_ARGS`) для "
+"генерации корректных шебанг-строк."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2612
+msgid ""
+"Correct paths for supported interpreters are available in `_interp__CMD`."
+msgstr ""
+"Правильные пути для поддерживаемых интерпретаторов доступны в `_interp__CMD`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2617
+msgid ""
+"When used with crossref:uses[uses-python,`USES=python`], and the aim is only "
+"to fix the shebangs but a dependency on Python itself is not wanted, use "
+"`USES=python:env` instead."
+msgstr ""
+"При использовании с crossref:uses[uses-python,`USES=python`], если цель "
+"состоит только в исправлении shebang, но зависимость от самого Python не "
+"требуется, используйте `USES=python:env`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2620
+#, no-wrap
+msgid "Adding Another Interpreter to `USES=shebangfix`"
+msgstr "Добавление другого интерпретатора в `USES=shebangfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2625
+msgid "To add another interpreter, set `SHEBANG_LANG`. For example:"
+msgstr ""
+"Чтобы добавить другой интерпретатор, установите `SHEBANG_LANG`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2629
+#, no-wrap
+msgid "SHEBANG_LANG=\tlua\n"
+msgstr "SHEBANG_LANG=\tlua\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2634
+#, no-wrap
+msgid "Specifying all the Paths When Adding an Interpreter to `USES=shebangfix`"
+msgstr "Указание всех путей при добавлении интерпретатора в `USES=shebangfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2638
+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 ""
+"Если они еще не были определены и не было значений по умолчанию для "
+"`_interp__OLD_CMD` и `_interp__CMD`, запись Ksh можно определить как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2644
+#, 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 ""
+"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"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2649
+#, no-wrap
+msgid "Adding a Strange Location for an Interpreter"
+msgstr "Добавление нестандартного расположения интерпретатора"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2655
+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 ""
+"Некоторое программное обеспечение использует нестандартные пути для "
+"интерпретатора. Например, приложение может ожидать, что Python будет "
+"расположен в [.filename]#/opt/bin/python2.7#. Нестандартный путь, который "
+"нужно заменить, можно указать в [.filename]#Makefile# порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2659
+#, no-wrap
+msgid "python_OLD_CMD=\t/opt/bin/python2.7\n"
+msgstr "python_OLD_CMD=\t/opt/bin/python2.7\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2664
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_REGEX`"
+msgstr "`USES=shebangfix` с `SHEBANG_REGEX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2668
+msgid ""
+"To fix all the files in `${WRKSRC}/scripts` ending in [.filename]#.pl#, "
+"[.filename]#.sh#, or [.filename]#.cgi# do:"
+msgstr ""
+"Для исправления всех файлов в `${WRKSRC}/scripts`, оканчивающихся на "
+"[.filename]#.pl#, [.filename]#.sh# или [.filename]#.cgi#, выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2673
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_REGEX=\t./scripts/.*\\.(sh|pl|cgi)\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_REGEX=\t./scripts/.*\\.(sh|pl|cgi)\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2679
+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 ""
+"`SHEBANG_REGEX` используется при выполнении `find -E`, который применяет "
+"современные регулярные выражения, также известные как расширенные регулярные "
+"выражения. Подробнее см. в man:re_format[7]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2684
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_GLOB`"
+msgstr "`USES=shebangfix` с `SHEBANG_GLOB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2688
+msgid ""
+"To fix all the files in `${WRKSRC}` ending in [.filename]#.pl# or "
+"[.filename]#.sh#, do:"
+msgstr ""
+"Для исправления всех файлов в `${WRKSRC}` с окончанием [.filename]#.pl# или "
+"[.filename]#.sh# выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2693
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_GLOB=\t*.sh *.pl\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_GLOB=\t*.sh *.pl\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2698
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_FILES`"
+msgstr "`USES=shebangfix` с `SHEBANG_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2702
+msgid ""
+"To fix the files [.filename]#script/foobar.pl# and [.filename]#script/*.sh# "
+"in `${WRKSRC}`, do:"
+msgstr ""
+"Для исправления файлов [.filename]#script/foobar.pl# и [.filename]#script/"
+"*.sh# в `${WRKSRC}` выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2707
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_FILES=\tscripts/foobar.pl scripts/*.sh\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_FILES=\tscripts/foobar.pl scripts/*.sh\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2712
+#, no-wrap
+msgid "`sqlite`"
+msgstr "`sqlite`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2715
+msgid "Possible arguments: (none), `2`, `3`"
+msgstr "Возможные аргументы: (нет), `2`, `3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2718
+msgid ""
+"Add a dependency on SQLite. The default version used is 3, but version 2 is "
+"also possible using the `:2` modifier."
+msgstr ""
+"Добавить зависимость от SQLite. Используемая по умолчанию версия — 3, но "
+"также возможна версия 2 с использованием модификатора `:2`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2720
+#, no-wrap
+msgid "`sbrk`"
+msgstr "`sbrk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2725
+msgid "Marks the port as `BROKEN` in `aarch64` and `riscv64`."
+msgstr "Помечает порт как `BROKEN` для `aarch64` и `riscv64`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2727
+#, no-wrap
+msgid "`ssl`"
+msgstr "`ssl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2730
+msgid "Possible arguments: (none), `build`, `run`"
+msgstr "Возможные аргументы: (нет), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2734
+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 ""
+"Обеспечить поддержку OpenSSL. Зависимость только для сборки или выполнения "
+"может быть указана с использованием `build` или `run`. Эти переменные "
+"доступны для использования портом, а также добавлены в `MAKE_ENV`:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2735
+#, no-wrap
+msgid "`OPENSSLBASE`"
+msgstr "`OPENSSLBASE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2737
+msgid "Path to the OpenSSL installation base."
+msgstr "Путь к базовой установке OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2738
+#, no-wrap
+msgid "`OPENSSLDIR`"
+msgstr "`OPENSSLDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2740
+msgid "Path to OpenSSL's configuration files."
+msgstr "Путь к файлам конфигурации OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2741
+#, no-wrap
+msgid "`OPENSSLLIB`"
+msgstr "`OPENSSLLIB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2743
+msgid "Path to the OpenSSL libraries."
+msgstr "Путь к библиотекам OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2744
+#, no-wrap
+msgid "`OPENSSLINC`"
+msgstr "`OPENSSLINC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2746
+msgid "Path to the OpenSSL includes."
+msgstr "Путь к заголовочным файлам OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2747
+#, no-wrap
+msgid "`OPENSSLRPATH`"
+msgstr "`OPENSSLRPATH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2749
+msgid ""
+"If defined, the path the linker needs to use to find the OpenSSL libraries."
+msgstr ""
+"Если определено, путь, который требуется компоновщику для поиска библиотек "
+"OpenSSL."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2753
+msgid ""
+"If a port does not build with an OpenSSL flavor, set the `BROKEN_SSL` "
+"variable, and possibly the `BROKEN_SSL_REASON__flavor_`:"
+msgstr ""
+"Если порт не собирается с вариантом OpenSSL, установите переменную "
+"`BROKEN_SSL`, а также, возможно, `BROKEN_SSL_REASON__flavor_`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2758
+#, no-wrap
+msgid ""
+"BROKEN_SSL=\tlibressl\n"
+"BROKEN_SSL_REASON_libressl=\tneeds features only available in OpenSSL\n"
+msgstr ""
+"BROKEN_SSL=\tlibressl\n"
+"BROKEN_SSL_REASON_libressl=\tneeds features only available in OpenSSL\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2763
+#, no-wrap
+msgid "`tar`"
+msgstr "`tar`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2767
+msgid ""
+"Possible arguments: (none), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, "
+"`tgz`, `txz`, `xz`, `zst`, `zstd`"
+msgstr ""
+"Возможные аргументы: (нет), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, "
+"`tgz`, `txz`, `xz`, `zst`, `zstd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2770
+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 ""
+"Установите `EXTRACT_SUFX` в `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, "
+"`.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` или "
+"`.tar.zstd` соответственно."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2772
+#, no-wrap
+msgid "`tcl`"
+msgstr "`tcl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2775
+msgid "Possible arguments: _version_, `wrapper`, `build`, `run`, `tea`"
+msgstr "Возможные аргументы: _version_, `wrapper`, `build`, `run`, `tea`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2782
+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 ""
+"Добавьте зависимость от Tcl. Конкретная версия может быть запрошена с "
+"помощью _version_. Версия может быть пустой, одной или несколькими точными "
+"номерами версий (в настоящее время `84`, `85` или `86`), либо минимальным "
+"номером версии (в настоящее время `84+`, `85+` или `86+`). Чтобы запросить "
+"только неспецифичную для версии обёртку, используйте `wrapper`. Зависимость "
+"только на время сборки или выполнения может быть указана с помощью `build` "
+"или `run`. Для сборки порта с использованием Tcl Extension Architecture "
+"используйте `tea`. После включения [.filename]#bsd.port.pre.mk# порт может "
+"проверить результаты с помощью этих переменных:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2784
+msgid "`TCL_VER`: chosen major.minor version of Tcl"
+msgstr "`TCL_VER`: выбранная версия Tcl в формате major.minor"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2785
+msgid "`TCLSH`: full path of the Tcl interpreter"
+msgstr "`TCLSH`: полный путь к интерпретатору Tcl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2786
+msgid "`TCL_LIBDIR`: path of the Tcl libraries"
+msgstr "`TCL_LIBDIR`: путь к библиотекам Tcl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2787
+msgid "`TCL_INCLUDEDIR`: path of the Tcl C header files"
+msgstr "`TCL_INCLUDEDIR`: путь к заголовочным файлам Tcl на языке C"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2788
+msgid "`TCL_PKG_LIB_PREFIX`: Library prefix, as per TIP595"
+msgstr "`TCL_PKG_LIB_PREFIX`: Префикс библиотеки, согласно TIP595"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2789
+msgid "`TCL_PKG_STUB_POSTFIX`: Stub library postfix"
+msgstr "`TCL_PKG_STUB_POSTFIX`: Постфикс библиотеки заглушки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2790
+msgid "`TK_VER`: chosen major.minor version of Tk"
+msgstr "`TK_VER`: выбранная версия Tk в формате major.minor"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2791
+msgid "`WISH`: full path of the Tk interpreter"
+msgstr "`WISH`: полный путь к интерпретатору Tk"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2792
+msgid "`TK_LIBDIR`: path of the Tk libraries"
+msgstr "`TK_LIBDIR`: путь к библиотекам Tk"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2793
+msgid "`TK_INCLUDEDIR`: path of the Tk C header files"
+msgstr "`TK_INCLUDEDIR`: путь к заголовочным файлам Tk на языке C"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2795
+#, no-wrap
+msgid "`terminfo`"
+msgstr "`terminfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2801
+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 ""
+"Добавляет crossref:plist[plist-keywords-terminfo,`@terminfo`] в файл "
+"[.filename]#plist#. Используется, когда порт устанавливает файлы "
+"[.filename]#*.terminfo# в каталог [.filename]#${PREFIX}/share/misc#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2803
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2838
+#, no-wrap
+msgid "`tex`"
+msgstr "`tex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2809
+msgid ""
+"Provide support for tex. Loads all the default variables for TEX related "
+"ports and does not add any dependency on any ports."
+msgstr ""
+"Обеспечить поддержку tex. Загружает все стандартные переменные для портов, "
+"связанных с TEX, и не добавляет зависимостей от других портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2811
+msgid "Variables are used to specify which TEX modules are required."
+msgstr "Переменные используются для указания того, какие модули TEX требуются."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2812
+#, no-wrap
+msgid "`USE_TEX`"
+msgstr "`USE_TEX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2816
+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 ""
+"Список необходимых расширений TEX во время выполнения. Добавьте `:build` к "
+"названию расширения, чтобы добавить зависимость на время сборки, `:run` — "
+"для зависимости во время выполнения, `:test` — для зависимости во время "
+"тестирования, `:extract` — для зависимости во время извлечения. Пример: "
+"`base texmf:build source:run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2818
+msgid "Current possible arguments are as follows:"
+msgstr "Текущие возможные аргументы следующие:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2821
+msgid "`texmf`"
+msgstr "`texmf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2822
+msgid "`source`"
+msgstr "`source`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2824
+msgid "`web2c`"
+msgstr "`web2c`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2825
+msgid "`kpathsea`"
+msgstr "`kpathsea`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2826
+msgid "`ptexenc`"
+msgstr "`ptexenc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2827
+msgid "`basic`"
+msgstr "`basic`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2828
+msgid "`tlmgr`"
+msgstr "`tlmgr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2829
+msgid "`texlua`"
+msgstr "`texlua`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2830
+msgid "`texluajit`"
+msgstr "`texluajit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2831
+msgid "`synctex`"
+msgstr "`synctex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2832
+msgid "`xpdfopen`"
+msgstr "`xpdfopen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2833
+msgid "`dvipsk`"
+msgstr "`dvipsk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2834
+msgid "`dvipdfmx`"
+msgstr "`dvipdfmx`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2835
+msgid "`xdvik`"
+msgstr "`xdvik`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2836
+msgid "`gbklatex`"
+msgstr "`gbklatex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2837
+msgid "`formats`"
+msgstr "`formats`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2839
+msgid "`latex`"
+msgstr "`latex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2840
+msgid "`pdftex`"
+msgstr "`pdftex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2841
+msgid "`jadetex`"
+msgstr "`jadetex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2842
+msgid "`luatex`"
+msgstr "`luatex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2843
+msgid "`ptex`"
+msgstr "`ptex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2844
+msgid "`xetex`"
+msgstr "`xetex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2845
+msgid "`xmltex`"
+msgstr "`xmltex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2846
+msgid "`texhash`"
+msgstr "`texhash`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2847
+msgid "`updmap`"
+msgstr "`updmap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2848
+msgid "`fmtutil`"
+msgstr "`fmtutil`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2850
+#, no-wrap
+msgid "`tk`"
+msgstr "`tk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2853
+msgid "Same as arguments for `tcl`"
+msgstr "Так же, как аргументы для `tcl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2856
+msgid ""
+"Small wrapper when using both Tcl and Tk. The same variables are returned "
+"as when using Tcl."
+msgstr ""
+"Небольшая обертка при использовании Tcl и Tk. Возвращаются те же переменные, "
+"что и при использовании Tcl."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2858
+#, no-wrap
+msgid "`trigger`"
+msgstr "`trigger`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2864
+msgid ""
+"Provide support for ports requiring triggers to be executed by man:pkg[8]. "
+"Triggers are executed at the end of a transaction if the conditions are met."
+msgstr ""
+"Предоставить поддержку для портов, требующих выполнения триггеров с помощью "
+"man:pkg[8]. Триггеры выполняются в конце транзакции, если условия выполнены."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2866
+msgid "The following variable can be set by ports:"
+msgstr "Следующая переменная может быть установлена портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2867
+#, no-wrap
+msgid "`TRIGGERS`"
+msgstr "`TRIGGERS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2869
+msgid "List of triggers to package. Defaults to `${PORTNAME}`."
+msgstr "Список триггеров для пакета. По умолчанию используется `${PORTNAME}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2872
+msgid ""
+"Triggers are specified in UCL format and are usually placed in the "
+"[.filename]#files/# directory of the port."
+msgstr ""
+"Триггеры указываются в формате UCL и обычно размещаются в каталоге "
+"[.filename]#files/# порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2874
+#, no-wrap
+msgid "`uidfix`"
+msgstr "`uidfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2880
+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 crossref:uses[uses-fakeroot,`USES=fakeroot`] or patching."
+msgstr ""
+"Изменяет некоторые стандартные настройки (в основном переменные) системы "
+"сборки, чтобы позволить установку этого порта обычным пользователем. "
+"Попробуйте это в порте перед использованием crossref:uses[uses-"
+"fakeroot,`USES=fakeroot`] или исправлением."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2882
+#, no-wrap
+msgid "`uniquefiles`"
+msgstr "`uniquefiles`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2885
+msgid "Possible arguments: (none), `dirs`"
+msgstr "Возможные аргументы: (нет), `dirs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2889
+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 ""
+"Сделать файлы или каталоги 'уникальными', добавляя префикс или суффикс. Если "
+"используется аргумент `dirs`, порту требуется префикс (и только префикс) на "
+"основе `UNIQUE_PREFIX` для стандартных каталогов `DOCSDIR`, `EXAMPLESDIR`, "
+"`DATADIR`, `WWWDIR`, `ETCDIR`. Эти переменные доступны для портов:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2891
+msgid ""
+"`UNIQUE_PREFIX`: The prefix to be used for directories and files. Default: `$"
+"{PKGNAMEPREFIX}`."
+msgstr ""
+"`UNIQUE_PREFIX`: Префикс, используемый для каталогов и файлов. По умолчанию: "
+"`${PKGNAMEPREFIX}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2892
+msgid ""
+"`UNIQUE_PREFIX_FILES`: A list of files that need to be prefixed. Default: "
+"empty."
+msgstr ""
+"`UNIQUE_PREFIX_FILES`: Список файлов, которые необходимо предварить "
+"префиксом. По умолчанию: пусто."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2893
+msgid ""
+"`UNIQUE_SUFFIX`: The suffix to be used for files. Default: `${PKGNAMESUFFIX}"
+"`."
+msgstr ""
+"`UNIQUE_SUFFIX`: Суффикс, используемый для файлов. По умолчанию: `$"
+"{PKGNAMESUFFIX}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2894
+msgid ""
+"`UNIQUE_SUFFIX_FILES`: A list of files that need to be suffixed. Default: "
+"empty."
+msgstr ""
+"`UNIQUE_SUFFIX_FILES`: Список файлов, к которым необходимо добавить суффикс. "
+"По умолчанию: пусто."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2896
+#, no-wrap
+msgid "`vala`"
+msgstr "`vala`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2899
+msgid "Possible arguments: `build`, `lib`, `no_depend`"
+msgstr "Возможные аргументы: `build`, `lib`, `no_depend`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2902
+msgid ""
+"Adds build or library dependencies on package:lang/vala[]. The `no_depend` "
+"argument is reserved for package:lang/vala[] itself."
+msgstr ""
+"Добавляет зависимости сборки или библиотеки на package:lang/vala[]. Аргумент "
+"`no_depend` зарезервирован для самого package:lang/vala[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2904
+#, no-wrap
+msgid "`varnish`"
+msgstr "`varnish`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2907
+msgid "Possible arguments: `4` (default), `6`, `7`"
+msgstr "Возможные аргументы: `4` (по умолчанию), `6`, `7`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2910
+msgid ""
+"Handle dependencies on Varnish Cache. Adds a dependency on package:www/"
+"varnish*[]."
+msgstr ""
+"Обрабатывает зависимости для Varnish Cache. Добавляет зависимость от пакета "
+"`package:www/varnish*[]`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2912
+#, no-wrap
+msgid "`waf`"
+msgstr "`waf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2917
+msgid "Provide support for ports using the `waf` build system."
+msgstr "Обеспечить поддержку портов, использующих систему сборки `waf`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2919
+msgid "It implies `USES=python:build`."
+msgstr "Это подразумевает `USES=python:build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2922
+#, no-wrap
+msgid "`WAF_CMD`"
+msgstr "`WAF_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2925
+msgid ""
+"Location of the `waf` script. Set this if the `waf` script is not in "
+"[.filename]#WRKSRC/waf#."
+msgstr ""
+"Расположение скрипта `waf`. Установите этот параметр, если скрипт `waf` не "
+"находится в [.filename]#WRKSRC/waf#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2926
+#, no-wrap
+msgid "`CONFIGURE_TARGET`"
+msgstr "`CONFIGURE_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2928
+msgid "`Configure` target. Default `configure`."
+msgstr "Цель для `configure`. По умолчанию – `configure`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2929
+#, no-wrap
+msgid "`ALL_TARGET`"
+msgstr "`ALL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2931
+msgid "`All` target. Default `build`."
+msgstr "Цель для `all`. По умолчанию `build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2932
+#, no-wrap
+msgid "`INSTALL_TARGET`"
+msgstr "`INSTALL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2934
+msgid "`Install` target. Default `install`."
+msgstr "Цель для `install`. По умолчанию `install`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2936
+#, no-wrap
+msgid "`webplugin`"
+msgstr "`webplugin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2939
+msgid "Possible arguments: (none), `ARGS`"
+msgstr "Возможные аргументы: (нет), `ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2942
+msgid ""
+"Automatically create and remove symbolic links for each application that "
+"supports the webplugin framework. `ARGS` can be one of:"
+msgstr ""
+"Автоматически создавать и удалять символические ссылки для каждого "
+"приложения, поддерживающего фреймворк webplugin. `ARGS` может быть одним из:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2944
+msgid "`gecko`: support plug-ins based on Gecko"
+msgstr "`gecko`: поддержка плагинов на основе Gecko"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2945
+msgid "`native`: support plug-ins for Gecko, Opera, and WebKit-GTK"
+msgstr "`native`: поддержка плагинов для Gecko, Opera и WebKit-GTK"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2946
+msgid "`linux`: support Linux plug-ins"
+msgstr "`linux`: поддержка Linux плагинов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2947
+msgid "`all` (default, implicit): support all plug-in types"
+msgstr "`all` (по умолчанию, неявно): поддержка всех типов плагинов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2948
+msgid "(individual entries): support only the browsers listed"
+msgstr "(отдельные записи): поддерживаются только перечисленные браузеры"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2950
+msgid "These variables can be adjusted:"
+msgstr "Эти переменные можно настроить:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2952
+msgid ""
+"`WEBPLUGIN_FILES`: No default, must be set manually. The plug-in files to "
+"install."
+msgstr ""
+"`WEBPLUGIN_FILES`: Значение по умолчанию отсутствует, должно быть "
+"установлено вручную. Файлы плагинов для установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2953
+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 ""
+"`WEBPLUGIN_DIR`: Каталог для установки файлов плагина, по умолчанию "
+"[.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Установите это "
+"значение, если порт устанавливает файлы плагина вне стандартного каталога, "
+"чтобы избежать битых символических ссылок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2954
+msgid ""
+"`WEBPLUGIN_NAME`: The final directory to install the plug-in files into, "
+"default `PKGBASE`."
+msgstr ""
+"`WEBPLUGIN_NAME`: Конечный каталог для установки файлов плагина, по "
+"умолчанию `PKGBASE`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2956
+#, no-wrap
+msgid "`xfce`"
+msgstr "`xfce`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2959
+msgid "Possible arguments: (none), `gtk2`"
+msgstr "Возможные аргументы: (нет), `gtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2962
+msgid ""
+"Provide support for Xfce related ports. See crossref:special[using-"
+"xfce,Using Xfce] for details."
+msgstr ""
+"Предоставить поддержку для портов, связанных с Xfce. Подробности см. в "
+"crossref:special[using-xfce,Использование Xfce]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2965
+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 ""
+"Аргумент `gtk2` указывает, что порт требует поддержки GTK2. Он добавляет "
+"дополнительные возможности, предоставляемые некоторыми основными "
+"компонентами, например, package:x11/libxfce4menu[] и package:x11-wm/xfce4-"
+"panel[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2967
+#, no-wrap
+msgid "`xorg`"
+msgstr "`xorg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2974
+msgid ""
+"Provides an easy way to depend on X.org components. The components should "
+"be listed in `USE_XORG`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов X.org. Компоненты "
+"должны быть перечислены в `USE_XORG`. Доступные компоненты:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2976
+#, no-wrap
+msgid "Available X.Org Components"
+msgstr "Доступные компоненты X.Org"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2980
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2982
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2983
+#, no-wrap
+msgid "`dmx`"
+msgstr "`dmx`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2985
+#, no-wrap
+msgid "DMX extension library"
+msgstr "Библиотека расширений DMX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2986
+#, no-wrap
+msgid "`fontenc`"
+msgstr "`fontenc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2988
+#, no-wrap
+msgid "The fontenc Library"
+msgstr "Библиотека fontenc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2989
+#, no-wrap
+msgid "`fontutil`"
+msgstr "`fontutil`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2991
+#, no-wrap
+msgid "Create an index of X font files in a directory"
+msgstr "Создать индекс файлов шрифтов X в каталоге"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2992
+#, no-wrap
+msgid "`ice`"
+msgstr "`ice`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2994
+#, no-wrap
+msgid "Inter Client Exchange library for X11"
+msgstr "Библиотека Inter Client Exchange для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2995
+#, no-wrap
+msgid "`libfs`"
+msgstr "`libfs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2997
+#, no-wrap
+msgid "The FS library"
+msgstr "Библиотека FS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2998
+#, no-wrap
+msgid "`pciaccess`"
+msgstr "`pciaccess`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3000
+#, no-wrap
+msgid "Generic PCI access library"
+msgstr "Универсальная библиотека доступа к PCI"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3003
+#, no-wrap
+msgid "Low-level pixel manipulation library"
+msgstr "Библиотека для низкоуровневого управления пикселями"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3004
+#, no-wrap
+msgid "`sm`"
+msgstr "`sm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3006
+#, no-wrap
+msgid "Session Management library for X11"
+msgstr "Библиотека управления сеансами для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3007
+#, no-wrap
+msgid "`x11`"
+msgstr "`x11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3009
+#, no-wrap
+msgid "X11 library"
+msgstr "Библиотека X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3010
+#, no-wrap
+msgid "`xau`"
+msgstr "`xau`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3012
+#, no-wrap
+msgid "Authentication Protocol library for X11"
+msgstr "Библиотека протокола аутентификации для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3013
+#, no-wrap
+msgid "`xaw`"
+msgstr "`xaw`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3015
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3018
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3021
+#, no-wrap
+msgid "X Athena Widgets library"
+msgstr "Библиотека X Athena Widgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3016
+#, no-wrap
+msgid "`xaw6`"
+msgstr "`xaw6`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3019
+#, no-wrap
+msgid "`xaw7`"
+msgstr "`xaw7`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3022
+#, no-wrap
+msgid "`xbitmaps`"
+msgstr "`xbitmaps`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3024
+#, no-wrap
+msgid "X.Org bitmaps data"
+msgstr "Данные растровых изображений X.Org"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3025
+#, no-wrap
+msgid "`xcb`"
+msgstr "`xcb`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3027
+#, no-wrap
+msgid "The X protocol C-language Binding (XCB) library"
+msgstr "Библиотека с интерфейсом языка С для X протокола (XCB)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3028
+#, no-wrap
+msgid "`xcomposite`"
+msgstr "`xcomposite`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3030
+#, no-wrap
+msgid "X Composite extension library"
+msgstr "Библиотека расширения X Composite"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3031
+#, no-wrap
+msgid "`xcursor`"
+msgstr "`xcursor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3033
+#, no-wrap
+msgid "X client-side cursor loading library"
+msgstr "X библиотека загрузки курсоров на стороне клиента"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3034
+#, no-wrap
+msgid "`xdamage`"
+msgstr "`xdamage`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3036
+#, no-wrap
+msgid "X Damage extension library"
+msgstr "Библиотека расширения X Damage"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3037
+#, no-wrap
+msgid "`xdmcp`"
+msgstr "`xdmcp`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3039
+#, no-wrap
+msgid "X Display Manager Control Protocol library"
+msgstr "Библиотека протокола управления дисплейным менеджером X (XDMCP)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3040
+#, no-wrap
+msgid "`xext`"
+msgstr "`xext`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3042
+#, no-wrap
+msgid "X11 Extension library"
+msgstr "Библиотека расширений X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3043
+#, no-wrap
+msgid "`xfixes`"
+msgstr "`xfixes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3045
+#, no-wrap
+msgid "X Fixes extension library"
+msgstr "Библиотека расширений X Fixes"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3046
+#, no-wrap
+msgid "`xfont`"
+msgstr "`xfont`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3048
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3051
+#, no-wrap
+msgid "X font library"
+msgstr "Библиотека шрифтов X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3049
+#, no-wrap
+msgid "`xfont2`"
+msgstr "`xfont2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3052
+#, no-wrap
+msgid "`xft`"
+msgstr "`xft`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3054
+#, no-wrap
+msgid "Client-sided font API for X applications"
+msgstr "Клиентский API шрифтов для приложений X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3055
+#, no-wrap
+msgid "`xi`"
+msgstr "`xi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3057
+#, no-wrap
+msgid "X Input extension library"
+msgstr "Библиотека расширения X Input"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3058
+#, no-wrap
+msgid "`xinerama`"
+msgstr "`xinerama`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3060
+#, no-wrap
+msgid "X11 Xinerama library"
+msgstr "Библиотека X11 Xinerama"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3061
+#, no-wrap
+msgid "`xkbfile`"
+msgstr "`xkbfile`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3063
+#, no-wrap
+msgid "XKB file library"
+msgstr "Библиотека файлов XKB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3064
+#, no-wrap
+msgid "`xmu`"
+msgstr "`xmu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3066
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3069
+#, no-wrap
+msgid "X Miscellaneous Utilities libraries"
+msgstr "Библиотека X Miscellaneous Utilities"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3067
+#, no-wrap
+msgid "`xmuu`"
+msgstr "`xmuu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3070
+#, no-wrap
+msgid "`xorg-macros`"
+msgstr "`xorg-macros`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3072
+#, no-wrap
+msgid "X.Org development aclocal macros"
+msgstr "X.Org макросы разработки aclocal"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3073
+#, no-wrap
+msgid "`xorg-server`"
+msgstr "`xorg-server`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3075
+#, no-wrap
+msgid "X.Org X server and related programs"
+msgstr "Сервер X.Org X и относящиеся к нему программы"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3076
+#, no-wrap
+msgid "`xorgproto`"
+msgstr "`xorgproto`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3078
+#, no-wrap
+msgid "xorg protocol headers"
+msgstr "Заголовочные файлы протокола xorg"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3079
+#, no-wrap
+msgid "`xpm`"
+msgstr "`xpm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3081
+#, no-wrap
+msgid "X Pixmap library"
+msgstr "Библиотека X Pixmap"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3082
+#, no-wrap
+msgid "`xpresent`"
+msgstr "`xpresent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3084
+#, no-wrap
+msgid "X Present Extension library"
+msgstr "Библиотека расширений X Present"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3085
+#, no-wrap
+msgid "`xrandr`"
+msgstr "`xrandr`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3087
+#, no-wrap
+msgid "X Resize and Rotate extension library"
+msgstr "Библиотека расширений X Resize and Rotate"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3088
+#, no-wrap
+msgid "`xrender`"
+msgstr "`xrender`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3090
+#, no-wrap
+msgid "X Render extension library"
+msgstr "Библиотека расширения X Render"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3091
+#, no-wrap
+msgid "`xres`"
+msgstr "`xres`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3093
+#, no-wrap
+msgid "X Resource usage library"
+msgstr "Библиотека мониторинга ресурсов X Resource usage"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3094
+#, no-wrap
+msgid "`xscrnsaver`"
+msgstr "`xscrnsaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3096
+#, no-wrap
+msgid "The XScrnSaver library"
+msgstr "Библиотека XScrnSaver"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3097
+#, no-wrap
+msgid "`xshmfence`"
+msgstr "`xshmfence`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3099
+#, no-wrap
+msgid "Shared memory 'SyncFence' synchronization primitive"
+msgstr "Примитив синхронизации \"SyncFence\" в разделяемой памяти"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3100
+#, no-wrap
+msgid "`xt`"
+msgstr "`xt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3102
+#, no-wrap
+msgid "X Toolkit library"
+msgstr "Библиотека X Toolkit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3103
+#, no-wrap
+msgid "`xtrans`"
+msgstr "`xtrans`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3105
+#, no-wrap
+msgid "Abstract network code for X"
+msgstr "Абстрактный сетевой код для X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3106
+#, no-wrap
+msgid "`xtst`"
+msgstr "`xtst`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3108
+#, no-wrap
+msgid "X Test extension"
+msgstr "Расширение X Test"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3109
+#, no-wrap
+msgid "`xv`"
+msgstr "`xv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3111
+#, no-wrap
+msgid "X Video Extension library"
+msgstr "Библиотека расширения X Video"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3112
+#, no-wrap
+msgid "`xvmc`"
+msgstr "`xvmc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3114
+#, no-wrap
+msgid "X Video Extension Motion Compensation library"
+msgstr "Библиотека X Video Extension Motion Compensation"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3115
+#, no-wrap
+msgid "`xxf86dga`"
+msgstr "`xxf86dga`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3117
+#, no-wrap
+msgid "X DGA Extension"
+msgstr "Расширение X DGA"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3118
+#, no-wrap
+msgid "`xxf86vm`"
+msgstr "`xxf86vm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3119
+#, no-wrap
+msgid "X Vidmode Extension"
+msgstr "Расширение X Vidmode"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3122
+#, no-wrap
+msgid "`xorg-cat`"
+msgstr "`xorg-cat`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3125
+msgid ""
+"Possible arguments: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, "
+"`util`, `xserver` and (none) or one off `autotools` (default), `meson`"
+msgstr ""
+"Возможные аргументы: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, "
+"`util`, `xserver` и (без аргументов) или один из `autotools` (по умолчанию), "
+"`meson`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3129
+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 ""
+"Обеспечивает поддержку сборки компонентов Xorg. Управляет настройкой общих "
+"зависимостей и необходимой конфигурационной среды. Предназначено только для "
+"компонентов Xorg."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3131
+msgid "The category has to match upstream categories."
+msgstr "Категория должна соответствовать категориям вышестоящего репозитория."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3134
+msgid ""
+"The second argument is the build system to use. autotools is the default, "
+"but meson is also supported."
+msgstr ""
+"Второй аргумент — используемая система сборки. По умолчанию используется "
+"`autotools`, но также поддерживается `meson`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3136
+#, no-wrap
+msgid "`zip`"
+msgstr "`zip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3139
+msgid "Possible arguments: (none), `infozip`"
+msgstr "Возможные аргументы: (нет), `infozip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3141
+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 ""
+"Указывает, что файлы дистрибутива используют алгоритм сжатия ZIP. Для "
+"файлов, использующих алгоритм InfoZip, необходимо передать аргумент "
+"`infozip`, чтобы установить соответствующие зависимости."
diff --git a/documentation/content/ru/books/porters-handbook/versions/_index.adoc b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
index 26bc8c466e..9be7515004 100644
--- a/documentation/content/ru/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Глава 16. Значения __FreeBSD_version
+description: 'Список изменений файла sys/param.h'
+params:
+ path: /books/porters-handbook/versions/
prev: books/porters-handbook/uses
showBookMenu: true
-weight: 16
-params:
- path: "/books/porters-handbook/versions/"
+tags: ["FreeBSD versions"]
+title: 'Глава 18. Значения __FreeBSD_version'
+weight: 18
---
[[versions]]
@@ -15,7 +17,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 16
+:sectnumoffset: 18
:partnums:
:source-highlighter: rouge
:experimental:
@@ -45,6313 +47,7575 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Here is a convenient list of `__FreeBSD_version` values as defined in http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup[sys/param.h]:
+Здесь удобный список значений `__FreeBSD_version` как определено в https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]:
+
+[[versions-15]]
+== Версии FreeBSD 15
+
+[[freebsd-versions-table-15]]
+.Значения `__FreeBSD_version` в FreeBSD 15
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Значение
+| Версия
+| Дата
+| Релиз
+
+|1500000
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|24 августа 2023
+|15.0-CURRENT.
+
+|1500001
+|gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository="src",length=12]
+|17 сентября 2023
+|15.0-CURRENT после реализации `fpu_kern_enter` и `fpu_kern_leave` для powerpc.
+
+|1500002
+|gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository="src",length=12]
+|18 октября 2023
+|15.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1500003
+|gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository="src",length=12]
+|1 ноября 2023
+|15.0-CURRENT после удаления кода обратной совместимости для преобразования inode64.
+
+|1500004
+|gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository="src",length=12]
+|23 ноября 2023
+|15.0-CURRENT после добавления новой функции VFS под названием `vfs_exjail_clone()`, которая будет использоваться модулем ZFS.
+
+|1500005
+|gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository="src",length=12]
+|27 ноября 2023
+|15.0-CURRENT после серии механических изменений в дереве: идентификаторы SCCS удалены, закомментированные строки с авторскими правами удалены с помощью `#if 0`, механические исправления стиля после этих изменений и удаление некоторых макросов из [.filename]#sys/cdefs.h#.
+
+|1500006
+|gitref:c711af7727824da79d87f375f3d6829feec3799a[repository="src",length=12]
+|8 декабря 2023
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6.
+
+|1500007
+|gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository="src",length=12]
+|11 декабря 2023
+|15.0-CURRENT после предоставления доступа к execvpe для совместимости с Linux в libc.
+
+|1500008
+|gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository="src",length=12]
+|24 декабря 2023
+|15.0-CURRENT после изменений в LinuxKPI.
+
+|1500009
+|gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository="src",length=12]
+|11 января 2024
+|15.0-CURRENT после добавления man:vnode_pager_clean_async[9] и man:vnode_pager_clean_sync[9].
+
+|1500010
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|12 января 2024
+|15.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1500011
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|17 января 2024
+|15.0-CURRENT после добавления поддержки zfs.dataset в man:jail[8].
+
+|1500012
+|gitref:120ceebab5d4947dfc80d7492effa034a925d43e[repository="src",length=12]
+|24 января 2024
+|15.0-CURRENT после добавления man:kern_openatfp[9] и man:kcmp[2].
+
+|1500013
+|gitref:d04abb05375d3525132f1e9f78090db3d0d27f14[repository="src",length=12]
+|7 февраля 2024
+|15.0-CURRENT после добавления libsys.
+
+|1500014
+|gitref:ed27ae8df4b10f67289a32458d89d143e758f6d4[repository="src",length=12]
+|11 февраля 2024
+|15.0-CURRENT после переключения clang и других исполняемых файлов LLVM на сборку как PIE.
+
+|1500015
+|gitref:a7b9f4d96e8bdc30db27ec7a193a8d8fdf7c652c[repository="src",length=12]
+|13 марта 2024
+|15.0-CURRENT после удаления избыточных аргументов `type` и `rid` из нескольких функций в API ресурсов new-bus.
+
+|1500016
+|gitref:60bc9617e79e99bdf670304923f3baed4b749ad3[repository="src",length=12]
+|18 марта 2024
+|15.0-CURRENT после введения man:livedump_start_vnode[9].
+
+|1500017
+|gitref:bcd401b5a39c6186bb1fe450286299f2a481244c[repository="src",length=12]
+|20 марта 2024
+|15.0-CURRENT после исправления утверждения или сбоя clang при сборке последних библиотек boost.
+
+|1500018
+|gitref:0192eda105b367d4670205547e8e830e3716bea3[repository="src",length=12]
+|6 апреля 2024
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-18.1.3-0-gc13b7485b879, также известной как релиз 18.1.3.
+
+|1500019
+|gitref:e03e8b07743385e5b199409074fb60b1a9ed1fac[repository="src",length=12]
+|31 мая 2024
+|15.0-CURRENT после переопределения `CLOCK_BOOTTIME` как псевдонима для `CLOCK_MONOTONIC` вместо `CLOCK_UPTIME`.
+
+|1500020
+|gitref:7818c2d37c2c600fc9ad6f2a0951e50dd21b17c8[repository="src",length=12]
+|12 июля 2024
+|15.0-CURRENT после удаления поддержки сборки armv6.
+
+|1500021
+|gitref:24388fccd551f79f64e54099a7d78196535c0a29[repository="src",length=12]
+|21 июля 2024
+|15.0-CURRENT после изменений в LinuxKPI.
+
+|1500022
+|gitref:a1740cb93639648b41055958ad8c7f6083efdc96[repository="src",length=12]
+|29 июля 2024
+|15.0-CURRENT после удаления поддержки подкачки стека ядра.
+
+|1500023
+|gitref:1206cf04a717a55bc15255ed043b066941cb43f2[repository="src",length=12]
+|30 июля 2024
+|15.0-CURRENT после добавления новых флагов в man:malloc[9].
+
+|1500024
+|gitref:e3953c036f9d66c85b8e19f99f0710b3288ce5fb[repository="src",length=12]
+|2 октября 2024
+|15.0-CURRENT после увеличения версии [.filename]#libmd.so.6# до [.filename]#libmd.so.7#.
+
+|1500025
+|gitref:9d52823bf1dfac237e58b5208299aaa5e2df42e9[repository="src",length=12]
+|6 октября 2024
+|15.0-CURRENT после расширения поля `flags` в `vm_object`.
+
+|1500026
+|gitref:f3dbef108212460489ae68b4c47e20b73984f433[repository="src",length=12]
+|23 октября 2024
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-19.1.2-0-g7ba7d8e2f7b6, также известной как релиз 19.1.2.
+
+|1500027
+|gitref:893d044346d5ae5fe10cc188b8b0762efd2a5b27[repository="src",length=12]
+|14 ноября 2024
+|15.0-CURRENT после скрытия `struct ifnet` и изменения KPI регистрации устройств man:sound[4].
+
+|1500028
+|gitref:cab31f5633c1ffdd8b24749a3c9dd22c59568503[repository="src",length=12]
+|25 ноября 2024
+|15.0-CURRENT после добавления флага `TDA_PSELECT` для раннего восстановления масок сигналов.
+
+|1500029
+|gitref:46297859a74563dde6fc5bff9f9ecded9fb61ba6[repository="src",length=12]
+|6 декабря 2024
+|15.0-CURRENT после добавления `bus_attach_children`, `bus_detach_children` и `bus_identify_children`.
+
+|1500030
+|gitref:b196276c20b577b364372f1aa1a646b9ce34bf5c[repository="src",length=12]
+|2 января 2025
+|15.0-CURRENT после изменения `bus_generic_detach` для удаления дочерних устройств после их отключения.
+
+|1500037
+|gitref:7acd5af48cf1870ec48d5910dff1a26466d98074[repository="src",length=12]
+|12 апреля 2025
+|15.0-CURRENT после внесения изменений в alloc в LinuxKPI.
+
+|1500038
+|gitref:[repository="src",length=12]
+|19 апреля 2025
+|15.0-CURRENT после удаления vm_page_next() и _prev.
+
+|1500039
+|gitref:[repository="src",length=12]
+|4 мая 2025
+|15.0-CURRENT после введения правильно типизированных jiffies.
+
+|1500040
+|gitref:[repository="src",length=12]
+|4 мая 2025
+|15.0-CURRENT после изменения внутреннего API между модулями nfscommon и nfscl.
+
+|1500045
+|gitref:a02180cf60a6a0102669b678e9c81ad9f1aa4d91[repository="src",length=12]
+|3 июня 2025
+|15.0-CURRENT после внесения изменений dma-mapping.h из drm-kmod в LinuxKPI.
+
+|1500062
+|gitref:567e6250c003eeb251b4bc8dbe60d2adabab2988[repository="src",length=12]
+|17 августа 2025
+|15.0-CURRENT после добавления VTYPE_ISDEV(), VN_ISDEV() и VATTR_ISDEV().
+
+|===
+
+[[versions-14]]
+== Версии FreeBSD 14
+
+[[freebsd-versions-table-14]]
+.Значения `__FreeBSD_version` в FreeBSD 14
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Значение
+| Версия
+| Дата
+| Релиз
+
+|1400000
+|gitref:a53ce3fc4938e37d5ec89304846203d2083c61a2[repository="src",length=12]
+|22 января 2021
+|14.0-CURRENT.
+
+|1400001
+|gitref:739ecbcf1c4fd22b5f6ee0bb180a67644046a3e0[repository="src",length=12]
+|23 января 2021
+|14.0-CURRENT после добавления поддержки символьных ссылок к бесблокировочному поиску.
+
+|1400002
+|gitref:2cf84258922f306a3f84866685d2f5346f67db58[repository="src",length=12]
+|26 января 2021
+|14.0-CURRENT после исправления утверждения clang при сборке порта package:devel/onetbb[].
+
+|1400003
+|gitref:d386f3a3c32f0396aa7995349dd65d6c59711393[repository="src",length=12]
+|28 января 2021
+|14.0-CURRENT после добавления различных компонентов LinuxKPI, конфликтующих с drm-kmod.
+
+|1400004
+|gitref:68f6800ce05c386ff045b4416d8595d09c4d8fdd[repository="src",length=12]
+|8 февраля 2021
+|14.0-CURRENT после изменения интерфейсов ядра для диспетчеризации криптографических операций.
+
+|1400005
+|gitref:45eabf5754ac1d291bd677fdf29f59ce4bbc2c8f[repository="src",length=12]
+|17 февраля 2021
+|14.0-CURRENT после изменения API man:ptrace[2] `PT_GETDBREGS`/`PT_SETDBREGS` на arm64.
+
+|1400006
+|gitref:c96151d33509655efb7fb26768cb56a041c176f1[repository="src",length=12]
+|17 марта 2021
+|14.0-CURRENT после добавления перечисляющих ioctl в man:sndstat[4].
+
+|1400007
+|gitref:d36d6816151705907393889d661cbfd25c630ca8[repository="src",length=12]
+|6 апреля 2021
+|14.0-CURRENT после исправления некорректного `dlpi_tls_data`.
+
+|1400008
+|gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository="src",length=12]
+|11 апреля 2021
+|14.0-CURRENT после изменения внутреннего KAPI между модулями `krpc` и NFS.
+
+|1400009
+|gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository="src",length=12]
+|20 апреля 2021
+|14.0-CURRENT после добавления поддержки TCP LRO для VLAN и VxLAN.
+
+|1400010
+|gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository="src",length=12]
+|21 апреля 2021
+|14.0-CURRENT после изменения схемы и определений `nvlist` для ioctl man:sndstat[4].
+
+|1400015
+|gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после добавления дополнительных изменений LinuxKPI, требующих корректировки drm-kmod.
+
+|1400016
+|gitref:21e3c1fbe2460f144f6d4dfd61c3346b2de59667[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после удаления поддержки программных бэкендов KTLS.
+
+|1400017
+|gitref:beb817edfe22cdea91e19a60c42caabd9404da48[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после добавления `crypto_cursor_segment()`.
+
+|1400018
+|gitref:a4b07a2701f568c2c0f0c0426091f1489244a92d[repository="src",length=12]
+|30 мая 2021
+|14.0-CURRENT после разрешения реализации man:VFS_QUOTACTL[9] указывать изменения состояния занятости.
+
+|1400019
+|gitref:37d64dcdfa519157aff9711f1f226ad7bd778f46[repository="src",length=12]
+|7 июня 2021
+|14.0-CURRENT после включения `pr_err_once()` в LinuxKPI [.filename]#printk.h#.
+
+|1400020
+|gitref:8a1a42b2a7a428fb97fda9f19fd0d67a4eec7535[repository="src",length=12]
+|9 июня 2021
+|14.0-CURRENT после добавления макросов для `might_lock_nested()` и `lockdep_(re/un/)pin_lock()` в LinuxKPI.
+
+|1400021
+|gitref:b47f461c8e67253fdb394968428b760e880baa08[repository="src",length=12]
+|10 июня 2021
+|14.0-CURRENT после добавления макроса `list_for_each_entry_lockless()` в LinuxKPI.
+
+|1400022
+|gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository="src",length=12]
+|11 июня 2021
+|14.0-CURRENT после коммита gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository="src",length=12] изменил внутренний KAPI между модулями `krpc` и nfsserver.
+
+|1400023
+|gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository="src",length=12]
+|13 июня 2021
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-12.0.0-0-gd28af7c654d8, также известной как релиз 12.0.0.
+
+|1400024
+|gitref:41dfd8bd6466fd39957dee2614d88c81cdf420a7[repository="src",length=12]
+|18 июня 2021
+|14.0-CURRENT после различных добавлений в LinuxKPI.
+
+|1400025
+|gitref:5fa1eb1cd927219070b5753b64114a9240d76bf8[repository="src",length=12]
+|5 июля 2021
+|14.0-CURRENT после различных добавлений в LinuxKPI.
+
+|1400026
+|gitref:fad3f322efb53d4924fdda34f9f23f881659c269[repository="src",length=12]
+|16 июля 2021
+|14.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfsd.
+
+|1400027
+|gitref:cc55ee8009a550810d38777fd6ace9abf3a2f6b4[repository="src",length=12]
+|28 июля 2021
+|14.0-CURRENT после добавления вспомогательных функций LSE атомарных операций вне строки в [.filename]#libcompiler_rt.a# для архитектуры aarch64.
+
+|1400028
+|gitref:792b602a337ddc5efaa5e5326d9433fe3da7f303[repository="src",length=12]
+|31 июля 2021
+|14.0-CURRENT после обеспечения потокобезопасности разделов FPU в LinuxKPI.
+
+|1400029
+|gitref:245ec7651e4221043d1032fb3f82f335dc65fc7f[repository="src",length=12]
+|5 августа 2021
+|14.0-CURRENT после добавления man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9].
+
+|1400030
+|gitref:95941b963606f6e03282cd6f866f3166dcedfa5b[repository="src",length=12]
+|12 августа 2021
+|14.0-CURRENT после изменений параметров man:VOP_DEALLOCATE[9] и добавления поддержки man:fspacectl[2] для POSIX разделяемой памяти.
+
+|1400031
+|gitref:1a4c5061fc5ba8f2eee41456a6873547915f268a[repository="src",length=12]
+|24 августа 2021
+|14.0-CURRENT после изменения man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9] для обновления rmsr.r_offset до значимого значения.
+
+|1400032
+|gitref:76321d2d432ed270d93b282e54e59b708c0cf3b4[repository="src",length=12]
+|25 августа 2021
+|14.0-CURRENT после изменения man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9] для упрощения подсчёта количества обнулённых байт.
+
+|1400033
+|gitref:c751d067c166db71ce8bf3a323c62ac3428bd32a[repository="src",length=12]
+|7 сентября 2021
+|14.0-CURRENT после перемещения блокировок буфера сокета в содержащий сокет и переименования sb(un)lock в SOCK_IO_RECV_LOCK, SOCK_IO_RECV_UNLOCK, SOCK_IO_SEND_LOCK и SOCK_IO_SEND_UNLOCK.
+
+|1400034
+|gitref:c751d067c166db71ce8bf3a323c62ac3428bd32a[repository="src",length=12]
+|29 сентября 2021
+|14.0-CURRENT после изменений в LinuxKPI.
+
+|1400035
+|gitref:16f1ee11e6574d7f8d8a9dc6ebc9be3036ff9fd0[repository="src",length=12]
+|4 октября 2021
+|14.0-CURRENT после разделения libtinfow и libncurses.
+
+|1400036
+|gitref:ac847dbf73685a5df9f70bbcdefa9fdeb559071d[repository="src",length=12]
+|6 октября 2021
+|14.0-CURRENT после расширения шифров AES-CCM и Chacha20-Poly1305 в OCF для поддержки нескольких длин одноразовых номеров.
+
+|1400037
+|gitref:2b68eb8e1dbbdaf6a0df1c83b26f5403ca52d4c3[repository="src",length=12]
+|11 октября 2021
+|14.0-CURRENT после удаления аргумента thread из man:VOP_STAT[9] и `fo_stat`.
+
+|1400038
+|gitref:0d6516b453469ce1d92ec903c4c4df9ee08be0f9[repository="src",length=12]
+|17 октября 2021
+|14.0-CURRENT после того, как LinuxKPI получил поддержку отложенного выделения BAR.
+
+|1400039
+|gitref:bd49c454ca62170506a98959c1acab7ad50c3276[repository="src",length=12]
+|19 октября 2021
+|14.0-CURRENT после изменений в аллокаторе страниц.
+
+|1400040
+|gitref:f38bef2ce417d6270f32b4ed17cec84bfd95d548[repository="src",length=12]
+|30 октября 2021
+|14.0-CURRENT после увеличения номера версии разделяемой библиотеки libdialog.
+
+|1400041
+|gitref:0c276dee030b241e12e1ceb1b2ab619004f08ce1[repository="src",length=12]
+|6 ноября 2021
+|14.0-CURRENT после изменения аргументов для man:VOP_ALLOCATE[9].
+
+|1400042
+|gitref:20aa359773befc8182f6b5dcb5aad7390cab6c26[repository="src",length=12]
+|13 ноября 2021
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-13.0.0-0-gd7b669b3a303, также известного как релиз 13.0.0.
+
+|1400043
+|gitref:7e1d3eefd410ca0fbae5a217422821244c3eeee4[repository="src",length=12]
+|25 ноября 2021
+|14.0-CURRENT после удаления неиспользуемого аргумента потока из man:NDINIT[9]*.
+
+|1400044
+|gitref:ec434c85b46dd715da1940e2a8911bf476b0e477[repository="src",length=12]
+|9 декабря 2021
+|14.0-CURRENT после изменения встроенных программных криптографических преобразований для поддержки AEAD-шифров и изменения аутентификационных преобразований Blake-2S/B для поддержки Init перед Setkey, как в других аутентификационных преобразованиях.
+
+|1400045
+|gitref:b214fcceacad6b842545150664bd2695c1c2b34f[repository="src",length=12]
+|15 декабря 2021
+|14.0-CURRENT после изменения аргумента cookies в man:VOP_READDIR[9] на `**uint64_t`.
+
+|1400046
+|gitref:e2650af157bc7489deaf2c9054995f0f88a6e5da[repository="src",length=12]
+|30 декабря 2021
+|14.0-CURRENT после приведения макросов CPU_SET в соответствие с glibc.
+
+|1400047
+|gitref:ed6417cd8d0bb5a2c175fce9d8e4a495fae9e9f4[repository="src",length=12]
+|January 17, 2022
+|14.0-CURRENT после множества изменений LinuxKPI, необходимых для drm-kmod.
+
+|1400048
+|gitref:dd2f7a4b45eb1285e710cfce60cb77f7c11f8075[repository="src",length=12]
+|18 января 2022
+|14.0-CURRENT после добавления <crypto/chacha20_poly1305.h>.
+
+|1400049
+|gitref:2c4b65cc3d227f31864e183c15f6c42e2c596cd9[repository="src",length=12]
+|January 24, 2022
+|14.0-CURRENT after adding <crypto/curve25519.h>.
+
+|1400050
+|gitref:213e91399b7998554d787bb290109ebe602aa279[repository="src",length=12]
+|25 января 2022
+|14.0-CURRENT после iflib добавляет возможность, при которой драйвер может установить свою собственную функцию выбора TX-очереди как `ift_txq_select` в структуре `if_txrx`.
+
+|1400051
+|gitref:59d465e200bb7058dfdb183c061730c10dd5bc03[repository="src",length=12]
+|25 января 2022
+|14.0-CURRENT после добавления поддержки i2c для LinuxKPI.
+
+|1400052
+|gitref:05f0b24bfb3416606c8ea02bc1bdb9bcee7aee0c[repository="src",length=12]
+|February 14, 2022
+|14.0-CURRENT после добавления поддержки GUID_INIT и pm_qos.h для LinuxKPI.
+
+|1400053
+|gitref:ba87e9bf74202b08b8e3b0a297b9b88f6869fbfb[repository="src",length=12]
+|February 17, 2022
+|14.0-CURRENT после добавления mmap_lock.h в LinuxKPI.
+
+|1400054
+|gitref:50bb3a33d879536e86e8a23365f070ef00b5cb32[repository="src",length=12]
+|28 марта 2022
+|14.0-CURRENT после изменения `irq_work_queue` для возврата типа bool в LinuxKPI в соответствии с API 5.10.
+
+|1400055
+|gitref:d69af4758be912625ec08656ba64eb90a98c9a7f[repository="src",length=12]
+|29 марта 2022
+|14.0-CURRENT после добавления `for_each_sgtable_dma_sg` и `for_each_sgtable_dma_page` в LinuxKPI
+
+|1400056
+|gitref:ab8ac4c28574a42a2891b2e2341f802949c1fb57[repository="src",length=12]
+|31 марта 2022
+|14.0-CURRENT после обновления zlib до версии 1.2.12
+
+|1400057
+|gitref:e68b35e40881a1bd858e1b4b5003123a484fd7cd[repository="src",length=12]
+|22 апреля 2022
+|14.0-CURRENT после изменения прототипа udp_tun_func_t().
+
+|1400058
+|gitref:2e32d4e41d205d6f14834f87306a77ff77b9c0bd[repository="src",length=12]
+|7 мая 2022
+|14.0-CURRENT после изменений в newbus для удаления аргументов devclass.
+
+|1400059
+|gitref:3a9a9c0ca44ec535dcf73fe8462bee458e54814b[repository="src",length=12]
+|14 мая 2022
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-14.0.3-0-g1f9140064dfb, также известной как релиз 14.0.3.
+
+|1400060
+|gitref:85d7875d42913c2cb10a007a1be05b210dc6aab2[repository="src",length=12]
+|6 июня 2022
+|14.0-CURRENT после исправлений LinuxKPI dmi_matches().
+
+|1400061
+|gitref:c4c5981c14d5bd69e9df9ae691069ec4c2e92174[repository="src",length=12]
+|8 июня 2022
+|14.0-CURRENT после изменений структуры man:mbuf[9].
+
+|1400062
+|gitref:8c309d48aabf1cb469334c7716033f177a2715c0[repository="src",length=12]
+|18 июня 2022
+|14.0-CURRENT после изменений структуры `kinfo_file`.
+
+|1400063
+|gitref:8cff8e6e13a6d3ccff40fc0d8d97f5aef22a8f4d[repository="src",length=12]
+|29 июня 2022
+|14.0-CURRENT после множества изменений LinuxKPI, необходимых для drm-kmod.
+
+|1400064
+|gitref:ddd9004e7a5dbf02c34ef0effcef90f7d5df357d[repository="src",length=12]
+|18 июля 2022
+|14.0-CURRENT после удаления OBJT_DEFAULT.
+
+|1400065
+|gitref:b273f93657cf0e6f2c6ee4d0f40a43656233c6d0[repository="src",length=12]
+|8 августа 2022
+|14.0-CURRENT после множества изменений LinuxKPI, необходимых для drm-kmod.
+
+|1400066
+|gitref:ff7812ee7d444b738a454064f9639c3feb5743e8[repository="src",length=12]
+|18 августа 2022
+|14.0-CURRENT после множества изменений LinuxKPI, необходимых для drm-kmod.
+
+|1400069
+|gitref:f95c0bc89ea4fcde04b0990d57e842ef387ea896[repository="src",length=12]
+|22 сентября 2022
+|14.0-CURRENT после нескольких изменений в LinuxKPI.
+
+|1400070
+|gitref:6bddde307e21eba297ac3f3e534b4cf3be81dfe2[repository="src",length=12]
+|22 сентября 2022
+|14.0-CURRENT после изменений KPI в pmap_unmapdev() и kmem_*().
+
+|1400071
+|gitref:d3f96f661050e9bd21fe29931992a8b9e67ff189[repository="src",length=12]
+|26 сентября 2022
+|14.0-CURRENT после изменений KPI, когда списки OID sysctl были преобразованы в RB-деревья.
+
+|1400072
+|gitref:8a96874eeeee5195b0b0952b77227bef6a26d1a6[repository="src",length=12]
+|22 сентября 2022
+|14.0-CURRENT после изменения прототипа `qsort_r` для соответствия POSIX.
+
+|1400073
+|gitref:9c950139051298831ce19d01ea5fb33ec6ea7f89[repository="src",length=12]
+|17 октября 2022
+|14.0-CURRENT after introduction of v2 of TX Queue Select Functionality.
+
+|1400074
+|gitref:e28932c643e891294a49f386ba65322cf8410225[repository="src",length=12]
+|9 декабря 2022
+|14.0-CURRENT после добавления запасных слотов fops в fileops.
+
+|1400078
+|gitref:4b56afaf7bf4fa37bae5b26fd93ee1ff5969c1bb[repository="src",length=12]
+|13 января 2023
+|14.0-CURRENT после изменения LinuxKPI pci.h.
+
+|1400079
+|gitref:3264f6b88fce7c5437d205685863617d8f6a22dd[repository="src",length=12]
+|8 февраля 2023
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-15.0.7-0-g8dfdcc7b7bf6, также известного как релиз 15.0.7.
+
+|1400084
+|gitref:ea3061526e9ce5d3b65932c1d3e4437abd556d65[repository="src",length=12]
+|23 марта 2023
+|14.0-CURRENT после изменения структур reg, gpreg, trapframe и pcb для архитектуры arm64.
+
+|1400085
+|gitref:1cebc9298cf2272da46c3c574d06a80ce59854aa[repository="src",length=12]
+|28 марта 2023
+|14.0-CURRENT после нескольких изменений в LinuxKPI.
+
+|1400086
+|gitref:c17eb99a66e7d1e8a64458a969eeb7649f827493[repository="src",length=12]
+|8 апреля 2023
+|14.0-CURRENT после изменений аргументов vn_lock_pair().
+
+|1400087
+|gitref:af22da75a035e25cb47cd3f2eabe5a84d8a5cb34[repository="src",length=12]
+|22 апреля 2023
+|14.0-CURRENT после обновлений LinuxKPI.
+
+|1400088
+|gitref:97583aa2567589cb83540d2d9de1980b76db9a99[repository="src",length=12]
+|24 апреля 2023
+|14.0-CURRENT после миграции LinuxKPI на IfAPI.
+
+|1400089
+|gitref:9fb6718d1b180c341373b25c03dbfc221ddee311[repository="src",length=12]
+|25 апреля 2023
+|14.0-CURRENT после динамического выделения массива stoppcbs в smp.
+
+|1400090
+|gitref:653738e895ba022be1179a95a85089e7bc66dbbe[repository="src",length=12]
+|7 июня 2023
+|14.0-CURRENT после того, как ptrace начал очищать TDB_BORN во время PT_DETACH.
+
+|1400091
+|gitref:a681cba16d8967651a2146385ce44a2bfeb1c4c3[repository="src",length=12]
+|22 июня 2023
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-16.0.6-0-g7cbf1a259152, также известного как релиз 16.0.6.
+
+|1400092
+|gitref:9ead001d5b42ef9cba04757c9e7ee74c06037139[repository="src",length=12]
+|24 июня 2023
+|14.0-CURRENT после импорта OpenSSL 3.0.9 в базовую систему.
+
+|1400093
+|gitref:ba8cc6d7271a50fec978a1d3a088aec7985fae48[repository="src",length=12]
+|5 июля 2023
+|14.0-CURRENT после использования __enum_uint8 для vtype и vstate в VFS
+
+|1400097
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|24 августа 2023
+|14.0-STABLE после ветвления stable/14
+
+|1400500
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|8 сентября 2023
+|14.0-STABLE после ветвления releng/14.0
+
+|1400501
+|gitref:91e53779b4fc39e755a03190f785ce0cf3f83eb7[repository="src",length=12]
+|19 ноября 2023
+|14.0-STABLE после реализации `fpu_kern_enter` и `fpu_kern_leave` для powerpc.
+
+|1400502
+|gitref:092abb839d1d2826533bb9c4c93d713f8b5043f9[repository="src",length=12]
+|24 декабря 2023
+|14.0-STABLE после изменения внутреннего API между модулями kgssapi и krpc.
+
+|1400503
+|gitref:ba99d960884d50eb7d36146914206644ee132aa4[repository="src",length=12]
+|29 декабря 2023
+|14.0-STABLE после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1400504
+|gitref:68584c97ecfb3046de7fb1b16c2caa785392237c[repository="src",length=12]
+|7 января 2024
+|14.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6.
+
+|1400505
+|gitref:64e869e9b93c8ce47f874b770df696c06bcba0d3[repository="src",length=12]
+|7 января 2024
+|14.0-STABLE после добавления man:vnode_pager_clean_async[9] и man:vnode_pager_clean_sync[9].
+
+|1400506
+|gitref:d9041710958227194c5e34b169ae73d7ad411017[repository="src",length=12]
+|19 января 2024
+|14.0-STABLE после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1400507
+|gitref:b566e44b2b88eb9f1b3b658998c7418cccab9e2f[repository="src",length=12]
+|31 января 2024
+|14.0-STABLE после добавления man:kern_openatfp[9] и man:kcmp[2].
+
+|1400508
+|gitref:2d120981e26dfef5c9cb9eb9936bb46cb6918136[repository="src",length=12]
+|18 февраля 2024
+|14.0-STABLE после обновлений LinuxKPI.
+
+|1400509
+|gitref:b392b36d3776b696601ce0253256803276d24ea2[repository="src",length=12]
+|18 февраля 2024
+|14.0-STABLE после изменения внутренней структуры `struct ieee80211vap` в net80211.
+
+|1400510
+|gitref:69da6e0879831f1ccc5c60135ed43fcea10a933b[repository="src",length=12]
+|23 марта 2024
+|14.0-STABLE после исправления утверждения или падения clang при сборке последних библиотек boost.
+
+|1400511
+|gitref:7c41358a2b0a2e70a2b61ec347354f3452e4d2f3[repository="src",length=12]
+|20 апреля 2024
+|14.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-18.1.3-0-gc13b7485b879, также известной как релиз 18.1.3.
+
+|1401500
+|gitref:7b082bdf72e65f94b9b17d9fa1d0c1c202e4eb49[repository="src",length=12]
+|2 мая 2024
+|14.1-STABLE после переименования из 14.1-PRERELEASE.
+
+|1401501
+|gitref:f285eabc89ce8ccf3aaf563401df942e406c2b5f[repository="src",length=12]
+|6 июня 2024
+|14.1-STABLE после добавления модуля linuxkpi_video.
+
+|1401502
+|gitref:b37a6d41a046dbb46ee1d6bf00c710c03c944a24[repository="src",length=12]
+|2 августа 2024
+|14.1-STABLE после изменений в LinuxKPI.
+
+|1401503
+|gitref:8a5a9dbf389e86d278764ababf2f1eb8ee276680[repository="src",length=12]
+|15 октября 2024
+|14.1-STABLE после расширения поля `flags` в `vm_object`.
+
+|1402500
+|gitref:4e8444d5750a5d9da9c812e8f6caf6d62862be0a[repository="src",length=12]
+|31 октября 2024
+|14.2-STABLE после переименования из 14.2-PRERELEASE.
+
+|1402501
+|gitref:35d2f335e855af816d0a7fe5baf6a3facba84562[repository="src",length=12]
+|1 декабря 2024
+|14.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-19.1.4-0-gaadaa00de76e, также известного как релиз 19.1.4.
+
+|1402502
+|gitref:d172f42e4ba7ba8542ae0866aaba56e329b4ea2c[repository="src",length=12]
+|27 февраля 2025
+|14.2-STABLE после удаления избыточных аргументов `type` и `rid` из нескольких функций в API ресурсов new-bus.
+
+|1402503
+|gitref:4aed8b3b613c5e1499336e4d7ec7e9a3ac3d9a12[repository="src",length=12]
+|27 февраля 2025
+|14.2-STABLE после добавления `bus_attach_children`, `bus_detach_children` и `bus_identify_children`.
+
+|1402505
+|gitref:a3b2d8e360c37853035f9cede6064c4602312bfc[repository="src",length=12]
+|18 апреля 2025
+|14.2-STABLE после изменения аллокации в LinuxKPI и удаления микропрограммы iwlwifi.
+
+|1403503
+|gitref:6cdcf08c9c5eda6dc3b8395cefd9d30a4f5e2f1a[repository="src",length=12]
+|13 июля 2025
+|14.3-STABLE после изменений в LinuxKPI dma-mapping.h and acpi.
+
+|===
+
+////
+Template:
+
+|14XXXXX
+|gitref:XXXXXXXX[repository="src",length=12]
+|October 30, 2021
+|14.0-CURRENT after XXXXXX.
+////
[[versions-13]]
-== FreeBSD 13 Versions
+== FreeBSD 13 Версии
[[freebsd-versions-table-13]]
-.FreeBSD 13 `__FreeBSD_version` Values
+.FreeBSD 13 Значения `__FreeBSD_version`
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|1300000
|link:https://svnweb.freebsd.org/changeset/base/339436[339436]
-|October 19, 2018
+|19 октября 2018
|13.0-CURRENT.
|1300001
|link:https://svnweb.freebsd.org/changeset/base/339730[339730]
-|October 25, 2018
-|13.0-CURRENT after bumping OpenSSL shared library version numbers.
+|25 октября 2018
+|13.0-CURRENT после увеличения номеров версий разделяемых библиотек OpenSSL.
|1300002
|link:https://svnweb.freebsd.org/changeset/base/339765[339765]
-|October 25, 2018
-|13.0-CURRENT after restoration of [.filename]#sys/joystick.h#.
+|25 октября 2018
+|13.0-CURRENT после восстановления [.filename]#sys/joystick.h#.
|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`.)
+|2 ноября 2018
+|13.0-CURRENT после изменения API `vop_symlink` (параметр `a_target` теперь объявлен как `const`.)
|1300004
|link:https://svnweb.freebsd.org/changeset/base/340841[340841]
-|November 23, 2018
-|13.0-CURRENT after enabling crtbegin and crtend code.
+|23 ноября 2018
+|13.0-CURRENT после включения кода crtbegin и crtend.
|1300005
|link:https://svnweb.freebsd.org/changeset/base/341836[341836]
-|December 11, 2018
-|13.0-CURRENT after enabling UFS inode checksums.
+|11 декабря 2018
+|13.0-CURRENT после включения контрольных сумм inode в UFS.
|1300006
|link:https://svnweb.freebsd.org/changeset/base/342398[342398]
-|December 24, 2018
-|13.0-CURRENT after fixing `sys/random.h` include to be usable from C++.
+|24 декабря 2018
+|13.0-CURRENT после исправления включения [.filename]#sys/random.h# для использования из C++.
|1300007
|link:https://svnweb.freebsd.org/changeset/base/342629[342629]
-|December 30, 2018
-|13.0-CURRENT after changing the size of `struct linux_cdev` on 32-bit platforms.
+|30 декабря 2018
+|13.0-CURRENT после изменения размера `struct linux_cdev` на 32-битных платформах.
|1300008
|link:https://svnweb.freebsd.org/changeset/base/342772[342772]
-|January 4, 2019
-|13.0-CURRENT after adding `kern.smp.threads_per_core` and `kern.smp.cores` sysctls.
+|4 января 2019
+|13.0-CURRENT после добавления системных переменных `kern.smp.threads_per_core` и `kern.smp.cores`.
|1300009
|link:https://svnweb.freebsd.org/changeset/base/343213[343213]
-|January 20, 2019
-|13.0-CURRENT after `struct ieee80211vap` structure change to resolve ioctl/detach race for ieee80211com structure.
+|20 января 2019
+|13.0-CURRENT после изменения структуры `struct ieee80211vap` для устранения состояния гонки между ioctl и detach в структуре ieee80211com.
|1300010
|link:https://svnweb.freebsd.org/changeset/base/343485[343485]
-|January 27, 2019
-|13.0-CURRENT after increasing `SPECNAMELEN` from 63 to MAXNAMELEN (255).
+|27 января 2019
+|13.0-CURRENT после увеличения `SPECNAMELEN` с 63 до `MAXNAMELEN` (255).
|1300011
|link:https://svnweb.freebsd.org/changeset/base/344041[344041]
-|February 12, 2019
-|13.0-CURRENT after man:renameat[2] has been corrected to work with kernels built with the `CAPABILITIES` option.
+|12 февраля 2019
+|13.0-CURRENT после исправления man:renameat[2] для работы с ядрами, собранными с опцией `CAPABILITIES`.
|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.
+|12 февраля 2019
+|13.0-CURRENT после того, как `taskqgroup_attach()` и `taskqgroup_attach_cpu()` принимают аргументы `device_t` и указатель на структуру resource для обозначения прерываний устройства.
|1300013
|link:https://svnweb.freebsd.org/changeset/base/344300[344300]
-|February 19, 2019
-|13.0-CURRENT after the removal of drm and drm2.
+|19 февраля 2019
+|13.0-CURRENT после удаления drm и drm2.
|1300014
|link:https://svnweb.freebsd.org/changeset/base/344779[344779]
-|March 4, 2019
-|13.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 8.0.0 rc3.
+|4 марта 2019
+|13.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 8.0.0 rc3.
|1300015
|link:https://svnweb.freebsd.org/changeset/base/345196[345196]
-|March 15, 2019
-|13.0-CURRENT after deanonymizing thread and proc state enums, so userland applications can use them without redefining the value names.
+|15 марта 2019
+|13.0-CURRENT после деанонимизации перечислений состояний потоков и процессов, что позволяет приложениям пользовательского пространства использовать их без переопределения имен значений.
|1300016
|link:https://svnweb.freebsd.org/changeset/base/345236[345236]
-|March 16, 2019
-|13.0-CURRENT after enabling LLVM OpenMP 8.0.0 rc5 on amd64 by default.
+|16 марта 2019
+|13.0-CURRENT после включения LLVM OpenMP 8.0.0 rc5 на amd64 по умолчанию.
|1300017
|link:https://svnweb.freebsd.org/changeset/base/345305[345305]
-|March 19, 2019
-|13.0-CURRENT after exposing the Rx mbuf buffer size to drivers in iflib.
+|19 марта 2019
+|13.0-CURRENT после раскрытия размера буфера Rx mbuf для драйверов в iflib.
|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].
+|16 марта 2019
+|13.0-CURRENT после введения системного вызова `funlinkat` в link:https://svnweb.freebsd.org/changeset/base/345982[345982].
|1300019
|link:https://svnweb.freebsd.org/changeset/base/346282[346282]
-|April 16, 2019
-|13.0-CURRENT after addition of is_random_seeded(9) to man:random[4].
+|16 апреля 2019
+|13.0-CURRENT после добавления man:is_random_seeded[9] в man:random[4].
|1300020
|link:https://svnweb.freebsd.org/changeset/base/346358[346358]
-|April 18, 2019
-|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.
+|18 апреля 2019
+|13.0-CURRENT после восстановления доступности man:random[4] с учетом компромиссов до link:https://svnweb.freebsd.org/changeset/base/346250[346250] и добавления новых настроек и диагностических sysctl для программного обнаружения проблем с ранней инициализацией семени после загрузки.
|1300021
|link:https://svnweb.freebsd.org/changeset/base/346645[346645]
-|April 24, 2019
-|13.0-CURRENT after LinuxKPI uses man:bus_dma[9] to be compatible with an IOMMU.
+|24 апреля 2019
+|13.0-CURRENT после того, как LinuxKPI использует man:bus_dma[9] для совместимости с IOMMU.
|1300022
|link:https://svnweb.freebsd.org/changeset/base/347089[347089]
-|May 4, 2019
-|13.0-CURRENT after fixing regression issue after link:https://svnweb.freebsd.org/changeset/base/346645[346645] in the LinuxKPI.
+|4 мая 2019
+|13.0-CURRENT после исправления регрессии, возникшей после link:https://svnweb.freebsd.org/changeset/base/346645[346645] в LinuxKPI.
|1300023
|link:https://svnweb.freebsd.org/changeset/base/347192[347192]
-|May 6, 2019
-|13.0-CURRENT after list-ifying kernel dump device configuration.
+|6 мая 2019
+|13.0-CURRENT после преобразования конфигурации устройства дампа ядра в список.
|1300024
|link:https://svnweb.freebsd.org/changeset/base/347325[347325]
-|May 8, 2019
-|13.0-CURRENT after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4]).
+|8 мая 2019
+|13.0-CURRENT после увеличения номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4]).
|1300025
|link:https://svnweb.freebsd.org/changeset/base/347532[347532]
-|May 13, 2019
-|13.0-CURRENT after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type.
+|13 мая 2019
+|13.0-CURRENT после переименования `vm.max_wired` в `vm.max_user_wired` и изменения его типа.
|1300026
|link:https://svnweb.freebsd.org/changeset/base/347596[347596]
-|May 14, 2019
-|13.0-CURRENT after adding context member to ww_mutex in LinuxKPI.
+|14 мая 2019
+|13.0-CURRENT после добавления члена контекста к ww_mutex в LinuxKPI.
|1300027
|link:https://svnweb.freebsd.org/changeset/base/347601[347601]
-|May 14, 2019
-|13.0-CURRENT after adding prepare to pm_ops in LinuxKPI.
+|14 мая 2019
+|13.0-CURRENT после добавления prepare в `pm_ops` в 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.
+|17 мая 2019
+|13.0-CURRENT после удаления драйверов `bm`, `cs`, de, ed, `ep`, ex, `fe`, `pcn`, sf, `sn`, `tl`, `tx`, `txp`, `vx`, `wb` и xe.
|1300029
|link:https://svnweb.freebsd.org/changeset/base/347984[347984]
-|May 20, 2019
-|13.0-CURRENT after removing some header pollution due to `sys/eventhandler.h`. Affected files may now need to explicitly include one or more of `sys/eventhandler.h`, `sys/ktr.h`, `sys/lock.h`, or `sys/mutex.h`, when the missing header may have been included implicitly prior to 1300029.
+|20 мая 2019
+|13.0-CURRENT после удаления некоторых загрязнений заголовков из-за [.filename]#sys/eventhandler.h#. Затронутые файлы теперь могут требовать явного включения одного или нескольких заголовков: [.filename]#sys/eventhandler.h#, [.filename]#sys/ktr.h#, [.filename]#sys/lock.h# или [.filename]#sys/mutex.h#, тогда как ранее они могли включаться неявно до версии 1300029.
|1300030
|link:https://svnweb.freebsd.org/changeset/base/348350[348350]
-|May 29, 2019
-|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].
+|29 мая 2019
+|13.0-CURRENT после добавления поддержки перемещения в libdwarf на powerpc64 для исправления обработки DWARF-информации в несвязанных объектах. Оригинальный коммит в ссылке:https://svnweb.freebsd.org/changeset/base/348347[348347].
|1300031
|link:https://svnweb.freebsd.org/changeset/base/348808[348808]
-|June 8, 2019
-|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.
+|8 июня 2019
+|13.0-CURRENT после добавления исправлений разделов dpcpu и vnet в модули ядра i386 для предотвращения паники в определённых условиях. Модули ядра i386 необходимо перекомпилировать с включёнными изменениями в скрипт компоновщика, иначе они откажутся загружаться.
|1300032
|link:https://svnweb.freebsd.org/changeset/base/349151[349151]
-|June 17, 2019
-|13.0-CURRENT after separating kernel crc32() implementation to its own header (gsb_crc32.h) and renaming the source to gsb_crc32.c.
+|17 июня 2019
+|13.0-CURRENT после выделения реализации `crc32()` ядра в отдельный заголовочный файл ([.filename]#gsb_crc32.h#) и переименования исходного файла в [.filename]#gsb_crc32.c#.
|1300033
|link:https://svnweb.freebsd.org/changeset/base/349277[349277]
|June 21, 2019
-|13.0-CURRENT after additions to LinuxKPI's rcu list.
+|13.0-CURRENT после добавлений в список `rcu` LinuxKPI.
|1300034
|link:https://svnweb.freebsd.org/changeset/base/349352[349352]
-|June 24, 2019
-|13.0-CURRENT after NAND and NANDFS removal.
+|24 июня 2019
+|13.0-CURRENT после удаления NAND и NANDFS.
|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.
+|8 июля 2019
+|13.0-CURRENT после объединения механизмов удержания и фиксации `vm_page`.
|1300036
|link:https://svnweb.freebsd.org/changeset/base/349972[349972]
-|July 13, 2019
-|13.0-CURRENT after adding arm_drain_writebuf() and arm_sync_icache() for compatibility with NetBSD and OpenBSD.
+|13 июля 2019
+|13.0-CURRENT после добавления `arm_drain_writebuf()` и `arm_sync_icache()` для совместимости с NetBSD и OpenBSD.
|1300037
|link:https://svnweb.freebsd.org/changeset/base/350307[350307]
-|July 24, 2019
-|13.0-CURRENT after removal of libcap_random(3).
+|24 июля 2019
+|13.0-CURRENT после удаления man:libcap_random[3].
|1300038
|link:https://svnweb.freebsd.org/changeset/base/350437[350437]
-|July 30, 2019
-|13.0-CURRENT after removal of gzip'ed a.out support.
+|30 июля 2019
+|13.0-CURRENT после удаления поддержки gzip'ed a.out.
|1300039
|link:https://svnweb.freebsd.org/changeset/base/350665[350665]
-|August 7, 2019
-|13.0-CURRENT after merge of fusefs from projects/fuse2.
+|7 августа 2019
+|13.0-CURRENT после объединения fusefs из projects/fuse2.
|1300040
|link:https://svnweb.freebsd.org/changeset/base/351140[351140]
-|August 16, 2019
-|13.0-CURRENT after deletion of sys/dir.h which has been deprecated since 1997.
+|16 августа 2019
+|13.0-CURRENT после удаления [.filename]#sys/dir.h#, который был устаревшим с 1997 года.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/351423[351423]
-|August 23, 2019
-|13.0-CURRENT after changing most arguments to man:ping6[8].
+|23 августа 2019
+|13.0-CURRENT после изменения большинства аргументов в man:ping6[8].
|1300041
|link:https://svnweb.freebsd.org/changeset/base/351480[351480]
-|August 25, 2019
-|13.0-CURRENT after removal of zlib 1.0.4 after the completion of kernel zlib unification.
+|25 августа 2019
+|13.0-CURRENT после удаления zlib 1.0.4 по завершении унификации zlib в ядре.
|1300042
|link:https://svnweb.freebsd.org/changeset/base/351522[351522]
-|August 27, 2019
-|13.0-CURRENT after addition of kernel-side support for in-kernel TLS.
+|27 августа 2019
+|13.0-CURRENT после добавления поддержки TLS внутри ядра на уровне ядра.
|1300043
|link:https://svnweb.freebsd.org/changeset/base/351698[351698]
-|September 2, 2019
-|13.0-CURRENT after removal of man:gets[3].
+|2 сентября 2019
+|13.0-CURRENT после удаления man:gets[3].
|1300044
|link:https://svnweb.freebsd.org/changeset/base/351701[351701]
-|September 2, 2019
-|13.0-CURRENT after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI.
+|2 сентября 2019
+|13.0-CURRENT после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов, в LinuxKPI.
|1300045
|link:https://svnweb.freebsd.org/changeset/base/351729[351729]
-|September 3, 2019
-|13.0-CURRENT after adding sysctlbyname system call
+|3 сентября 2019
+|13.0-CURRENT после добавления системного вызова man:sysctlbyname[3].
|1300046
|link:https://svnweb.freebsd.org/changeset/base/351937[351937]
-|September 6, 2019
-|13.0-CURRENT after LinuxKPI sysfs improvements.
+|6 сентября 2019
+|13.0-CURRENT после улучшений LinuxKPI sysfs.
|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..
+|9 сентября 2019
+|13.0-CURRENT после изменения правил синхронизации для подсчета ссылок `vm_page`.
|1300048
|link:https://svnweb.freebsd.org/changeset/base/352700[352700]
-|September 25, 2019
-|13.0-CURRENT after adding a shm_open2 syscall to support the upcoming memfd_create syscall.
+|25 сентября 2019
+|13.0-CURRENT после добавления системного вызова shm_open2 для поддержки готовящегося системного вызова man:memfd_create[2].
|1300049
|link:https://svnweb.freebsd.org/changeset/base/353274[353274]
-|October 7, 2019
-|13.0-CURRENT after factoring out the VNET shutdown check into an own vnet structure field.
+|7 октября 2019
+|13.0-CURRENT после вынесения проверки отключения VNET в отдельное поле структуры vnet.
|1300050
|link:https://svnweb.freebsd.org/changeset/base/353358[353358]
-|October 9, 2019
-|13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316.
+|9 октября 2019
+|13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316.
|1300051
|link:https://svnweb.freebsd.org/changeset/base/353685[353685]
-|October 17, 2019
-|13.0-CURRENT after splitting out a more generic debugnet(4) from man:netdump[4].
+|17 октября 2019
+|13.0-CURRENT после выделения более универсального man:debugnet[4] из man:netdump[4].
|1300052
|link:https://svnweb.freebsd.org/changeset/base/353698[353698]
-|October 17, 2019
-|13.0-CURRENT after promoting the page busy field to a first class lock that no longer requires the object lock for consistency.
+|17 октября 2019
+|13.0-CURRENT после преобразования поля busy page в полноценную блокировку, которая больше не требует блокировки объекта для обеспечения согласованности.
|1300053
|link:https://svnweb.freebsd.org/changeset/base/353700[353700]
-|October 17, 2019
-|13.0-CURRENT after implementing NetGDB.
+|17 октября 2019
+|13.0-CURRENT после реализации NetGDB.
|1300054
|link:https://svnweb.freebsd.org/changeset/base/353868[353868]
-|October 21, 2019
-|13.0-CURRENT after removing obsoleted KPIs that were used to access interface address lists.
+|21 октября 2019
+|13.0-CURRENT после удаления устаревших KPIs, которые использовались для доступа к спискам адресов интерфейсов.
|1300055
|link:https://svnweb.freebsd.org/changeset/base/354335[354335]
-|November 4, 2019
-|13.0-CURRENT after enabling device class group attributes in the LinuxKPI.
+|4 ноября 2019
+|13.0-CURRENT после включения атрибутов группы классов устройств в LinuxKPI.
|1300056
|link:https://svnweb.freebsd.org/changeset/base/354460[354460]
-|November 7, 2019
-|13.0-CURRENT after fixing a potential OOB read security issue in libc++.
+|7 ноября 2019
+|13.0-CURRENT после исправления потенциальной проблемы безопасности с чтением за границами в libc++.
|1300057
|link:https://svnweb.freebsd.org/changeset/base/354694[354694]
-|November 13, 2019
-|13.0-CURRENT after adding support for AT_EXECPATH to elf_aux_info(3).
+|13 ноября 2019
+|13.0-CURRENT после добавления поддержки `AT_EXECPATH` в man:elf_aux_info[3].
|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.
+|18 ноября 2019
+|13.0-CURRENT после расширения поля `aflags` в `vm_page` до 16 бит.
|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#.
+|18 ноября 2019
+|13.0-CURRENT после преобразования встроенных целей `sysent` для использования нового [.filename]#makesyscalls.lua#.
|1300060
|link:https://svnweb.freebsd.org/changeset/base/354922[354922]
-|November 20, 2019
-|13.0-CURRENT after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#.
+|20 ноября 2019
+|13.0-CURRENT после добавления символической ссылки [.filename]#/etc/os-release# на [.filename]#/var/run/os-release#.
|1300061
|link:https://svnweb.freebsd.org/changeset/base/354977[354977]
-|November 21, 2019
-|13.0-CURRENT after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits.
+|21 ноября 2019
+|13.0-CURRENT после добавления функций в man:bitstring[3] для поиска непрерывных последовательностей установленных или сброшенных битов.
|1300062
|link:https://svnweb.freebsd.org/changeset/base/355309[355309]
-|December 2, 2019
-|13.0-CURRENT after adding TCP_STATS support.
+|2 декабря 2019
+|13.0-CURRENT после добавления поддержки TCP_STATS.
|1300063
|link:https://svnweb.freebsd.org/changeset/base/355537[355537]
-|December 8, 2019
-|13.0-CURRENT after removal of VI_DOOMED (use VN_IS_DOOMED instead).
+|8 декабря 2019
+|13.0-CURRENT после удаления VI_DOOMED (используйте VN_IS_DOOMED вместо этого).
|1300064
|link:https://svnweb.freebsd.org/changeset/base/355658[355658]
-|December 9, 2019
-|13.0-CURRENT after correcting the C++ version check for declaring man:timespec_get[3].
+|9 декабря 2019
+|13.0-CURRENT после исправления проверки версии C++ для объявления man:timespec_get[3].
|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.
+|12 декабря 2019
+|13.0-CURRENT после добавления расширений `sigsetop`, которые обычно встречаются в musl libc и glibc.
|1300066
|link:https://svnweb.freebsd.org/changeset/base/355679[355679]
-|December 12, 2019
-|13.0-CURRENT after changing the internal interface between the NFS modules as part of the introduction of NFS 4.2.
+|12 декабря 2019
+|13.0-CURRENT после изменения внутреннего интерфейса между модулями NFS в рамках внедрения NFS 4.2.
|1300067
|link:https://svnweb.freebsd.org/changeset/base/355732[355732]
-|December 13, 2019
-|13.0-CURRENT after removing the deprecated `callout_handle_init`, `timeout`, and `untimeout` functions.
+|13 декабря 2019
+|13.0-CURRENT после удаления устаревших функций `callout_handle_init`, `timeout` и `untimeout`.
|1300068
|link:https://svnweb.freebsd.org/changeset/base/355828[355828]
-|December 16, 2019
-|13.0-CURRENT after doubling the value of `ARG_MAX`, for 64 bit platforms.
+|16 декабря 2019
+|13.0-CURRENT после удвоения значения `ARG_MAX` для 64-битных платформ.
|1300069
|link:https://svnweb.freebsd.org/changeset/base/356051[356051]
-|December 24, 2019
-|13.0-CURRENT after the addition of busdma templates.
+|24 декабря 2019
+|13.0-CURRENT после добавления шаблонов busdma.
|1300070
|link:https://svnweb.freebsd.org/changeset/base/356113[356113]
-|December 27, 2019
-|13.0-CURRENT after eliminating the last MI difference in AT_* definitions (for powerpc).
+|27 декабря 2019
+|13.0-CURRENT после устранения последнего различия MI в определениях AT_* (для powerpc).
|1300071
|link:https://svnweb.freebsd.org/changeset/base/356135[356135]
-|December 27, 2019
-|13.0-CURRENT after making USB statistics be per-device instead of per bus.
+|27 декабря 2019
+|13.0-CURRENT после изменения статистики USB для каждого устройства вместо каждой шины.
|1300072
|link:https://svnweb.freebsd.org/changeset/base/356185[356185]
-|December 29, 2019
-|13.0-CURRENT after removal of GEOM_SCHED class and gsched tool.
+|29 декабря 2019
+|13.0-CURRENT после удаления класса `GEOM_SCHED` и утилиты `gsched`.
|1300073
|link:https://svnweb.freebsd.org/changeset/base/356263[356263]
-|January 2, 2020
-|13.0-CURRENT after removing arm/arm as a valid target.
+|2 января 2020
+|13.0-CURRENT после удаления arm/arm как допустимой цели.
|1300074
|link:https://svnweb.freebsd.org/changeset/base/356337[356337]
-|January 3, 2020
-|13.0-CURRENT after removing flags argument from VOP_UNLOCK.
+|3 января 2020
+|13.0-CURRENT после удаления аргумента flags из `VOP_UNLOCK`.
|1300075
|link:https://svnweb.freebsd.org/changeset/base/356409[356409]
-|January 6, 2020
-|13.0-CURRENT after adding own counter for cancelled USB transfers.
+|6 января 2020
+|13.0-CURRENT после добавления собственного счетчика отмененных USB-передач.
|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 posix_fallocate.
+|8 января 2020
+|13.0-CURRENT после внедрения реализации `vnop` в слой `fileop` в man:posix_fallocate[2].
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/357396[357396]
-|February 2, 2020
-|13.0-CURRENT after removal of armv5 architecture code from the src tree.
+|2 февраля 2020
+|13.0-CURRENT после удаления кода архитектуры armv5 из дерева src.
|1300077
|link:https://svnweb.freebsd.org/changeset/base/357455[357455]
-|February 3, 2020
-|13.0-CURRENT after removal of sparc64 architecture code from the src tree.
+|3 февраля 2020
+|13.0-CURRENT после удаления кода архитектуры sparc64 из дерева src.
|1300078
|link:https://svnweb.freebsd.org/changeset/base/358020[358020]
-|February 17, 2020
-|13.0-CURRENT after changing `struct vnet` and the VNET magic cookie.
+|17 февраля 2020
+|13.0-CURRENT после изменения `struct vnet` и волшебного cookie VNET.
|1300079
|link:https://svnweb.freebsd.org/changeset/base/358164[358164]
-|February 20, 2020
-|13.0-CURRENT after upgrading ncurses to 6.2.x
+|20 февраля 2020
+|13.0-CURRENT после обновления ncurses до версии 6.2.x
|1300080
|link:https://svnweb.freebsd.org/changeset/base/358172[358172]
-|February 20, 2020
-|13.0-CURRENT after adding realpathat syscall to VFS.
+|20 февраля 2020
+|13.0-CURRENT после добавления системного вызова `realpathat` в VFS.
|1300081
|link:https://svnweb.freebsd.org/changeset/base/358218[358218]
-|February 21, 2020
-|13.0-CURRENT after after recent linuxkpi changes.
+|21 февраля 2020
+|13.0-CURRENT после недавних изменений в linuxkpi.
|1300082
|link:https://svnweb.freebsd.org/changeset/base/358497[358497]
-|March 1, 2020
-|13.0-CURRENT after removal of man:bktr[4].
+|1 марта 2020
+|13.0-CURRENT после удаления man:bktr[4].
|1300083
|link:https://svnweb.freebsd.org/changeset/base/358834[358834]
-|March 10, 2020
-|13.0-CURRENT after removal of man:amd[8], r358821.
+|10 марта 2020
+|13.0-CURRENT после удаления man:amd[8], r358821.
|1300084
|link:https://svnweb.freebsd.org/changeset/base/358851[358851]
-|March 10, 2020
-|13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0-rc3 c290cb61fdc.
+|10 марта 2020
+|13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0-rc3 c290cb61fdc.
|1300085
|link:https://svnweb.freebsd.org/changeset/base/359261[359261]
-|March 23, 2020
-|13.0-CURRENT after the import of the kyua test framework.
+|23 марта 2020
+|13.0-CURRENT после импорта тестового фреймворка kyua.
|1300086
|link:https://svnweb.freebsd.org/changeset/base/359347[359347]
-|March 26, 2020
-|13.0-CURRENT after switching powerpc and powerpcspe to the lld linker.
+|26 марта 2020
+|13.0-CURRENT после переключения powerpc и powerpcspe на компоновщик lld.
|1300087
|link:https://svnweb.freebsd.org/changeset/base/359374[359374]
-|March 27, 2020
-|13.0-CURRENT after refactoring the driver and consumer interfaces for in-kernel cryptography.
+|27 марта 2020
+|13.0-CURRENT после рефакторинга интерфейсов драйвера и потребителя для внутриядерного шифрования.
|1300088
|link:https://svnweb.freebsd.org/changeset/base/359530[359530]
-|April 1, 2020
-|13.0-CURRENT after removing support for procfs process debugging.
+|1 апреля 2020
+|13.0-CURRENT после удаления поддержки отладки процессов через procfs.
|1300089
|link:https://svnweb.freebsd.org/changeset/base/359727[359727]
-|April 8, 2020
-|13.0-CURRENT after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI.
+|8 апреля 2020
+|13.0-CURRENT после разделения интерфейса RCU на части с возможностью ожидания и без неё в LinuxKPI.
|1300090
|link:https://svnweb.freebsd.org/changeset/base/359747[359747]
-|April 9, 2020
-|13.0-CURRENT after removing the old NFS lock device driver that uses Giant.
+|9 апреля 2020
+|13.0-CURRENT после удаления старого драйвера устройства блокировки NFS, использующего Giant.
|1300091
|link:https://svnweb.freebsd.org/changeset/base/359839[359839]
-|April 12, 2020
-|13.0-CURRENT after implementing a close_range(2) syscall.
+|12 апреля 2020
+|13.0-CURRENT после реализации системного вызова man:close_range[2].
|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.
+|14 апреля 2020
+|13.0-CURRENT после переработки немэппированных mbuf в KTLS для хранения `ext_pgs` в самом mbuf.
|1300093
|link:https://svnweb.freebsd.org/changeset/base/360418[360418]
-|April 27, 2020
-|13.0-CURRENT after adding support for kernel TLS receive offload.
+|27 апреля 2020
+|13.0-CURRENT после добавления поддержки выгрузки приема TLS в ядре.
|1300094
|link:https://svnweb.freebsd.org/changeset/base/360796[360796]
-|May 7, 2020
-|13.0-CURRENT after linuxkpi changes.
+|7 мая 2020
+|13.0-CURRENT после изменений в linuxkpi.
|1300095
|link:https://svnweb.freebsd.org/changeset/base/361275[361275]
-|May 20, 2020
-|13.0-CURRENT after adding HyperV socket support for FreeBSD guests.
+|20 мая 2020
+|13.0-CURRENT после добавления поддержки сокетов HyperV для гостевых систем FreeBSD.
|1300096
|link:https://svnweb.freebsd.org/changeset/base/361410[361410]
-|May 23, 2020
-|13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 rc1 f79cd71e145.
+|23 мая 2020
+|13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1 rc1 f79cd71e145.
|1300097
|link:https://svnweb.freebsd.org/changeset/base/361724[361724]
-|June 2, 2020
-|13.0-CURRENT after implementing __is_constexpr() function macro in the LinuxKPI.
+|2 июня 2020
+|13.0-CURRENT после реализации макроса функции `__is_constexpr()` в LinuxKPI.
|1300098
|link:https://svnweb.freebsd.org/changeset/base/362159[362159]
-|June 14, 2020
-|13.0-CURRENT after changing the `export_args ex_flags` field so that is 64bits.
+|14 июня 2020
+|13.0-CURRENT после изменения поля `export_args ex_flags`, чтобы оно было 64-битным.
|1300099
|link:https://svnweb.freebsd.org/changeset/base/362453[362453]
-|June 20, 2020
-|13.0-CURRENT after making liblzma use libmd implementation of SHA256.
+|20 июня 2020
+|13.0-CURRENT после перевода liblzma на использование реализации SHA256 из libmd.
|1300100
|link:https://svnweb.freebsd.org/changeset/base/362640[362640]
|June 26, 2020
-|13.0-CURRENT after changing the internal API between the NFS kernel modules.
+|13.0-CURRENT после изменения внутреннего API между модулями ядра NFS.
|1300101
|link:https://svnweb.freebsd.org/changeset/base/363077[363077]
-|July 10, 2020
-|13.0-CURRENT after implementing the array_size() function in the LinuxKPI.
+|10 июля 2020
+|13.0-CURRENT после реализации функции `array_size()` в LinuxKPI.
|1300102
|link:https://svnweb.freebsd.org/changeset/base/363562[363562]
-|July 26, 2020
-|13.0-CURRENT after implementing lockless lookup in the VFS layer.
+|26 июля 2020
+|13.0-CURRENT после реализации бесблокировочного поиска в слое VFS.
|1300103
|link:https://svnweb.freebsd.org/changeset/base/363757[363757]
-|August 1, 2020
-|13.0-CURRENT after making rights mandatory for NDINIT_ALL.
+|1 августа 2020
+|13.0-CURRENT после того, как права для NDINIT_ALL стали обязательными.
|1300104
|link:https://svnweb.freebsd.org/changeset/base/363783[363783]
-|August 2, 2020
-|13.0-CURRENT after vnode layout changes.
+|2 августа 2020
+|13.0-CURRENT после изменений в структуре vnode.
|1300105
|link:https://svnweb.freebsd.org/changeset/base/363894[363894]
-|August 5, 2020
-|13.0-CURRENT after vaccess() change.
+|5 августа 2020
+|13.0-CURRENT после изменения `vaccess()`.
|1300106
|link:https://svnweb.freebsd.org/changeset/base/364092[364092]
-|August 11, 2020
-|13.0-CURRENT after adding an argument to newnfs_connect() that indicates use TLS for the connection.
+|11 августа 2020
+|13.0-CURRENT после добавления аргумента в `newnfs_connect()`, указывающего на использование TLS для соединения.
|1300107
|link:https://svnweb.freebsd.org/changeset/base/364109[364109]
-|August 11, 2020
-|13.0-CURRENT after change to clone the task struct fields related to RCU.
+|11 августа 2020
+|13.0-CURRENT после изменения для клонирования полей структуры задачи, связанных с RCU.
|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.
+|14 августа 2020
+|13.0-CURRENT после добавления нескольких функций `wait_bit` в linuxkpi, которые необходимы для DRM из 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.
+|16 августа 2020
+|13.0-CURRENT после удаления аргумента `vget()` и перенумерации флагов `namei`.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/364284[364284]
-|August 16, 2020
-|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.
+|16 августа 2020
+|13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии release/11.x llvmorg-11.0.0-rc1-47-gff47911ddfc.
|1300110
|link:https://svnweb.freebsd.org/changeset/base/364331[364331]
-|August 18, 2020
-|13.0-CURRENT after deleting the unused `use_ext` argument to `nfscl_reqstart()`.
+|18 августа 2020
+|13.0-CURRENT после удаления неиспользуемого аргумента `use_ext` в `nfscl_reqstart()`.
|1300111
|link:https://svnweb.freebsd.org/changeset/base/364476[364476]
-|August 22, 2020
-|13.0-CURRENT after adding TLS support to the kernel RPC.
+|22 августа 2020
+|13.0-CURRENT после добавления поддержки TLS в RPC ядра.
|1300112
|link:https://svnweb.freebsd.org/changeset/base/364747[364747]
|August 25, 2020
-|13.0-CURRENT after merging OpenZFS support.
+|13.0-CURRENT после объединения поддержки OpenZFS.
|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 после добавления атомарных функций и функций `bswap` в libcompiler_rt.
|1300114
|link:https://svnweb.freebsd.org/changeset/base/365459[365459]
-|September 8, 2020
-|13.0-CURRENT after changing arm64 AT_HWCAP definitions for elf_aux_info(3).
+|8 сентября 2020
+|13.0-CURRENT после изменения определений AT_HWCAP для arm64 в man:elf_aux_info[3].
|1300115
|link:https://svnweb.freebsd.org/changeset/base/365705[365705]
-|September 14, 2020
-|13.0-CURRENT after fixing man:crunchgen[1] application build with `WARNS=6`.
+|14 сентября 2020
+|13.0-CURRENT после исправления сборки приложения man:crunchgen[1] с `WARNS=6`.
+
+|1300116
+|link:https://svnweb.freebsd.org/changeset/base/366062[366062]
+|22 сентября 2020
+|13.0-CURRENT после введения архитектуры powerpc64le.
+
+|1300117
+|link:https://svnweb.freebsd.org/changeset/base/366070[366070]
+|23 сентября 2020
+|13.0-CURRENT после перереализации `purgevfs` для итерации по vnodes вместо всего хэша.
+
+|1300118
+|link:https://svnweb.freebsd.org/changeset/base/366374[366374]
+|2 октября 2020
+|13.0-CURRENT после добавления поддержки подсветки и функций `dmi_*` в linuxkpi.
+
+|1300119
+|link:https://svnweb.freebsd.org/changeset/base/366432[366432]
+|6 октября 2020
+|13.0-CURRENT после заполнения поля контекста получения `ww_mutex` в LinuxKPI.
+
+|1300120
+|link:https://svnweb.freebsd.org/changeset/base/366666[366666]
+|13 октября 2020
+|13.0-CURRENT после исправления отображений только для записи на arm64.
+
+|1300121
+|link:https://svnweb.freebsd.org/changeset/base/366719[366719]
+|15 октября 2020
+|13.0-CURRENT после добавления `VOP_EAGAIN`.
+
+|1300122
+|link:https://svnweb.freebsd.org/changeset/base/366782[366782]
+|17 октября 2020
+|13.0-CURRENT после добавления `ptsname_r`.
+
+|1300123
+|link:https://svnweb.freebsd.org/changeset/base/366871[366871]
+|20 октября 2020
+|13.0-CURRENT после изменений `VOP`, `VPTOCNP` и `INACTIVE`.
+
+|1300124
+|link:https://svnweb.freebsd.org/changeset/base/367162[367162]
+|30 октября 2020
+|13.0-CURRENT после добавления `cache_vop_mkdir` и переименования `cache_rename` в `cache_vop_rename`.
+
+|1300125
+|link:https://svnweb.freebsd.org/changeset/base/367347[367347]
+|4 ноября 2020
+|13.0-CURRENT после использования блокировки `rms` для обработки демонтажа в `zfs`.
+
+|1300126
+|link:https://svnweb.freebsd.org/changeset/base/367384[367384]
+|5 ноября 2020
+|13.0-CURRENT после оптимизации зон на каждый процессор.
+
+|1300127
+|link:https://svnweb.freebsd.org/changeset/base/367432[367432]
+|6 ноября 2020
+|13.0-CURRENT после перемещения `malloc_type_internal` в `malloc_type`.
+
+|1300128
+|link:https://svnweb.freebsd.org/changeset/base/367522[367522]
+|9 ноября 2020
+|13.0-CURRENT после добавлений LinuxKPI для реализации частей ACPI, необходимых `drm-kmod` в базовой системе.
+
+|1300129
+|link:https://svnweb.freebsd.org/changeset/base/367627[367627]
+|12 ноября 2020
+|13.0-CURRENT после удаления `malloc_last_fail`.
+
+|1300130
+|link:https://svnweb.freebsd.org/changeset/base/367777[367777]
+|17 ноября 2020
+|13.0-CURRENT после разделения `p_pd` / `pwddesc` и `p_fd` / filedesc.
+
+|1300131
+|link:https://svnweb.freebsd.org/changeset/base/368417[368417]
+|7 декабря 2020
+|13.0-CURRENT после удаления криптографических файловых дескрипторов.
+
+|1300132
+|link:https://svnweb.freebsd.org/changeset/base/368659[368659]
+|15 декабря 2020
+|13.0-CURRENT после улучшения обработки альтернативных настроек в стеке USB.
+
+|1300133
+|gitref:2ed0c8d801f5f72dbde7a7d30135c1cc361a1e90[repository="src",length=12]
+|23 декабря 2020
+|13.0-CURRENT после изменения внутреннего API между модулями NFS и RPC ядра.
+
+|1300134
+|gitref:a84b0e94cdbf1a17a798ab7f77375aacb4d400ff[repository="src",length=12]
+|7 января 2021
+|13.0-CURRENT после выделения аппаратно-независимой части поддержки USB HID в новый модуль.
+
+|1300135
+|gitref:35a39dc5b34962081eeda8dbcf0b99a31585499b[repository="src",length=12]
+|12 января 2021
+|13.0-CURRENT после добавления `kernel_fpu_begin`/`kernel_fpu_end` в LinuxKPI.
+
+|1300136
+|gitref:72c551930be195b5ea982c1b16767f54388424f2[repository="src",length=12]
+|17 января 2021
+|13.0-CURRENT после переработки очереди `irq_work` в LinuxKPI на основе быстрой `taskqueue`.
+
+|1300137
+|gitref:010196adcfaf2bb610725394d40691874b4ff2af[repository="src",length=12]
+|30 января 2021
+|13.0-CURRENT после исправления утверждения clang при сборке порта package:devel/onetbb[].
+
+|1300138
+|gitref:dcee9964238b12a8e55917f292139f074b1a80b2[repository="src",length=12]
+|1 февраля 2021
+|13.0-ALPHA3 после добавления блокировки при поиске символьных ссылок в кэше VFS.
+
+|1300139
+|gitref:91a07ed50ffca4dfada3e7f1f050ea746c1bac66[repository="src",length=12]
+|2 февраля 2021
+|13.0-ALPHA3 после добавления различных компонентов LinuxKPI, конфликтующих с drm-kmod.
+
+|1300500
+|gitref:3c6a89748a01869c18955d5e3bfcdf35f6705d26[repository="src",length=12]
+|5 февраля 2021
+|13.0-STABLE после ветвления releng/13.0.
+
+|1300501
+|gitref:c3f97dd75a1c294c4f60f42b604ee8bcda17be09[repository="src",length=12]
+|23 апреля 2021
+|13.0-STABLE после исправления `dl_iterate_phdr()` в rtld.
+
+|1300501
+|gitref:c3f97dd75a1c294c4f60f42b604ee8bcda17be09[repository="src",length=12]
+|23 апреля 2021
+|13.0-STABLE после исправления `dl_iterate_phdr()` в rtld.
+
+|1300502
+|gitref:da6a8ccfa293c3c831fdde51169754fcb9587657[repository="src",length=12]
+|23 апреля 2021
+|13.0-STABLE после реализации `atomic_dec_and_lock_irqsave()` в LinuxKPI.
+
+|1300503
+|gitref:d60c6dc8f69b1264c7af5e2479ea94f000fd2c6d[repository="src",length=12]
+|23 апреля 2021
+|13.0-STABLE после изменения внутреннего KAPI между krpc и NFS.
+
+|1300504
+|gitref:fb34817c686cc130449325499870e36979899801[repository="src",length=12]
+|30 апреля 2021
+|13.0-STABLE после обновления LinuxKPI для поддержки обновления drm-kmod 5.5.
+
+|1300505
+|gitref:8f81f190a640e211dd814bdde7811982b9491fb0[repository="src",length=12]
+|10 мая 2021
+|13.0-STABLE после изменения внутреннего KAPI между модулями nscl.ko и nfscommon.ko.
+
+|1300506
+|gitref:e31579b8558db508dfc3f8fc276611a7c3c93aa1[repository="src",length=12]
+|2 июня 2021
+|13.0-STABLE после добавления поддержки TCP LRO для VLAN и VxLAN.
+
+|1300507
+|gitref:c64d1bd7145b5d30c97d1cd99e584da529d95100[repository="src",length=12]
+|2 июня 2021
+|13.0-STABLE после добавления нового элемента в структуру отслеживания man:EPOCH[9].
+
+|1300508
+|gitref:658f5eed38c35f3f7d6695110b7dae8dc94d12c7[repository="src",length=12]
+|11 июня 2021
+|13.0-STABLE после добавления макросов для `might_lock_nested()` и `lockdep_(re/un/)pin_lock()` в LinuxKPI.
+
+|1300509
+|gitref:210349325af9920d1535ad76fa3b92847684f6e0[repository="src",length=12]
+|14 июня 2021
+|13.0-STABLE после добавления макроса `list_for_each_entry_lockless()` в LinuxKPI.
+
+|1300510
+|gitref:eb3397588e1b48043e166587ea454f60efea88d0[repository="src",length=12]
+|26 июня 2021
+|13.0-STABLE после изменения внутреннего KAPI между модулями krpc и nfsd.
+
+|1300511
+|gitref:2622570aeb3d162812d72f7ef192c322cd8b73ef[repository="src",length=12]
+|7 июля 2021
+|13.0-STABLE после изменения `softdep_prelink()` для выполнения синхронизации только в случае, если другой поток изменил метаданные vnode с момента предыдущего `prelink`.
+
+|1300512
+|gitref:f72db34d2295080f57a283858125aa906c0d409e[repository="src",length=12]
+|18 июля 2021
+|13.0-STABLE после различных слияний LinuxKPI, OFED, net80211 и драйверов.
+
+|1300513
+|gitref:af732203b8f7f006927528db5497f5cbc4c4742a[repository="src",length=12]
+|31 июля 2021
+|13.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-12.0.1-0-gfed41342a82f, также известной как релиз 12.0.1.
+
+|1300514
+|gitref:53d162819c20e5cf267cb91f7a19940e96e8bec4[repository="src",length=12]
+|3 августа 2021
+|Несовместимые изменения в KBI внутренних интерфейсов между NFS требуют пересборки модулей.
+
+|1300515
+|gitref:0437d10e359ea1cbefff8d17cd18ca491dbbd5d7[repository="src",length=12]
+|22 сентября 2021
+|13.0-STABLE возвращается к KBI 13.0 для linuxkpi.
+
+|1300518
+|gitref:a017868e281874261a560ba1e3069b4e14b7483e[repository="src",length=12]
+|21 октября 2021
+|13.0-STABLE после добавления `crypto_cursor_segment()`.
+
+|1300519
+|gitref:fe2827f1678b8ff0baf62a1529b2cc121a25b090[repository="src",length=12]
+|21 октября 2021
+|13.0-STABLE после расширения шифров AES-CCM и Chacha20-Poly1305 в OCF для поддержки нескольких длин одноразовых номеров.
+
+|1300521
+|gitref:29745cf91cfc22afa94da0ce43e07a6dc377f631[repository="src",length=12]
+|19 ноября 2021
+|13.0-STABLE после различных слияний с LinuxKPI и net80211.
+
+|1300522
+|gitref:0c8684ae20019b63c6672cc9fa40e1426708b007[repository="src",length=12]
+|24 ноября 2021
+|13.0-STABLE после изменения внутреннего KAPI между модулями NFS.
+
+|(не изменено)
+|gitref:7224d4125ab57bc1c4c799a6c286be42f8d37a83[repository="src",length=12]
+|6 декабря 2021
+|13.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-13.0.0-0-gd7b669b3a303, также известной как релиз 13.0.0.
+
+|1300523
+|gitref:690bcf605d84283c1f9d254885a3cac69c5e80a6[repository="src",length=12]
+|18 декабря 2021
+|13.0-STABLE после добавления двух аргументов в man:VOP_ALLOCATE[9].
+
+|1300524
+|gitref:dc4114875ef10618002d3eeb46f09dc42da56b30[repository="src",length=12]
+|14 января 2022
+|13.0-STABLE после обеспечения совместимости макросов CPU_SET с glibc.
+
+|1300525
+|gitref:dee0854a009cde7dcdb16ba39754237737022c8a[repository="src",length=12]
+|22 января 2022
+|13.0-STABLE после множества изменений LinuxKPI, необходимых для drm-kmod.
+
+|1300526
+|gitref:c39ff2415cb965b729fd16f9eae91e712313877b[repository="src",length=12]
+|20 февраля 2022
+|13.0-STABLE после нескольких изменений LinuxKPI, пересекающихся, но не конфликтующих с drm-kmod.
+
+|1301000
+|gitref:ad329796bdb29c69bce610ad332d08257d7157ac[repository="src",length=12]
+|10 марта 2022
+|Ветка releng/13.1 создана.
+
+|1301500
+|gitref:08523c8c63bbcdcd3f0d36787a544817cb5b8282[repository="src",length=12]
+|10 марта 2022
+|13.1-STABLE после ветвления releng/13.1.
+
+|1301501
+|gitref:6663718bb49635deac3f5dc55fa6f0f7cba593ba[repository="src",length=12]
+|27 марта 2022
+|13.1-STABLE после различных слияний с LinuxKPI и net80211.
+
+|1301502
+|gitref:2278cf4e48e7679b0a60008a83c764fe852174b2[repository="src",length=12]
+|27 апреля 2022
+|13.1-STABLE после различных слияний с LinuxKPI.
+
+|1301503
+|gitref:b2aa64d05bd8b04a1bdb63f2a5f9de39c600b463[repository="src",length=12]
+|19 мая 2022
+|13.1-STABLE после добавления альтернативных макросов DRIVER_MODULE без аргумента devclass.
+
+|1301504
+|gitref:a13b6fc61908fd6afa460b88f94e4a67be74bb9a[repository="src",length=12]
+|4 июня 2022
+|13.1-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-14.0.3-0-g1f9140064dfb, также известной как релиз 14.0.3.
+
+|1301505
+|gitref:6f93a76ffeabf7d4488edc73a0cca01436c2903b[repository="src",length=12]
+|21 июня 2022
+|13.1-STABLE после различных слияний с LinuxKPI.
+
+|1301506
+|gitref:8e6cfc632cf6f9fc906df9d825649443939b55c6[repository="src",length=12]
+|13 июля 2022
+|13.1-STABLE после добавления <crypto/chacha20_poly1305.h> и <crypto/curve25519.h>.
+
+|1301507
+|gitref:9cbba5950123f3afedcc5f24c43956e7a26f22f4[repository="src",length=12]
+|21 июня 2022
+|13.1-STABLE после различных слияний с LinuxKPI.
+
+|1301508
+|gitref:83ac15a799e348c391951f5877feecd4089bab80[repository="src",length=12]
+|17 октября 2022
+|13.1-STABLE после различных слияний в LinuxKPI и для удаления макросов из pause().
+
+|1301509
+|gitref:baa97013121a915057ee54dfcb2cb87e541f7d7f[repository="src",length=12]
+|19 октября 2022
+|13.1-STABLE после введения версии 2 функциональности выбора очереди TX.
+
+|1301510
+|gitref:6820a0512fa6616ee1da46cb0075da80478776f0[repository="src",length=12]
+|8 декабря 2022
+|13.1-STABLE после исправлений LinuxKPI dmi_matches().
+
+|1301511
+|gitref:17333d92643d998d1c6a2dc5f6b1508b6507ad31[repository="src",length=12]
+|17 декабря 2022
+|13.1-STABLE после добавления нового rc: `machine_id` для генерации `/etc/machine-id`.
+
+|1302500
+|gitref:c243de11cf7c4bb3d67bbc1655b149037e5b04f1[repository="src",length=12]
+|9 февраля 2023
+|13.2-STABLE после ветвления releng/13.2.
+
+|1302501
+|gitref:e3068d2655e2aea3e0b462a7298a68d344769ec6[repository="src",length=12]
+|16 февраля 2023
+|13.2-STABLE после добавления `totalram_pages()` в LinuxKPI.
+
+|1302502
+|gitref:5ca371f4f536f9ee9d6c9fb178bf1f7f6de33216[repository="src",length=12]
+|17 февраля 2023
+|13.2-STABLE после различных слияний с LinuxKPI.
+
+|1302503
+|gitref:aaca677fee21f202db4bb974fc5056f4dcbbb598[repository="src",length=12]
+|21 февраля 2023
+|13.2-STABLE после различных слияний с LinuxKPI.
+
+|1302504
+|gitref:d6852eed98ed32ad51120a22aa1ebdf0601917b3[repository="src",length=12]
+|12 марта 2023
+|13.2-STABLE после объединения machine-id в `hostid_save`.
+
+|1302505
+|gitref:85e32e957fcca01d50e29e543584909795c1acef[repository="src",length=12]
+|9 апреля 2023
+|13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-15.0.7-0-g8dfdcc7b7bf6, также известного как релиз 15.0.7.
+
+|1302506
+|gitref:e982b1cf1fe1dc0b84dc24f03d1c21e3fe6bdef3[repository="src",length=12]
+|26 июня 2023
+|13.2-STABLE после различных слияний с LinuxKPI.
+
+|1302507
+|gitref:b2acc21dfbd6fab28b1715c775b43d4914b75e0c[repository="src",length=12]
+|23 июля 2023
+|13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-16.0.6-0-g7cbf1a259152, также известного как релиз 16.0.6.
+
+|1302508
+|gitref:21ccba43f511cc4089899619b5a85e6d83a200dc[repository="src",length=12]
+|6 сентября 2023
+|13.2-STABLE после того, как ptrace начал очищать TDB_BORN во время PT_DETACH.
+
+|1302509
+|gitref:faedeaf7377ba7253c281cf3315b17e0cb979075[repository="src",length=12]
+|2 декабря 2023
+|13.2-STABLE после добавления новой функции VFS под названием `vfs_exjail_clone()`, которая будет использоваться модулем ZFS.
+
+|1302510
+|gitref:45758665781dd63dfa38bcb646d4f36b0a6a104f[repository="src",length=12]
+|7 января 2024
+|13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6.
+
+|1303001
+|gitref:a75a3d7afcc88dc0bc9b2797cce983056acadf10[repository="src",length=12]
+|19 февраля 2024
+|13.3-BETA3 после изменения внутренней структуры `struct ieee80211vap` в net80211.
+
+|1303501
+|gitref:a7e1fc7f620d3341549c1380f550aaafbdb45622[repository="src",length=12]
+|19 февраля 2024
+|13.3-STABLE после изменения внутренней структуры `struct ieee80211vap` в net80211.
+
+|1303502
+|gitref:07839ae99c06fcbebd5da6ead49c160c32046542[repository="src",length=12]
+|23 марта 2024
+|13.3-STABLE после исправления утверждения или падения clang при сборке последних библиотек boost.
+
+|1303503
+|gitref:055e875e6077ed1eb2256c3ab5de59a3f6fbce18[repository="src",length=12]
+|20 апреля 2024
+|13.3-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-18.1.3-0-gc13b7485b879, также известного как релиз 18.1.3.
+
+|1304500
+|gitref:77064cddb94875dc8d9693a93ac25019b7f62c59[repository="src",length=12]
+|1 августа 2024
+|13.4-STABLE после переименования из 13.4-PRERELEASE.
+
+|1304501
+|gitref:b802ab153dd24f468b9bfe33a96c61408e0d0565[repository="src",length=12]
+|1 декабря 2024
+|13.4-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-19.1.4-0-gaadaa00de76e, также известного как релиз 19.1.4.
+
|===
+////
+Template:
+
+|13XXXXX
+|gitref:XXXXXXXX[repository="src",length=12]
+|October 30, 2021
+|13.0-STABLE after XXXXXX.
+////
+
[[versions-12]]
-== FreeBSD 12 Versions
+== Версии FreeBSD 12
[[freebsd-versions-table-12]]
-.FreeBSD 12 `__FreeBSD_version` Values
+.FreeBSD 12 Значения `__FreeBSD_version`
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|1200000
|link:https://svnweb.freebsd.org/changeset/base/302409[302409]
-|July 7, 2016
+|7 июля 2016
|12.0-CURRENT.
|1200001
|link:https://svnweb.freebsd.org/changeset/base/302628[302628]
-|July 12, 2016
-|12.0-CURRENT after removing collation from `[a-z]`-type ranges.
+|12 июля 2016
+|12.0-CURRENT после удаления правил сортировки из диапазонов типа `[a-z]`.
|1200002
|link:https://svnweb.freebsd.org/changeset/base/304395[304395]
-|August 18, 2016
-|12.0-CURRENT after removing unused and obsolete `openbsd_poll` system call.
+|18 августа 2016
+|12.0-CURRENT после удаления неиспользуемого и устаревшего системного вызова `openbsd_poll`.
|1200003
|link:https://svnweb.freebsd.org/changeset/base/304608[304608]
-|August 22, 2016
-|12.0-CURRENT after adding C++11 `thread_local` support in rev link:https://svnweb.freebsd.org/changeset/base/303795[303795].
+|22 августа 2016
+|12.0-CURRENT после добавления поддержки `thread_local` из C++11 в ревизии link:https://svnweb.freebsd.org/changeset/base/303795[303795].
|1200004
|link:https://svnweb.freebsd.org/changeset/base/304752[304752]
-|August 24, 2016
-|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]).
+|24 августа 2016
+|12.0-CURRENT после исправления LC*MASK для man:newlocale[3] и man:querylocale[3] (rev link:https://svnweb.freebsd.org/changeset/base/304703[304703]).
|1200005
|link:https://svnweb.freebsd.org/changeset/base/304789[304789]
-|August 25, 2016
-|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.
+|25 августа 2016
+|12.0-CURRENT после изменения некоторых интерфейсов ioctl в ревизии link:https://svnweb.freebsd.org/changeset/base/304787[304787] между пользовательскими программами iSCSI и ядром.
|1200006
|link:https://svnweb.freebsd.org/changeset/base/305256[305256]
-|September 1, 2016
-|12.0-CURRENT after man:crunchgen[1] META_MODE fix in link:https://svnweb.freebsd.org/changeset/base/305254[305254].
+|1 сентября 2016
+|12.0-CURRENT после исправления META_MODE в man:crunchgen[1] в link:https://svnweb.freebsd.org/changeset/base/305254[305254].
|1200007
|link:https://svnweb.freebsd.org/changeset/base/305421[305421]
-|September 5, 2016
-|12.0-CURRENT after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9].
+|5 сентября 2016
+|12.0-CURRENT после разрешения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9].
|1200008
|link:https://svnweb.freebsd.org/changeset/base/305833[305833]
-|September 15, 2016
-|12.0-CURRENT after removing the 4.3BSD compatible macro `m_copy()` in link:https://svnweb.freebsd.org/changeset/base/305824[305824].
+|15 сентября 2016
+|12.0-CURRENT после удаления совместимого с 4.3BSD макроса `m_copy()` в link:https://svnweb.freebsd.org/changeset/base/305824[305824].
|1200009
|link:https://svnweb.freebsd.org/changeset/base/306077[306077]
-|September 21, 2016
-|12.0-CURRENT after removing `bio_taskqueue()` in link:https://svnweb.freebsd.org/changeset/base/305988[305988].
+|21 сентября 2016
+|12.0-CURRENT после удаления `bio_taskqueue()` в link:https://svnweb.freebsd.org/changeset/base/305988[305988].
|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.
+|23 сентября 2016
+|12.0-CURRENT после монтирования man:msdosfs[5] с поддержкой `longnames` по умолчанию.
|1200011
|link:https://svnweb.freebsd.org/changeset/base/306556[306556]
-|October 1, 2016
-|12.0-CURRENT after adding `fb_memattr` field to `fb_info` in link:https://svnweb.freebsd.org/changeset/base/306555[306555].
+|1 октября 2016
+|12.0-CURRENT после добавления поля `fb_memattr` в `fb_info` в link:https://svnweb.freebsd.org/changeset/base/306555[306555].
|1200012
|link:https://svnweb.freebsd.org/changeset/base/306592[306592]
-|October 2, 2016
-|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]).
+|2 октября 2016
+|12.0-CURRENT после изменений в man:net80211[4] (rev link:https://svnweb.freebsd.org/changeset/base/306590[306590], link:https://svnweb.freebsd.org/changeset/base/306591[306591]).
|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 октября 2016
+|12.0-CURRENT после установки заголовочных файлов, необходимых для разработки с `libzfs_core`.
|1200014
|link:https://svnweb.freebsd.org/changeset/base/307529[307529]
-|October 17, 2016
-|12.0-CURRENT after merging common code in man:rtwn[4] and man:urtwn[4], and adding support for 802.11ac devices.
+|17 октября 2016
+|12.0-CURRENT после объединения общего кода в man:rtwn[4] и man:urtwn[4], а также добавления поддержки устройств 802.11ac.
|1200015
|link:https://svnweb.freebsd.org/changeset/base/308874[308874]
-|November 20, 2016
-|12.0-CURRENT after some ABI change for unbreaking powerpc.
+|20 ноября 2016
+|12.0-CURRENT после некоторого изменения ABI для исправления powerpc.
|1200016
|link:https://svnweb.freebsd.org/changeset/base/309017[309017]
-|November 22, 2016
-|12.0-CURRENT after removing `PG_CACHED`-related fields from `vmmeter`.
+|22 ноября 2016
+|12.0-CURRENT после удаления полей, связанных с `PG_CACHED`, из `vmmeter`.
|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.
+|25 ноября 2016
+|12.0-CURRENT после обновления копий clang, llvm, lldb, compiler-rt и libc++ до версии 3.9.0 и добавления lld 3.9.0.
|1200018
|link:https://svnweb.freebsd.org/changeset/base/309676[309676]
-|December 7, 2016
-|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.
+|7 декабря 2016
+|12.0-CURRENT после добавления члена `ki_moretdname` в структуры `struct kinfo_proc` и `struct kinfo_proc32` для экспорта полного имени потока в пользовательские утилиты.
|1200019
|link:https://svnweb.freebsd.org/changeset/base/310149[310149]
-|December 16, 2016
-|12.0-CURRENT after starting to lay down the foundation for 11ac support.
+|16 декабря 2016
+|12.0-CURRENT после начала закладки основы для поддержки 11ac.
|1200020
|link:https://svnweb.freebsd.org/changeset/base/312087[312087]
-|January 13, 2017
-|12.0-CURRENT after removing `fgetsock` and `fputsock`.
+|13 января 2017
+|12.0-CURRENT после удаления `fgetsock` и `fputsock`.
|1200021
|link:https://svnweb.freebsd.org/changeset/base/313858[313858]
-|February 16, 2017
-|12.0-CURRENT after removing MCA and EISA support.
+|16 февраля 2017
+|12.0-CURRENT после удаления поддержки MCA и EISA.
|1200022
|link:https://svnweb.freebsd.org/changeset/base/314040[314040]
-|February 21, 2017
-|12.0-CURRENT after making the LinuxKPI task struct persistent across system calls.
+|21 февраля 2017
+|12.0-CURRENT после обеспечения сохранности структуры задач LinuxKPI между системными вызовами.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/314373[314373]
-|March 2, 2017
-|12.0-CURRENT after removing System V Release 4 binary compatibility support.
+|2 марта 2017
+|12.0-CURRENT после удаления поддержки бинарной совместимости с System V Release 4.
|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.
+|2 марта 2017
+|12.0-CURRENT после обновления копий clang, llvm, lld, lldb, compiler-rt и libc++ до версии 4.0.0.
|1200024
|link:https://svnweb.freebsd.org/changeset/base/314865[314865]
-|March 7, 2017
-|12.0-CURRENT after removal of [.filename]#pcap-int.h#
+|7 марта 2017
+|12.0-CURRENT после удаления [.filename]#pcap-int.h#
|1200025
|link:https://svnweb.freebsd.org/changeset/base/315430[315430]
-|March 16, 2017
-|12.0-CURRENT after addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header.
+|16 марта 2017
+|12.0-CURRENT после добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#.
|1200026
|link:https://svnweb.freebsd.org/changeset/base/315662[315662]
-|March 16, 2017
-|12.0-CURRENT after hiding `struct inpcb` and `struct tcpcb` from userland.
+|16 марта 2017
+|12.0-CURRENT после скрытия `struct inpcb` и `struct tcpcb` от пользовательского пространства.
|1200027
|link:https://svnweb.freebsd.org/changeset/base/315673[315673]
-|March 21, 2017
-|12.0-CURRENT after making CAM SIM lock optional.
+|21 марта 2017
+|12.0-CURRENT после того, как блокировка CAM SIM стала опциональной.
|1200028
|link:https://svnweb.freebsd.org/changeset/base/316683[316683]
-|April 10, 2017
-|12.0-CURRENT after renaming `smp_no_rendevous_barrier()` to `smp_no_rendezvous_barrier()` in link:https://svnweb.freebsd.org/changeset/base/316648[316648].
+|10 апреля 2017
+|12.0-CURRENT после переименования `smp_no_rendevous_barrier()` в `smp_no_rendezvous_barrier()` в link:https://svnweb.freebsd.org/changeset/base/316648[316648].
|1200029
|link:https://svnweb.freebsd.org/changeset/base/317176[317176]
|April 19, 2017
-|12.0-CURRENT after the removal of `struct vmmeter` from `struct pcpu` from link:https://svnweb.freebsd.org/changeset/base/317061[317061].
+|12.0-CURRENT после удаления `struct vmmeter` из `struct pcpu` в link:https://svnweb.freebsd.org/changeset/base/317061[317061].
|1200030
|link:https://svnweb.freebsd.org/changeset/base/317383[317383]
-|April 24, 2017
-|12.0-CURRENT after removing NATM support including man:en[4], man:fatm[4], man:hatm[4], and man:patm[4].
+|24 апреля 2017
+|12.0-CURRENT после удаления поддержки NATM, включая man:en[4], man:fatm[4], man:hatm[4] и man:patm[4].
|1200031
|link:https://svnweb.freebsd.org/changeset/base/318736[318736]
-|May 23, 2017
-|12.0-CURRENT after types `ino_t`, `dev_t`, `nlink_t` were extended to 64bit and `struct dirent` changed layout (also known as ino64).
+|23 мая 2017
+|12.0-CURRENT после расширения типов `ino_t`, `dev_t`, `nlink_t` до 64 бит и изменения структуры `struct dirent` (также известное как ino64).
|1200032
|link:https://svnweb.freebsd.org/changeset/base/319664[319664]
-|June 8, 2017
-|12.0-CURRENT after removal of `groff`.
+|8 июня 2017
+|12.0-CURRENT после удаления `groff`.
|1200033
|link:https://svnweb.freebsd.org/changeset/base/320043[320043]
-|June 17, 2017
-|12.0-CURRENT after the type of the `struct event` member `data` was increased to 64bit, and ext structure members added.
+|17 июня 2017
+|12.0-CURRENT после того, как тип члена `data` структуры `struct event` был увеличен до 64 бит, и добавлены члены расширенной структуры.
|1200034
|link:https://svnweb.freebsd.org/changeset/base/320085[320085]
-|June 19, 2017
-|12.0-CURRENT after the NFS client and server were changed so that they actually use the 64bit `ino_t`.
+|19 июня 2017
+|12.0-CURRENT после изменения клиента и сервера NFS для фактического использования 64-битного `ino_t`.
|1200035
|link:https://svnweb.freebsd.org/changeset/base/320317[320317]
|June 24, 2017
-|12.0-CURRENT after the `MAP_GUARD` man:mmap[2] flag was added.
+|12.0-CURRENT после добавления флага `MAP_GUARD` в man:mmap[2].
|1200036
|link:https://svnweb.freebsd.org/changeset/base/320347[320347]
-|June 26, 2017
-|12.0-CURRENT after changing `time_t` to 64 bits on powerpc (32-bit version).
+|26 июня 2017
+|12.0-CURRENT после изменения `time_t` на 64 бита на powerpc (32-битная версия).
|1200037
|link:https://svnweb.freebsd.org/changeset/base/320545[320545]
-|July 1, 2017
-|12.0-CURRENT after the cleanup and inlining of `bus_dmamap*` functions (link:https://svnweb.freebsd.org/changeset/base/320528[320528]).
+|1 июля 2017
+|12.0-CURRENT после очистки и встраивания функций `bus_dmamap*` (link:https://svnweb.freebsd.org/changeset/base/320528[320528]).
|1200038
|link:https://svnweb.freebsd.org/changeset/base/320879[320879]
-|July 10, 2017
-|12.0-CURRENT after MMC CAM committed. (link:https://svnweb.freebsd.org/changeset/base/320844[320844]).
+|10 июля 2017
+|12.0-CURRENT после коммита MMC CAM (link:https://svnweb.freebsd.org/changeset/base/320844[320844]).
|1200039
|link:https://svnweb.freebsd.org/changeset/base/321369[321369]
-|July 22, 2017
-|12.0-CURRENT after upgrade of copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 5.0.0 (trunk r308421).
+|22 июля 2017
+|12.0-CURRENT после обновления копий clang, llvm, lld, lldb, compiler-rt и libc++ до версии 5.0.0 (trunk r308421).
|1200040
|link:https://svnweb.freebsd.org/changeset/base/321688[321688]
-|July 29, 2017
-|12.0-CURRENT after adding NFS client forced dismount support `umount -N`.
+|29 июля 2017
+|12.0-CURRENT после добавления поддержки принудительного демонтирования клиента NFS `umount -N`.
|1200041
|link:https://svnweb.freebsd.org/changeset/base/322762[322762]
-|August 21, 2017
-|12.0-CURRENT after WRFSBASE instruction become operational on amd64.
+|21 августа 2017
+|12.0-CURRENT после того, как инструкция WRFSBASE стала работоспособной на amd64.
|1200042
|link:https://svnweb.freebsd.org/changeset/base/322900[322900]
-|August 25, 2017
-|12.0-CURRENT after PLPMTUD counters were changed to use man:counter[9].
+|25 августа 2017
+|12.0-CURRENT после изменения счетчиков PLPMTUD для использования man:counter[9].
|1200043
|link:https://svnweb.freebsd.org/changeset/base/322989[322989]
-|August 28, 2017
-|12.0-CURRENT after dropping x86 CACHE_LINE_SIZE down to 64 bytes.
+|28 августа 2017
+|12.0-CURRENT после уменьшения CACHE_LINE_SIZE для x86 до 64 байт.
|1200044
|link:https://svnweb.freebsd.org/changeset/base/323349[323349]
-|September 8, 2017
-|12.0-CURRENT after implementing poll_wait() in the LinuxKPI.
+|8 сентября 2017
+|12.0-CURRENT после реализации `poll_wait()` в LinuxKPI.
|1200045
|link:https://svnweb.freebsd.org/changeset/base/323706[323706]
-|September 18, 2017
-|12.0-CURRENT after adding shared memory support to LinuxKPI. (link:https://svnweb.freebsd.org/changeset/base/323703[323703]).
+|18 сентября 2017
+|12.0-CURRENT после добавления поддержки разделяемой памяти в LinuxKPI. (link:https://svnweb.freebsd.org/changeset/base/323703[323703]).
|1200046
|link:https://svnweb.freebsd.org/changeset/base/323910[323910]
-|September 22, 2017
-|12.0-CURRENT after adding support for 32-bit compatibility IOCTLs to LinuxKPI.
+|22 сентября 2017
+|12.0-CURRENT после добавления поддержки 32-битных совместимых IOCTL в LinuxKPI.
|1200047
|link:https://svnweb.freebsd.org/changeset/base/324053[324053]
-|September 26, 2017
-|12.0-CURRENT after removing M_HASHTYPE_RSS_UDP_IPV4_EX. (link:https://svnweb.freebsd.org/changeset/base/324052[324052]).
+|26 сентября 2017
+|12.0-CURRENT после удаления M_HASHTYPE_RSS_UDP_IPV4_EX. (link:https://svnweb.freebsd.org/changeset/base/324052[324052]).
|1200048
|link:https://svnweb.freebsd.org/changeset/base/324227[324227]
-|October 2, 2017
-|12.0-CURRENT after hiding `struct socket` and `struct unpcb` from userland.
+|2 октября 2017
+|12.0-CURRENT после скрытия `struct socket` и `struct unpcb` из пользовательского пространства.
|1200049
|link:https://svnweb.freebsd.org/changeset/base/324281[324281]
-|October 4, 2017
-|12.0-CURRENT after adding the `value.u16` field to `struct diocgattr_arg`.
+|4 октября 2017
+|12.0-CURRENT после добавления поля `value.u16` в структуру `struct diocgattr_arg`.
|1200050
|link:https://svnweb.freebsd.org/changeset/base/324342[324342]
-|October 5, 2017
-|12.0-CURRENT after adding the `armv7 MACHINE_ARCH`. (link:https://svnweb.freebsd.org/changeset/base/324340[324340]).
+|5 октября 2017
+|12.0-CURRENT после добавления `armv7 MACHINE_ARCH`. (link:https://svnweb.freebsd.org/changeset/base/324340[324340]).
|1200051
|link:https://svnweb.freebsd.org/changeset/base/324455[324455]
-|October 9, 2017
-|12.0-CURRENT after removing [.filename]#libstand.a# as a public interface. (link:https://svnweb.freebsd.org/changeset/base/324454[324454]).
+|9 октября 2017
+|12.0-CURRENT после удаления [.filename]#libstand.a# как публичного интерфейса. (link:https://svnweb.freebsd.org/changeset/base/324454[324454]).
|1200052
|link:https://svnweb.freebsd.org/changeset/base/325028[325028]
-|October 26, 2017
-|12.0-CURRENT after fixing `ptrace()` to always clear the correct thread event when resuming.
+|26 октября 2017
+|12.0-CURRENT после исправления `ptrace()`, чтобы всегда очищать правильное событие потока при возобновлении.
|1200053
|link:https://svnweb.freebsd.org/changeset/base/325506[325506]
-|November 7, 2017
-|12.0-CURRENT after changing `struct mbuf` layout to add optional hardware timestamps for receive packets.
+|7 ноября 2017
+|12.0-CURRENT после изменения структуры `struct mbuf` для добавления опциональных аппаратных меток времени для принимаемых пакетов.
|1200054
|link:https://svnweb.freebsd.org/changeset/base/325852[325852]
-|November 15, 2017
-|12.0-CURRENT after changing the layout of `struct vmtotal` to allow for reporting large memory counters.
+|15 ноября 2017
+|12.0-CURRENT после изменения структуры `struct vmtotal` для поддержки отчёта больших счётчиков памяти.
|1200055
|link:https://svnweb.freebsd.org/changeset/base/327740[327740]
-|January 9, 2018
-|12.0-CURRENT after adding `cpucontrol -e` support.
+|9 января 2018
+|12.0-CURRENT после добавления поддержки `cpucontrol -e`.
|1200056
|link:https://svnweb.freebsd.org/changeset/base/327952[327952]
-|January 14, 2018
-|12.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 6.0.0 (branches/release_60 r321788).
+|14 января 2018
+|12.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 6.0.0 (ветки/release_60 r321788).
|1200057
|link:https://svnweb.freebsd.org/changeset/base/329033[329033]
-|February 8, 2018
-|12.0-CURRENT after applying a clang 6.0.0 fix to make the wine ports build correctly.
+|8 февраля 2018
+|12.0-CURRENT после применения исправления в clang 6.0.0 для корректной сборки портов wine.
|1200058
|link:https://svnweb.freebsd.org/changeset/base/329166[329166]
-|February 12, 2018
-|12.0-CURRENT after the lua loader was committed.
+|12 февраля 2018
+|12.0-CURRENT после включения загрузчика Lua.
|1200059
|link:https://svnweb.freebsd.org/changeset/base/330299[330299]
-|March 2, 2018
-|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`.
+|2 марта 2018
+|12.0-CURRENT после удаления объявления `union semun`, если не определено `_WANT_SEMUN`. Также удаление `struct mymsg` и переименование членов `struct semid_ds` и `struct msgid_ds`, предназначенных только для ядра.
|1200060
|link:https://svnweb.freebsd.org/changeset/base/330384[330384]
-|March 4, 2018
-|12.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 6.0.0 release.
+|4 марта 2018
+|12.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 6.0.0.
|1200061
|link:https://svnweb.freebsd.org/changeset/base/332100[332100]
-|April 6, 2018
-|12.0-CURRENT after changing man:syslog[3] to emit RFC 5424 formatted messages.
+|6 апреля 2018
+|12.0-CURRENT после изменения man:syslog[3] для генерации сообщений в формате RFC 5424.
|1200062
|link:https://svnweb.freebsd.org/changeset/base/332423[332423]
-|April 12, 2018
-|12.0-CURRENT after changing the Netmap API.
+|12 апреля 2018
+|12.0-CURRENT после изменения API Netmap.
|1200063
|link:https://svnweb.freebsd.org/changeset/base/333446[333446]
-|May 10, 2018
-|12.0-CURRENT after reworking CTL frontend and backend options to use man:nv[3], allow creating multiple ioctl frontend ports.
+|10 мая 2018
+|12.0-CURRENT после переработки параметров интерфейса и внутренней части CTL для использования man:nv[3], разрешено создание нескольких портов ioctl интерфейса.
|1200064
|link:https://svnweb.freebsd.org/changeset/base/334074[334074]
-|May 22, 2018
-|12.0-CURRENT after changing the ifnet address and multicast address TAILQ to CK_STAILQ.
+|22 мая 2018
+|12.0-CURRENT после изменения ifnet address и multicast address TAILQ на CK_STAILQ.
|1200065
|link:https://svnweb.freebsd.org/changeset/base/334290[334290]
-|May 28, 2018
-|12.0-CURRENT after changing man:dwatch[1] to allow '-E code' to override profile EVENT_DETAILS.
+|28 мая 2018
+|12.0-CURRENT после изменения man:dwatch[1] для разрешения использования '-E code' для переопределения EVENT_DETAILS в профиле.
|1200066
|link:https://svnweb.freebsd.org/changeset/base/334466[334466]
-|June 1, 2018
-|12.0-CURRENT after removal of in-kernel pmc tables for Intel.
+|1 июня 2018
+|12.0-CURRENT после удаления внутриядерных таблиц pmc для Intel.
|1200067
|link:https://svnweb.freebsd.org/changeset/base/334892[334892]
-|June 9, 2018
-|12.0-CURRENT after adding DW_LANG constants to libdwarf.
+|9 июня 2018
+|12.0-CURRENT после добавления констант DW_LANG в libdwarf.
|1200068
|link:https://svnweb.freebsd.org/changeset/base/334930[334930]
-|June 12, 2018
-|12.0-CURRENT after changing the interface between the NFS modules.
+|12 июня 2018
+|12.0-CURRENT после изменения интерфейса между модулями NFS.
|1200069
|link:https://svnweb.freebsd.org/changeset/base/335237[335237]
-|June 15, 2018
-|12.0-CURRENT after changing `struct kerneldumpheader` to version 4 (similar to version 2 in 11-STABLE and previous).
+|15 июня 2018
+|12.0-CURRENT после изменения `struct kerneldumpheader` до версии 4 (аналогично версии 2 в 11-STABLE и более ранних).
|1200070
|link:https://svnweb.freebsd.org/changeset/base/335873[335873]
-|July 2, 2018
-|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.
+|2 июля 2018
+|12.0-CURRENT после встраивания man:atomic[9] в модули на amd64 и i386, что потребовало пересборки всех модулей потребителей для этих архитектур.
|1200071
|link:https://svnweb.freebsd.org/changeset/base/335930[335930]
-|July 4, 2018
-|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.
+|4 июля 2018
+|12.0-CURRENT после изменения ABI и API man:epoch[9] (link:https://svnweb.freebsd.org/changeset/base/335924[335924]), что потребовало пересборки модулей потребителей.
|1200072
|link:https://svnweb.freebsd.org/changeset/base/335979[335979]
-|July 5, 2018
-|12.0-CURRENT after changing the ABI and API of `struct xinpcb` and friends.
+|5 июля 2018
+|12.0-CURRENT после изменения ABI и API `struct xinpcb` и связанных структур.
|1200073
|link:https://svnweb.freebsd.org/changeset/base/336313[336313]
-|July 15, 2018
-|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.
+|15 июля 2018
+|12.0-CURRENT после изменения ABI и API структур `struct if_shared_ctx` и `struct if_softc_ctx`, что потребовало пересборки модулей потребителей man:iflib[9].
|1200074
|link:https://svnweb.freebsd.org/changeset/base/336360[336360]
-|July 16, 2018
-|12.0-CURRENT after updating the configuration of libstdc++ to make use of C99 functions.
+|16 июля 2018
+|12.0-CURRENT после обновления конфигурации libstdc++ для использования функций C99.
|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).
+|19 июля 2018
+|12.0-CURRENT после объединения `zfsloader` в `loader`, после добавления ntpd:ntpd как uid:gid 123:123 и после удаления поддержки big-endian для архитектуры arm (MACHINE_ARCH=armeb).
|1200076
|link:https://svnweb.freebsd.org/changeset/base/336914[336914]
-|July 30, 2018
-|12.0-CURRENT after KPI changes to timespecadd.
+|30 июля 2018
+|12.0-CURRENT после изменений KPI в `timespecadd`.
|1200077
|link:https://svnweb.freebsd.org/changeset/base/337576[337576]
-|August 10, 2018
-|12.0-CURRENT after man:timespec_get[3] was added to the system.
+|10 августа 2018
+|12.0-CURRENT после добавления в систему man:timespec_get[3].
|1200078
|link:https://svnweb.freebsd.org/changeset/base/337863[337863]
-|August 15, 2018
-|12.0-CURRENT after exec.created hook for jails.
+|15 августа 2018
+|12.0-CURRENT после выполнения хука exec.created для клеток.
|1200079
|link:https://svnweb.freebsd.org/changeset/base/338061[338061]
-|August 19, 2018
-|12.0-CURRENT after converting `arc4random` to using the Chacha20 algorithm and deprecating `arc4random_stir` and `arc4random_addrandom`.
+|19 августа 2018
+|12.0-CURRENT после перевода `arc4random` на использование алгоритма Chacha20 и устаревания `arc4random_stir` и `arc4random_addrandom`.
|1200080
|link:https://svnweb.freebsd.org/changeset/base/338172[338172]
-|August 22, 2018
-|12.0-CURRENT after removing the drm drivers.
+|22 августа 2018
+|12.0-CURRENT после удаления драйверов drm.
|1200081
|link:https://svnweb.freebsd.org/changeset/base/338182[338182]
-|August 21, 2018
-|12.0-CURRENT after KPI changes to NVMe.
+|21 августа 2018
+|12.0-CURRENT после изменений KPI для NVMe.
|1200082
|link:https://svnweb.freebsd.org/changeset/base/338285[338285]
-|August 24, 2018
-|12.0-CURRENT after reverting the removal of the drm drivers.
+|24 августа 2018
+|12.0-CURRENT после отмены удаления драйверов drm.
|1200083
|link:https://svnweb.freebsd.org/changeset/base/338331[338331]
-|August 26, 2018
-|12.0-CURRENT after removing `arc4random_stir` and `arc4random_addrandom`.
+|26 августа 2018
+|12.0-CURRENT после удаления `arc4random_stir` и `arc4random_addrandom`.
|1200084
|link:https://svnweb.freebsd.org/changeset/base/338478[338478]
-|September 5, 2018
-|12.0-CURRENT after updating man:objcopy[1] to properly handle little-endian MIPS64 object files.
+|5 сентября 2018
+|12.0-CURRENT после обновления man:objcopy[1] для корректной обработки little-endian MIPS64 объектных файлов.
|1200085
|link:https://svnweb.freebsd.org/changeset/base/339270[339270]
-|October 19, 2018
-|12.0-STABLE after updating OpenSSL to version 1.1.1.
+|19 октября 2018
+|12.0-STABLE после обновления OpenSSL до версии 1.1.1.
|1200086
|link:https://svnweb.freebsd.org/changeset/base/339732[339732]
-|October 25, 2018
-|12.0-STABLE after updating OpenSSL shared library version numbers.
+|25 октября 2018
+|12.0-STABLE после обновления номеров версий разделяемых библиотек OpenSSL.
|1200500
|link:https://svnweb.freebsd.org/changeset/base/340471[340471]
-|November 16, 2018
-|12-STABLE after releng/12.0 was branched.
+|16 ноября 2018
+|12-STABLE после ветвления releng/12.0.
|1200501
|link:https://svnweb.freebsd.org/changeset/base/342801[342801]
-|January 6, 2019
-|12-STABLE after merge of fixing linux_destroy_dev() behaviour when there are still files open from the destroying cdev.
+|6 января 2019
+|12-STABLE после слияния исправления поведения `linux_destroy_dev()`, когда остаются открытые файлы из уничтожаемого cdev.
|1200502
|link:https://svnweb.freebsd.org/changeset/base/343126[343126]
|January 17, 2019
-|12-STABLE after enabling sys/random.h #include from C++.
+|12-STABLE после включения #include <sys/random.h> в C++.
|1200503
|link:https://svnweb.freebsd.org/changeset/base/344152[344152]
-|Febrary 15, 2019
-|12-STABLE after merge of fixing man:renameat[2] for CAPABILITIES kernels.
+|15 февраля 2019
+|12-STABLE после слияния исправления man:renameat[2] для ядер с CAPABILITIES.
|1200504
|link:https://svnweb.freebsd.org/changeset/base/345169[345169]
-|March 15, 2019
-|12-STABLE after merging CCM for the benefit of the ZoF port.
+|15 марта 2019
+|12-STABLE после слияния CCM для работы с портом ZoF.
|1200505
|link:https://svnweb.freebsd.org/changeset/base/345327[345327]
-|March 20, 2019
-|12-STABLE after merging support for selectively disabling ZFS without disabling loader.
+|20 марта 2019
+|12-STABLE после объединения поддержки выборочного отключения ZFS без отключения загрузчика.
|1200506
|link:https://svnweb.freebsd.org/changeset/base/346168[346168]
-|April 12, 2019
-|12-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365.
+|12 апреля 2019
+|12-STABLE после слияния llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp 8.0.0 финальный релиз r356365.
|1200507
|link:https://svnweb.freebsd.org/changeset/base/346337[346337]
-|April 17, 2019
-|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].
+|17 апреля 2019
+|12-STABLE после слияния изменений iflib из ревизий link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] и частично из link:https://svnweb.freebsd.org/changeset/base/345305[345305].
|1200508
|link:https://svnweb.freebsd.org/changeset/base/346784[346784]
-|April 27, 2019
-|12-STABLE after ether_gen_addr availability.
+|27 апреля 2019
+|12-STABLE после появления `ether_gen_addr`.
|1200509
|link:https://svnweb.freebsd.org/changeset/base/347790[347790]
-|May 16, 2019
-|12-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4]).
+|16 мая 2019
+|12-STABLE после обновления номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4]).
|1200510
|link:https://svnweb.freebsd.org/changeset/base/348036[348036]
-|May 21, 2019
-|12-STABLE after change to struct in linuxkpi from link:https://svnweb.freebsd.org/changeset/base/348035[348035].
+|21 мая 2019
+|12-STABLE после изменения структуры в linuxkpi из link:https://svnweb.freebsd.org/changeset/base/348035[348035].
|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.
+|24 мая 2019
+|12-STABLE после MFC изменения link:https://svnweb.freebsd.org/changeset/base/347843[347843]: добавление элемента `group_leader` в структуру `task_struct` для LinuxKPI.
|1200512
|link:https://svnweb.freebsd.org/changeset/base/348245[348245]
-|May 24, 2019
-|12-STABLE after adding context member to ww_mutex in LinuxKPI.
+|24 мая 2019
+|12-STABLE после добавления элемента контекста к ww_mutex в LinuxKPI.
|1200513
|link:https://svnweb.freebsd.org/changeset/base/349763[349763]
-|July 5, 2019
-|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].
+|5 июля 2019
+|12-STABLE после MFC man:epoch[9] изменил: 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].
|1200514
|link:https://svnweb.freebsd.org/changeset/base/350083[350083]
-|July 17, 2019
-|12-STABLE after additions to LinuxKPI's rcu list.
+|17 июля 2019
+|12-STABLE после добавлений в список rcu LinuxKPI.
|1200515
|link:https://svnweb.freebsd.org/changeset/base/350877[350877]
-|August 11, 2019
-|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).
+|11 августа 2019
+|12-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/349891[349891] (реорганизация списков SRCS в виде одного файла на строку с последующей сортировкой по алфавиту) и link:https://svnweb.freebsd.org/changeset/base/349972[349972] (добавление обёрток системных вызовов `arm_sync_icache()` и `arm_drain_writebuf()` для sysarch).
|1200516
|link:https://svnweb.freebsd.org/changeset/base/351276[351276]
-|August 20, 2019
-|12-STABLE after MFC of various changes to iflib link:https://svnweb.freebsd.org/changeset/base/351276[351276].
+|20 августа 2019
+|12-STABLE после слияния различных изменений в iflib (MFC) link:https://svnweb.freebsd.org/changeset/base/351276[351276].
|1200517
|link:https://svnweb.freebsd.org/changeset/base/352076[352076]
-|September 9, 2019
-|12-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI.
+|9 сентября 2019
+|12-STABLE после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов в LinuxKPI.
|1200518
|link:https://svnweb.freebsd.org/changeset/base/352114[352114]
-|September 10, 2019
-|12-STABLE after additional updates to LinuxKPI's sysfs.
+|10 сентября 2019
+|12-STABLE после дополнительных обновлений LinuxKPI в sysfs.
|1200519
|link:https://svnweb.freebsd.org/changeset/base/352351[352351]
-|September 15, 2019
-|12-STABLE after MFC of the new fusefs driver.
+|15 сентября 2019
+|12-STABLE после переноса (MFC) нового драйвера fusefs.
|1201000
|link:https://svnweb.freebsd.org/changeset/base/352546[352546]
-|September 20, 2019
-|releng/12.1 branched from stable/12@r352480.
+|20 сентября 2019
+|releng/12.1 ответвился от stable/12@r352480.
|1201500
|link:https://svnweb.freebsd.org/changeset/base/352547[352547]
-|September 20, 2019
-|12-STABLE after branching releng/12.1.
+|20 сентября 2019
+|12-STABLE после ветвления releng/12.1.
|1201501
|link:https://svnweb.freebsd.org/changeset/base/354598[354598]
-|November 10, 2019
-|12-STABLE after fixing a potential OOB read security issue in libc++.
+|10 ноября 2019
+|12-STABLE после исправления потенциальной проблемы безопасности OOB-чтения в libc++.
|1201502
|link:https://svnweb.freebsd.org/changeset/base/354613[354613]
-|November 11, 2019
-|12-STABLE after enabling device class group attributes in the LinuxKPI.
+|11 ноября 2019
+|12-STABLE после включения атрибутов группы классов устройств в LinuxKPI.
|1201503
|link:https://svnweb.freebsd.org/changeset/base/354928[354928]
-|November 21, 2019
-|12-STABLE after adding support for AT_EXECPATH to elf_aux_info(3).
+|21 ноября 2019
+|12-STABLE после добавления поддержки `AT_EXECPATH` в man:elf_aux_info[3].
|1201504
|link:https://svnweb.freebsd.org/changeset/base/355658[355658]
-|November 10, 2019
-|12-STABLE after correcting the C++ version check for declaring man:timespec_get[3].
+|10 ноября 2019
+|12-STABLE после исправления проверки версии C++ для объявления man:timespec_get[3].
|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.
+|19 декабря 2019
+|12-STABLE после добавления расширений `sigsetop`, которые часто встречаются в musl libc и glibc.
|1201506
|link:https://svnweb.freebsd.org/changeset/base/355968[355968]
-|December 21, 2019
-|12-STABLE after doubling the value of `ARG_MAX`, for 64 bit platforms.
+|21 декабря 2019
+|12-STABLE после удвоения значения `ARG_MAX` для 64-битных платформ.
|1201507
|link:https://svnweb.freebsd.org/changeset/base/356306[356306]
-|January 2, 2020
-|12-STABLE after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits.
+|2 января 2020
+|12-STABLE после добавления функций в man:bitstring[3] для поиска непрерывных последовательностей установленных или сброшенных битов.
|1201508
|link:https://svnweb.freebsd.org/changeset/base/356394[356394]
-|January 6, 2020
-|12-STABLE after making USB statistics be per-device instead of per bus.
+|6 января 2020
+|12-STABLE после изменения статистики USB для каждого устройства вместо каждой шины.
|1201509
|link:https://svnweb.freebsd.org/changeset/base/356460[356460]
-|January 7, 2020
-|12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316.
+|7 января 2020
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316.
|1201510
|link:https://svnweb.freebsd.org/changeset/base/356679[356679]
-|January 13, 2020
-|12-STABLE after adding own counter for cancelled USB transfers.
+|13 января 2020
+|12-STABLE после добавления собственного счётчика для отменённых USB-передач.
|1201511
|link:https://svnweb.freebsd.org/changeset/base/357333[357333]
-|January 31, 2020
-|12-STABLE after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#.
+|31 января 2020
+|12-STABLE после добавления символической ссылки [.filename]#/etc/os-release# на [.filename]#/var/run/os-release#.
|1201512
|link:https://svnweb.freebsd.org/changeset/base/357612[357612]
-|February 6, 2020
-|12-STABLE after recent LinuxKPI changes.
+|6 февраля 2020
+|12-STABLE после недавних изменений в LinuxKPI.
|1201513
|link:https://svnweb.freebsd.org/changeset/base/359957[359957]
-|Apr 15, 2020
-|12-STABLE after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI.
+|15 апреля 2020
+|12-STABLE после разделения интерфейса RCU на допускающий и не допускающий сон части в LinuxKPI.
|1201514
|link:https://svnweb.freebsd.org/changeset/base/360525[360525]
-|May 1, 2020
-|12-STABLE after implementing full man:bus_dma[9] support in the LinuxKPI and pulling in all dependencies.
+|1 мая 2020
+|12-STABLE после реализации полной поддержки man:bus_dma[9] в LinuxKPI и включения всех зависимостей.
|1201515
|link:https://svnweb.freebsd.org/changeset/base/360545[360545]
-|May 1, 2020
-|12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release.
+|1 мая 2020
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0.
|1201516
|link:https://svnweb.freebsd.org/changeset/base/360620[360620]
-|May 4, 2020
-|12-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI.
+|4 мая 2020
+|12-STABLE после перемещения `id_mapped` в конец структуры `bus_dma_impl` для сохранения KPI.
|1201517
|link:https://svnweb.freebsd.org/changeset/base/361350[361350]
-|May 21, 2020
-|12-STABLE after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type.
+|21 мая 2020
+|12-STABLE после переименования `vm.max_wired` в `vm.max_user_wired` и изменения его типа.
|1201518
|link:https://svnweb.freebsd.org/changeset/base/362319[362319]
-|June 18, 2020
-|12-STABLE after implementing __is_constexpr() function macro in the LinuxKPI.
+|18 июня 2020
+|12-STABLE после реализации макроса функции `__is_constexpr()` в LinuxKPI.
|1201519
|link:https://svnweb.freebsd.org/changeset/base/362916[362916]
-|July 4, 2020
-|12-STABLE after making liblzma use libmd implementation of SHA256.
+|4 июля 2020
+|12-STABLE после перевода liblzma на использование реализации SHA256 из libmd.
|1201520
|link:https://svnweb.freebsd.org/changeset/base/363494[363494]
-|July 24, 2020
-|12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release.
+|24 июля 2020
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1.
|1201521
|link:https://svnweb.freebsd.org/changeset/base/363790[363790]
-|August 3, 2020
-|12-STABLE after implementing the array_size() function in the LinuxKPI.
+|3 августа 2020
+|12-STABLE после реализации функции `array_size()` в LinuxKPI.
|1201522
|link:https://svnweb.freebsd.org/changeset/base/363832[363832]
-|August 4, 2020
-|12-STABLE after adding sysctlbyname system call.
+|4 августа 2020
+|12-STABLE после добавления системного вызова sysctlbyname.
|1201523
|link:https://svnweb.freebsd.org/changeset/base/364390[364390]
-|August 19, 2020
-|12-STABLE after change to clone the task struct fields related to RCU.
+|19 августа 2020
+|12-STABLE после изменения для клонирования полей структуры задачи, связанных с RCU.
|1201524
|link:https://svnweb.freebsd.org/changeset/base/365356[365356]
-|September 5, 2020
-|12-STABLE after splitting XDR off into a separate kernel module, to minimize ZFS dependencies.
+|5 сентября 2020
+|12-STABLE после выделения XDR в отдельный модуль ядра для минимизации зависимостей ZFS.
|1201525
|link:https://svnweb.freebsd.org/changeset/base/365471[365471]
-|September 8, 2020
-|12-STABLE after adding atomic and bswap functions to libcompiler_rt.
+|8 сентября 2020
+|12-STABLE после добавления атомарных функций и функций `bswap` в libcompiler_rt.
|1201526
|link:https://svnweb.freebsd.org/changeset/base/365608[365608]
-|September 10, 2020
-|12-STABLE after updating net80211 and kernel privilege checking API changes.
+|10 сентября 2020
+|12-STABLE после обновления net80211 и изменений API проверки привилегий ядра.
|1202000
|link:https://svnweb.freebsd.org/changeset/base/365618[365618]
-|September 11, 2020
-|releng/12.2 branched from stable/12@r365618.
+|11 сентября 2020
+|releng/12.2 ответвился от stable/12@r365618.
|1202500
|link:https://svnweb.freebsd.org/changeset/base/365619[365619]
-|September 11, 2020
-|12-STABLE after branching releng/12.2.
+|11 сентября 2020
+|12-STABLE после ветвления releng/12.2.
|1202501
|link:https://svnweb.freebsd.org/changeset/base/365661[365661]
-|September 12, 2020
-|12-STABLE after followup commits to libcompiler_rt.
+|12 сентября 2020
+|12-STABLE после последующих коммитов в libcompiler_rt.
|1202502
|link:https://svnweb.freebsd.org/changeset/base/365816[365816]
-|September 16, 2020
-|12-STABLE after fixing man:crunchgen[1] application build with `WARNS=6`.
+|16 сентября 2020
+|12-STABLE после исправления сборки приложения man:crunchgen[1] с `WARNS=6`.
+
+|1202503
+|link:https://svnweb.freebsd.org/changeset/base/366878[366878]
+|20 октября 2020
+|12-STABLE после заполнения поля контекста захвата `ww_mutex` в LinuxKPI.
+
+|1202504
+|link:https://svnweb.freebsd.org/changeset/base/367511[367511]
+|9 ноября 2020
+|12-STABLE после добавления man:ptsname_r[3].
+
+|1202505
+|gitref:f3d75bed5475b15f21edf4052665b1212b548bd0[repository="src",length=12]
+|28 декабря 2020
+|12-STABLE после улучшения обработки альтернативных настроек в стеке USB.
+
+|1202506
+|gitref:d36cc12ddfe3335ec8306bd4b393f11069551fa0[repository="src",length=12]
+|30 апреля 2021
+|12-STABLE после изменения внутреннего KAPI между krpc и NFS.
+
+|1202507
+|gitref:1e279fe9deaea1c5e3503117dd3077dcffb1276d[repository="src",length=12]
+|10 мая 2021
+|12-STABLE после изменения внутреннего KAPI между модулями nscl.ko и nfscommon.ko.
+
+|1202508
+|gitref:489236b0474857b0a7a2df77c302290e12be9e7b[repository="src",length=12]
+|26 июня 2021
+|12-STABLE после изменения внутреннего KAPI между модулями krpc и nfsd.
+
+|1203500
+|gitref:f2900e784cb024e55ec0f5cd6834af5fadcb9f9a[repository="src",length=12]
+|20 октября 2021
+|12-STABLE после ветвления releng/12.3.
+
+|1203501
+|gitref:b148c7b87148b653fdbef9c5aa591b9abcd99e26[repository="src",length=12]
+|22 декабря 2021
+|12-STABLE после добавления атомарных функций и функций `bswap` в libcompiler_rt.
+
+|1203502
+|gitref:4772e4135cb3fe7f25531894f3b02f35ec086bda[repository="src",length=12]
+|22 декабря 2021
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 11.0.1.
+
+|1203503
+|gitref:e405b2dc913c99189aa9b923ed686a790253cc7e[repository="src",length=12]
+|25 декабря 2021
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 12.0.0.
+
+|1203504
+|gitref:1a398266112e73f91a4f2e2701ceefd3f2948aac[repository="src",length=12]
+|25 декабря 2021
+|12-STABLE после добавления вспомогательных функций LSE атомарных операций вне строки в [.filename]#libcompiler_rt.a# для архитектуры aarch64.
+
+|1203505
+|gitref:0b7be89b329e0f862c25f34abfb13c75a4d45f2a[repository="src",length=12]
+|25 декабря 2021
+|12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 13.0.0.
+
+|1203506
+|gitref:f591279d9c93bc2ea9cd1a447c2df11d437fbc7b[repository="src",length=12]
+|12 февраля 2022
+|12-STABLE после восстановления компромисса доступности random(4).
+
+|1203507
+|gitref:180d95e04e938328de8f2a24d16fdb5049e15262[repository="src",length=12]
+|9 апреля 2022
+|12-STABLE после объединения zlib.
+
+|1203508
+|gitref:6c717a28505d3e77a0c3780ca1f65eb85b538eb9[repository="src",length=12]
+|19 октября 2022
+|12-STABLE после iflib: Разрешить драйверам определять, в какую очередь передавать данные.
+
+|1204000
+|gitref:fce871fe35204527a2ce08e43e1572ae9295cc00[repository="src",length=12]
+|20 октября 2022
+|releng/12.4 — ветка от stable/12.
+
+|1204500
+|gitref:6a9031c5e2ba5435aa4ea08ee05c351d5bef035d[repository="src",length=12]
+|20 октября 2022
+|12-STABLE после ветвления releng/12.4.
+
|===
+////
+Template:
+
+|12XXXXX
+|gitref:XXXXXXXX[repository="src",length=12]
+|October 30, 2021
+|12-STABLE after XXXXXX.
+////
+
[[versions-11]]
-== FreeBSD 11 Versions
+== FreeBSD 11 Версии
[[freebsd-versions-table-11]]
-.FreeBSD 11 `__FreeBSD_version` Values
+.FreeBSD 11 Значения `__FreeBSD_version`
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|1100000
|link:https://svnweb.freebsd.org/changeset/base/256284[256284]
-|October 10, 2013
+|10 октября 2013
|11.0-CURRENT.
|1100001
|link:https://svnweb.freebsd.org/changeset/base/256776[256776]
-|October 19, 2013
-|11.0-CURRENT after addition of support for "first boot" [.filename]#rc.d# scripts, so ports can make use of this.
+|19 октября 2013
+|11.0-CURRENT после добавления поддержки сценариев [.filename]#rc.d# для "первой загрузки", что позволяет портам использовать эту возможность.
|1100002
|link:https://svnweb.freebsd.org/changeset/base/257696[257696]
-|November 5, 2013
-|11.0-CURRENT after dropping support for historic ioctls.
+|5 ноября 2013
+|11.0-CURRENT после прекращения поддержки устаревших ioctl.
|1100003
|link:https://svnweb.freebsd.org/changeset/base/258284[258284]
-|November 17, 2013
-|11.0-CURRENT after iconv changes.
+|17 ноября 2013
+|11.0-CURRENT после изменений в iconv.
|1100004
|link:https://svnweb.freebsd.org/changeset/base/259424[259424]
-|December 15, 2013
-|11.0-CURRENT after the behavior change of `gss_pseudo_random` introduced in link:https://svnweb.freebsd.org/changeset/base/259286[259286].
+|15 декабря 2013
+|11.0-CURRENT после изменения поведения `gss_pseudo_random`, внесённого в link:https://svnweb.freebsd.org/changeset/base/259286[259286].
|1100005
|link:https://svnweb.freebsd.org/changeset/base/260010[260010]
-|December 28, 2013
-|11.0-CURRENT after link:https://svnweb.freebsd.org/changeset/base/259951[259951] - Do not coalesce entries in man:vm_map_stack[9].
+|28 декабря 2013
+|11.0-CURRENT после link:https://svnweb.freebsd.org/changeset/base/259951[259951] - Не объединять записи в man:vm_map_stack[9].
|1100006
|link:https://svnweb.freebsd.org/changeset/base/261246[261246]
-|January 28, 2014
-|11.0-CURRENT after upgrades of libelf and libdwarf.
+|28 января 2014
+|11.0-CURRENT после обновления libelf и libdwarf.
|1100007
|link:https://svnweb.freebsd.org/changeset/base/261283[261283]
-|January 30, 2014
-|11.0-CURRENT after upgrade of libc++ to 3.4 release.
+|30 января 2014
+|11.0-CURRENT после обновления libc++ до версии 3.4.
|1100008
|link:https://svnweb.freebsd.org/changeset/base/261881[261881]
|February 14, 2014
-|11.0-CURRENT after libc++ 3.4 ABI compatibility fix.
+|11.0-CURRENT после исправления совместимости ABI в libc++ 3.4.
|1100009
|link:https://svnweb.freebsd.org/changeset/base/261991[261991]
-|February 16, 2014
-|11.0-CURRENT after upgrade of llvm/clang to 3.4 release.
+|16 февраля 2014
+|11.0-CURRENT после обновления llvm/clang до версии 3.4.
|1100010
|link:https://svnweb.freebsd.org/changeset/base/262630[262630]
-|February 28, 2014
-|11.0-CURRENT after upgrade of ncurses to 5.9 release (rev link:https://svnweb.freebsd.org/changeset/base/262629[262629]).
+|28 февраля 2014
+|11.0-CURRENT после обновления ncurses до версии 5.9 (ревизия link:https://svnweb.freebsd.org/changeset/base/262629[262629]).
|1100011
|link:https://svnweb.freebsd.org/changeset/base/263102[263102]
-|March 13, 2014
-|11.0-CURRENT after ABI change in struct if_data.
+|13 марта 2014
+|11.0-CURRENT после изменения ABI в структуре `if_data`.
|1100012
|link:https://svnweb.freebsd.org/changeset/base/263140[263140]
-|March 14, 2014
-|11.0-CURRENT after removal of Novell IPX protocol support.
+|14 марта 2014
+|11.0-CURRENT после удаления поддержки протокола Novell IPX.
|1100013
|link:https://svnweb.freebsd.org/changeset/base/263152[263152]
-|March 14, 2014
-|11.0-CURRENT after removal of AppleTalk protocol support.
+|14 марта 2014
+|11.0-CURRENT после удаления поддержки протокола AppleTalk.
|1100014
|link:https://svnweb.freebsd.org/changeset/base/263235[263235]
|March 16, 2014
-|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.
+|11.0-CURRENT после переименования [.filename]#<sys/capability.h># в [.filename]#<sys/capsicum.h># во избежание конфликта с одноименными заголовочными файлами в других операционных системах. Совместимый заголовочный файл оставлен для уменьшения количества проблем при сборке, но в будущем будет устаревшим.
|1100015
|link:https://svnweb.freebsd.org/changeset/base/263620[263620]
-|March 22, 2014
-|11.0-CURRENT after `cnt` rename to `vm_cnt`.
+|22 марта 2014
+|11.0-CURRENT после переименования `cnt` в `vm_cnt`.
|1100016
|link:https://svnweb.freebsd.org/changeset/base/263660[263660]
-|March 23, 2014
-|11.0-CURRENT after addition of `armv6hf TARGET_ARCH`.
+|23 марта 2014
+|11.0-CURRENT после добавления `armv6hf TARGET_ARCH`.
|1100017
|link:https://svnweb.freebsd.org/changeset/base/264121[264121]
-|April 4, 2014
-|11.0-CURRENT after GCC support for `__block` definition.
+|4 апреля 2014
+|11.0-CURRENT после удаления поддержки GCC для определения `__block`.
|1100018
|link:https://svnweb.freebsd.org/changeset/base/264212[264212]
-|April 6, 2014
-|11.0-CURRENT after support for UDP-Lite protocol (RFC 3828).
+|6 апреля 2014
+|11.0-CURRENT после добавления поддержки протокола UDP-Lite (RFC 3828).
|1100019
|link:https://svnweb.freebsd.org/changeset/base/264289[264289]
-|April 8, 2014
-|11.0-CURRENT after FreeBSD-SA-14:06.openssl (rev link:https://svnweb.freebsd.org/changeset/base/264265[264265]).
+|8 апреля 2014
+|11.0-CURRENT после FreeBSD-SA-14:06.openssl (ревизия link:https://svnweb.freebsd.org/changeset/base/264265[264265]).
|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]).
+|1 мая 2014
+|11.0-CURRENT после удаления `lindev` в пользу наличия /dev/full по умолчанию (rev link:https://svnweb.freebsd.org/changeset/base/265212[265212]).
|1100021
|link:https://svnweb.freebsd.org/changeset/base/266151[266151]
-|May 6, 2014
-|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]).
+|6 мая 2014
+|11.0-CURRENT после изменений в [.filename]#src.opts.mk#, отделяющих man:make.conf[5] от `buildworld` (rev link:https://svnweb.freebsd.org/changeset/base/265419[265419]).
|1100022
|link:https://svnweb.freebsd.org/changeset/base/266904[266904]
-|May 30, 2014
-|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]).
+|30 мая 2014
+|11.0-CURRENT после изменений в man:strcasecmp[3], перемещении man:strcasecmp_l[3] и man:strncasecmp_l[3] из [.filename]#<string.h># в [.filename]#<strings.h># для соответствия POSIX 2008 (rev link:https://svnweb.freebsd.org/changeset/base/266865[266865]).
|1100023
|link:https://svnweb.freebsd.org/changeset/base/267440[267440]
-|June 13, 2014
-|11.0-CURRENT after the CUSE library and kernel module have been attached to the build by default.
+|13 июня 2014
+|11.0-CURRENT после подключения библиотеки CUSE и модуля ядра к сборке по умолчанию.
|1100024
|link:https://svnweb.freebsd.org/changeset/base/267992[267992]
-|June 27, 2014
-|11.0-CURRENT after man:sysctl[3] API change.
+|27 июня 2014
+|11.0-CURRENT после изменения API man:sysctl[3].
|1100025
|link:https://svnweb.freebsd.org/changeset/base/268066[268066]
-|June 30, 2014
-|11.0-CURRENT after man:regex[3] library update to add ">" and "<" delimiters.
+|30 июня 2014
+|11.0-CURRENT после обновления библиотеки man:regex[3] для добавления разделителей ">" и "<".
|1100026
|link:https://svnweb.freebsd.org/changeset/base/268118[268118]
-|July 1, 2014
-|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]).
+|1 июля 2014
+|11.0-CURRENT после изменения внутреннего интерфейса между модулями NFS, включая krpc, в (rev link:https://svnweb.freebsd.org/changeset/base/268115[268115]).
|1100027
|link:https://svnweb.freebsd.org/changeset/base/268441[268441]
-|July 8, 2014
-|11.0-CURRENT after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268431[268431]).
+|8 июля 2014
+|11.0-CURRENT после FreeBSD-SA-14:17.kmem (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/268431[268431]).
|1100028
|link:https://svnweb.freebsd.org/changeset/base/268945[268945]
-|July 21, 2014
-|11.0-CURRENT after man:hdestroy[3] compliance fix changed ABI.
+|21 июля 2014
+|11.0-CURRENT после исправления соответствия man:hdestroy[3] изменился ABI.
|1100029
|link:https://svnweb.freebsd.org/changeset/base/270173[270173]
-|August 3, 2014
-|11.0-CURRENT after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269489[269489]).
+|3 августа 2014
+|11.0-CURRENT после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269489[269489]).
|1100030
|link:https://svnweb.freebsd.org/changeset/base/270929[270929]
-|September 1, 2014
-|11.0-CURRENT after `SOCK_RAW` sockets were changed to not modify packets at all.
+|1 сентября 2014
+|11.0-CURRENT после того, как сокеты `SOCK_RAW` были изменены так, чтобы вообще не модифицировать пакеты.
|1100031
|link:https://svnweb.freebsd.org/changeset/base/271341[271341]
-|September 9, 2014
-|11.0-CURRENT after FreeBSD-SA-14:18.openssl (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686]).
+|9 сентября 2014
+|11.0-CURRENT после FreeBSD-SA-14:18.openssl (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/269686[269686]).
|1100032
|link:https://svnweb.freebsd.org/changeset/base/271438[271438]
-|September 11, 2014
-|11.0-CURRENT after API changes to `ifa_ifwithbroadaddr`, `ifa_ifwithdstaddr`, `ifa_ifwithnet`, and `ifa_ifwithroute`.
+|11 сентября 2014
+|11.0-CURRENT после изменений API в `ifa_ifwithbroadaddr`, `ifa_ifwithdstaddr`, `ifa_ifwithnet` и `ifa_ifwithroute`.
|1100033
|link:https://svnweb.freebsd.org/changeset/base/271657[271657]
-|September 9, 2014
-|11.0-CURRENT after changing `access`, `eaccess`, and `faccessat` to validate the mode argument.
+|9 сентября 2014
+|11.0-CURRENT после изменения `access`, `eaccess` и `faccessat` для проверки аргумента mode.
|1100034
|link:https://svnweb.freebsd.org/changeset/base/271686[271686]
-|September 16, 2014
-|11.0-CURRENT after FreeBSD-SA-14:19.tcp (rev link:https://svnweb.freebsd.org/changeset/base/271666[271666]).
+|16 сентября 2014
+|11.0-CURRENT после FreeBSD-SA-14:19.tcp (rev link:https://svnweb.freebsd.org/changeset/base/271666[271666]).
|1100035
|link:https://svnweb.freebsd.org/changeset/base/271705[271705]
-|September 17, 2014
-|11.0-CURRENT after i915 HW context support.
+|17 сентября 2014
+|11.0-CURRENT после добавления поддержки аппаратного контекста i915.
|1100036
|link:https://svnweb.freebsd.org/changeset/base/271724[271724]
-|September 17, 2014
-|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]).
+|17 сентября 2014
+|Увеличение версии для различия в ABI-примечании бинарных файлов, готовых к строгой проверке флагов man:mmap[2] (изменение link:https://svnweb.freebsd.org/changeset/base/271724[271724]).
|1100037
|link:https://svnweb.freebsd.org/changeset/base/272674[272674]
-|October 6, 2014
-|11.0-CURRENT after addition of man:explicit_bzero[3] (rev link:https://svnweb.freebsd.org/changeset/base/272673[272673]).
+|6 октября 2014
+|11.0-CURRENT после добавления man:explicit_bzero[3] (изменение:https://svnweb.freebsd.org/changeset/base/272673[272673]).
|1100038
|link:https://svnweb.freebsd.org/changeset/base/272951[272951]
|October 11, 2014
-|11.0-CURRENT after cleanup of TCP wrapper headers.
+|11.0-CURRENT после очистки заголовков TCP wrapper.
|1100039
|link:https://svnweb.freebsd.org/changeset/base/273250[273250]
-|October 18, 2014
-|11.0-CURRENT after removal of `MAP_RENAME` and `MAP_NORESERVE`.
+|18 октября 2014
+|11.0-CURRENT после удаления `MAP_RENAME` и `MAP_NORESERVE`.
|1100040
|link:https://svnweb.freebsd.org/changeset/base/273432[273432]
-|October 21, 2014
-|11.0-CURRENT after FreeBSD-SA-14:23 (rev link:https://svnweb.freebsd.org/changeset/base/273146[273146]).
+|21 октября 2014
+|11.0-CURRENT после FreeBSD-SA-14:23 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/273146[273146]).
|1100041
|link:https://svnweb.freebsd.org/changeset/base/273875[273875]
-|October 30, 2014
-|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]).
+|30 октября 2014
+|11.0-CURRENT после изменений API в `syscall_register`, `syscall32_register`, `syscall_register_helper` и `syscall32_register_helper` (rev link:https://svnweb.freebsd.org/changeset/base/273707[273707]).
|1100042
|link:https://svnweb.freebsd.org/changeset/base/274046[274046]
-|November 3, 2014
-|11.0-CURRENT after a change to `struct tcpcb`.
+|3 ноября 2014
+|11.0-CURRENT после изменения `struct tcpcb`.
|1100043
|link:https://svnweb.freebsd.org/changeset/base/274085[274085]
-|November 4, 2014
-|11.0-CURRENT after enabling man:vt[4] by default.
+|4 ноября 2014
+|11.0-CURRENT после включения man:vt[4] по умолчанию.
|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.
+|4 ноября 2014
+|11.0-CURRENT после добавления новых библиотек/утилит (`dpv` и `figpar`) для визуализации пропускной способности данных.
|1100045
|link:https://svnweb.freebsd.org/changeset/base/274162[274162]
-|November 4, 2014
-|11.0-CURRENT after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25.
+|4 ноября 2014
+|11.0-CURRENT после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25.
|1100046
|link:https://svnweb.freebsd.org/changeset/base/274470[274470]
-|November 13, 2014
-|11.0-CURRENT after `kern_poll` signature change (rev link:https://svnweb.freebsd.org/changeset/base/274462[274462]).
+|13 ноября 2014
+|11.0-CURRENT после изменения сигнатуры `kern_poll` (rev link:https://svnweb.freebsd.org/changeset/base/274462[274462]).
|1100047
|link:https://svnweb.freebsd.org/changeset/base/274476[274476]
-|November 13, 2014
-|11.0-CURRENT after removal of no-at version of VFS syscalls helpers, like `kern_open`.
+|13 ноября 2014
+|11.0-CURRENT после удаления no-at версий вспомогательных системных вызовов VFS, таких как `kern_open`.
|1100048
|link:https://svnweb.freebsd.org/changeset/base/275358[275358]
-|December 1, 2014
-|11.0-CURRENT after starting the process of removing the use of the deprecated "M_FLOWID" flag from the network code.
+|1 декабря 2014
+|11.0-CURRENT после начала процесса удаления использования устаревшего флага "M_FLOWID" из сетевого кода.
|1100049
|link:https://svnweb.freebsd.org/changeset/base/275633[275633]
-|December 9, 2014
-|11.0-CURRENT after importing an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases.
+|9 декабря 2014
+|11.0-CURRENT после импорта важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера.
|1100050
|link:https://svnweb.freebsd.org/changeset/base/275732[275732]
-|December 12, 2014
-|11.0-CURRENT after adding AES-ICM and AES-GCM to OpenCrypto.
+|12 декабря 2014
+|11.0-CURRENT после добавления AES-ICM и AES-GCM в OpenCrypto.
|1100051
|link:https://svnweb.freebsd.org/changeset/base/276096[276096]
|December 23, 2014
-|11.0-CURRENT after removing old NFS client and server code from the kernel.
+|11.0-CURRENT после удаления старого кода клиента и сервера NFS из ядра.
|1100052
|link:https://svnweb.freebsd.org/changeset/base/276479[276479]
-|December 31, 2014
-|11.0-CURRENT after upgrade of clang, llvm and lldb to 3.5.0 release.
+|31 декабря 2014
+|11.0-CURRENT после обновления clang, llvm и lldb до версии 3.5.0.
|1100053
|link:https://svnweb.freebsd.org/changeset/base/276781[276781]
-|January 7, 2015
-|11.0-CURRENT after man:MCLGET[9] gained a return value (rev link:https://svnweb.freebsd.org/changeset/base/276750[276750]).
+|7 января 2015
+|11.0-CURRENT после того, как man:MCLGET[9] получил возвращаемое значение (rev link:https://svnweb.freebsd.org/changeset/base/276750[276750]).
|1100054
|link:https://svnweb.freebsd.org/changeset/base/277213[277213]
-|January 15, 2015
-|11.0-CURRENT after rewrite of callout subsystem.
+|15 января 2015
+|11.0-CURRENT после переработки подсистемы вызовов.
|1100055
|link:https://svnweb.freebsd.org/changeset/base/277528[277528]
-|January 22, 2015
-|11.0-CURRENT after reverting callout changes in link:https://svnweb.freebsd.org/changeset/base/277213[277213].
+|22 января 2015
+|11.0-CURRENT после отмены изменений callout в link:https://svnweb.freebsd.org/changeset/base/277213[277213].
|1100056
|link:https://svnweb.freebsd.org/changeset/base/277610[277610]
-|January 23, 2015
-|11.0-CURRENT after addition of `futimens` and `utimensat` system calls.
+|23 января 2015
+|11.0-CURRENT после добавления системных вызовов `futimens` и `utimensat`.
|1100057
|link:https://svnweb.freebsd.org/changeset/base/277897[277897]
-|January 29, 2015
-|11.0-CURRENT after removal of d_thread_t.
+|29 января 2015
+|11.0-CURRENT после удаления `d_thread_t`.
|1100058
|link:https://svnweb.freebsd.org/changeset/base/278228[278228]
-|February 5, 2015
-|11.0-CURRENT after addition of support for probing the SCSI VPD Extended Inquiry page (0x86).
+|5 февраля 2015
+|11.0-CURRENT после добавления поддержки запроса страницы расширенного запроса SCSI VPD (0x86).
|1100059
|link:https://svnweb.freebsd.org/changeset/base/278442[278442]
-|February 9, 2015
-|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]).
+|9 февраля 2015
+|11.0-CURRENT после импорта xz 5.2.0, который добавил многопоточное сжатие, и lzma получила зависимость от libthr (rev link:https://svnweb.freebsd.org/changeset/base/278433[278433]).
|1100060
|link:https://svnweb.freebsd.org/changeset/base/278846[278846]
-|February 16, 2015
-|11.0-CURRENT after forwarding `FBIO_BLANK` to framebuffer clients.
+|16 февраля 2015
+|11.0-CURRENT после пересылки `FBIO_BLANK` клиентам фреймбуфера.
|1100061
|link:https://svnweb.freebsd.org/changeset/base/278964[278964]
-|February 18, 2015
-|11.0-CURRENT after `CDAI_FLAG_NONE` addition.
+|18 февраля 2015
+|11.0-CURRENT после добавления `CDAI_FLAG_NONE`.
|1100062
|link:https://svnweb.freebsd.org/changeset/base/279221[279221]
-|February 23, 2015
-|11.0-CURRENT after man:mtio[4] and man:sa[4] API and man:ioctl[2] additions.
+|23 февраля 2015
+|11.0-CURRENT после добавлений API man:mtio[4] и man:sa[4], а также man:ioctl[2].
|1100063
|link:https://svnweb.freebsd.org/changeset/base/279728[279728]
-|March 7, 2015
-|11.0-CURRENT after adding mutex support to the `pps_ioctl()` API in the kernel.
+|7 марта 2015
+|11.0-CURRENT после добавления поддержки мьютексов в API `pps_ioctl()` в ядре.
|1100064
|link:https://svnweb.freebsd.org/changeset/base/279729[279729]
-|March 7, 2015
-|11.0-CURRENT after adding PPS support to USB serial drivers.
+|7 марта 2015
+|11.0-CURRENT после добавления поддержки PPS в драйверы USB-последовательных портов.
|1100065
|link:https://svnweb.freebsd.org/changeset/base/280031[280031]
-|March 15, 2015
-|11.0-CURRENT after upgrading clang, llvm and lldb to 3.6.0.
+|15 марта 2015
+|11.0-CURRENT после обновления clang, llvm и lldb до версии 3.6.0.
|1100066
|link:https://svnweb.freebsd.org/changeset/base/280306[280306]
-|March 20, 2015
-|11.0-CURRENT after removal of SSLv2 support from OpenSSL.
+|20 марта 2015
+|11.0-CURRENT после удаления поддержки SSLv2 из OpenSSL.
|1100067
|link:https://svnweb.freebsd.org/changeset/base/280630[280630]
-|March 25, 2015
-|11.0-CURRENT after removal of SSLv2 support from man:fetch[1] and man:fetch[3].
+|25 марта 2015
+|11.0-CURRENT после удаления поддержки SSLv2 из man:fetch[1] и man:fetch[3].
|1100068
|link:https://svnweb.freebsd.org/changeset/base/281172[281172]
-|April 6, 2015
-|11.0-CURRENT after change to net.inet6.ip6.mif6table sysctl.
+|6 апреля 2015
+|11.0-CURRENT после изменения системной настройки net.inet6.ip6.mif6table.
|1100069
|link:https://svnweb.freebsd.org/changeset/base/281550[281550]
-|April 15, 2015
-|11.0-CURRENT after removal of const qualifier from man:iconv[3].
+|15 апреля 2015
+|11.0-CURRENT после удаления квалификатора const из man:iconv[3].
|1100070
|link:https://svnweb.freebsd.org/changeset/base/281613[281613]
-|April 16, 2015
-|11.0-CURRENT after moving ALTQ from [.filename]#contrib# to [.filename]#net/altq#.
+|16 апреля 2015
+|11.0-CURRENT после перемещения ALTQ из [.filename]#contrib# в [.filename]#net/altq#.
|1100071
|link:https://svnweb.freebsd.org/changeset/base/282256[282256]
-|April 29, 2015
-|11.0-CURRENT after API/ABI change to man:smb[4] (rev link:https://svnweb.freebsd.org/changeset/base/281985[281985]).
+|29 апреля 2015
+|11.0-CURRENT после изменения API/ABI в man:smb[4] (rev link:https://svnweb.freebsd.org/changeset/base/281985[281985]).
|1100072
|link:https://svnweb.freebsd.org/changeset/base/282319[282319]
-|May 1, 2015
-|11.0-CURRENT after adding man:reallocarray[3] in libc (rev link:https://svnweb.freebsd.org/changeset/base/282314[282314]).
+|1 мая 2015
+|11.0-CURRENT после добавления man:reallocarray[3] в libc (изменение link:https://svnweb.freebsd.org/changeset/base/282314[282314]).
|1100073
|link:https://svnweb.freebsd.org/changeset/base/282650[282650]
-|May 8, 2015
-|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.
+|8 мая 2015
+|11.0-CURRENT после увеличения максимального количества разрешённых PCM-каналов в PCM-потоке до 127 и уменьшения максимального количества подканалов до 1.
|1100074
|link:https://svnweb.freebsd.org/changeset/base/283526[283526]
-|May 25, 2015
-|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.
+|25 мая 2015
+|11.0-CURRENT после добавления предварительной поддержки бинарных файлов Linux для x86-64 (rev link:https://svnweb.freebsd.org/changeset/base/283424[283424]) и обновления clang и llvm до версии 3.6.1.
|1100075
|link:https://svnweb.freebsd.org/changeset/base/283623[283623]
-|May 27, 2015
-|11.0-CURRENT after `dounmount()` requiring a reference on the passed struct mount (rev link:https://svnweb.freebsd.org/changeset/base/283602[283602]).
+|27 мая 2015
+|11.0-CURRENT после `dounmount()`, требующей ссылки на переданную структуру mount (изменение rev link:https://svnweb.freebsd.org/changeset/base/283602[283602]).
|1100076
|link:https://svnweb.freebsd.org/changeset/base/283983[283983]
-|June 4, 2015
-|11.0-CURRENT after disabled generation of legacy formatted password databases entries by default.
+|4 июня 2015
+|11.0-CURRENT после отключения генерации записей в устаревших форматах баз данных паролей по умолчанию.
|1100077
|link:https://svnweb.freebsd.org/changeset/base/284233[284233]
-|June 10, 2015
-|11.0-CURRENT after API changes to `lim_cur`, `lim_max`, and `lim_rlimit` (rev link:https://svnweb.freebsd.org/changeset/base/284215[284215]).
+|10 июня 2015
+|11.0-CURRENT после изменений API в `lim_cur`, `lim_max` и `lim_rlimit` (rev link:https://svnweb.freebsd.org/changeset/base/284215[284215]).
|1100078
|link:https://svnweb.freebsd.org/changeset/base/286672[286672]
-|August 12, 2015
-|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].
+|12 августа 2015
+|11.0-CURRENT после изменений man:crunchgen[1] в ревизиях link:https://svnweb.freebsd.org/changeset/base/284356[284356] до link:https://svnweb.freebsd.org/changeset/base/285986[285986].
|1100079
|link:https://svnweb.freebsd.org/changeset/base/286874[286874]
-|August 18, 2015
-|11.0-CURRENT after import of jemalloc 4.0.0 (rev link:https://svnweb.freebsd.org/changeset/base/286866[286866]).
+|18 августа 2015
+|11.0-CURRENT после импорта jemalloc 4.0.0 (ревизия link:https://svnweb.freebsd.org/changeset/base/286866[286866]).
|1100080
|link:https://svnweb.freebsd.org/changeset/base/288943[288943]
-|October 5, 2015
-|11.0-CURRENT after upgrading clang, llvm, lldb, compiler-rt and libc++ to 3.7.0.
+|5 октября 2015
+|11.0-CURRENT после обновления clang, llvm, lldb, compiler-rt и libc++ до версии 3.7.0.
|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]).
+|16 октября 2015
+|11.0-CURRENT после `обновления` ZFS для поддержки возобновляемой отправки/приёмки (rev link:https://svnweb.freebsd.org/changeset/base/289362[289362]).
|1100082
|link:https://svnweb.freebsd.org/changeset/base/289594[289594]
-|October 19, 2015
-|11.0-CURRENT after Linux KPI updates.
+|19 октября 2015
+|11.0-CURRENT после обновлений Linux KPI.
|1100083
|link:https://svnweb.freebsd.org/changeset/base/289749[289749]
|October 22, 2015
-|11.0-CURRENT after renaming [.filename]#linuxapi.ko# to [.filename]#linuxkpi.ko#.
+|11.0-CURRENT после переименования [.filename]#linuxapi.ko# в [.filename]#linuxkpi.ko#.
|1100084
|link:https://svnweb.freebsd.org/changeset/base/290135[290135]
-|October 29, 2015
-|11.0-CURRENT after moving the LinuxKPI module into the default kernel build.
+|29 октября 2015
+|11.0-CURRENT после перемещения модуля LinuxKPI в стандартную сборку ядра.
|1100085
|link:https://svnweb.freebsd.org/changeset/base/290207[290207]
-|October 30, 2015
-|11.0-CURRENT after import of OpenSSL 1.0.2d.
+|30 октября 2015
+|11.0-CURRENT после импорта OpenSSL 1.0.2d.
|1100086
|link:https://svnweb.freebsd.org/changeset/base/290275[290275]
-|November 2, 2015
-|11.0-CURRENT after making man:figpar[3] macros more unique.
+|2 ноября 2015
+|11.0-CURRENT после изменения макросов man:figpar[3] для большей уникальности.
|1100087
|link:https://svnweb.freebsd.org/changeset/base/290479[290479]
-|November 7, 2015
-|11.0-CURRENT after changing man:sysctl_add_oid[9]'s ABI.
+|7 ноября 2015
+|11.0-CURRENT после изменения ABI man:sysctl_add_oid[9].
|1100088
|link:https://svnweb.freebsd.org/changeset/base/290495[290495]
-|November 7, 2015
-|11.0-CURRENT after string collation and locales rework.
+|7 ноября 2015
+|11.0-CURRENT после переработки сортировки строк и локалей.
|1100089
|link:https://svnweb.freebsd.org/changeset/base/290505[290505]
-|November 7, 2015
-|11.0-CURRENT after API change to man:sysctl_add_oid[9] (rev link:https://svnweb.freebsd.org/changeset/base/290475[290475]).
+|7 ноября 2015
+|11.0-CURRENT после изменения API в man:sysctl_add_oid[9] (rev link:https://svnweb.freebsd.org/changeset/base/290475[290475]).
|1100090
|link:https://svnweb.freebsd.org/changeset/base/290715[290715]
-|November 10, 2015
-|11.0-CURRENT after API change to callout_stop macro; (rev link:https://svnweb.freebsd.org/changeset/base/290664[290664]).
+|10 ноября 2015
+|11.0-CURRENT после изменения API для макроса callout_stop; (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/290664[290664]).
|1100091
|link:https://svnweb.freebsd.org/changeset/base/291537[291537]
-|November 30, 2015
-|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].
+|30 ноября 2015
+|11.0-CURRENT после изменения интерфейса между модулями [.filename]#nfsd.ko# и [.filename]#nfscommon.ko# в link:https://svnweb.freebsd.org/changeset/base/291527[291527].
|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]).
+|19 декабря 2015
+|11.0-CURRENT после удаления `vm_pageout_grow_cache` (изменение:https://svnweb.freebsd.org/changeset/base/292469[292469]).
|1100093
|link:https://svnweb.freebsd.org/changeset/base/292966[292966]
-|December 30, 2015
-|11.0-CURRENT after removal of sys/crypto/sha2.h (rev link:https://svnweb.freebsd.org/changeset/base/292782[292782]).
+|30 декабря 2015
+|11.0-CURRENT после удаления sys/crypto/sha2.h (изменение link:https://svnweb.freebsd.org/changeset/base/292782[292782]).
|1100094
|link:https://svnweb.freebsd.org/changeset/base/294086[294086]
-|January 15, 2016
-|11.0-CURRENT after LinuxKPI PCI changes (rev link:https://svnweb.freebsd.org/changeset/base/294086[294086]).
+|15 января 2016
+|11.0-CURRENT после изменений LinuxKPI PCI (rev link:https://svnweb.freebsd.org/changeset/base/294086[294086]).
|1100095
|link:https://svnweb.freebsd.org/changeset/base/294327[294327]
-|January 19, 2016
-|11.0-CURRENT after LRO optimizations.
+|19 января 2016
+|11.0-CURRENT после оптимизаций LRO.
|1100096
|link:https://svnweb.freebsd.org/changeset/base/294505[294505]
-|January 21, 2016
-|11.0-CURRENT after LinuxKPI idr_* additions.
+|21 января 2016
+|11.0-CURRENT после добавления LinuxKPI idr_*.
|1100097
|link:https://svnweb.freebsd.org/changeset/base/294860[294860]
-|January 26, 2016
-|11.0-CURRENT after API change to man:dpv[3].
+|26 января 2016
+|11.0-CURRENT после изменения API в man:dpv[3].
|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]).
+|16 февраля 2016
+|11.0-CURRENT после изменения API в `rman` (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883]).
|1100099
|link:https://svnweb.freebsd.org/changeset/base/295739[295739]
-|February 18, 2016
-|11.0-CURRENT after allowing drivers to set the TCP ACK/data segment aggregation limit.
+|18 февраля 2016
+|11.0-CURRENT после разрешения драйверам устанавливать лимит агрегации сегментов TCP ACK/данных.
|1100100
|link:https://svnweb.freebsd.org/changeset/base/296136[296136]
-|February 26, 2016
-|11.0-CURRENT after man:bus_alloc_resource_any[9] API addition.
+|26 февраля 2016
+|11.0-CURRENT после добавления API man:bus_alloc_resource_any[9].
|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.
+|5 марта 2016
+|11.0-CURRENT после обновления копий clang, llvm, lldb и compiler-rt до релиза 3.8.0.
|1100102
|link:https://svnweb.freebsd.org/changeset/base/296749[296749]
-|March 12, 2016
-|11.0-CURRENT after libelf cross-endian fix in rev link:https://svnweb.freebsd.org/changeset/base/296685[296685].
+|12 марта 2016
+|11.0-CURRENT после исправления кросс-эндианности libelf в ревизии link:https://svnweb.freebsd.org/changeset/base/296685[296685].
|1100103
|link:https://svnweb.freebsd.org/changeset/base/297000[297000]
-|March 18, 2016
-|11.0-CURRENT after using uintmax_t for rman ranges.
+|18 марта 2016
+|11.0-CURRENT после использования `uintmax_t` для диапазонов `rman`.
|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.
+|21 марта 2016
+|11.0-CURRENT после отслеживания использования `filemon` через указатель proc.p_filemon вместо собственных списков.
|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.
+|6 апреля 2016
+|11.0-CURRENT после исправления функций `i` и `a` в sed, которые отбрасывали начальные пробелы.
|1100106
|link:https://svnweb.freebsd.org/changeset/base/298486[298486]
-|April 22, 2016
-|11.0-CURRENT after fixes for using IPv6 addresses with RDMA.
+|22 апреля 2016
+|11.0-CURRENT после исправлений для использования IPv6-адресов с RDMA.
|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.
+|4 мая 2016
+|11.0-CURRENT после улучшения производительности и функциональности API man:bitstring[3].
|1100108
|link:https://svnweb.freebsd.org/changeset/base/299530[299530]
-|May 12, 2016
-|11.0-CURRENT after fixing handling of IOCTLs in the LinuxKPI.
+|12 мая 2016
+|11.0-CURRENT после исправления обработки IOCTL в LinuxKPI.
|1100109
|link:https://svnweb.freebsd.org/changeset/base/299933[299933]
-|May 16, 2016
-|11.0-CURRENT after implementing more Linux device related functions in the LinuxKPI.
+|16 мая 2016
+|11.0-CURRENT после реализации дополнительных функций, связанных с устройствами Linux, в LinuxKPI.
|1100110
|link:https://svnweb.freebsd.org/changeset/base/300207[300207]
-|May 19, 2016
-|11.0-CURRENT after adding support for managing Shingled Magnetic Recording (SMR) drives.
+|19 мая 2016
+|11.0-CURRENT после добавления поддержки управления дисками с черепичной магнитной записью (Shingled Magnetic Recording, SMR).
|1100111
|link:https://svnweb.freebsd.org/changeset/base/300303[300303]
-|May 20, 2016
-|11.0-CURRENT after removing brk and sbrk from arm64.
+|20 мая 2016
+|11.0-CURRENT после удаления `brk` и `sbrk` из 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.
+|23 мая 2016
+|11.0-CURRENT после добавления `bit_count` в man:bitstring[3] API.
|1100113
|link:https://svnweb.freebsd.org/changeset/base/300701[300701]
-|May 26, 2016
-|11.0-CURRENT after disabling alignment faults on armv6.
+|26 мая 2016
+|11.0-CURRENT после отключения ошибок выравнивания на armv6.
|1100114
|link:https://svnweb.freebsd.org/changeset/base/300806[300806]
-|May 26, 2016
-|11.0-CURRENT after fixing man:crunchgen[1] usage with `MAKEOBJDIRPREFIX`.
+|26 мая 2016
+|11.0-CURRENT после исправления использования man:crunchgen[1] с `MAKEOBJDIRPREFIX`.
|1100115
|link:https://svnweb.freebsd.org/changeset/base/300982[300982]
-|May 30, 2016
-|11.0-CURRENT after adding an mbuf flag for `M_HASHTYPE_`.
+|30 мая 2016
+|11.0-CURRENT после добавления флага mbuf для `M_HASHTYPE_`.
|1100116
|link:https://svnweb.freebsd.org/changeset/base/301011[301011]
-|May 31, 2016
-|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]).
+|31 мая 2016
+|11.0-CURRENT после добавления SHA-512t256 (ревизия link:https://svnweb.freebsd.org/changeset/base/300903[300903]) и Skein (ревизия link:https://svnweb.freebsd.org/changeset/base/300966[300966]) в libmd, libcrypt, ядро и ZFS (ревизия link:https://svnweb.freebsd.org/changeset/base/301010[301010]).
|1100117
|link:https://svnweb.freebsd.org/changeset/base/301892[301892]
-|June 6, 2016
-|11.0-CURRENT after libpam was synced with stock link:https://svnweb.freebsd.org/changeset/base/301602[301602], bumping library version.
+|6 июня 2016
+|11.0-CURRENT после синхронизации libpam с основной версией link:https://svnweb.freebsd.org/changeset/base/301602[301602], что привело к увеличению версии библиотеки.
|1100118
|link:https://svnweb.freebsd.org/changeset/base/302071[302071]
-|June 21, 2016
-|11.0-CURRENT after breaking binary compatibility of struct disk link:https://svnweb.freebsd.org/changeset/base/302069[302069].
+|21 июня 2016
+|11.0-CURRENT после нарушения бинарной совместимости структуры disk link:https://svnweb.freebsd.org/changeset/base/302069[302069].
|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.
+|23 июня 2016
+|11.0-CURRENT после перевода `geom_disk` на использование мьютекса пула.
|1100120
|link:https://svnweb.freebsd.org/changeset/base/302153[302153]
-|June 23, 2016
-|11.0-CURRENT after adding spares to struct ifnet.
+|23 июня 2016
+|11.0-CURRENT после добавления запасных элементов в struct ifnet.
|1100121
|link:https://svnweb.freebsd.org/changeset/base/303979[303979]
-|August 12, 2015
-|11-STABLE after `releng/11.0` branched from 11-STABLE (rev link:https://svnweb.freebsd.org/changeset/base/303975[303975]).
+|12 августа 2015
+|11-STABLE после того, как ветка `releng/11.0` отделилась от 11-STABLE (изменение:https://svnweb.freebsd.org/changeset/base/303975[303975]).
|1100500
|link:https://svnweb.freebsd.org/changeset/base/303979[303979]
-|August 12, 2016
-|11.0-STABLE adding branched link:https://svnweb.freebsd.org/changeset/base/303976[303976].
+|12 августа 2016
+|11.0-STABLE добавлена ветвленная link: https://svnweb.freebsd.org/changeset/base/303976[303976].
|1100501
|link:https://svnweb.freebsd.org/changeset/base/304609[304609]
-|August 22, 2016
-|11.0-STABLE after adding C++11 thread_local support.
+|22 августа 2016
+|11.0-STABLE после добавления поддержки `thread_local` в C++11.
|1100502
|link:https://svnweb.freebsd.org/changeset/base/304865[304865]
-|August 26, 2016
-|11.0-STABLE after `LC_*_MASK` fix.
+|26 августа 2016
+|11.0-STABLE после исправления `LC_*_MASK`.
|1100503
|link:https://svnweb.freebsd.org/changeset/base/305733[305733]
-|September 12, 2016
-|11.0-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9].
+|12 сентября 2016
+|11.0-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9].
|1100504
|link:https://svnweb.freebsd.org/changeset/base/307330[307330]
-|October 14, 2016
-|11.0-STABLE after ZFS merges.
+|14 октября 2016
+|11.0-STABLE после объединения ZFS.
|1100505
|link:https://svnweb.freebsd.org/changeset/base/307590[307590]
-|October 19, 2016
-|11.0-STABLE after `struct fb_info` change.
+|19 октября 2016
+|11.0-STABLE после изменения `struct fb_info`.
|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.
+|28 октября 2016
+|11.0-STABLE после установки заголовочных файлов, необходимых для разработки с `libzfs_core`.
|1100507
|link:https://svnweb.freebsd.org/changeset/base/310120[310120]
-|December 15, 2016
-|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.
+|15 декабря 2016
+|11.0-STABLE после добавления члена `ki_moretdname` в структуры `struct kinfo_proc` и `struct kinfo_proc32` для экспорта полного имени потока в пользовательские утилиты.
|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.
+|26 декабря 2016
+|11.0-STABLE после обновления копий clang, llvm, lldb, compiler-rt и libc++ до версии 3.9.1, а также добавления lld 3.9.1.
|1100509
|link:https://svnweb.freebsd.org/changeset/base/311186[311186]
-|January 3, 2017
-|11.0-STABLE after man:crunchgen[1] META_MODE fix (rev link:https://svnweb.freebsd.org/changeset/base/311185[311185]).
+|3 января 2017
+|11.0-STABLE после исправления META_MODE в man:crunchgen[1] (изменение link:https://svnweb.freebsd.org/changeset/base/311185[311185]).
|1100510
|link:https://svnweb.freebsd.org/changeset/base/315312[315312]
-|March 15, 2017
-|11.0-STABLE after MFC of `fget_cap`, `getsock_cap`, and related changes.
+|15 марта 2017
+|11.0-STABLE после MFC изменений, связанных с `fget_cap`, `getsock_cap` и другими.
|1100511
|link:https://svnweb.freebsd.org/changeset/base/316423[316423]
-|April 2, 2017
-|11.0-STABLE after multiple MFCs updating clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0 release.
+|2 апреля 2017
+|11.0-STABLE после нескольких MFC, обновляющих clang, llvm, lld, lldb, compiler-rt и libc++ до версии 4.0.0.
|1100512
|link:https://svnweb.freebsd.org/changeset/base/316498[316498]
-|April 4, 2017
-|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]).
+|4 апреля 2017
+|11.0-STABLE после того, как блокировка CAM SIM стала опциональной (ревизии link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674]).
|1100513
|link:https://svnweb.freebsd.org/changeset/base/318197[318197]
-|May 11, 2017
-|11.0-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header.
+|11 мая 2017
+|11.0-STABLE после объединения добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#.
|1100514
|link:https://svnweb.freebsd.org/changeset/base/319279[319279]
-|May 31, 2017
-|11.0-STABLE after multiple MFCs of `libpcap`, `WITHOUT_INET6`, and a few other minor changes.
+|31 мая 2017
+|11.0-STABLE после нескольких MFC для `libpcap`, `WITHOUT_INET6` и нескольких других незначительных изменений.
|1101000
|link:https://svnweb.freebsd.org/changeset/base/320486[320486]
|June 30, 2017
-|`releng/11.1` branched from `stable/11`.
+|`releng/11.1` отделился от `stable/11`.
|1101001
|link:https://svnweb.freebsd.org/changeset/base/320763[320763]
|June 30, 2017
-|11.1-RC1 After merging the `MAP_GUARD` man:mmap[2] flag addition.
+|11.1-RC1 После объединения добавления флага `MAP_GUARD` в man:mmap[2].
|1101500
|link:https://svnweb.freebsd.org/changeset/base/320487[320487]
|June 30, 2017
-|11-STABLE after `releng/11.1` branched.
+|11-STABLE после ветвления `releng/11.1`.
|1101501
|link:https://svnweb.freebsd.org/changeset/base/320666[320666]
-|July 5, 2017
-|11-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition.
+|5 июля 2017
+|11-STABLE после объединения добавления флага `MAP_GUARD` в man:mmap[2].
|1101502
|link:https://svnweb.freebsd.org/changeset/base/321688[321688]
-|July 29, 2017
-|11-STABLE after merging the NFS client forced dismount support `umount -N` addition.
+|29 июля 2017
+|11-STABLE после объединения поддержки принудительного демонтирования клиента NFS с добавлением `umount -N`.
|1101503
|link:https://svnweb.freebsd.org/changeset/base/323431[323431]
-|September 11, 2017
-|11-STABLE after merging changes making the WRFSBASE instruction operational on amd64.
+|11 сентября 2017
+|11-STABLE после объединения изменений, сделавших инструкцию WRFSBASE работоспособной на amd64.
|1101504
|link:https://svnweb.freebsd.org/changeset/base/324006[324006]
-|September 26, 2017
-|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].
+|26 сентября 2017
+|11-STABLE после слияния libm из head, что добавляет man:cacoshl[3], man:cacosl[3], man:casinhl[3], man:casinl[3], man:catanl[3], man:catanhl[3], man:sincos[3], man:sincosf[3] и man:sincosl[3].
|1101505
|link:https://svnweb.freebsd.org/changeset/base/324023[324023]
-|September 26, 2017
-|11-STABLE after merging clang, llvm, lld, lldb, compiler-rt and libc++ 5.0.0 release.
+|26 сентября 2017
+|11-STABLE после объединения clang, llvm, lld, lldb, compiler-rt и libc++ версии 5.0.0.
|1101506
|link:https://svnweb.freebsd.org/changeset/base/325003[325003]
-|October 25, 2017
-|11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/324281[324281], adding the `value.u16` field to `struct diocgattr_arg`.
+|25 октября 2017
+|11-STABLE после слияния link:https://svnweb.freebsd.org/changeset/base/324281[324281], добавления поля `value.u16` в структуру `struct diocgattr_arg`.
|1101507
|link:https://svnweb.freebsd.org/changeset/base/328379[328379]
-|January 24, 2018
-|11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/325028[325028], fixing `ptrace()` to always clear the correct thread event when resuming.
+|24 января 2018
+|11-STABLE после слияния с link:https://svnweb.freebsd.org/changeset/base/325028[325028], исправление `ptrace()` для корректной очистки события нужного потока при возобновлении.
|1101508
|link:https://svnweb.freebsd.org/changeset/base/328386[328386]
-|January 24, 2018
-|11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/316648[316648], renaming smp_no_rendevous_barrier() to smp_no_rendezvous_barrier().
+|24 января 2018
+|11-STABLE после объединения изменений link:https://svnweb.freebsd.org/changeset/base/316648[316648], переименование `smp_no_rendevous_barrier()` в `smp_no_rendezvous_barrier()`.
|1101509
|link:https://svnweb.freebsd.org/changeset/base/328653[328653]
-|February 1, 2018
-|11-STABLE after an overwrite merge backport of the LinuxKPI from FreeBSD-head.
+|1 февраля 2018
+|11-STABLE после обратного переноса (overwrite merge) LinuxKPI из FreeBSD-head.
|1101510
|link:https://svnweb.freebsd.org/changeset/base/329450[329450]
-|February 17, 2018
-|11-STABLE after the cmpxchg() macro is now fully functional in the LinuxKPI.
+|17 февраля 2018
+|11-STABLE после того, как макрос `cmpxchg()` стал полностью функциональным в LinuxKPI.
|1101511
|link:https://svnweb.freebsd.org/changeset/base/329981[329981]
-|February 25, 2018
-|11-STABLE after concluding the recent LinuxKPI related updates.
+|25 февраля 2018
+|11-STABLE после завершения недавних обновлений, связанных с LinuxKPI.
|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.
+|19 марта 2018
+|11-STABLE после объединения поддержки `retpoline` из вышестоящих веток llvm, clang и lld 5.0.
|1101513
|link:https://svnweb.freebsd.org/changeset/base/331838[331838]
-|March 31, 2018
-|11-STABLE after merging clang, llvm, lld, lldb, compiler-rt and libc++ 6.0.0 release, and several follow-up fixes.
+|31 марта 2018
+|11-STABLE после объединения clang, llvm, lld, lldb, compiler-rt и libc++ версии 6.0.0, а также нескольких последующих исправлений.
|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.
+|5 апреля 2018
+|11-STABLE после объединения изменений link:https://svnweb.freebsd.org/changeset/base/328331[328331], добавляющего новую и несовместимую интерпретацию `${name}_limits` в rc-скриптах.
|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.
+|10 апреля 2018
+|11-STABLE после отмены изменений из link:https://svnweb.freebsd.org/changeset/base/331880[331880], удаляющих новую и несовместимую интерпретацию `${name}_limits` в rc-скриптах.
|1101516
|link:https://svnweb.freebsd.org/changeset/base/334392[334392]
-|May 30, 2018
-|11-STABLE after man:dwatch[1] touch-ups.
+|30 мая 2018
+|11-STABLE после доработок man:dwatch[1].
|1102000
|link:https://svnweb.freebsd.org/changeset/base/334459[334459]
-|June 1, 2018
-|`releng/11.2` branched from `stable/11`.
+|1 июня 2018
+|`releng/11.2` отделился от `stable/11`.
|1102500
|link:https://svnweb.freebsd.org/changeset/base/334461[334461]
-|June 1, 2018
-|11-STABLE after releng/11.2 branched.
+|1 июня 2018
+|11-STABLE после ветвления releng/11.2.
|1102501
|link:https://svnweb.freebsd.org/changeset/base/335436[335436]
|June 20, 2018
-|11-STABLE after LinuxKPI updates requiring recompilation of external kernel modules.
+|11-STABLE после обновлений LinuxKPI, требующих перекомпиляции внешних модулей ядра.
|1102502
|link:https://svnweb.freebsd.org/changeset/base/338617[338617]
-|September 12, 2018
-|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.
+|12 сентября 2018
+|11-STABLE после добавления сокет-опции SO_TS_CLOCK и исправления системного вызова `recvmsg32()` для корректного преобразования структуры 64-битных данных в формат, ожидаемый 32-битными приложениями.
|1102503
|link:https://svnweb.freebsd.org/changeset/base/338931[338931]
-|September 25, 2018
-|11-STABLE after merging a TCP checksum fix to man:iflib[9] and adding new media types to if_media.h
+|25 сентября 2018
+|11-STABLE после объединения исправления контрольной суммы TCP в man:iflib[9] и добавления новых типов носителей в if_media.h
|1102504
|link:https://svnweb.freebsd.org/changeset/base/340309[340309]
-|November 9, 2018
-|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.
+|9 ноября 2018
+|11-STABLE после нескольких MFC: обновление man:objcopy[1] для корректной обработки little-endian MIPS64 объектов; исправление теста mips64el для использования заголовка ELF; добавление теста для 64-битного ELF в _libelf_is_mips64el.
|1102505
|link:https://svnweb.freebsd.org/changeset/base/342804[342804]
-|January 6, 2019
-|11-STABLE after merge of fixing linux_destroy_dev() behaviour when there are still files open from the destroying cdev.
+|6 января 2019
+|11-STABLE после слияния исправления поведения `linux_destroy_dev()`, когда остаются открытые файлы из уничтожаемого cdev.
|1102506
|link:https://svnweb.freebsd.org/changeset/base/344220[344220]
-|February 17, 2019
-|11-STABLE after merging multiple commits to lualoader.
+|17 февраля 2019
+|11-STABLE после объединения нескольких коммитов в lualoader.
|1102507
|link:https://svnweb.freebsd.org/changeset/base/346296[346296]
-|April 16, 2019
-|11-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365.
+|16 апреля 2019
+|11-STABLE после объединения llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp 8.0.0 финальный релиз r356365.
|1102508
|link:https://svnweb.freebsd.org/changeset/base/346784[346784]
-|April 27, 2019
-|11-STABLE after ether_gen_addr availability.
+|27 апреля 2019
+|11-STABLE после появления `ether_gen_addr`.
|1102509
|link:https://svnweb.freebsd.org/changeset/base/347212[347212]
-|May 6, 2019
-|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].
+|6 мая 2019
+|11-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] и частично link:https://svnweb.freebsd.org/changeset/base/345305[345305].
|1102510
|link:https://svnweb.freebsd.org/changeset/base/347883[347883]
-|May 16, 2019
-|11-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4]).
+|16 мая 2019
+|11-STABLE после увеличения номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4]).
|1103000
|link:https://svnweb.freebsd.org/changeset/base/349026[349026]
-|June 14, 2019
-|`releng/11.3` branched from `stable/11`.
+|14 июня 2019
+|`releng/11.3` отделился от `stable/11`.
|1103500
|link:https://svnweb.freebsd.org/changeset/base/349027[349027]
-|June 14, 2019
-|11-STABLE after releng/11.3 branched.
+|14 июня 2019
+|11-STABLE после ветвления releng/11.3.
|1103501
|link:https://svnweb.freebsd.org/changeset/base/354598[354598]
-|November 10, 2019
-|11-STABLE after fixing a potential OOB read security issue in libc++.
+|10 ноября 2019
+|11-STABLE после исправления потенциальной проблемы безопасности OOB-чтения в libc++.
|1103502
|link:https://svnweb.freebsd.org/changeset/base/354614[354614]
-|November 11, 2019
-|11-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI.
+|11 ноября 2019
+|11-STABLE после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов в LinuxKPI.
|1103503
|link:https://svnweb.freebsd.org/changeset/base/354615[354615]
-|November 11, 2019
-|11-STABLE after LinuxKPI sysfs improvements.
+|11 ноября 2019
+|11-STABLE после улучшений LinuxKPI sysfs.
|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 ноября 2019
+|11-STABLE после включения атрибутов группы классов устройств в 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.
+|19 декабря 2019
+|11-STABLE после добавления расширений `sigsetop`, которые часто встречаются в musl libc и glibc.
|1103506
|link:https://svnweb.freebsd.org/changeset/base/356395[356395]
-|January 6, 2020
-|11-STABLE after making USB statistics be per-device instead of per bus.
+|6 января 2020
+|11-STABLE после изменения статистики USB для каждого устройства вместо каждой шины.
|1103507
|link:https://svnweb.freebsd.org/changeset/base/356680[356680]
-|January 13, 2020
-|11-STABLE after adding own counter for cancelled USB transfers.
+|13 января 2020
+|11-STABLE после добавления собственного счетчика для отмененных USB-передач.
|1103508
|link:https://svnweb.freebsd.org/changeset/base/357613[357613]
-|February 6, 2020
-|11-STABLE after recent LinuxKPI changes.
+|6 февраля 2020
+|11-STABLE после недавних изменений в LinuxKPI.
|1103509
|link:https://svnweb.freebsd.org/changeset/base/359958[359958]
-|April 15, 2020
-|11-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI.
+|15 апреля 2020
+|11-STABLE после перемещения `id_mapped` в конец структуры `bus_dma_impl` для сохранения KPI.
|1103510
|link:https://svnweb.freebsd.org/changeset/base/360658[360658]
-|May 5, 2020
-|11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316.
+|5 мая 2020
+|11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316.
|1103511
|link:https://svnweb.freebsd.org/changeset/base/360784[360784]
-|May 7, 2020
-|11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release.
+|7 мая 2020
+|11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0.
|1104000
|link:https://svnweb.freebsd.org/changeset/base/360804[360804]
-|May 8, 2020
-|`releng/11.4` branched from `stable/11`.
+|8 мая 2020
+|`releng/11.4` ответвился от `stable/11`.
|1104001
|link:https://svnweb.freebsd.org/changeset/base/360822[360822]
-|May 8, 2020
-|11.4-BETA1 after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release.
+|8 мая 2020
+|11.4-BETA1 после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0.
|1104500
|link:https://svnweb.freebsd.org/changeset/base/360805[360805]
-|May 8, 2020
-|11-STABLE after releng/11.4 branched.
+|8 мая 2020
+|11-STABLE после ветвления releng/11.4.
|1104501
|link:https://svnweb.freebsd.org/changeset/base/362320[362320]
-|June 18, 2020
-|11-STABLE after implementing __is_constexpr() function macro in the LinuxKPI.
+|18 июня 2020
+|11-STABLE после реализации макроса функции `__is_constexpr()` в LinuxKPI.
|1104502
|link:https://svnweb.freebsd.org/changeset/base/362919[362919]
-|July 4, 2020
-|11-STABLE after making liblzma use libmd implementation of SHA256.
+|4 июля 2020
+|11-STABLE после перевода liblzma на использование реализации SHA256 из libmd.
|1104503
|link:https://svnweb.freebsd.org/changeset/base/363496[363496]
-|July 24, 2020
-|11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release.
+|24 июля 2020
+|11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1.
|1104504
|link:https://svnweb.freebsd.org/changeset/base/363792[363792]
-|August 3, 2020
-|11-STABLE after implementing the array_size() function in the LinuxKPI.
+|3 августа 2020
+|11-STABLE после реализации функции `array_size()` в LinuxKPI.
|1104505
|link:https://svnweb.freebsd.org/changeset/base/364391[364391]
-|August 19, 2020
-|11-STABLE after change to clone the task struct fields related to RCU.
+|19 августа 2020
+|11-STABLE после изменения для клонирования полей структуры задачи, связанных с RCU.
|1104506
|link:https://svnweb.freebsd.org/changeset/base/365471[365471]
-|September 8, 2020
-|11-STABLE after adding atomic and bswap functions to libcompiler_rt.
+|8 сентября 2020
+|11-STABLE после добавления атомарных функций и функций `bswap` в libcompiler_rt.
|1104507
|link:https://svnweb.freebsd.org/changeset/base/365661[365661]
-|September 12, 2020
-|11-STABLE after followup commits to libcompiler_rt.
+|12 сентября 2020
+|11-STABLE после последующих коммитов в libcompiler_rt.
+
+|1104508
+|link:https://svnweb.freebsd.org/changeset/base/366879[366879]
+|20 октября 2020
+|11-STABLE после заполнения поля контекста получения в `ww_mutex` в LinuxKPI.
+
+|1104509
+|link:https://svnweb.freebsd.org/changeset/base/366889[366889]
+|20 октября 2020
+|11-STABLE после добавлений в список `RCU` LinuxKPI.
+
+|1104510
+|link:https://svnweb.freebsd.org/changeset/base/367513[367513]
+|9 ноября 2020
+|11-STABLE после добавления `ptsname_r`.
|===
[[versions-10]]
-== FreeBSD 10 Versions
+== Версии FreeBSD 10
[[freebsd-versions-table-10]]
-.FreeBSD 10 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 10
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|1000000
|link:https://svnweb.freebsd.org/changeset/base/225757[225757]
-|September 26, 2011
+|26 сентября 2011
|10.0-CURRENT.
|1000001
|link:https://svnweb.freebsd.org/changeset/base/227070[227070]
-|November 4, 2011
-|10-CURRENT after addition of the man:posix_fadvise[2] system call.
+|4 ноября 2011
+|10-CURRENT после добавления системного вызова man:posix_fadvise[2].
|1000002
|link:https://svnweb.freebsd.org/changeset/base/228444[228444]
-|December 12, 2011
-|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]).
+|12 декабря 2011
+|10-CURRENT после определения булевых значений true/false в sys/types.h, размер sizeof(bool) мог измениться (ревизия link:https://svnweb.freebsd.org/changeset/base/228444[228444]). 10-CURRENT после введения xlocale.h (ревизия link:https://svnweb.freebsd.org/changeset/base/227753[227753]).
|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]).
+|16 декабря 2011
+|10-CURRENT после значительных изменений в man:carp[4], изменения размера структур `in_aliasreq`, `in6_aliasreq` (rev link:https://svnweb.freebsd.org/changeset/base/228571[228571]) и упрощения проверки аргументов SIOCAIFADDR (rev link:https://svnweb.freebsd.org/changeset/base/228574[228574]).
|1000004
|link:https://svnweb.freebsd.org/changeset/base/229204[229204]
-|January 1, 2012
-|10-CURRENT after the removal of `skpc()` and the addition of man:memcchr[9] (rev link:https://svnweb.freebsd.org/changeset/base/229200[229200]).
+|1 января 2012
+|10-CURRENT после удаления `skpc()` и добавления man:memcchr[9] (изменение:https://svnweb.freebsd.org/changeset/base/229200[229200]).
|1000005
|link:https://svnweb.freebsd.org/changeset/base/230207[230207]
-|January 16, 2012
-|10-CURRENT after the removal of support for SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFDSTADDR ioctls.
+|16 января 2012
+|10-CURRENT после удаления поддержки ioctls SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFDSTADDR.
|1000006
|link:https://svnweb.freebsd.org/changeset/base/230590[230590]
-|January 26, 2012
-|10-CURRENT after introduction of read capacity data asynchronous notification in the man:cam[4] layer.
+|26 января 2012
+|10-CURRENT после внедрения асинхронного уведомления о данных пропускной способности чтения в слое man:cam[4].
|1000007
|link:https://svnweb.freebsd.org/changeset/base/231025[231025]
-|February 5, 2012
-|10-CURRENT after introduction of new man:tcp[4] socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT.
+|5 февраля 2012
+|10-CURRENT после введения новых параметров сокета man:tcp[4]: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT.
|1000008
|link:https://svnweb.freebsd.org/changeset/base/231505[231505]
-|February 11, 2012
-|10-CURRENT after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists.
+|11 февраля 2012
+|10-CURRENT после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов.
|1000009
|link:https://svnweb.freebsd.org/changeset/base/232154[232154]
-|February 25, 2012
-|10-CURRENT after import of libarchive 3.0.3 (rev link:https://svnweb.freebsd.org/changeset/base/232153[232153]).
+|25 февраля 2012
+|10-CURRENT после импорта libarchive 3.0.3 (rev link:https://svnweb.freebsd.org/changeset/base/232153[232153]).
|1000010
|link:https://svnweb.freebsd.org/changeset/base/233757[233757]
-|March 31, 2012
-|10-CURRENT after xlocale cleanup.
+|31 марта 2012
+|10-CURRENT после очистки `xlocale`.
|1000011
|link:https://svnweb.freebsd.org/changeset/base/234355[234355]
-|April 16, 2012
-|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]).
+|16 апреля 2012
+|Импорт LLVM/Clang 3.1 из 10-CURRENT, ссылка на ревизию: link:https://svnweb.freebsd.org/changeset/base/154661[154661] (ревизия link:https://svnweb.freebsd.org/changeset/base/234353[234353]).
|1000012
|link:https://svnweb.freebsd.org/changeset/base/234924[234924]
-|May 2, 2012
-|10-CURRENT jemalloc import.
+|2 мая 2012
+|10-CURRENT импорт jemalloc.
|1000013
|link:https://svnweb.freebsd.org/changeset/base/235788[235788]
-|May 22, 2012
-|10-CURRENT after byacc import.
+|22 мая 2012
+|10-CURRENT после импорта `byacc`.
|1000014
|link:https://svnweb.freebsd.org/changeset/base/237631[237631]
-|June 27, 2012
-|10-CURRENT after BSD sort becoming the default sort (rev link:https://svnweb.freebsd.org/changeset/base/237629[237629]).
+|27 июня 2012
+|10-CURRENT после того, как BSD sort стал сортировкой по умолчанию (rev link:https://svnweb.freebsd.org/changeset/base/237629[237629]).
|1000015
|link:https://svnweb.freebsd.org/changeset/base/238405[238405]
-|July 12, 2012
-|10-CURRENT after import of OpenSSL 1.0.1c.
+|12 июля 2012
+|10-CURRENT после импорта OpenSSL 1.0.1c.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/238429[238429]
|July 13, 2012
-|10-CURRENT after the fix for LLVM/Clang 3.1 regression.
+|10-CURRENT после исправления регрессии в LLVM/Clang 3.1.
|1000016
|link:https://svnweb.freebsd.org/changeset/base/239179[239179]
-|August 8, 2012
-|10-CURRENT after KBI change in man:ucom[4].
+|8 августа 2012
+|10-CURRENT после изменения KBI в man:ucom[4].
|1000017
|link:https://svnweb.freebsd.org/changeset/base/239214[239214]
-|August 8, 2012
-|10-CURRENT after adding streams feature to the USB stack.
+|8 августа 2012
+|10-CURRENT после добавления функции потоков в стек USB.
|1000018
|link:https://svnweb.freebsd.org/changeset/base/240233[240233]
-|September 8, 2012
-|10-CURRENT after major rewrite of man:pf[4].
+|8 сентября 2012
+|10-CURRENT после значительной переработки man:pf[4].
|1000019
|link:https://svnweb.freebsd.org/changeset/base/241245[241245]
-|October 6, 2012
-|10-CURRENT after man:pfil[9] KBI/KPI changed to supply packets in net byte order to AF_INET filter hooks.
+|6 октября 2012
+|10-CURRENT после изменения KBI/KPI в man:pfil[9] для передачи пакетов в порядке байтов сети к хукам фильтрации AF_INET.
|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.
+|16 октября 2012
+|10-CURRENT после изменения KPI клонирования сетевых интерфейсов и структура `if_clone` стала непрозрачной.
|1000021
|link:https://svnweb.freebsd.org/changeset/base/241897[241897]
-|October 22, 2012
-|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]).
+|22 октября 2012
+|10-CURRENT после удаления поддержки не-MPSAFE файловых систем и добавления поддержки FUSEFS (rev link:https://svnweb.freebsd.org/changeset/base/241519[241519]).
|1000022
|link:https://svnweb.freebsd.org/changeset/base/241913[241913]
-|October 22, 2012
-|10-CURRENT after the entire IPv4 stack switched to network byte order for IP packet header storage.
+|22 октября 2012
+|10-CURRENT после перевода всего стека IPv4 на сетевой порядок байтов для хранения заголовков IP-пакетов.
|1000023
|link:https://svnweb.freebsd.org/changeset/base/242619[242619]
-|November 5, 2012
-|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.
+|5 ноября 2012
+|10-CURRENT после буфера джиттера в общем коде драйвера USB-последовательного порта, для временного хранения символов, если буфер TTY заполнен. Добавлены сигналы остановки и возобновления потока при возникновении такой ситуации.
|1000024
|link:https://svnweb.freebsd.org/changeset/base/242624[242624]
-|November 5, 2012
-|10-CURRENT after clang was made the default compiler on i386 and amd64.
+|5 ноября 2012
+|10-CURRENT после того, как clang стал компилятором по умолчанию для i386 и amd64.
|1000025
|link:https://svnweb.freebsd.org/changeset/base/243443[243443]
-|November 17, 2012
-|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.
+|17 ноября 2012
+|10-CURRENT после того, как переменная-член sin6_scope_id в структуре sockaddr_in6 была изменена таким образом, что ядро заполняет её перед передачей структуры в пользовательское пространство через sysctl или сокет маршрутизации. Это означает, что специфичный для KAME встроенный идентификатор области в sin6_addr.s6_addr[2] всегда очищается в пользовательских приложениях.
|1000026
|link:https://svnweb.freebsd.org/changeset/base/245313[245313]
-|January 11, 2013
-|10-CURRENT after install gained the -N flag. May also be used to indicate the presence of nmtree.
+|11 января 2013
+|10-CURRENT после установки получил флаг -N. Также может использоваться для указания наличия nmtree.
|1000027
|link:https://svnweb.freebsd.org/changeset/base/246084[246084]
-|January 29, 2013
-|10-CURRENT after cat gained the -l flag (rev link:https://svnweb.freebsd.org/changeset/base/246083[246083]).
+|29 января 2013
+|10-CURRENT после того, как команда `cat` получила флаг `-l` (rev link:https://svnweb.freebsd.org/changeset/base/246083[246083]).
|1000028
|link:https://svnweb.freebsd.org/changeset/base/246759[246759]
-|February 13, 2013
-|10-CURRENT after USB moved to the driver structure requiring a rebuild of all USB modules.
+|13 февраля 2013
+|10-CURRENT после перемещения USB в структуру драйверов, требующую пересборки всех модулей USB.
|1000029
|link:https://svnweb.freebsd.org/changeset/base/247821[247821]
-|March 4, 2013
-|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]).
+|4 марта 2013
+|10-CURRENT после внедрения бестиковой системы отложенных вызовов, которая также изменила структуру struct callout (rev link:https://svnweb.freebsd.org/changeset/base/247777[247777]).
|1000030
|link:https://svnweb.freebsd.org/changeset/base/248210[248210]
-|March 12, 2013
-|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]).
+|12 марта 2013
+|10-CURRENT после нарушения KPI, внесённого в подсистему VM для поддержки блокировок чтения/записи (rev link:https://svnweb.freebsd.org/changeset/base/248084[248084]).
|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]).
+|26 апреля 2013
+|10-CURRENT после изменения параметра `dst` метода `if_output` в ifnet, чтобы он принимал квалификатор const (ревизия link:https://svnweb.freebsd.org/changeset/base/249925[249925]).
|1000032
|link:https://svnweb.freebsd.org/changeset/base/250163[250163]
-|May 1, 2013
-|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.
+|1 мая 2013
+|10-CURRENT после введения системных вызовов man:accept4[2] (rev link:https://svnweb.freebsd.org/changeset/base/250154[250154]) и man:pipe2[2] (rev link:https://svnweb.freebsd.org/changeset/base/250159[250159]).
|1000033
|link:https://svnweb.freebsd.org/changeset/base/250881[250881]
-|May 21, 2013
-|10-CURRENT after flex 2.5.37 import.
+|21 мая 2013
+|10-CURRENT после импорта flex 2.5.37.
|1000034
|link:https://svnweb.freebsd.org/changeset/base/251294[251294]
-|June 3, 2013
-|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].
+|3 июня 2013
+|10-CURRENT после добавления следующих функций в 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].
|1000035
|link:https://svnweb.freebsd.org/changeset/base/251527[251527]
-|June 8, 2013
-|10-CURRENT after the introduction of the man:aio_mlock[2] system call (rev link:https://svnweb.freebsd.org/changeset/base/251526[251526]).
+|8 июня 2013
+|10-CURRENT после введения системного вызова man:aio_mlock[2] (изменение link:https://svnweb.freebsd.org/changeset/base/251526[251526]).
|1000036
|link:https://svnweb.freebsd.org/changeset/base/253049[253049]
-|July 9, 2013
-|10-CURRENT after the addition of a new function to the kernel GSSAPI module's function call interface.
+|9 июля 2013
+|10-CURRENT после добавления новой функции в интерфейс вызовов функций модуля ядра GSSAPI.
|1000037
|link:https://svnweb.freebsd.org/changeset/base/253089[253089]
-|July 9, 2013
-|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]).
+|9 июля 2013
+|10-CURRENT после миграции структур статистики на PCPU-счетчики. Измененные структуры включают: `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]).
|1000038
|link:https://svnweb.freebsd.org/changeset/base/253396[253396]
-|July 16, 2013
-|10-CURRENT after making `ARM EABI` the default ABI on arm, armeb, armv6, and armv6eb architectures.
+|16 июля 2013
+|10-CURRENT после установки `ARM EABI` в качестве ABI по умолчанию для архитектур arm, armeb, armv6 и armv6eb.
|1000039
|link:https://svnweb.freebsd.org/changeset/base/253549[253549]
-|July 22, 2013
-|10-CURRENT after `CAM` and man:mps[4] driver scanning changes.
+|22 июля 2013
+|10-CURRENT после изменений в сканировании драйверов `CAM` и man:mps[4].
|1000040
|link:https://svnweb.freebsd.org/changeset/base/253638[253638]
-|July 24, 2013
-|10-CURRENT after addition of libusb pkgconf files.
+|24 июля 2013
+|10-CURRENT после добавления файлов `pkgconf` для libusb.
|1000041
|link:https://svnweb.freebsd.org/changeset/base/253970[253970]
-|August 5, 2013
-|10-CURRENT after change from `time_second` to `time_uptime` in `PF_INET6`.
+|5 августа 2013
+|10-CURRENT после изменения с `time_second` на `time_uptime` в `PF_INET6`.
|1000042
|link:https://svnweb.freebsd.org/changeset/base/254138[254138]
-|August 9, 2013
-|10-CURRENT after VM subsystem change to unify soft and hard busy mechanisms.
+|9 августа 2013
+|10-CURRENT после изменения подсистемы VM для объединения механизмов мягкой и жесткой занятости.
|1000043
|link:https://svnweb.freebsd.org/changeset/base/254273[254273]
-|August 13, 2013
-|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:libiconv[] port.
+|13 августа 2013
+|10-CURRENT после того, как `WITH_ICONV` включён по умолчанию. Новая опция man:src.conf[5], `WITH_LIBICONV_COMPAT` (выключена по умолчанию), добавляет `libiconv_open` для обеспечения совместимости с портом package:converters/libiconv[].
|1000044
|link:https://svnweb.freebsd.org/changeset/base/254358[254358]
-|August 15, 2013
-|10-CURRENT after `libc.so` conversion to an man:ld[1] script (rev link:https://svnweb.freebsd.org/changeset/base/251668[251668]).
+|15 августа 2013
+|10-CURRENT после преобразования [.filename]#libc.so# в скрипт man:ld[1] (изменение rev link:https://svnweb.freebsd.org/changeset/base/251668[251668]).
|1000045
|link:https://svnweb.freebsd.org/changeset/base/254389[254389]
-|August 15, 2013
-|10-CURRENT after devfs programming interface change by replacing the cdevsw flag `D_UNMAPPED_IO` with the struct cdev flag `SI_UNMAPPED`.
+|15 августа 2013
+|10-CURRENT после изменения программного интерфейса devfs путем замены флага `D_UNMAPPED_IO` в cdevsw на флаг `SI_UNMAPPED` в структуре cdev.
|1000046
|link:https://svnweb.freebsd.org/changeset/base/254537[254537]
-|August 19, 2013
-|10-CURRENT after addition of `M_PROTO[9-12]` and removal of `M_FRAG\|M_FIRSTFRAG\|M_LASTFRAG` mbuf flags (rev link:https://svnweb.freebsd.org/changeset/base/254524[254524], link:https://svnweb.freebsd.org/changeset/base/254526[254526]).
+|19 августа 2013
+|10-CURRENT после добавления `M_PROTO[9-12]` и удаления `M_FRAG`\|M_FIRSTFRAG\|M_LASTFRAG` флаги mbuf (версии link:https://svnweb.freebsd.org/changeset/base/254524[254524], link:https://svnweb.freebsd.org/changeset/base/254526[254526]).
|1000047
|link:https://svnweb.freebsd.org/changeset/base/254627[254627]
-|August 21, 2013
-|10-CURRENT after man:stat[2] update to allow storing some Windows/DOS and CIFS file attributes as man:stat[2] flags.
+|21 августа 2013
+|10-CURRENT после обновления man:stat[2], позволяющего сохранять некоторые атрибуты файлов Windows/DOS и CIFS в виде флагов man:stat[2].
|1000048
|link:https://svnweb.freebsd.org/changeset/base/254672[254672]
|August 22, 2013
-|10-CURRENT after modification of structure `xsctp_inpcb`.
+|10-CURRENT после изменения структуры `xsctp_inpcb`.
|1000049
|link:https://svnweb.freebsd.org/changeset/base/254760[254760]
-|August 24, 2013
-|10-CURRENT after man:physio[9] support for devices that do not function properly with split I/O, such as man:sa[4].
+|24 августа 2013
+|10-CURRENT после поддержки man:physio[9] для устройств, которые работают некорректно с разделённым вводом-выводом, таких как man:sa[4].
|1000050
|link:https://svnweb.freebsd.org/changeset/base/254844[254844]
-|August 24, 2013
-|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]).
+|24 августа 2013
+|10-CURRENT после изменений структуры `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]).
|1000051
|link:https://svnweb.freebsd.org/changeset/base/254887[254887]
-|August 25, 2013
-|10-CURRENT after Radeon KMS driver import (rev link:https://svnweb.freebsd.org/changeset/base/254885[254885]).
+|25 августа 2013
+|10-CURRENT после импорта драйвера Radeon KMS (ревизия link:https://svnweb.freebsd.org/changeset/base/254885[254885]).
|1000052
|link:https://svnweb.freebsd.org/changeset/base/255180[255180]
-|September 3, 2013
-|10-CURRENT after import of NetBSD `libexecinfo` is connected to the build.
+|3 сентября 2013
+|10-CURRENT после импорта NetBSD `libexecinfo` подключен к сборке.
|1000053
|link:https://svnweb.freebsd.org/changeset/base/255305[255305]
-|September 6, 2013
-|10-CURRENT after API and ABI changes to the Capsicum framework.
+|6 сентября 2013
+|10-CURRENT после изменений API и ABI в рамках Capsicum.
|1000054
|link:https://svnweb.freebsd.org/changeset/base/255321[255321]
-|September 6, 2013
-|10-CURRENT after `gcc` and `libstdc++` are no longer built by default.
+|6 сентября 2013
+|10-CURRENT после того, как `gcc` и `libstdc++` больше не собираются по умолчанию.
|1000055
|link:https://svnweb.freebsd.org/changeset/base/255449[255449]
-|September 6, 2013
-|10-CURRENT after addition of `MMAP_32BIT` man:mmap[2] flag (rev link:https://svnweb.freebsd.org/changeset/base/255426[255426]).
+|6 сентября 2013
+|10-CURRENT после добавления флага `MMAP_32BIT` в man:mmap[2] (rev link:https://svnweb.freebsd.org/changeset/base/255426[255426]).
|1000100
|link:https://svnweb.freebsd.org/changeset/base/259065[259065]
|December 7, 2013
-|`releng/10.0` branched from `stable/10`.
+|`releng/10.0` ответвился от `stable/10`.
|1000500
|link:https://svnweb.freebsd.org/changeset/base/256283[256283]
-|October 10, 2013
-|10-STABLE after branch from `head/`.
+|10 октября 2013
+|10-STABLE после ветвления от `head/`.
|1000501
|link:https://svnweb.freebsd.org/changeset/base/256916[256916]
-|October 22, 2013
-|10-STABLE after addition of first-boot man:rc[8] support.
+|22 октября 2013
+|10-STABLE после добавления поддержки man:rc[8] при первой загрузке.
|1000502
|link:https://svnweb.freebsd.org/changeset/base/258398[258398]
-|November 20, 2013
-|10-STABLE after removal of iconv symbols from `libc.so.7`.
+|20 ноября 2013
+|10-STABLE после удаления символов iconv из `libc.so.7`.
|1000510
|link:https://svnweb.freebsd.org/changeset/base/259067[259067]
|December 7, 2013
-|`releng/10.0` __FreeBSD_version update to prevent the value from going backwards.
+|`releng/10.0` __FreeBSD_version обновлён, чтобы предотвратить уменьшение значения.
|1000700
|link:https://svnweb.freebsd.org/changeset/base/259069[259069]
|December 7, 2013
-|10-STABLE after `releng/10.0` branch.
+|10-STABLE после ветки `releng/10.0`.
|1000701
|link:https://svnweb.freebsd.org/changeset/base/259447[259447]
-|December 15, 2013
-|10.0-STABLE after Heimdal encoding fix.
+|15 декабря 2013
+|10.0-STABLE после исправления кодирования Heimdal.
|1000702
|link:https://svnweb.freebsd.org/changeset/base/260135[260135]
-|December 31, 2013
-|10-STABLE after MAP_STACK fixes.
+|31 декабря 2013
+|10-STABLE после исправлений MAP_STACK.
|1000703
|link:https://svnweb.freebsd.org/changeset/base/262801[262801]
-|March 5, 2014
-|10-STABLE after upgrade of libc++ to 3.4 release.
+|5 марта 2014
+|10-STABLE после обновления libc++ до версии 3.4.
|1000704
|link:https://svnweb.freebsd.org/changeset/base/262889[262889]
-|March 7, 2014
-|10-STABLE after MFC of the man:vt[4] driver (rev link:https://svnweb.freebsd.org/changeset/base/262861[262861]).
+|7 марта 2014
+|10-STABLE после слияния из ветки man:vt[4] драйвера (ревизия link:https://svnweb.freebsd.org/changeset/base/262861[262861]).
|1000705
|link:https://svnweb.freebsd.org/changeset/base/263508[263508]
-|March 21, 2014
-|10-STABLE after upgrade of llvm/clang to 3.4 release.
+|21 марта 2014
+|10-STABLE после обновления llvm/clang до версии 3.4.
|1000706
|link:https://svnweb.freebsd.org/changeset/base/264214[264214]
-|April 6, 2014
-|10-STABLE after GCC support for `__block` definition.
+|6 апреля 2014
+|10-STABLE после удаления поддержки GCC для определения `__block`.
|1000707
|link:https://svnweb.freebsd.org/changeset/base/264289[264289]
-|April 8, 2014
-|10-STABLE after FreeBSD-SA-14:06.openssl.
+|8 апреля 2014
+|10-STABLE после FreeBSD-SA-14:06.openssl.
|1000708
|link:https://svnweb.freebsd.org/changeset/base/265122[265122]
-|April 30, 2014
-|10-STABLE after FreeBSD-SA-14:07.devfs, FreeBSD-SA-14:08.tcp, and FreeBSD-SA-14:09.openssl.
+|30 апреля 2014
+|10-STABLE после FreeBSD-SA-14:07.devfs, FreeBSD-SA-14:08.tcp и FreeBSD-SA-14:09.openssl.
|1000709
|link:https://svnweb.freebsd.org/changeset/base/265946[265946]
-|May 13, 2014
-|10-STABLE after support for UDP-Lite protocol (RFC 3828).
+|13 мая 2014
+|10-STABLE после добавления поддержки протокола UDP-Lite (RFC 3828).
|1000710
|link:https://svnweb.freebsd.org/changeset/base/267465[267465]
-|June 13, 2014
-|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.
+|13 июня 2014
+|10-STABLE после изменений в man:strcasecmp[3], переноса man:strcasecmp_l[3] и man:strncasecmp_l[3] из [.filename]#<string.h># в [.filename]#<strings.h># для соответствия POSIX 2008.
|1000711
|link:https://svnweb.freebsd.org/changeset/base/268442[268442]
-|July 8, 2014
-|10-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268432[268432]).
+|8 июля 2014
+|10-STABLE после FreeBSD-SA-14:17.kmem (ревизия:https://svnweb.freebsd.org/changeset/base/268432[268432]).
|1000712
|link:https://svnweb.freebsd.org/changeset/base/269400[269400]
-|August 1, 2014
-|10-STABLE after man:nfsd[8] 4.1 merge (rev link:https://svnweb.freebsd.org/changeset/base/269398[269398]).
+|1 августа 2014
+|10-STABLE после слияния man:nfsd[8] 4.1 (rev link:https://svnweb.freebsd.org/changeset/base/269398[269398]).
|1000713
|link:https://svnweb.freebsd.org/changeset/base/269484[269484]
-|August 3, 2014
-|10-STABLE after man:regex[3] library update to add ">" and "<" delimiters.
+|3 августа 2014
+|10-STABLE после обновления библиотеки man:regex[3] для добавления разделителей ">" и "<".
|1000714
|link:https://svnweb.freebsd.org/changeset/base/270174[270174]
-|August 3, 2014
-|10-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269490[269490]).
+|3 августа 2014
+|10-STABLE после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269490[269490]).
|1000715
|link:https://svnweb.freebsd.org/changeset/base/271341[271341]
-|September 9, 2014
-|10-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686]).
+|9 сентября 2014
+|10-STABLE после FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686]).
|1000716
|link:https://svnweb.freebsd.org/changeset/base/271686[271686]
-|September 16, 2014
-|10-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271667[271667]).
+|16 сентября 2014
+|10-STABLE после FreeBSD-SA-14:19 (ревизия link:https://svnweb.freebsd.org/changeset/base/271667[271667]).
|1000717
|link:https://svnweb.freebsd.org/changeset/base/271816[271816]
-|September 18, 2014
-|10-STABLE after i915 HW context support.
+|18 сентября 2014
+|10-STABLE после добавления поддержки аппаратного контекста i915.
|1001000
|link:https://svnweb.freebsd.org/changeset/base/272463[272463]
-|October 2, 2014
-|10.1-RC1 after releng/10.1 branch.
+|2 октября 2014
+|10.1-RC1 после ветки releng/10.1.
|1001500
|link:https://svnweb.freebsd.org/changeset/base/272464[272464]
-|October 2, 2014
-|10-STABLE after releng/10.1 branch.
+|2 октября 2014
+|10-STABLE после ветки releng/10.1.
|1001501
|link:https://svnweb.freebsd.org/changeset/base/273432[273432]
-|October 21, 2014
-|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]).
+|21 октября 2014
+|10-STABLE после исправлений уязвимостей FreeBSD-SA-14:20, FreeBSD-SA-14:22 и FreeBSD-SA-14:23 (ссылка на ревизию: https://svnweb.freebsd.org/changeset/base/273411[273411]).
|1001502
|link:https://svnweb.freebsd.org/changeset/base/274162[274162]
-|November 4, 2014
-|10-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25.
+|4 ноября 2014
+|10-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25.
|1001503
|link:https://svnweb.freebsd.org/changeset/base/275040[275040]
-|November 25, 2014
-|10-STABLE after merging new libraries/utilities (man:dpv[1] man:dpv[3], and man:figpar[3]) for data throughput visualization.
+|25 ноября 2014
+|10-STABLE после объединения новых библиотек/утилит (man:dpv[1], man:dpv[3] и man:figpar[3]) для визуализации пропускной способности данных.
|1001504
|link:https://svnweb.freebsd.org/changeset/base/275742[275742]
-|December 13, 2014
-|10-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases.
+|13 декабря 2014
+|10-STABLE после объединения важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера.
|1001505
|link:https://svnweb.freebsd.org/changeset/base/276633[276633]
-|January 3, 2015
-|10-STABLE after merging some arm constants in link:https://svnweb.freebsd.org/changeset/base/276312[276312].
+|3 января 2015
+|10-STABLE после объединения некоторых констант ARM в link:https://svnweb.freebsd.org/changeset/base/276312[276312].
|1001506
|link:https://svnweb.freebsd.org/changeset/base/277087[277087]
-|January 12, 2015
-|10-STABLE after merging max table size update for yacc.
+|12 января 2015
+|10-STABLE после объединения обновления максимального размера таблицы для yacc.
|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.
+|27 января 2015
+|10-STABLE после изменений в обратном вызове туннелирования UDP для предоставления указателя контекста и исходного `sockaddr`.
|1001508
|link:https://svnweb.freebsd.org/changeset/base/278974[278974]
-|February 18, 2015
-|10-STABLE after addition of the `CDAI_TYPE_EXT_INQ` request type.
+|18 февраля 2015
+|10-STABLE после добавления типа запроса `CDAI_TYPE_EXT_INQ`.
|1001509
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
-|February 25, 2015
-|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.
+|25 февраля 2015
+|10-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind.
|1001510
|link:https://svnweb.freebsd.org/changeset/base/279329[279329]
-|February 26, 2015
-|10-STABLE after MFC of rev link:https://svnweb.freebsd.org/changeset/base/278964[278964].
+|26 февраля 2015
+|10-STABLE после MFC ревизии link:https://svnweb.freebsd.org/changeset/base/278964[278964].
|1001511
|link:https://svnweb.freebsd.org/changeset/base/280246[280246]
-|19 March, 2015
-|10-STABLE after [.filename]#sys/capability.h# is renamed to [.filename]#sys/capsicum.h# (rev link:https://svnweb.freebsd.org/changeset/base/280224/[280224/]).
+|19 марта 2015
+|10-STABLE после переименования [.filename]#sys/capability.h# в [.filename]#sys/capsicum.h# (изменение:https://svnweb.freebsd.org/changeset/base/280224/[280224/]).
|1001512
|link:https://svnweb.freebsd.org/changeset/base/280438[280438]
-|24 March, 2015
-|10-STABLE after addition of new man:mtio[4], man:sa[4] ioctls.
+|24 марта 2015
+|10-STABLE после добавления новых ioctl в man:mtio[4] и man:sa[4].
|1001513
|link:https://svnweb.freebsd.org/changeset/base/281955[281955]
-|24 April, 2015
-|10-STABLE after starting the process of removing the use of the deprecated "M_FLOWID" flag from the network code.
+|24 апреля 2015
+|10-STABLE после начала процесса удаления использования устаревшего флага "M_FLOWID" из сетевого кода.
|1001514
|link:https://svnweb.freebsd.org/changeset/base/282275[282275]
-|April 30, 2015
-|10-STABLE after MFC of man:iconv[3] fixes.
+|30 апреля 2015
+|10-STABLE после MFC исправлений man:iconv[3].
|1001515
|link:https://svnweb.freebsd.org/changeset/base/282781[282781]
-|May 11, 2015
-|10-STABLE after adding back `M_FLOWID`.
+|11 мая 2015
+|10-STABLE после возврата `M_FLOWID`.
|1001516
|link:https://svnweb.freebsd.org/changeset/base/283341[283341]
-|May 24, 2015
-|10-STABLE after MFC of many USB things.
+|24 мая 2015
+|10-STABLE после переноса (MFC) множества изменений, связанных с USB.
|1001517
|link:https://svnweb.freebsd.org/changeset/base/283950[283950]
-|June 3, 2015
-|10-STABLE after MFC of sound related things.
+|3 июня 2015
+|10-STABLE после слияния изменений, связанных со звуком.
|1001518
|link:https://svnweb.freebsd.org/changeset/base/284204[284204]
-|June 10, 2015
-|10-STABLE after MFC of zfs vfs fixes (rev link:https://svnweb.freebsd.org/changeset/base/284203[284203]).
+|10 июня 2015
+|10-STABLE после MFC исправлений vfs для zfs (rev link:https://svnweb.freebsd.org/changeset/base/284203[284203]).
|1001519
|link:https://svnweb.freebsd.org/changeset/base/284720[284720]
-|June 23, 2015
-|10-STABLE after reverting bumping `MAXCPU` on amd64.
+|23 июня 2015
+|10-STABLE после отмены увеличения `MAXCPU` на amd64.
|1002000
|link:https://svnweb.freebsd.org/changeset/base/285830[285830]
-|24 July, 2015
-|`releng/10.2` branched from 10-STABLE.
+|24 июля 2015
+|`releng/10.2` отделился от 10-STABLE.
|1002500
|link:https://svnweb.freebsd.org/changeset/base/285831[285831]
-|24 July, 2015
-|10-STABLE after `releng/10.2` branched from 10-STABLE.
+|24 июля 2015
+|10-STABLE после того, как ветка `releng/10.2` отделилась от 10-STABLE.
|1002501
|link:https://svnweb.freebsd.org/changeset/base/289005[289005]
-|8 October, 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]).
+|8 октября 2015
+|10-STABLE после объединения изменений ZFS, затронувших внутренний интерфейс структуры `zfeature_info` (rev link:https://svnweb.freebsd.org/changeset/base/288572[288572]).
|1002502
|link:https://svnweb.freebsd.org/changeset/base/291243[291243]
-|24 November, 2015
-|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]).
+|24 ноября 2015
+|10-STABLE после объединения изменений устройств дампа, которые затронули аргументы `g_dev_setdumpdev()`(rev link:https://svnweb.freebsd.org/changeset/base/291215[291215]).
|1002503
|link:https://svnweb.freebsd.org/changeset/base/292224[292224]
-|14 December, 2015
-|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]).
+|14 декабря 2015
+|10-STABLE после объединения изменений во внутренний интерфейс между модулями nfsd.ko и nfscommon.ko, что требует их совместного обновления (rev link:https://svnweb.freebsd.org/changeset/base/292223[292223]).
|1002504
|link:https://svnweb.freebsd.org/changeset/base/292589[292589]
-|22 December, 2015
-|10-STABLE after merge of xz 5.2.2 merge (multithread support) (rev link:https://svnweb.freebsd.org/changeset/base/292588[292588]).
+|22 декабря 2015
+|10-STABLE после слияния xz 5.2.2 (поддержка многопоточности) (rev link:https://svnweb.freebsd.org/changeset/base/292588[292588]).
|1002505
|link:https://svnweb.freebsd.org/changeset/base/292908[292908]
-|30 December, 2015
-|10-STABLE after merge of changes to man:pci[4] (rev link:https://svnweb.freebsd.org/changeset/base/292907[292907]).
+|30 декабря 2015
+|10-STABLE после объединения изменений в man:pci[4] (rev link:https://svnweb.freebsd.org/changeset/base/292907[292907]).
|1002506
|link:https://svnweb.freebsd.org/changeset/base/293476[293476]
-|9 January, 2016
-|10-STABLE after merge of man:utimensat[2] (rev link:https://svnweb.freebsd.org/changeset/base/293473[293473]).
+|9 января 2016
+|10-STABLE после объединения man:utimensat[2] (изменение link:https://svnweb.freebsd.org/changeset/base/293473[293473]).
|1002507
|link:https://svnweb.freebsd.org/changeset/base/293610[293610]
-|9 January, 2016
-|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]).
+|9 января 2016
+|10-STABLE после объединения изменений в man:linux[4] (rev link:https://svnweb.freebsd.org/changeset/base/293477[293477] через link:https://svnweb.freebsd.org/changeset/base/293609[293609]).
|1002508
|link:https://svnweb.freebsd.org/changeset/base/293619[293619]
-|9 January, 2016
-|10-STABLE after merge of changes to man:figpar[3] types/macros (rev link:https://svnweb.freebsd.org/changeset/base/290275[290275]).
+|9 января 2016
+|10-STABLE после объединения изменений в типы/макросы man:figpar[3] (rev link:https://svnweb.freebsd.org/changeset/base/290275[290275]).
|1002509
|link:https://svnweb.freebsd.org/changeset/base/295107[295107]
-|1 February, 2016
-|10-STABLE after merge of API change to man:dpv[3].
+|1 февраля 2016
+|10-STABLE после объединения изменения API в man:dpv[3].
|1003000
|link:https://svnweb.freebsd.org/changeset/base/296373[296373]
-|4 March, 2016
-|`releng/10.3` branched from 10-STABLE.
+|4 марта 2016
+|`releng/10.3` ответвился от 10-STABLE.
|1003500
|link:https://svnweb.freebsd.org/changeset/base/296374[296374]
-|4 March, 2016
-|10-STABLE after `releng/10.3` branched from 10-STABLE.
+|4 марта 2016
+|10-STABLE после того, как ветка `releng/10.3` отделилась от 10-STABLE.
|1003501
|link:https://svnweb.freebsd.org/changeset/base/298299[298299]
-|19 June, 2016
-|10-STABLE after adding kdbcontrol's -P option (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297]).
+|19 июня 2016
+|10-STABLE после добавления опции -P для `kdbcontrol` (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297]).
|1003502
|link:https://svnweb.freebsd.org/changeset/base/299966[299966]
-|19 June, 2016
-|10-STABLE after libcrypto.so was made position independent.
+|19 июня 2016
+|10-STABLE после того, как libcrypto.so стала позиционно-независимой.
|1003503
|link:https://svnweb.freebsd.org/changeset/base/300235[300235]
-|19 June, 2016
-|10-STABLE after allowing MK_ overrides (rev link:https://svnweb.freebsd.org/changeset/base/300233[300233]).
+|19 июня 2016
+|10-STABLE после разрешения переопределений `MK_` (изменение link:https://svnweb.freebsd.org/changeset/base/300233[300233]).
|1003504
|link:https://svnweb.freebsd.org/changeset/base/302066[302066]
-|21 June, 2016
-|10-STABLE after MFC of filemon changes from 11-CURRENT.
+|21 июня 2016
+|10-STABLE после переноса изменений `filemon` из 11-CURRENT.
|1003505
|link:https://svnweb.freebsd.org/changeset/base/302228[302228]
-|27 June, 2016
-|10-STABLE after converting sed to use REG_STARTEND, fixing a Mesa issue.
+|27 июня 2016
+|10-STABLE после замены в sed на использование REG_STARTEND, с исправлением проблемы в Mesa.
|1003506
|link:https://svnweb.freebsd.org/changeset/base/304611[304611]
-|August 22, 2016
-|10-STABLE after adding C++11 thread_local support.
+|22 августа 2016
+|10-STABLE после добавления поддержки `thread_local` в C++11.
|1003507
|link:https://svnweb.freebsd.org/changeset/base/304864[304864]
-|August 26, 2016
-|10-STABLE after `LC_*_MASK` fix.
+|26 августа 2016
+|10-STABLE после исправления `LC_*_MASK`.
|1003508
|link:https://svnweb.freebsd.org/changeset/base/305734[305734]
-|September 12, 2016
-|10-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9].
+|12 сентября 2016
+|10-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9].
|1003509
|link:https://svnweb.freebsd.org/changeset/base/307331[307331]
-|October 14, 2016
-|10-STABLE after ZFS merges.
+|14 октября 2016
+|10-STABLE после слияния с ZFS.
|1003510
|link:https://svnweb.freebsd.org/changeset/base/308047[308047]
-|October 28, 2016
-|10-STABLE after installing header files required development with libzfs_core.
+|28 октября 2016
+|10-STABLE после установки заголовочных файлов, необходимых для разработки с libzfs_core.
|1003511
|link:https://svnweb.freebsd.org/changeset/base/310121[310121]
-|December 15, 2016
-|10-STABLE after exporting whole thread name in `kinfo_proc` (rev link:https://svnweb.freebsd.org/changeset/base/309676[309676]).
+|15 декабря 2016
+|10-STABLE после экспорта полного имени потока в `kinfo_proc` (rev link:https://svnweb.freebsd.org/changeset/base/309676[309676]).
|1003512
|link:https://svnweb.freebsd.org/changeset/base/315730[315730]
-|March 22, 2017
-|10-STABLE after libmd changes (rev link:https://svnweb.freebsd.org/changeset/base/314143[314143]).
+|22 марта 2017
+|10-STABLE после изменений в libmd (rev link:https://svnweb.freebsd.org/changeset/base/314143[314143]).
|1003513
|link:https://svnweb.freebsd.org/changeset/base/316499[316499]
-|April 4, 2017
-|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]).
+|4 апреля 2017
+|10-STABLE после того, как блокировка CAM SIM стала опциональной (ревизии link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674]).
|1003514
|link:https://svnweb.freebsd.org/changeset/base/318198[318198]
-|May 11, 2017
-|10-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header.
+|11 мая 2017
+|10-STABLE после объединения добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#.
|1003515
|link:https://svnweb.freebsd.org/changeset/base/321222[321222]
-|July 19, 2017
-|10-STABLE after adding C++14 sized deallocation functions to libc++.
+|19 июля 2017
+|10-STABLE после добавления функций освобождения памяти с указанием размера из C++14 в libc++.
|1003516
|link:https://svnweb.freebsd.org/changeset/base/321717[321717]
-|July 30, 2017
-|10-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition.
+|30 июля 2017
+|10-STABLE после объединения добавления флага `MAP_GUARD` в man:mmap[2].
|1004000
|link:https://svnweb.freebsd.org/changeset/base/323604[323604]
-|September 15, 2017
-|`releng/10.4` branched from 10-STABLE.
+|15 сентября 2017
+|`releng/10.4` ответвился от 10-STABLE.
|1004500
|link:https://svnweb.freebsd.org/changeset/base/323605[323605]
-|September 15, 2017
-|10-STABLE after `releng/10.4` branched from 10-STABLE.
+|15 сентября 2017
+|10-STABLE после того, как ветка `releng/10.4` отделилась от 10-STABLE.
|1004501
|link:https://svnweb.freebsd.org/changeset/base/328379[328379]
-|January 24, 2018
-|10-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/325028[325028], fixing `ptrace()` to always clear the correct thread event when resuming.
+|24 января 2018
+|10-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/325028[325028], исправляющего `ptrace()`, чтобы всегда очищать правильное событие потока при возобновлении.
|1004502
|link:https://svnweb.freebsd.org/changeset/base/356396[356396]
-|January 6, 2020
-|10-STABLE after making USB statistics be per-device instead of per bus.
+|6 января 2020
+|10-STABLE после изменения статистики USB для каждого устройства вместо каждой шины.
|1004503
|link:https://svnweb.freebsd.org/changeset/base/356681[356681]
-|January 13, 2020
-|10-STABLE after adding own counter for cancelled USB transfers.
+|13 января 2020
+|10-STABLE после добавления собственного счетчика для отмененных USB-передач.
|===
[[versions-9]]
-== FreeBSD 9 Versions
+== Версии FreeBSD 9
[[freebsd-versions-table-9]]
-.FreeBSD 9 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 9
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|900000
|link:https://svnweb.freebsd.org/changeset/base/196432[196432]
-|August 22, 2009
+|22 августа 2009
|9.0-CURRENT.
|900001
|link:https://svnweb.freebsd.org/changeset/base/197019[197019]
-|September 8, 2009
-|9.0-CURRENT after importing x86emu, a software emulator for real mode x86 CPU from OpenBSD.
+|8 сентября 2009
+|9.0-CURRENT после импорта x86emu, программного эмулятора процессора x86 в реальном режиме из OpenBSD.
|900002
|link:https://svnweb.freebsd.org/changeset/base/197430[197430]
-|September 23, 2009
-|9.0-CURRENT after implementing the EVFILT_USER kevent filter functionality.
+|23 сентября 2009
+|9.0-CURRENT после реализации функциональности фильтра `kevent` `EVFILT_USER`.
|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.
+|2 декабря 2009
+|9.0-CURRENT после добавления man:sigpause[2] и поддержки PIE в `csu`.
|900004
|link:https://svnweb.freebsd.org/changeset/base/200185[200185]
-|December 6, 2009
-|9.0-CURRENT after addition of libulog and its libutempter compatibility interface.
+|6 декабря 2009
+|9.0-CURRENT после добавления libulog и его совместимого интерфейса libutempter.
|900005
|link:https://svnweb.freebsd.org/changeset/base/200447[200447]
|December 12, 2009
-|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.
+|9.0-CURRENT после добавления man:sleepq_sleepcnt[9], который может использоваться для запроса количества ожидающих в конкретной очереди ожидания.
|900006
|link:https://svnweb.freebsd.org/changeset/base/201513[201513]
-|January 4, 2010
-|9.0-CURRENT after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4.
+|4 января 2010
+|9.0-CURRENT после изменения прототипов man:scandir[3] и man:alphasort[3] для соответствия SUSv4.
|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.
+|13 января 2010
+|9.0-CURRENT после удаления man:utmp[5] и добавления `utmpx` (см. man:getutxent[3]) для улучшенного логирования входов пользователей и системных событий.
|900008
|link:https://svnweb.freebsd.org/changeset/base/202722[202722]
-|January 20, 2010
-|9.0-CURRENT after the import of BSDL bc/dc and the deprecation of GNU bc/dc.
+|20 января 2010
+|9.0-CURRENT после импорта BSDL bc/dc и устаревания GNU bc/dc.
|900009
|link:https://svnweb.freebsd.org/changeset/base/203052[203052]
-|January 26, 2010
-|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.
+|26 января 2010
+|9.0-CURRENT после добавления ioctl SIOCGIFDESCR и SIOCSIFDESCR к сетевым интерфейсам. Эти ioctl могут использоваться для управления описанием интерфейса, по аналогии с OpenBSD.
|900010
|link:https://svnweb.freebsd.org/changeset/base/205471[205471]
-|March 22, 2010
-|9.0-CURRENT after the import of zlib 1.2.4.
+|22 марта 2010
+|9.0-CURRENT после импорта zlib 1.2.4.
|900011
|link:https://svnweb.freebsd.org/changeset/base/207410[207410]
|April 24, 2010
-|9.0-CURRENT after adding soft-updates journalling.
+|9.0-CURRENT после добавления журналирования soft-updates.
|900012
|link:https://svnweb.freebsd.org/changeset/base/207842[207842]
-|May 10, 2010
-|9.0-CURRENT after adding liblzma, xz, xzdec, and lzmainfo.
+|10 мая 2010
+|9.0-CURRENT после добавления liblzma, xz, xzdec и lzmainfo.
|900013
|link:https://svnweb.freebsd.org/changeset/base/208486[208486]
-|May 24, 2010
-|9.0-CURRENT after bringing in USB fixes for man:linux[4].
+|24 мая 2010
+|9.0-CURRENT после внесения исправлений для USB в man:linux[4].
|900014
|link:https://svnweb.freebsd.org/changeset/base/208973[208973]
-|June 10, 2010
-|9.0-CURRENT after adding Clang.
+|10 июня 2010
+|9.0-CURRENT после добавления Clang.
|900015
|link:https://svnweb.freebsd.org/changeset/base/210390[210390]
-|July 22, 2010
-|9.0-CURRENT after the import of BSD grep.
+|22 июля 2010
+|9.0-CURRENT после импорта BSD grep.
|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.
+|28 июля 2010
+|9.0-CURRENT после добавления `mti_zone` в структуру `malloc_type_internal`.
|900017
|link:https://svnweb.freebsd.org/changeset/base/211701[211701]
-|August 23, 2010
-|9.0-CURRENT after changing back default grep to GNU grep and adding WITH_BSD_GREP knob.
+|23 августа 2010
+|9.0-CURRENT после возврата к GNU grep по умолчанию и добавления параметра WITH_BSD_GREP.
|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.
+|24 августа 2010
+|9.0-CURRENT после того, как сигнал, сгенерированный через man:pthread_kill[3], идентифицируется как SI_LWP в `si_code`. Ранее `si_code` имел значение SI_USER.
|900019
|link:https://svnweb.freebsd.org/changeset/base/211937[211937]
-|August 28, 2010
-|9.0-CURRENT after addition of the MAP_PREFAULT_READ flag to man:mmap[2].
+|28 августа 2010
+|9.0-CURRENT после добавления флага MAP_PREFAULT_READ в man:mmap[2].
|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 сентября 2010
+|9.0-CURRENT после добавления функциональности drain в `sbufs`, что также изменило структуру struct `sbuf`.
|900021
|link:https://svnweb.freebsd.org/changeset/base/212568[212568]
-|September 13, 2010
-|9.0-CURRENT after DTrace has grown support for userland tracing.
+|13 сентября 2010
+|9.0-CURRENT после того, как DTrace обзавелся поддержкой трассировки в пользовательском пространстве.
|900022
|link:https://svnweb.freebsd.org/changeset/base/213395[213395]
-|October 2, 2010
-|9.0-CURRENT after addition of the BSDL man utilities and retirement of GNU/GPL man utilities.
+|2 октября 2010
+|9.0-CURRENT после добавления утилит man под лицензией BSDL и удаления утилит man под лицензией GNU/GPL.
|900023
|link:https://svnweb.freebsd.org/changeset/base/213700[213700]
-|October 11, 2010
-|9.0-CURRENT after updating xz to git 20101010 snapshot.
+|11 октября 2010
+|9.0-CURRENT после обновления xz до снимка git 20101010.
|900024
|link:https://svnweb.freebsd.org/changeset/base/215127[215127]
-|November 11, 2010
-|9.0-CURRENT after libgcc.a was replaced by libcompiler_rt.a.
+|11 ноября 2010
+|9.0-CURRENT после замены libgcc.a на libcompiler_rt.a.
|900025
|link:https://svnweb.freebsd.org/changeset/base/215166[215166]
-|November 12, 2010
-|9.0-CURRENT after the introduction of the modularised congestion control.
+|12 ноября 2010
+|9.0-CURRENT после внедрения модульной системы управления перегрузкой.
|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.
+|30 ноября 2010
+|9.0-CURRENT после введения сквозной передачи Serial Management Protocol (SMP) и CAM `CCBs` XPT_SMP_IO и XPT_GDEV_ADVINFO.
|900027
|link:https://svnweb.freebsd.org/changeset/base/216212[216212]
-|December 5, 2010
-|9.0-CURRENT after the addition of log2 to libm.
+|5 декабря 2010
+|9.0-CURRENT после добавления log2 в libm.
|900028
|link:https://svnweb.freebsd.org/changeset/base/216615[216615]
-|December 21, 2010
-|9.0-CURRENT after the addition of the Hhook (Helper Hook), Khelp (Kernel Helpers) and Object Specific Data (OSD) KPIs.
+|21 декабря 2010
+|9.0-CURRENT после добавления Hhook (Helper Hook), Khelp (Kernel Helpers) и KPI Object Specific Data (OSD).
|900029
|link:https://svnweb.freebsd.org/changeset/base/216758[216758]
-|December 28, 2010
-|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.
+|28 декабря 2010
+|9.0-CURRENT после модификации стека TCP для разрешения модулям Khelp взаимодействовать с ним через точки подключения вспомогательных функций и хранить данные для каждого соединения в блоке управления TCP.
|900030
|link:https://svnweb.freebsd.org/changeset/base/217309[217309]
-|January 12, 2011
-|9.0-CURRENT after the update of libdialog to version 20100428.
+|12 января 2011
+|9.0-CURRENT после обновления libdialog до версии 20100428.
|900031
|link:https://svnweb.freebsd.org/changeset/base/218414[218414]
-|February 7, 2011
-|9.0-CURRENT after the addition of man:pthread_getthreadid_np[3].
+|7 февраля 2011
+|9.0-CURRENT после добавления man:pthread_getthreadid_np[3].
|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.
+|8 февраля 2011
+|9.0-CURRENT после удаления прототипа и символа `uio_yield`.
|900033
|link:https://svnweb.freebsd.org/changeset/base/218822[218822]
-|February 18, 2011
-|9.0-CURRENT after the update of binutils to version 2.17.50.
+|18 февраля 2011
+|9.0-CURRENT после обновления binutils до версии 2.17.50.
|900034
|link:https://svnweb.freebsd.org/changeset/base/219406[219406]
-|March 8, 2011
-|9.0-CURRENT after the struct sysvec (sv_schedtail) changes.
+|8 марта 2011
+|9.0-CURRENT после изменений в структуре `sysvec` (`sv_schedtail`).
|900035
|link:https://svnweb.freebsd.org/changeset/base/220150[220150]
-|March 29, 2011
-|9.0-CURRENT after the update of base gcc and libstdc++ to the last GPLv2 licensed revision.
+|29 марта 2011
+|9.0-CURRENT после обновления базового gcc и libstdc++ до последней ревизии, лицензированной под GPLv2.
|900036
|link:https://svnweb.freebsd.org/changeset/base/220770[220770]
-|April 18, 2011
-|9.0-CURRENT after the removal of libobjc and Objective-C support from the base system.
+|18 апреля 2011
+|9.0-CURRENT после удаления libobjc и поддержки Objective-C из базовой системы.
|900037
|link:https://svnweb.freebsd.org/changeset/base/221862[221862]
-|May 13, 2011
-|9.0-CURRENT after importing the man:libprocstat[3] library and man:fuser[1] utility to the base system.
+|13 мая 2011
+|9.0-CURRENT после импорта библиотеки man:libprocstat[3] и утилиты man:fuser[1] в базовую систему.
|900038
|link:https://svnweb.freebsd.org/changeset/base/222167[222167]
-|May 22, 2011
-|9.0-CURRENT after adding a lock flag argument to man:VFS_FHTOVP[9].
+|22 мая 2011
+|9.0-CURRENT после добавления аргумента флага блокировки к man:VFS_FHTOVP[9].
|900039
|link:https://svnweb.freebsd.org/changeset/base/223637[223637]
-|June 28, 2011
-|9.0-CURRENT after importing pf from OpenBSD 4.5.
+|28 июня 2011
+|9.0-CURRENT после импорта pf из OpenBSD 4.5.
|900040
|link:https://svnweb.freebsd.org/changeset/base/224217[224217]
-|July 19, 2011
-|Increase default MAXCPU for FreeBSD to 64 on amd64 and ia64 and to 128 for XLP (mips).
+|19 июля 2011
+|Увеличить значение MAXCPU по умолчанию для FreeBSD до 64 на amd64 и ia64 и до 128 для XLP (mips).
|900041
|link:https://svnweb.freebsd.org/changeset/base/224834[224834]
-|August 13, 2011
-|9.0-CURRENT after the implementation of Capsicum capabilities; fget(9) gains a rights argument.
+|13 августа 2011
+|Версия 9.0-CURRENT после реализации возможностей Capsicum; man:fget[9] получает аргумент rights.
|900042
|link:https://svnweb.freebsd.org/changeset/base/225350[225350]
-|August 28, 2011
-|Bump shared libraries' version numbers for libraries whose ABI has changed in preparation for 9.0.
+|28 августа 2011
+|Увеличьте номера версий общих библиотек для библиотек, чей ABI изменился в рамках подготовки к 9.0.
|900043
|link:https://svnweb.freebsd.org/changeset/base/225350[225350]
-|September 2, 2011
-|Add automatic detection of USB mass storage devices which do not support the no synchronize cache SCSI command.
+|2 сентября 2011
+|Добавить автоматическое обнаружение USB-накопителей, которые не поддерживают команду SCSI "no synchronize cache".
|900044
|link:https://svnweb.freebsd.org/changeset/base/225469[225469]
-|September 10, 2011
-|Re-factor auto-quirk. 9.0-RELEASE.
+|10 сентября 2011
+|Переработка автоматического определения особенностей оборудования (auto-quirk). 9.0-RELEASE.
|900045
|link:https://svnweb.freebsd.org/changeset/base/229285[229285]
-|January 2, 2012
-|9-STABLE after MFC of true/false from 1000002.
+|2 января 2012
+|9-STABLE после MFC значения true/false из 1000002.
|900500
|link:https://svnweb.freebsd.org/changeset/base/229318[229318]
-|January 2, 2012
+|2 января 2012
|9.0-STABLE.
|900501
|link:https://svnweb.freebsd.org/changeset/base/229723[229723]
-|January 6, 2012
-|9.0-STABLE after merging of addition of the man:posix_fadvise[2] system call.
+|6 января 2012
+|9.0-STABLE после объединения добавления системного вызова man:posix_fadvise[2].
|900502
|link:https://svnweb.freebsd.org/changeset/base/230237[230237]
-|January 16, 2012
-|9.0-STABLE after merging gperf 3.0.3
+|16 января 2012
+|9.0-STABLE после слияния gperf 3.0.3
|900503
|link:https://svnweb.freebsd.org/changeset/base/231768[231768]
-|February 15, 2012
-|9.0-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists.
+|15 февраля 2012
+|9.0-STABLE после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов.
|900504
|link:https://svnweb.freebsd.org/changeset/base/232728[232728]
-|March 3, 2012
-|9.0-STABLE after changes related to mounting of filesystem inside a jail.
+|3 марта 2012
+|9.0-STABLE после изменений, связанных с монтированием файловой системы внутри клетки.
|900505
|link:https://svnweb.freebsd.org/changeset/base/232945[232945]
-|March 13, 2012
-|9.0-STABLE after introduction of new man:tcp[4] socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT.
+|13 марта 2012
+|9.0-STABLE после введения новых параметров сокета man:tcp[4]: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT.
|900506
|link:https://svnweb.freebsd.org/changeset/base/235786[235786]
-|May 22, 2012
-|9.0-STABLE after introduction of the `quick_exit` function and related changes required for C++11.
+|22 мая 2012
+|9.0-STABLE после введения функции `quick_exit` и связанных изменений, необходимых для C++11.
|901000
|link:https://svnweb.freebsd.org/changeset/base/239082[239082]
-|August 5, 2012
+|5 августа 2012
|9.1-RELEASE.
|901500
|link:https://svnweb.freebsd.org/changeset/base/239081[239081]
-|August 6, 2012
-|9.1-STABLE after branching releng/9.1 (RELENG_9_1).
+|6 августа 2012
+|9.1-STABLE после ветвления releng/9.1 (RELENG_9_1).
|901501
|link:https://svnweb.freebsd.org/changeset/base/240659[240659]
-|November 11, 2012
-|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.
+|11 ноября 2012
+|9.1-STABLE после man:LIST_PREV[3] добавлен в queue.h (изменение rev link:https://svnweb.freebsd.org/changeset/base/242893[242893]) и изменения KBI в USB последовательных устройствах.
|901502
|link:https://svnweb.freebsd.org/changeset/base/243656[243656]
-|November 28, 2012
-|9.1-STABLE after USB serial jitter buffer requires rebuild of USB serial device modules.
+|28 ноября 2012
+|9.1-STABLE после того, как буфер дрожания USB serial требует пересборки модулей устройств USB serial.
|901503
|link:https://svnweb.freebsd.org/changeset/base/247090[247090]
-|February 21, 2013
-|9.1-STABLE after USB moved to the driver structure requiring a rebuild of all USB modules. Also indicates the presence of nmtree.
+|21 февраля 2013
+|9.1-STABLE после перемещения USB в структуру драйверов, что потребовало пересборки всех модулей USB. Также указывает на наличие nmtree.
|901504
|link:https://svnweb.freebsd.org/changeset/base/248338[248338]
-|March 15, 2013
-|9.1-STABLE after install gained -l, -M, -N and related flags and cat gained the -l option.
+|15 марта 2013
+|9.1-STABLE после установки получил флаги -l, -M, -N и связанные с ними, а cat получил опцию -l.
|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]).
+|13 июня 2013
+|9.1-STABLE после исправлений в начальной загрузке `ctfmerge` (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243]).
|902001
|link:https://svnweb.freebsd.org/changeset/base/253912[253912]
-|August 3, 2013
-|`releng/9.2` branched from `stable/9`.
+|3 августа 2013
+|`releng/9.2` ответвился от `stable/9`.
|902501
|link:https://svnweb.freebsd.org/changeset/base/253913[253913]
-|August 2, 2013
-|9.2-STABLE after creation of `releng/9.2` branch.
+|2 августа 2013
+|9.2-STABLE после создания ветки `releng/9.2`.
|902502
|link:https://svnweb.freebsd.org/changeset/base/254938[254938]
-|August 26, 2013
-|9.2-STABLE after inclusion of the `PIM_RESCAN` CAM path inquiry flag.
+|26 августа 2013
+|9.2-STABLE после включения флага запроса пути CAM `PIM_RESCAN`.
|902503
|link:https://svnweb.freebsd.org/changeset/base/254979[254979]
-|August 27, 2013
-|9.2-STABLE after inclusion of the `SI_UNMAPPED` cdev flag.
+|27 августа 2013
+|9.2-STABLE после включения флага `SI_UNMAPPED` для cdev.
|902504
|link:https://svnweb.freebsd.org/changeset/base/256917[256917]
-|October 22, 2013
-|9.2-STABLE after inclusion of support for "first boot" man:rc[8] scripts.
+|22 октября 2013
+|9.2-STABLE после добавления поддержки скриптов "первой загрузки" man:rc[8].
|902505
|link:https://svnweb.freebsd.org/changeset/base/259448[259448]
-|December 12, 2013
-|9.2-STABLE after Heimdal encoding fix.
+|12 декабря 2013
+|9.2-STABLE после исправления кодировки Heimdal.
|902506
|link:https://svnweb.freebsd.org/changeset/base/260136[260136]
-|December 31, 2013
-|9-STABLE after MAP_STACK fixes (rev link:https://svnweb.freebsd.org/changeset/base/260082[260082]).
+|31 декабря 2013
+|9-STABLE после исправлений MAP_STACK (rev link:https://svnweb.freebsd.org/changeset/base/260082[260082]).
|902507
|link:https://svnweb.freebsd.org/changeset/base/262801[262801]
-|March 5, 2014
-|9-STABLE after upgrade of libc++ to 3.4 release.
+|5 марта 2014
+|9-STABLE после обновления libc++ до версии 3.4.
|902508
|link:https://svnweb.freebsd.org/changeset/base/263171[263171]
-|March 14, 2014
-|9-STABLE after merge of the Radeon KMS driver (rev link:https://svnweb.freebsd.org/changeset/base/263170[263170]).
+|14 марта 2014
+|9-STABLE после объединения драйвера Radeon KMS (rev link:https://svnweb.freebsd.org/changeset/base/263170[263170]).
|902509
|link:https://svnweb.freebsd.org/changeset/base/263509[263509]
-|March 21, 2014
-|9-STABLE after upgrade of llvm/clang to 3.4 release.
+|21 марта 2014
+|9-STABLE после обновления llvm/clang до версии 3.4.
|902510
|link:https://svnweb.freebsd.org/changeset/base/263818[263818]
-|March 27, 2014
-|9-STABLE after merge of the man:vt[4] driver.
+|27 марта 2014
+|9-STABLE после слияния драйвера man:vt[4].
|902511
|link:https://svnweb.freebsd.org/changeset/base/264289[264289]
-|March 27, 2014
-|9-STABLE after FreeBSD-SA-14:06.openssl.
+|27 марта 2014
+|9-STABLE после FreeBSD-SA-14:06.openssl.
|902512
|link:https://svnweb.freebsd.org/changeset/base/265123[265123]
-|April 30, 2014
-|9-STABLE after FreeBSD-SA-14:08.tcp.
+|30 апреля 2014
+|9-STABLE после FreeBSD-SA-14:08.tcp.
|903000
|link:https://svnweb.freebsd.org/changeset/base/267656[267656]
-|June 20, 2014
-|9-RC1 `releng/9.3` branch.
+|20 июня 2014
+|9-RC1 ветка `releng/9.3`.
|903500
|link:https://svnweb.freebsd.org/changeset/base/267657[267657]
-|June 20, 2014
-|9.3-STABLE `releng/9.3` branch.
+|20 июня 2014
+|9.3-STABLE ветка `releng/9.3`.
|903501
|link:https://svnweb.freebsd.org/changeset/base/268443[268443]
-|July 8, 2014
-|9-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268433[268433]).
+|8 июля 2014
+|9-STABLE после FreeBSD-SA-14:17.kmem (изменение:https://svnweb.freebsd.org/changeset/base/268433[268433]).
|903502
|link:https://svnweb.freebsd.org/changeset/base/270175[270175]
-|August 19, 2014
-|9-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269789[269789]).
+|19 августа 2014
+|9-STABLE после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269789[269789]).
|903503
|link:https://svnweb.freebsd.org/changeset/base/271341[271341]
-|September 9, 2014
-|9-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269687[269687]).
+|9 сентября 2014
+|9-STABLE после FreeBSD-SA-14:18 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/269687[269687]).
|903504
|link:https://svnweb.freebsd.org/changeset/base/271686[271686]
-|September 16, 2014
-|9-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668]).
+|16 сентября 2014
+|9-STABLE после FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668]).
|903505
|link:https://svnweb.freebsd.org/changeset/base/273432[273432]
-|October 21, 2014
-|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]).
+|21 октября 2014
+|9-STABLE после исправлений FreeBSD-SA-14:20, FreeBSD-SA-14:21 и FreeBSD-SA-14:22 (rev link:https://svnweb.freebsd.org/changeset/base/273412[273412]).
|903506
|link:https://svnweb.freebsd.org/changeset/base/274162[274162]
-|November 4, 2014
-|9-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25.
+|4 ноября 2014
+|9-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25.
|903507
|link:https://svnweb.freebsd.org/changeset/base/275742[275742]
-|December 13, 2014
-|9-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases.
+|13 декабря 2014
+|9-STABLE после объединения важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера.
|903508
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
-|February 25, 2015
-|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.
+|25 февраля 2015
+|9-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind.
|903509
|link:https://svnweb.freebsd.org/changeset/base/296219[296219]
-|February 29, 2016
-|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.
+|29 февраля 2016
+|9-STABLE после увеличения значения по умолчанию `compat.linux.osrelease` до `2.6.18` для поддержки портов linux-c6-* без дополнительной настройки.
|903510
|link:https://svnweb.freebsd.org/changeset/base/300236[300236]
-|May 19, 2016
-|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].
+|19 мая 2016
+|9-STABLE после того, как страница System Binary Interface (SBI) была перемещена в последней версии Berkeley Boot Loader (BBL) из-за увеличения размера кода в link:https://svnweb.freebsd.org/changeset/base/300234[300234].
|903511
|link:https://svnweb.freebsd.org/changeset/base/305735[305735]
-|September 12, 2016
-|9-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9].
+|12 сентября 2016
+|9-STABLE после разрешения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9].
|===
[[versions-8]]
-== FreeBSD 8 Versions
+== Версии FreeBSD 8
[[freebsd-versions-table-8]]
-.FreeBSD 8 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 8
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|800000
|link:https://svnweb.freebsd.org/changeset/base/172531[172531]
-|October 11, 2007
-|8.0-CURRENT. Separating wide and single byte ctype.
+|11 октября 2007
+|8.0-CURRENT. Разделение `ctype` на широкие и однобайтовые символы.
|800001
|link:https://svnweb.freebsd.org/changeset/base/172688[172688]
-|October 16, 2007
-|8.0-CURRENT after libpcap 0.9.8 and tcpdump 3.9.8 import.
+|16 октября 2007
+|8.0-CURRENT после импорта libpcap 0.9.8 и tcpdump 3.9.8.
|800002
|link:https://svnweb.freebsd.org/changeset/base/172841[172841]
-|October 21, 2007
-|8.0-CURRENT after renaming man:kthread_create[9] and friends to man:kproc_create[9] etc.
+|21 октября 2007
+|8.0-CURRENT после переименования man:kthread_create[9] и связанных функций в man:kproc_create[9] и т.д.
|800003
|link:https://svnweb.freebsd.org/changeset/base/172932[172932]
-|October 24, 2007
-|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
+|24 октября 2007
+|8.0-CURRENT после того, как была добавлена обратная совместимость ABI с версиями FreeBSD 4/5/6 для IOCTL PCIOCGETCONF, PCIOCREAD и PCIOCWRITE, что потребовало снова нарушить ABI IOCTL PCIOCGETCONF
|800004
|link:https://svnweb.freebsd.org/changeset/base/173573[173573]
-|November 12, 2007
-|8.0-CURRENT after man:agp[4] driver moved from src/sys/pci to src/sys/dev/agp
+|12 ноября 2007
+|8.0-CURRENT после перемещения драйвера man:agp[4] из src/sys/pci в src/sys/dev/agp
|800005
|link:https://svnweb.freebsd.org/changeset/base/174261[174261]
-|December 4, 2007
-|8.0-CURRENT after changes to the jumbo frame allocator (rev link:https://svnweb.freebsd.org/changeset/base/174247[174247]).
+|4 декабря 2007
+|8.0-CURRENT после изменений в аллокаторе джамбо-фреймов (rev link:https://svnweb.freebsd.org/changeset/base/174247[174247]).
|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].
+|7 декабря 2007
+|8.0-CURRENT после добавления функциональности захвата `callgraph` в man:hwpmc[4].
|800007
|link:https://svnweb.freebsd.org/changeset/base/174901[174901]
-|December 25, 2007
-|8.0-CURRENT after `kdb_enter()` gains a "why" argument.
+|25 декабря 2007
+|8.0-CURRENT после `kdb_enter()` получает аргумент "why".
|800008
|link:https://svnweb.freebsd.org/changeset/base/174951[174951]
-|December 28, 2007
-|8.0-CURRENT after LK_EXCLUPGRADE option removal.
+|28 декабря 2007
+|8.0-CURRENT после удаления опции LK_EXCLUPGRADE.
|800009
|link:https://svnweb.freebsd.org/changeset/base/175168[175168]
-|January 9, 2008
-|8.0-CURRENT after introduction of man:lockmgr_disown[9]
+|9 января 2008
+|8.0-CURRENT после введения man:lockmgr_disown[9]
|800010
|link:https://svnweb.freebsd.org/changeset/base/175204[175204]
-|January 10, 2008
-|8.0-CURRENT after the man:vn_lock[9] prototype change.
+|10 января 2008
+|8.0-CURRENT после изменения прототипа man:vn_lock[9].
|800011
|link:https://svnweb.freebsd.org/changeset/base/175295[175295]
-|January 13, 2008
-|8.0-CURRENT after the man:VOP_LOCK[9] and man:VOP_UNLOCK[9] prototype changes.
+|13 января 2008
+|8.0-CURRENT после изменений прототипов man:VOP_LOCK[9] и man:VOP_UNLOCK[9].
|800012
|link:https://svnweb.freebsd.org/changeset/base/175487[175487]
-|January 19, 2008
-|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()`.
+|19 января 2008
+|8.0-CURRENT после введения man:lockmgr_recursed[9], man:BUF_RECURSED[9] и man:BUF_ISLOCKED[9], а также удаления `BUF_REFCNT()`.
|800013
|link:https://svnweb.freebsd.org/changeset/base/175581[175581]
-|January 23, 2008
-|8.0-CURRENT after introduction of the "ASCII" encoding.
+|23 января 2008
+|8.0-CURRENT после введения кодировки "ASCII".
|800014
|link:https://svnweb.freebsd.org/changeset/base/175636[175636]
-|January 24, 2008
-|8.0-CURRENT after changing the prototype of man:lockmgr[9] and removal of `lockcount()` and `LOCKMGR_ASSERT()`.
+|24 января 2008
+|8.0-CURRENT после изменения прототипа man:lockmgr[9] и удаления `lockcount()` и `LOCKMGR_ASSERT()`.
|800015
|link:https://svnweb.freebsd.org/changeset/base/175688[175688]
-|January 26, 2008
-|8.0-CURRENT after extending the types of the man:fts[3] structures.
+|26 января 2008
+|8.0-CURRENT после расширения типов структур man:fts[3].
|800016
|link:https://svnweb.freebsd.org/changeset/base/175872[175872]
-|February 1, 2008
-|8.0-CURRENT after adding an argument to man:MEXTADD[9]
+|1 февраля 2008
+|8.0-CURRENT после добавления аргумента в man:MEXTADD[9]
|800017
|link:https://svnweb.freebsd.org/changeset/base/176015[176015]
-|February 6, 2008
-|8.0-CURRENT after the introduction of LK_NODUP and LK_NOWITNESS options in the man:lockmgr[9] space.
+|6 февраля 2008
+|8.0-CURRENT после введения опций LK_NODUP и LK_NOWITNESS в пространстве man:lockmgr[9].
|800018
|link:https://svnweb.freebsd.org/changeset/base/176112[176112]
-|February 8, 2008
-|8.0-CURRENT after the addition of m_collapse.
+|8 февраля 2008
+|8.0-CURRENT после добавления `m_collapse`.
|800019
|link:https://svnweb.freebsd.org/changeset/base/176124[176124]
-|February 9, 2008
-|8.0-CURRENT after the addition of current working directory, root directory, and jail directory support to the kern.proc.filedesc sysctl.
+|9 февраля 2008
+|8.0-CURRENT после добавления поддержки текущего рабочего каталога, корневого каталога и каталога клетки в sysctl kern.proc.filedesc.
|800020
|link:https://svnweb.freebsd.org/changeset/base/176251[176251]
-|February 13, 2008
-|8.0-CURRENT after introduction of man:lockmgr_assert[9] and `BUF_ASSERT` functions.
+|13 февраля 2008
+|8.0-CURRENT после добавления man:lockmgr_assert[9] и функций `BUF_ASSERT`.
|800021
|link:https://svnweb.freebsd.org/changeset/base/176321[176321]
-|February 15, 2008
-|8.0-CURRENT after introduction of man:lockmgr_args[9] and LK_INTERNAL flag removal.
+|15 февраля 2008
+|8.0-CURRENT после введения man:lockmgr_args[9] и удаления флага LK_INTERNAL.
|800022
|link:https://svnweb.freebsd.org/changeset/base/176556[176556]
-|(backed out)
-|8.0-CURRENT after changing the default system ar to BSD man:ar[1].
+|(отменено)
+|8.0-CURRENT после изменения стандартной системной ar на BSD man:ar[1].
|800023
|link:https://svnweb.freebsd.org/changeset/base/176560[176560]
-|February 25, 2008
-|8.0-CURRENT after changing the prototypes of man:lockstatus[9] and man:VOP_ISLOCKED[9];, more specifically retiring the `struct thread` argument.
+|25 февраля 2008
+|8.0-CURRENT после изменения прототипов man:lockstatus[9] и man:VOP_ISLOCKED[9];, а именно удаления аргумента `struct thread`.
|800024
|link:https://svnweb.freebsd.org/changeset/base/176709[176709]
-|March 1, 2008
-|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].
+|1 марта 2008
+|8.0-CURRENT после удаления функций `lockwaiters` и `BUF_LOCKWAITERS`, изменения возвращаемого значения `brelvp` с void на int и добавления новых флагов для man:lockinit[9].
|800025
|link:https://svnweb.freebsd.org/changeset/base/176958[176958]
-|March 8, 2008
-|8.0-CURRENT after adding F_DUP2FD command to man:fcntl[2].
+|8 марта 2008
+|8.0-CURRENT после добавления команды F_DUP2FD в man:fcntl[2].
|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.
+|12 марта 2008
+|8.0-CURRENT после изменения параметра приоритета на `cv_broadcastpri`, где 0 означает отсутствие приоритета.
|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.
+|24 марта 2008
+|8.0-CURRENT после изменения ABI мониторинга bpf при добавлении буферов bpf с `zerocopy`.
|800028
|link:https://svnweb.freebsd.org/changeset/base/177637[177637]
-|March 26, 2008
-|8.0-CURRENT after adding l_sysid to struct flock.
+|26 марта 2008
+|8.0-CURRENT после добавления `l_sysid` в структуру flock.
|800029
|link:https://svnweb.freebsd.org/changeset/base/177688[177688]
|March 28, 2008
-|8.0-CURRENT after reintegration of the `BUF_LOCKWAITERS` function and the addition of man:lockmgr_waiters[9].
+|8.0-CURRENT после повторного включения функции `BUF_LOCKWAITERS` и добавления man:lockmgr_waiters[9].
|800030
|link:https://svnweb.freebsd.org/changeset/base/177844[177844]
-|April 1, 2008
-|8.0-CURRENT after the introduction of the man:rw_try_rlock[9] and man:rw_try_wlock[9] functions.
+|1 апреля 2008
+|8.0-CURRENT после введения функций man:rw_try_rlock[9] и man:rw_try_wlock[9].
|800031
|link:https://svnweb.freebsd.org/changeset/base/177958[177958]
-|April 6, 2008
-|8.0-CURRENT after the introduction of the `lockmgr_rw` and `lockmgr_args_rw` functions.
+|6 апреля 2008
+|8.0-CURRENT после введения функций `lockmgr_rw` и `lockmgr_args_rw`.
|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 апреля 2008
+|8.0-CURRENT после реализации системных вызовов `openat` и связанных с ними, введения флага O_EXEC для man:open[2] и предоставления соответствующих системных вызовов совместимости с Linux.
|800033
|link:https://svnweb.freebsd.org/changeset/base/178017[178017]
-|April 8, 2008
-|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.
+|8 апреля 2008
+|8.0-CURRENT после добавления поддержки man:write[2] для man:psm[4] на уровне нативной работы. Теперь произвольные команды можно записывать в [.filename]#/dev/psm%d#, а статус — считывать из него.
|800034
|link:https://svnweb.freebsd.org/changeset/base/178051[178051]
-|April 10, 2008
-|8.0-CURRENT after introduction of the `memrchr` function.
+|10 апреля 2008
+|8.0-CURRENT после введения функции `memrchr`.
|800035
|link:https://svnweb.freebsd.org/changeset/base/178256[178256]
-|April 16, 2008
-|8.0-CURRENT after introduction of the `fdopendir` function.
+|16 апреля 2008
+|8.0-CURRENT после введения функции `fdopendir`.
|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).
+|20 апреля 2008
+|8.0-CURRENT после перехода на поддержку multi-bss в беспроводных сетях 802.11 (также известную как `vaps`).
|800037
|link:https://svnweb.freebsd.org/changeset/base/178892[178892]
-|May 9, 2008
-|8.0-CURRENT after addition of multi routing table support (aka man:setfib[1], man:setfib[2]).
+|9 мая 2008
+|8.0-CURRENT после добавления поддержки нескольких таблиц маршрутизации (также известных как man:setfib[1], man:setfib[2]).
|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.
+|26 мая 2008
+|8.0-CURRENT после удаления `netatm` и ISDN4BSD. Также добавлены инструменты Compact C Type (CTF).
|800039
|link:https://svnweb.freebsd.org/changeset/base/179784[179784]
-|June 14, 2008
-|8.0-CURRENT after removal of sgtty.
+|14 июня 2008
+|8.0-CURRENT после удаления `sgtty`.
|800040
|link:https://svnweb.freebsd.org/changeset/base/180025[180025]
-|June 26, 2008
-|8.0-CURRENT with kernel NFS lockd client.
+|26 июня 2008
+|8.0-CURRENT с клиентом `lockd` для NFS в ядре.
|800041
|link:https://svnweb.freebsd.org/changeset/base/180691[180691]
-|July 22, 2008
-|8.0-CURRENT after addition of man:arc4random_buf[3] and man:arc4random_uniform[3].
+|22 июля 2008
+|8.0-CURRENT после добавления man:arc4random_buf[3] и man:arc4random_uniform[3].
|800042
|link:https://svnweb.freebsd.org/changeset/base/181439[181439]
-|August 8, 2008
-|8.0-CURRENT after addition of man:cpuctl[4].
+|8 августа 2008
+|8.0-CURRENT после добавления man:cpuctl[4].
|800043
|link:https://svnweb.freebsd.org/changeset/base/181694[181694]
-|August 13, 2008
-|8.0-CURRENT after changing man:bpf[4] to use a single device node, instead of device cloning.
+|13 августа 2008
+|8.0-CURRENT после изменения man:bpf[4] для использования единого узла устройства вместо клонирования устройств.
|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.
+|17 августа 2008
+|8.0-CURRENT после внесения изменений, связанных с первым этапом проекта VIMAGE, переименованы глобальные переменные, подлежащие виртуализации, с добавлением префикса `V_` и макросов для их обратного отображения на глобальные имена.
|800045
|link:https://svnweb.freebsd.org/changeset/base/181905[181905]
-|August 20, 2008
-|8.0-CURRENT after the integration of the MPSAFE TTY layer, including changes to various drivers and utilities that interact with it.
+|20 августа 2008
+|8.0-CURRENT после интеграции MPSAFE TTY слоя, включая изменения в различных драйверах и утилитах, взаимодействующих с ним.
|800046
|link:https://svnweb.freebsd.org/changeset/base/182869[182869]
-|September 8, 2008
-|8.0-CURRENT after the separation of the GDT per CPU on amd64 architecture.
+|8 сентября 2008
+|8.0-CURRENT после разделения GDT для каждого процессора на архитектуре amd64.
|800047
|link:https://svnweb.freebsd.org/changeset/base/182905[182905]
-|September 10, 2008
-|8.0-CURRENT after removal of VSVTX, VSGID and VSUID.
+|10 сентября 2008
+|8.0-CURRENT после удаления VSVTX, VSGID и VSUID.
|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.
+|16 сентября 2008
+|8.0-CURRENT после преобразования кода монтирования ядра NFS для поддержки отдельных опций монтирования в `iovec` man:nmount[2], а не только одной большой структуры nfs_args.
|800049
|link:https://svnweb.freebsd.org/changeset/base/183114[183114]
-|September 17, 2008
-|8.0-CURRENT after the removal of man:suser[9] and man:suser_cred[9].
+|17 сентября 2008
+|8.0-CURRENT после удаления man:suser[9] и man:suser_cred[9].
|800050
|link:https://svnweb.freebsd.org/changeset/base/184099[184099]
-|October 20, 2008
-|8.0-CURRENT after buffer cache API change.
+|20 октября 2008
+|8.0-CURRENT после изменения API кэша буфера.
|800051
|link:https://svnweb.freebsd.org/changeset/base/184205[184205]
-|October 23, 2008
-|8.0-CURRENT after the removal of the man:MALLOC[9] and man:FREE[9] macros.
+|23 октября 2008
+|8.0-CURRENT после удаления макросов man:MALLOC[9] и man:FREE[9].
|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'.
+|28 октября 2008
+|8.0-CURRENT после введения `accmode_t` и переименования аргумента `a_mode` в `a_accmode` в VOP_ACCESS.
|800053
|link:https://svnweb.freebsd.org/changeset/base/184555[184555]
-|November 2, 2008
-|8.0-CURRENT after the prototype change of man:vfs_busy[9] and the introduction of its MBF_NOWAIT and MBF_MNTLSTLOCK flags.
+|2 ноября 2008
+|8.0-CURRENT после изменения прототипа man:vfs_busy[9] и введения флагов MBF_NOWAIT и MBF_MNTLSTLOCK.
|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.
+|22 ноября 2008
+|8.0-CURRENT после добавления `buf_ring`, барьеров памяти и функций ifnet для поддержки нескольких аппаратных очередей передачи для карт, которые их поддерживают, а также реализации кольцевого буфера без блокировок, чтобы позволить драйверам более эффективно управлять очередями пакетов.
|800055
|link:https://svnweb.freebsd.org/changeset/base/185363[185363]
-|November 27, 2008
-|8.0-CURRENT after the addition of Intel(TM) Core, Core2, and Atom support to man:hwpmc[4].
+|27 ноября 2008
+|8.0-CURRENT после добавления поддержки Intel(TM) Core, Core2 и Atom в man:hwpmc[4].
|800056
|link:https://svnweb.freebsd.org/changeset/base/185435[185435]
-|November 29, 2008
-|8.0-CURRENT after the introduction of multi-/no-IPv4/v6 jails.
+|29 ноября 2008
+|8.0-CURRENT после введения многопользовательских/без IPv4/v6 клеток.
|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.
+|1 декабря 2008
+|8.0-CURRENT после перехода на исходный код `hal` для ath.
|800058
|link:https://svnweb.freebsd.org/changeset/base/185968[185968]
-|December 12, 2008
-|8.0-CURRENT after the introduction of the VOP_VPTOCNP operation.
+|12 декабря 2008
+|8.0-CURRENT после введения операции VOP_VPTOCNP.
|800059
|link:https://svnweb.freebsd.org/changeset/base/186119[186119]
-|December 15, 2008
-|8.0-CURRENT incorporates the new arp-v2 rewrite.
+|15 декабря 2008
+|8.0-CURRENT включает новую переработанную версию arp-v2.
|800060
|link:https://svnweb.freebsd.org/changeset/base/186344[186344]
-|December 19, 2008
-|8.0-CURRENT after the addition of makefs.
+|19 декабря 2008
+|8.0-CURRENT после добавления makefs.
|800061
|link:https://svnweb.freebsd.org/changeset/base/187289[187289]
-|January 15, 2009
-|8.0-CURRENT after TCP Appropriate Byte Counting.
+|15 января 2009
+|8.0-CURRENT после TCP Appropriate Byte Counting.
|800062
|link:https://svnweb.freebsd.org/changeset/base/187830[187830]
-|January 28, 2009
-|8.0-CURRENT after removal of minor(), minor2unit(), unit2minor(), etc.
+|28 января 2009
+|8.0-CURRENT после удаления `minor()`, `minor2unit()`, `unit2minor()` и т.д.
|800063
|link:https://svnweb.freebsd.org/changeset/base/188745[188745]
-|February 18, 2009
-|8.0-CURRENT after GENERIC config change to use the USB2 stack, but also the addition of man:fdevname[3].
+|18 февраля 2009
+|8.0-CURRENT после изменения конфигурации GENERIC для использования стека USB2, а также добавления man:fdevname[3].
|800064
|link:https://svnweb.freebsd.org/changeset/base/188946[188946]
-|February 23, 2009
-|8.0-CURRENT after the USB2 stack is moved to and replaces dev/usb.
+|23 февраля 2009
+|8.0-CURRENT после переноса стека USB2 и замены dev/usb.
|800065
|link:https://svnweb.freebsd.org/changeset/base/189092[189092]
-|February 26, 2009
-|8.0-CURRENT after the renaming of all functions in man:libmp[3].
+|26 февраля 2009
+|8.0-CURRENT после переименования всех функций в man:libmp[3].
|800066
|link:https://svnweb.freebsd.org/changeset/base/189110[189110]
-|February 27, 2009
-|8.0-CURRENT after changing USB devfs handling and layout.
+|27 февраля 2009
+|8.0-CURRENT после изменения обработки и структуры USB devfs.
|800067
|link:https://svnweb.freebsd.org/changeset/base/189136[189136]
-|February 28, 2009
-|8.0-CURRENT after adding getdelim(), getline(), stpncpy(), strnlen(), wcsnlen(), wcscasecmp(), and wcsncasecmp().
+|28 февраля 2009
+|8.0-CURRENT после добавления `getdelim()`, `getline()`, `stpncpy()`, `strnlen()`, `wcsnlen()`, `wcscasecmp()`, and `wcsncasecmp()`.
|800068
|link:https://svnweb.freebsd.org/changeset/base/189276[189276]
-|March 2, 2009
-|8.0-CURRENT after renaming the ushub devclass to uhub.
+|2 марта 2009
+|8.0-CURRENT после переименования класса устройств `ushub` в `uhub`.
|800069
|link:https://svnweb.freebsd.org/changeset/base/189585[189585]
-|March 9, 2009
-|8.0-CURRENT after libusb20.so.1 was renamed to libusb.so.1.
+|9 марта 2009
+|8.0-CURRENT после переименования libusb20.so.1 в libusb.so.1.
|800070
|link:https://svnweb.freebsd.org/changeset/base/189592[189592]
-|March 9, 2009
-|8.0-CURRENT after merging IGMPv3 and Source-Specific Multicast (SSM) to the IPv4 stack.
+|9 марта 2009
+|8.0-CURRENT после объединения IGMPv3 и Source-Specific Multicast (SSM) в стек IPv4.
|800071
|link:https://svnweb.freebsd.org/changeset/base/189825[189825]
-|March 14, 2009
-|8.0-CURRENT after gcc was patched to use C99 inline semantics in c99 and gnu99 mode.
+|14 марта 2009
+|8.0-CURRENT после того, как gcc был исправлен для использования семантики встраивания C99 в режимах c99 и gnu99.
|800072
|link:https://svnweb.freebsd.org/changeset/base/189853[189853]
|March 15, 2009
-|8.0-CURRENT after the IFF_NEEDSGIANT flag has been removed; non-MPSAFE network device drivers are no longer supported.
+|8.0-CURRENT после удаления флага IFF_NEEDSGIANT; неподдерживаемые MPSAFE драйверы сетевых устройств больше не поддерживаются.
|800073
|link:https://svnweb.freebsd.org/changeset/base/190265[190265]
-|March 18, 2009
-|8.0-CURRENT after the dynamic string token substitution has been implemented for rpath and needed paths.
+|18 марта 2009
+|8.0-CURRENT после реализации подстановки динамических строковых токенов для rpath и необходимых путей.
|800074
|link:https://svnweb.freebsd.org/changeset/base/190373[190373]
-|March 24, 2009
-|8.0-CURRENT after tcpdump 4.0.0 and libpcap 1.0.0 import.
+|24 марта 2009
+|8.0-CURRENT после импорта tcpdump 4.0.0 и libpcap 1.0.0.
|800075
|link:https://svnweb.freebsd.org/changeset/base/190787[190787]
-|April 6, 2009
-|8.0-CURRENT after layout of structs vnet_net, vnet_inet and vnet_ipfw has been changed.
+|6 апреля 2009
+|8.0-CURRENT после изменения структуры структур vnet_net, vnet_inet и vnet_ipfw.
|800076
|link:https://svnweb.freebsd.org/changeset/base/190866[190866]
-|April 9, 2009
-|8.0-CURRENT after adding delay profiles in dummynet.
+|9 апреля 2009
+|8.0-CURRENT после добавления профилей задержки в dummynet.
|800077
|link:https://svnweb.freebsd.org/changeset/base/190914[190914]
-|April 14, 2009
-|8.0-CURRENT after removing VOP_LEASE() and vop_vector.vop_lease.
+|14 апреля 2009
+|8.0-CURRENT после удаления `VOP_LEASE()` и vop_vector.vop_lease.
|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.
+|15 апреля 2009
+|8.0-CURRENT после добавления полей `rt_weight` в структуры `rt_metrics` и `rt_metrics_lite`, что изменило расположение полей в структуре `rt_metrics_lite`. Версия RTM_VERSION была увеличена, но затем отменена.
|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.
+|15 апреля 2009
+|8.0-CURRENT после добавления указателей на структуру `llentry` в структуры `route` и `route_in6`.
|800080
|link:https://svnweb.freebsd.org/changeset/base/191126[191126]
-|April 15, 2009
-|8.0-CURRENT after layout of struct inpcb has been changed.
+|15 апреля 2009
+|8.0-CURRENT после изменения структуры inpcb.
|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.
+|19 апреля 2009
+|8.0-CURRENT после изменения структуры `malloc_type`.
|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.
+|21 апреля 2009
+|8.0-CURRENT после изменения структуры struct ifnet и с `if_ref()` и `if_rele()` для подсчета ссылок (`refcounting`) ifnet.
|800083
|link:https://svnweb.freebsd.org/changeset/base/191389[191389]
-|April 22, 2009
-|8.0-CURRENT after the implementation of a low-level Bluetooth HCI API.
+|22 апреля 2009
+|8.0-CURRENT после реализации низкоуровневого API HCI Bluetooth.
|800084
|link:https://svnweb.freebsd.org/changeset/base/191672[191672]
-|April 29, 2009
-|8.0-CURRENT after IPv6 SSM and MLDv2 changes.
+|29 апреля 2009
+|8.0-CURRENT после изменений в IPv6 SSM и MLDv2.
|800085
|link:https://svnweb.freebsd.org/changeset/base/191688[191688]
-|April 30, 2009
-|8.0-CURRENT after enabling support for VIMAGE kernel builds with one active image.
+|30 апреля 2009
+|8.0-CURRENT после включения поддержки сборки ядра с VIMAGE с одним активным образом.
|800086
|link:https://svnweb.freebsd.org/changeset/base/191910[191910]
-|May 8, 2009
-|8.0-CURRENT after adding support for input lines of arbitrarily length in man:patch[1].
+|8 мая 2009
+|8.0-CURRENT после добавления поддержки строк ввода произвольной длины в man:patch[1].
|800087
|link:https://svnweb.freebsd.org/changeset/base/191990[191990]
-|May 11, 2009
-|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.
+|11 мая 2009
+|8.0-CURRENT после некоторых изменений в VFS KPI. Аргумент потока был удален из частей FSD в VFS. Функциям `VFS_*` больше не нужен контекст, так как он всегда относится к `curthread`. В некоторых особых случаях старое поведение сохранено.
|800088
|link:https://svnweb.freebsd.org/changeset/base/192470[192470]
-|May 20, 2009
-|8.0-CURRENT after net80211 monitor mode changes.
+|20 мая 2009
+|8.0-CURRENT после изменений режима монитора в net80211.
|800089
|link:https://svnweb.freebsd.org/changeset/base/192649[192649]
-|May 23, 2009
-|8.0-CURRENT after adding UDP control block support.
+|23 мая 2009
+|8.0-CURRENT после добавления поддержки блока управления UDP.
|800090
|link:https://svnweb.freebsd.org/changeset/base/192669[192669]
-|May 23, 2009
-|8.0-CURRENT after virtualizing interface cloning.
+|23 мая 2009
+|8.0-CURRENT после виртуализации клонирования интерфейсов.
|800091
|link:https://svnweb.freebsd.org/changeset/base/192895[192895]
-|May 27, 2009
-|8.0-CURRENT after adding hierarchical jails and removing global securelevel.
+|27 мая 2009
+|8.0-CURRENT после добавления иерархических клеток и удаления глобального securelevel.
|800092
|link:https://svnweb.freebsd.org/changeset/base/193011[193011]
-|May 29, 2009
-|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.
+|29 мая 2009
+|8.0-CURRENT после изменения KPI `sx_init_flags()`. `SX_ADAPTIVESPIN` упразднён, и введён новый флаг `SX_NOADAPTIVE` для обработки обратной логики.
|800093
|link:https://svnweb.freebsd.org/changeset/base/193047[193047]
-|May 29, 2009
-|8.0-CURRENT after adding mnt_xflag to struct mount.
+|29 мая 2009
+|8.0-CURRENT после добавления `mnt_xflag` в структуру mount.
|800094
|link:https://svnweb.freebsd.org/changeset/base/193093[193093]
-|May 30, 2009
-|8.0-CURRENT after adding man:VOP_ACCESSX[9].
+|30 мая 2009
+|8.0-CURRENT после добавления man:VOP_ACCESSX[9].
|800095
|link:https://svnweb.freebsd.org/changeset/base/193096[193096]
-|May 30, 2009
-|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.
+|30 мая 2009
+|8.0-CURRENT после изменения KPI для polling. Обработчики polling теперь возвращают количество обработанных пакетов. Также введена новая возможность `IFCAP_POLLING_NOCOUNT`, которая указывает, что возвращаемое значение не является значимым и подсчёт следует пропустить.
|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.
+|1 июня 2009
+|8.0-CURRENT после обновления до новой реализации netisr и после изменения способа хранения и доступа к FIB.
|800097
|link:https://svnweb.freebsd.org/changeset/base/193731[193731]
-|June 8, 2009
-|8.0-CURRENT after the introduction of vnet destructor hooks and infrastructure.
+|8 июня 2009
+|8.0-CURRENT после введения хуков и инфраструктуры деструктора vnet.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/194012[194012]
-|June 11, 2009
-|8.0-CURRENT after the introduction of netgraph outbound to inbound path call detection and queuing, which also changed the layout of struct thread.
+|11 июня 2009
+|8.0-CURRENT после введения в netgraph обнаружения вызовов пути из исходящего во входящий и организации очередей, что также изменило структуру struct thread.
|800098
|link:https://svnweb.freebsd.org/changeset/base/194210[194210]
-|June 14, 2009
-|8.0-CURRENT after OpenSSL 0.9.8k import.
+|14 июня 2009
+|8.0-CURRENT после импорта OpenSSL 0.9.8k.
|800099
|link:https://svnweb.freebsd.org/changeset/base/194675[194675]
-|June 22, 2009
-|8.0-CURRENT after NGROUPS update and moving route virtualization into its own VImage module.
+|22 июня 2009
+|8.0-CURRENT после обновления NGROUPS и переноса виртуализации маршрутов в собственный модуль VImage.
|800100
|link:https://svnweb.freebsd.org/changeset/base/194920[194920]
-|June 24, 2009
-|8.0-CURRENT after SYSVIPC ABI change.
+|24 июня 2009
+|8.0-CURRENT после изменения ABI SYSVIPC.
|800101
|link:https://svnweb.freebsd.org/changeset/base/195175[195175]
-|June 29, 2009
-|8.0-CURRENT after the removal of the /dev/net/* per-interface character devices.
+|29 июня 2009
+|8.0-CURRENT после удаления символьных устройств /dev/net/* для каждого интерфейса.
|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.
+|12 июля 2009
+|8.0-CURRENT после добавления заполнения к структурам `sackhint`, `tcpcb` и `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.
+|13 июля 2009
+|8.0-CURRENT после замены структуры `tcpopt` на структуру `toeopt` в интерфейсе драйвера TOE к `syncache` TCP.
|800104
|link:https://svnweb.freebsd.org/changeset/base/195699[195699]
-|July 14, 2009
-|8.0-CURRENT after the addition of the linker-set based per-vnet allocator.
+|14 июля 2009
+|8.0-CURRENT после добавления распределителя на основе наборов компоновщика для каждого vnet.
|800105
|link:https://svnweb.freebsd.org/changeset/base/195767[195767]
-|July 19, 2009
-|8.0-CURRENT after version bump for all shared libraries that do not have symbol versioning turned on.
+|19 июля 2009
+|8.0-CURRENT после увеличения версии для всех разделяемых библиотек, у которых не включено управление версиями символов.
|800106
|link:https://svnweb.freebsd.org/changeset/base/195852[195852]
-|July 24, 2009
-|8.0-CURRENT after introduction of OBJT_SG VM object type.
+|24 июля 2009
+|8.0-CURRENT после введения типа объекта VM OBJT_SG.
|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.
+|2 августа 2009
+|8.0-CURRENT после освобождения подсистемы newbus от Giant путем добавления `sxlock` в newbus и 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.
+|21 ноября 2009
+|8.0-STABLE после реализации фильтра `kevent` `EVFILT_USER`.
|800500
|link:https://svnweb.freebsd.org/changeset/base/201749[201749]
-|January 7, 2010
-|8.0-STABLE after `__FreeBSD_version` bump to make `pkg_add -r` use packages-8-stable.
+|7 января 2010
+|8.0-STABLE после увеличения `__FreeBSD_version`, чтобы `pkg_add -r` использовал пакеты-8-stable.
|800501
|link:https://svnweb.freebsd.org/changeset/base/202922[202922]
-|January 24, 2010
-|8.0-STABLE after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4.
+|24 января 2010
+|8.0-STABLE после изменения прототипов man:scandir[3] и man:alphasort[3] для соответствия SUSv4.
|800502
|link:https://svnweb.freebsd.org/changeset/base/203299[203299]
-|January 31, 2010
-|8.0-STABLE after addition of man:sigpause[2].
+|31 января 2010
+|8.0-STABLE после добавления man:sigpause[2].
|800503
|link:https://svnweb.freebsd.org/changeset/base/204344[204344]
-|February 25, 2010
-|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.
+|25 февраля 2010
+|8.0-STABLE после добавления ioctl SIOCGIFDESCR и SIOCSIFDESCR к сетевым интерфейсам. Эти ioctl могут использоваться для управления описанием интерфейса, по аналогии с OpenBSD.
|800504
|link:https://svnweb.freebsd.org/changeset/base/204546[204546]
-|March 1, 2010
-|8.0-STABLE after MFC of importing x86emu, a software emulator for real mode x86 CPU from OpenBSD.
+|1 марта 2010
+|8.0-STABLE после MFC импорта x86emu, программного эмулятора реального режима x86 CPU из OpenBSD.
|800505
|link:https://svnweb.freebsd.org/changeset/base/208259[208259]
-|May 18, 2010
-|8.0-STABLE after MFC of adding liblzma, xz, xzdec, and lzmainfo.
+|18 мая 2010
+|8.0-STABLE после MFC добавления liblzma, xz, xzdec и lzmainfo.
|801000
|link:https://svnweb.freebsd.org/changeset/base/209150[209150]
-|June 14, 2010
+|14 июня 2010
|8.1-RELEASE
|801500
|link:https://svnweb.freebsd.org/changeset/base/209146[209146]
-|June 14, 2010
-|8.1-STABLE after 8.1-RELEASE.
+|14 июня 2010
+|8.1-STABLE после 8.1-RELEASE.
|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) .
+|3 ноября 2010
+|8.1-STABLE после изменения KBI в структуре `sysentvec`, а также реализации PL_FLAG_SCE/SCX/EXEC/SI и `pl_siginfo` для ptrace(PT_LWPINFO).
|802000
|link:https://svnweb.freebsd.org/changeset/base/216639[216639]
-|December 22, 2010
+|22 декабря 2010
|8.2-RELEASE
|802500
|link:https://svnweb.freebsd.org/changeset/base/216654[216654]
-|December 22, 2010
-|8.2-STABLE after 8.2-RELEASE.
+|22 декабря 2010
+|8.2-STABLE после 8.2-RELEASE.
|802501
|link:https://svnweb.freebsd.org/changeset/base/219107[219107]
-|February 28, 2011
-|8.2-STABLE after merging DTrace changes, including support for userland tracing.
+|28 февраля 2011
+|8.2-STABLE после объединения изменений DTrace, включая поддержку трассировки пользовательского пространства.
|802502
|link:https://svnweb.freebsd.org/changeset/base/219324[219324]
-|March 6, 2011
-|8.2-STABLE after merging log2 and log2f into libm.
+|6 марта 2011
+|8.2-STABLE после объединения log2 и log2f в libm.
|802503
|link:https://svnweb.freebsd.org/changeset/base/221275[221275]
-|May 1, 2011
-|8.2-STABLE after upgrade of the gcc to the last GPLv2 version from the FSF gcc-4_2-branch.
+|1 мая 2011
+|8.2-STABLE после обновления gcc до последней версии GPLv2 из ветки FSF gcc-4_2-branch.
|802504
|link:https://svnweb.freebsd.org/changeset/base/222401[222401]
-|May 28, 2011
-|8.2-STABLE after introduction of the KPI and supporting infrastructure for modular congestion control.
+|28 мая 2011
+|8.2-STABLE после введения KPI и поддерживающей инфраструктуры для модульного управления перегрузкой.
|802505
|link:https://svnweb.freebsd.org/changeset/base/222406[222406]
-|May 28, 2011
-|8.2-STABLE after introduction of Hhook and Khelp KPIs.
+|28 мая 2011
+|8.2-STABLE после введения KPIs Hhook и Khelp.
|802506
|link:https://svnweb.freebsd.org/changeset/base/222408[222408]
-|May 28, 2011
-|8.2-STABLE after addition of OSD to struct tcpcb.
+|28 мая 2011
+|8.2-STABLE после добавления OSD в структуру tcpcb.
|802507
|link:https://svnweb.freebsd.org/changeset/base/222741[222741]
-|June 6, 2011
-|8.2-STABLE after ZFS v28 import.
+|6 июня 2011
+|8.2-STABLE после импорта ZFS v28.
|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 июня 2011
+|8.2-STABLE после удаления обработчика событий `schedtail` и добавления метода `sv_schedtail` в структуру `sysvec`.
|802509
|link:https://svnweb.freebsd.org/changeset/base/224017[224017]
-|July 14, 2011
-|8.2-STABLE after merging the SSSE3 support into binutils.
+|14 июля 2011
+|8.2-STABLE после объединения поддержки SSSE3 в binutils.
|802510
|link:https://svnweb.freebsd.org/changeset/base/224214[224214]
-|July 19, 2011
-|8.2-STABLE after addition of RFTSIGZMB flag for man:rfork[2].
+|19 июля 2011
+|8.2-STABLE после добавления флага RFTSIGZMB для man:rfork[2].
|802511
|link:https://svnweb.freebsd.org/changeset/base/225458[225458]
-|September 9, 2011
-|8.2-STABLE after addition of automatic detection of USB mass storage devices which do not support the no synchronize cache SCSI command.
+|9 сентября 2011
+|8.2-STABLE после добавления автоматического обнаружения USB-накопителей, которые не поддерживают команду SCSI "no synchronize cache".
|802512
|link:https://svnweb.freebsd.org/changeset/base/225470[225470]
-|September 10, 2011
-|8.2-STABLE after merging of re-factoring of auto-quirk.
+|10 сентября 2011
+|8.2-STABLE после объединения рефакторинга auto-quirk.
|802513
|link:https://svnweb.freebsd.org/changeset/base/226763[226763]
-|October 25, 2011
-|8.2-STABLE after merging of the MAP_PREFAULT_READ flag to man:mmap[2].
+|25 октября 2011
+|8.2-STABLE после объединения флага MAP_PREFAULT_READ в man:mmap[2].
|802514
|link:https://svnweb.freebsd.org/changeset/base/227573[227573]
-|November 16, 2011
-|8.2-STABLE after merging of addition of man:posix_fallocate[2] syscall.
+|16 ноября 2011
+|8.2-STABLE после объединения добавления системного вызова man:posix_fallocate[2].
|802515
|link:https://svnweb.freebsd.org/changeset/base/229725[229725]
-|January 6, 2012
-|8.2-STABLE after merging of addition of the man:posix_fadvise[2] system call.
+|6 января 2012
+|8.2-STABLE после объединения добавления системного вызова man:posix_fadvise[2].
|802516
|link:https://svnweb.freebsd.org/changeset/base/230239[230239]
-|January 16, 2012
-|8.2-STABLE after merging gperf 3.0.3
+|16 января 2012
+|8.2-STABLE после объединения gperf 3.0.3
|802517
|link:https://svnweb.freebsd.org/changeset/base/231769[231769]
-|February 15, 2012
-|8.2-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists.
+|15 февраля 2012
+|8.2-STABLE после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов.
|803000
|link:https://svnweb.freebsd.org/changeset/base/232446[232446]
-|March 3, 2012
+|3 марта 2012
|8.3-RELEASE.
|803500
|link:https://svnweb.freebsd.org/changeset/base/232439[232439]
-|March 3, 2012
-|8.3-STABLE after branching releng/8.3 (RELENG_8_3).
+|3 марта 2012
+|8.3-STABLE после ветвления releng/8.3 (RELENG_8_3).
|803501
|link:https://svnweb.freebsd.org/changeset/base/247091[247091]
-|February 21, 2013
-|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]).
+|21 февраля 2013
+|8.3-STABLE после слияния двух исправлений для USB (ссылки на ревизии: link:https://svnweb.freebsd.org/changeset/base/246616[246616] и link:https://svnweb.freebsd.org/changeset/base/246759[246759]).
|804000
|link:https://svnweb.freebsd.org/changeset/base/248850[248850]
-|March 28, 2013
+|28 марта 2013
|8.4-RELEASE.
|804500
|link:https://svnweb.freebsd.org/changeset/base/248819[248819]
-|March 28, 2013
-|8.4-STABLE after 8.4-RELEASE.
+|28 марта 2013
+|8.4-STABLE после 8.4-RELEASE.
|804501
|link:https://svnweb.freebsd.org/changeset/base/259449[259449]
-|December 16, 2013
-|8.4-STABLE after MFC of upstream Heimdal encoding fix.
+|16 декабря 2013
+|8.4-STABLE после MFC исправления кодировки из вышестоящего Heimdal.
|804502
|link:https://svnweb.freebsd.org/changeset/base/265123[265123]
-|April 30, 2014
-|8.4-STABLE after FreeBSD-SA-14:08.tcp.
+|30 апреля 2014
+|8.4-STABLE после FreeBSD-SA-14:08.tcp.
|804503
|link:https://svnweb.freebsd.org/changeset/base/268444[268444]
-|July 9, 2014
-|8.4-STABLE after FreeBSD-SA-14:17.kmem.
+|9 июля 2014
+|8.4-STABLE после FreeBSD-SA-14:17.kmem.
|804504
|link:https://svnweb.freebsd.org/changeset/base/271341[271341]
-|September 9, 2014
-|8.4-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/271305[271305]).
+|9 сентября 2014
+|8.4-STABLE после FreeBSD-SA-14:18 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/271305[271305]).
|804505
|link:https://svnweb.freebsd.org/changeset/base/271686[271686]
-|September 16, 2014
-|8.4-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668]).
+|16 сентября 2014
+|8.4-STABLE после FreeBSD-SA-14:19 (ревизия link:https://svnweb.freebsd.org/changeset/base/271668[271668]).
|804506
|link:https://svnweb.freebsd.org/changeset/base/273432[273432]
-|October 21, 2014
-|8.4-STABLE after FreeBSD-SA-14:21 (rev link:https://svnweb.freebsd.org/changeset/base/273413[273413]).
+|21 октября 2014
+|8.4-STABLE после FreeBSD-SA-14:21 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/273413[273413]).
|804507
|link:https://svnweb.freebsd.org/changeset/base/274162[274162]
-|November 4, 2014
-|8.4-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25.
+|4 ноября 2014
+|8.4-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25.
|804508
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
-|February 25, 2015
-|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.
+|25 февраля 2015
+|8-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind.
|804509
|link:https://svnweb.freebsd.org/changeset/base/305736[305736]
-|September 12, 2016
-|8-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9].
+|12 сентября 2016
+|8-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9].
|===
[[versions-7]]
-== FreeBSD 7 Versions
+== Версии FreeBSD 7
[[freebsd-versions-table-7]]
-.FreeBSD 7 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` для FreeBSD 7
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|700000
|link:https://svnweb.freebsd.org/changeset/base/147925[147925]
-|July 11, 2005
+|11 июля 2005
|7.0-CURRENT.
|700001
|link:https://svnweb.freebsd.org/changeset/base/148341[148341]
-|July 23, 2005
-|7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_5.
+|23 июля 2005
+|7.0-CURRENT после увеличения версий всех общих библиотек, которые не изменялись с RELENG_5.
|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.
+|13 августа 2005
+|7.0-CURRENT после добавления аргумента учетных данных в обработчик события `dev_clone`.
|700003
|link:https://svnweb.freebsd.org/changeset/base/149470[149470]
-|August 25, 2005
-|7.0-CURRENT after man:memmem[3] is added to libc.
+|25 августа 2005
+|7.0-CURRENT после добавления man:memmem[3] в libc.
|700004
|link:https://svnweb.freebsd.org/changeset/base/151888[151888]
-|October 30, 2005
-|7.0-CURRENT after man:solisten[9] kernel arguments are modified to accept a backlog parameter.
+|30 октября 2005
+|7.0-CURRENT после изменения аргументов ядра man:solisten[9] для принятия параметра backlog.
|700005
|link:https://svnweb.freebsd.org/changeset/base/152296[152296]
-|November 11, 2005
-|7.0-CURRENT after IFP2ENADDR() was changed to return a pointer to IF_LLADDR().
+|11 ноября 2005
+|7.0-CURRENT после изменения `IFP2ENADDR()` для возврата указателя на `IF_LLADDR()`.
|700006
|link:https://svnweb.freebsd.org/changeset/base/152315[152315]
-|November 11, 2005
-|7.0-CURRENT after addition of `if_addr` member to `struct ifnet` and IFP2ENADDR() removal.
+|11 ноября 2005
+|7.0-CURRENT после добавления члена `if_addr` в `struct ifnet` и удаления `IFP2ENADDR()`.
|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].
+|2 декабря 2005
+|7.0-CURRENT после включения скриптов из каталогов `local_startup` в базовый man:rcorder[8].
|700008
|link:https://svnweb.freebsd.org/changeset/base/153107[153107]
-|December 5, 2005
-|7.0-CURRENT after removal of MNT_NODEV mount option.
+|5 декабря 2005
+|7.0-CURRENT после удаления опции монтирования MNT_NODEV.
|700009
|link:https://svnweb.freebsd.org/changeset/base/153519[153519]
-|December 19, 2005
-|7.0-CURRENT after ELF-64 type changes and symbol versioning.
+|19 декабря 2005
+|7.0-CURRENT после изменений типа ELF-64 и версионирования символов.
|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.
+|20 декабря 2005
+|7.0-CURRENT после добавления драйверов `hostb` и `vgapci`, добавления `pci_find_extcap()` и изменения драйверов AGP, чтобы они больше не отображали апертуру.
|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.
+|31 декабря 2005
+|7.0-CURRENT после того, как `tv_sec` был изменён на `time_t` на всех платформах, кроме Alpha.
|700012
|link:https://svnweb.freebsd.org/changeset/base/154114[154114]
-|January 8, 2006
-|7.0-CURRENT after ldconfig_local_dirs change.
+|8 января 2006
+|7.0-CURRENT после изменения ldconfig_local_dirs.
|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.
+|12 января 2006
+|7.0-CURRENT после изменений в [.filename]#/etc/rc.d/abi# для поддержки [.filename]#/compat/linux/etc/ld.so.cache# в виде символьной ссылки в файловой системе только для чтения.
|700014
|link:https://svnweb.freebsd.org/changeset/base/154863[154863]
-|January 26, 2006
-|7.0-CURRENT after pts import.
+|26 января 2006
+|7.0-CURRENT после импорта pts.
|700015
|link:https://svnweb.freebsd.org/changeset/base/157144[157144]
-|March 26, 2006
-|7.0-CURRENT after the introduction of version 2 of man:hwpmc[4]'s ABI.
+|26 марта 2006
+|7.0-CURRENT после введения версии 2 ABI man:hwpmc[4].
|700016
|link:https://svnweb.freebsd.org/changeset/base/157962[157962]
-|April 22, 2006
-|7.0-CURRENT after addition of man:fcloseall[3] to libc.
+|22 апреля 2006
+|7.0-CURRENT после добавления man:fcloseall[3] в libc.
|700017
|link:https://svnweb.freebsd.org/changeset/base/158513[158513]
-|May 13, 2006
-|7.0-CURRENT after removal of ip6fw.
+|13 мая 2006
+|7.0-CURRENT после удаления ip6fw.
|700018
|link:https://svnweb.freebsd.org/changeset/base/160386[160386]
-|July 15, 2006
-|7.0-CURRENT after import of snd_emu10kx.
+|15 июля 2006
+|7.0-CURRENT после импорта snd_emu10kx.
|700019
|link:https://svnweb.freebsd.org/changeset/base/160821[160821]
-|July 29, 2006
-|7.0-CURRENT after import of OpenSSL 0.9.8b.
+|29 июля 2006
+|7.0-CURRENT после импорта OpenSSL 0.9.8b.
|700020
|link:https://svnweb.freebsd.org/changeset/base/161931[161931]
-|September 3, 2006
-|7.0-CURRENT after addition of bus_dma_get_tag function
+|3 сентября 2006
+|7.0-CURRENT после добавления функции `bus_dma_get_tag`
|700021
|link:https://svnweb.freebsd.org/changeset/base/162023[162023]
-|September 4, 2006
-|7.0-CURRENT after libpcap 0.9.4 and tcpdump 3.9.4 import.
+|4 сентября 2006
+|7.0-CURRENT после импорта libpcap 0.9.4 и tcpdump 3.9.4.
|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.
+|9 сентября 2006
+|7.0-CURRENT после изменения `dlsym`, чтобы искать запрошенный символ как в указанном DSO, так и в его неявных зависимостях.
|700023
|link:https://svnweb.freebsd.org/changeset/base/162588[162588]
-|September 23, 2006
-|7.0-CURRENT after adding new sound IOCTLs for the OSSv4 mixer API.
+|23 сентября 2006
+|7.0-CURRENT после добавления новых звуковых IOCTL для API микшера OSSv4.
|700024
|link:https://svnweb.freebsd.org/changeset/base/162919[162919]
-|September 28, 2006
-|7.0-CURRENT after import of OpenSSL 0.9.8d.
+|28 сентября 2006
+|7.0-CURRENT после импорта OpenSSL 0.9.8d.
|700025
|link:https://svnweb.freebsd.org/changeset/base/164190[164190]
-|November 11, 2006
-|7.0-CURRENT after the addition of libelf.
+|11 ноября 2006
+|7.0-CURRENT после добавления libelf.
|700026
|link:https://svnweb.freebsd.org/changeset/base/164614[164614]
-|November 26, 2006
-|7.0-CURRENT after major changes on sound sysctls.
+|26 ноября 2006
+|7.0-CURRENT после значительных изменений в звуковых sysctls.
|700027
|link:https://svnweb.freebsd.org/changeset/base/164770[164770]
-|November 30, 2006
-|7.0-CURRENT after the addition of Wi-Spy quirk.
+|30 ноября 2006
+|7.0-CURRENT после добавления особенности Wi-Spy.
|700028
|link:https://svnweb.freebsd.org/changeset/base/165242[165242]
-|December 15, 2006
-|7.0-CURRENT after the addition of sctp calls to libc
+|15 декабря 2006
+|7.0-CURRENT после добавления вызовов `sctp` в libc
|700029
|link:https://svnweb.freebsd.org/changeset/base/166259[166259]
-|January 26, 2007
-|7.0-CURRENT after the GNU man:gzip[1] implementation was replaced with a BSD licensed version ported from NetBSD.
+|26 января 2007
+|7.0-CURRENT после того, как реализация GNU man:gzip[1] была заменена на версию с лицензией BSD, портированную из NetBSD.
|700030
|link:https://svnweb.freebsd.org/changeset/base/166549[166549]
-|February 7, 2007
-|7.0-CURRENT after the removal of IPIP tunnel encapsulation (VIFF_TUNNEL) from the IPv4 multicast forwarding code.
+|7 февраля 2007
+|7.0-CURRENT после удаления инкапсуляции туннеля IPIP (VIFF_TUNNEL) из кода переадресации IPv4 multicast.
|700031
|link:https://svnweb.freebsd.org/changeset/base/166907[166907]
-|February 23, 2007
-|7.0-CURRENT after the modification of bus_setup_intr() (newbus).
+|23 февраля 2007
+|7.0-CURRENT после изменения `bus_setup_intr()` (newbus).
|700032
|link:https://svnweb.freebsd.org/changeset/base/167165[167165]
-|March 2, 2007
-|7.0-CURRENT after the inclusion of man:ipw[4] and man:iwi[4] firmware.
+|2 марта 2007
+|7.0-CURRENT после включения firmware для man:ipw[4] и man:iwi[4].
|700033
|link:https://svnweb.freebsd.org/changeset/base/167360[167360]
-|March 9, 2007
-|7.0-CURRENT after the inclusion of ncurses wide character support.
+|9 марта 2007
+|7.0-CURRENT после включения поддержки широких символов ncurses.
|700034
|link:https://svnweb.freebsd.org/changeset/base/167684[167684]
-|March 19, 2007
-|7.0-CURRENT after changes to how insmntque(), getnewvnode(), and vfs_hash_insert() work.
+|19 марта 2007
+|7.0-CURRENT после изменений в работе `insmntque()`, `getnewvnode()` и `vfs_hash_insert()`.
|700035
|link:https://svnweb.freebsd.org/changeset/base/167906[167906]
-|March 26, 2007
-|7.0-CURRENT after addition of a notify mechanism for CPU frequency changes.
+|26 марта 2007
+|7.0-CURRENT после добавления механизма уведомлений об изменениях частоты CPU.
|700036
|link:https://svnweb.freebsd.org/changeset/base/168413[168413]
-|April 6, 2007
-|7.0-CURRENT after import of the ZFS filesystem.
+|6 апреля 2007
+|7.0-CURRENT после импорта файловой системы ZFS.
|700037
|link:https://svnweb.freebsd.org/changeset/base/168504[168504]
-|April 8, 2007
-|7.0-CURRENT after addition of CAM 'SG' peripheral device, which implements a subset of Linux SCSI SG passthrough device API.
+|8 апреля 2007
+|7.0-CURRENT после добавления периферийного устройства CAM 'SG', реализующего подмножество API сквозного устройства SCSI SG в Linux.
|700038
|link:https://svnweb.freebsd.org/changeset/base/169151[169151]
-|April 30, 2007
-|7.0-CURRENT after changing man:getenv[3], man:putenv[3], man:setenv[3] and man:unsetenv[3] to be POSIX conformant.
+|30 апреля 2007
+|7.0-CURRENT после изменения man:getenv[3], man:putenv[3], man:setenv[3] и man:unsetenv[3] для соответствия стандарту POSIX.
|700039
|link:https://svnweb.freebsd.org/changeset/base/169190[169190]
-|May 1, 2007
-|7.0-CURRENT after the changes in 700038 were backed out.
+|1 мая 2007
+|7.0-CURRENT после отмены изменений в 700038.
|700040
|link:https://svnweb.freebsd.org/changeset/base/169453[169453]
-|May 10, 2007
-|7.0-CURRENT after the addition of man:flopen[3] to libutil.
+|10 мая 2007
+|7.0-CURRENT после добавления man:flopen[3] в libutil.
|700041
|link:https://svnweb.freebsd.org/changeset/base/169526[169526]
-|May 13, 2007
-|7.0-CURRENT after enabling symbol versioning, and changing the default thread library to libthr.
+|13 мая 2007
+|7.0-CURRENT после включения версионирования символов и изменения библиотеки потоков по умолчанию на libthr.
|700042
|link:https://svnweb.freebsd.org/changeset/base/169758[169758]
-|May 19, 2007
-|7.0-CURRENT after the import of gcc 4.2.0.
+|19 мая 2007
+|7.0-CURRENT после импорта gcc 4.2.0.
|700043
|link:https://svnweb.freebsd.org/changeset/base/169830[169830]
-|May 21, 2007
-|7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_6.
+|21 мая 2007
+|7.0-CURRENT после увеличения версий всех общих библиотек, которые не изменялись с RELENG_6.
|700044
|link:https://svnweb.freebsd.org/changeset/base/170395[170395]
-|June 7, 2007
-|7.0-CURRENT after changing the argument for vn_open()/VOP_OPEN() from file descriptor index to the struct file *.
+|7 июня 2007
+|7.0-CURRENT после изменения аргумента для `vn_open()`/`VOP_OPEN()` с индекса файлового дескриптора на указатель на структуру file *.
|700045
|link:https://svnweb.freebsd.org/changeset/base/170510[170510]
-|June 10, 2007
-|7.0-CURRENT after changing man:pam_nologin[8] to provide an account management function instead of an authentication function to the PAM framework.
+|10 июня 2007
+|7.0-CURRENT после изменения man:pam_nologin[8] для предоставления функции управления учетными записями вместо функции аутентификации в рамках PAM.
|700046
|link:https://svnweb.freebsd.org/changeset/base/170530[170530]
-|June 11, 2007
-|7.0-CURRENT after updated 802.11 wireless support.
+|11 июня 2007
+|7.0-CURRENT после обновления поддержки беспроводных сетей 802.11.
|700047
|link:https://svnweb.freebsd.org/changeset/base/170579[170579]
-|June 11, 2007
-|7.0-CURRENT after adding TCP LRO interface capabilities.
+|11 июня 2007
+|7.0-CURRENT после добавления возможностей интерфейса TCP LRO.
|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.
+|12 июня 2007
+|7.0-CURRENT после добавления поддержки API RFC 3678 в стек IPv4. Устаревшее поведение RFC 1724 для ioctl IP_MULTICAST_IF теперь удалено; 0.0.0.0/8 больше нельзя использовать для указания индекса интерфейса. Вместо этого используйте структуру `ipmreqn`.
|700049
|link:https://svnweb.freebsd.org/changeset/base/171175[171175]
-|July 3, 2007
-|7.0-CURRENT after importing pf from OpenBSD 4.1
+|3 июля 2007
+|7.0-CURRENT после импорта pf из OpenBSD 4.1
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/171167[171167]
-|
-|7.0-CURRENT after adding IPv6 support for FAST_IPSEC, deleting KAME IPSEC, and renaming FAST_IPSEC to IPSEC.
+|
+|7.0-CURRENT после добавления поддержки IPv6 для FAST_IPSEC, удаления KAME IPSEC и переименования FAST_IPSEC в IPSEC.
|700050
|link:https://svnweb.freebsd.org/changeset/base/171195[171195]
-|July 4, 2007
-|7.0-CURRENT after converting setenv/putenv/etc. calls from traditional BSD to POSIX.
+|4 июля 2007
+|7.0-CURRENT после преобразования вызовов setenv/putenv/etc. из традиционного BSD в POSIX.
|700051
|link:https://svnweb.freebsd.org/changeset/base/171211[171211]
-|July 4, 2007
-|7.0-CURRENT after adding new mmap/lseek/etc syscalls.
+|4 июля 2007
+|7.0-CURRENT после добавления новых системных вызовов mmap/lseek и др.
|700052
|link:https://svnweb.freebsd.org/changeset/base/171275[171275]
-|July 6, 2007
-|7.0-CURRENT after moving I4B headers to include/i4b.
+|6 июля 2007
+|7.0-CURRENT после перемещения заголовков I4B в include/i4b.
|700053
|link:https://svnweb.freebsd.org/changeset/base/172394[172394]
-|September 30, 2007
-|7.0-CURRENT after the addition of support for PCI domains
+|30 сентября 2007
+|7.0-CURRENT после добавления поддержки доменов PCI
|700054
|link:https://svnweb.freebsd.org/changeset/base/172988[172988]
-|October 25, 2007
-|7.0-STABLE after MFC of wide and single byte ctype separation.
+|25 октября 2007
+|7.0-STABLE после переноса изменений (MFC) разделения широких и однобайтовых ctype.
|700055
|link:https://svnweb.freebsd.org/changeset/base/173104[173104]
-|October 28, 2007
-|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
+|28 октября 2007
+|7.0-RELEASE и 7.0-CURRENT после того, как обратная совместимость ABI с версиями FreeBSD 4/5/6 для IOCTL PCIOCGETCONF, PCIOCREAD и PCIOCWRITE была перенесена в стабильную ветку (MFC), что потребовало снова нарушить ABI IOCTL PCIOCGETCONF
|700100
|link:https://svnweb.freebsd.org/changeset/base/174864[174864]
-|December 22, 2007
-|7.0-STABLE after 7.0-RELEASE
+|22 декабря 2007
+|7.0-STABLE после 7.0-RELEASE
|700101
|link:https://svnweb.freebsd.org/changeset/base/176111[176111]
-|February 8, 2008
-|7.0-STABLE after the MFC of m_collapse().
+|8 февраля 2008
+|7.0-STABLE после MFC `m_collapse()`.
|700102
|link:https://svnweb.freebsd.org/changeset/base/177735[177735]
-|March 30, 2008
-|7.0-STABLE after the MFC of kdb_enter_why().
+|30 марта 2008
+|7.0-STABLE после MFC `kdb_enter_why()`.
|700103
|link:https://svnweb.freebsd.org/changeset/base/178061[178061]
-|April 10, 2008
-|7.0-STABLE after adding l_sysid to struct flock.
+|10 апреля 2008
+|7.0-STABLE после добавления `l_sysid` в структуру flock.
|700104
|link:https://svnweb.freebsd.org/changeset/base/178108[178108]
-|April 11, 2008
-|7.0-STABLE after the MFC of man:procstat[1].
+|11 апреля 2008
+|7.0-STABLE после MFC man:procstat[1].
|700105
|link:https://svnweb.freebsd.org/changeset/base/178120[178120]
-|April 11, 2008
-|7.0-STABLE after the MFC of umtx features.
+|11 апреля 2008
+|7.0-STABLE после MFC функций `umtx`.
|700106
|link:https://svnweb.freebsd.org/changeset/base/178225[178225]
-|April 15, 2008
-|7.0-STABLE after the MFC of man:write[2] support to man:psm[4].
+|15 апреля 2008
+|7.0-STABLE после MFC поддержки man:write[2] в man:psm[4].
|700107
|link:https://svnweb.freebsd.org/changeset/base/178353[178353]
-|April 20, 2008
-|7.0-STABLE after the MFC of F_DUP2FD command to man:fcntl[2].
+|20 апреля 2008
+|7.0-STABLE после MFC команды F_DUP2FD в man:fcntl[2].
|700108
|link:https://svnweb.freebsd.org/changeset/base/178783[178783]
-|May 5, 2008
-|7.0-STABLE after some man:lockmgr[9] changes, which makes it necessary to include [.filename]#sys/lock.h# to use man:lockmgr[9].
+|5 мая 2008
+|7.0-STABLE после некоторых изменений в man:lockmgr[9], что делает необходимым включение [.filename]#sys/lock.h# для использования man:lockmgr[9].
|700109
|link:https://svnweb.freebsd.org/changeset/base/179367[179367]
-|May 27, 2008
-|7.0-STABLE after MFC of the man:memrchr[3] function.
+|27 мая 2008
+|7.0-STABLE после MFC функции man:memrchr[3].
|700110
|link:https://svnweb.freebsd.org/changeset/base/181328[181328]
-|August 5, 2008
-|7.0-STABLE after MFC of kernel NFS lockd client.
+|5 августа 2008
+|7.0-STABLE после MFC клиента `lockd` ядра NFS.
|700111
|link:https://svnweb.freebsd.org/changeset/base/181940[181940]
-|August 20, 2008
-|7.0-STABLE after addition of physically contiguous jumbo frame support.
+|20 августа 2008
+|7.0-STABLE после добавления поддержки физически непрерывных больших кадров (jumbo frame).
|700112
|link:https://svnweb.freebsd.org/changeset/base/182294[182294]
-|August 27, 2008
-|7.0-STABLE after MFC of kernel DTrace support.
+|27 августа 2008
+|7.0-STABLE после переноса изменений (MFC) поддержки DTrace в ядре.
|701000
|link:https://svnweb.freebsd.org/changeset/base/185315[185315]
-|November 25, 2008
+|25 ноября 2008
|7.1-RELEASE
|701100
|link:https://svnweb.freebsd.org/changeset/base/185302[185302]
-|November 25, 2008
-|7.1-STABLE after 7.1-RELEASE.
+|25 ноября 2008
+|7.1-STABLE после 7.1-RELEASE.
|701101
|link:https://svnweb.freebsd.org/changeset/base/187023[187023]
-|January 10, 2009
-|7.1-STABLE after man:strndup[3] merge.
+|10 января 2009
+|7.1-STABLE после слияния man:strndup[3].
|701102
|link:https://svnweb.freebsd.org/changeset/base/187370[187370]
-|January 17, 2009
-|7.1-STABLE after man:cpuctl[4] support added.
+|17 января 2009
+|7.1-STABLE после добавления поддержки man:cpuctl[4].
|701103
|link:https://svnweb.freebsd.org/changeset/base/188281[188281]
-|February 7, 2009
-|7.1-STABLE after the merge of multi-/no-IPv4/v6 jails.
+|7 февраля 2009
+|7.1-STABLE после объединения клеток с поддержкой multi-/no-IPv4/v6.
|701104
|link:https://svnweb.freebsd.org/changeset/base/188625[188625]
-|February 14, 2009
-|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.
+|14 февраля 2009
+|7.1-STABLE после сохранения владельца приостановки в структуре mount и добавления метода vfs_susp_clean в структуру vfsops.
|701105
|link:https://svnweb.freebsd.org/changeset/base/189740[189740]
-|March 12, 2009
-|7.1-STABLE after the incompatible change to the kern.ipc.shmsegs sysctl to allow allocating larger SysV shared memory segments on 64bit architectures.
+|12 марта 2009
+|7.1-STABLE после несовместимого изменения sysctl kern.ipc.shmsegs для выделения больших сегментов разделяемой памяти SysV на 64-битных архитектурах.
|701106
|link:https://svnweb.freebsd.org/changeset/base/189786[189786]
-|March 14, 2009
-|7.1-STABLE after the merge of a fix for POSIX semaphore wait operations.
+|14 марта 2009
+|7.1-STABLE после объединения исправления для операций ожидания семафоров POSIX.
|702000
|link:https://svnweb.freebsd.org/changeset/base/191099[191099]
-|April 15, 2009
+|15 апреля 2009
|7.2-RELEASE
|702100
|link:https://svnweb.freebsd.org/changeset/base/191091[191091]
-|April 15, 2009
-|7.2-STABLE after 7.2-RELEASE.
+|15 апреля 2009
+|7.2-STABLE после 7.2-RELEASE.
|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.
+|15 мая 2009
+|7.2-STABLE после изменения man:ichsmb[4] для использования выравнивания по левому краю вторичной адресации, чтобы соответствовать другим драйверам контроллеров SMBus.
|702102
|link:https://svnweb.freebsd.org/changeset/base/193020[193020]
-|May 28, 2009
-|7.2-STABLE after MFC of the man:fdopendir[3] function.
+|28 мая 2009
+|7.2-STABLE после слияния из ветки man функции fdopendir[3].
|702103
|link:https://svnweb.freebsd.org/changeset/base/193638[193638]
-|June 6, 2009
-|7.2-STABLE after MFC of PmcTools.
+|6 июня 2009
+|7.2-STABLE после MFC PmcTools.
|702104
|link:https://svnweb.freebsd.org/changeset/base/195694[195694]
-|July 14, 2009
-|7.2-STABLE after MFC of the man:closefrom[2] system call.
+|14 июля 2009
+|7.2-STABLE после MFC системного вызова man:closefrom[2].
|702105
|link:https://svnweb.freebsd.org/changeset/base/196006[196006]
-|July 31, 2009
-|7.2-STABLE after MFC of the SYSVIPC ABI change.
+|31 июля 2009
+|7.2-STABLE после слияния изменения ABI SYSVIPC.
|702106
|link:https://svnweb.freebsd.org/changeset/base/197198[197198]
-|September 14, 2009
-|7.2-STABLE after MFC of the x86 PAT enhancements and addition of d_mmap_single() and the scatter/gather list VM object type.
+|14 сентября 2009
+|7.2-STABLE после слияния изменений (MFC) улучшений PAT для x86 и добавления `d_mmap_single()` и типа объекта VM со списком scatter/gather.
|703000
|link:https://svnweb.freebsd.org/changeset/base/203740[203740]
-|February 9, 2010
+|9 февраля 2010
|7.3-RELEASE
|703100
|link:https://svnweb.freebsd.org/changeset/base/203742[203742]
-|February 9, 2010
-|7.3-STABLE after 7.3-RELEASE.
+|9 февраля 2010
+|7.3-STABLE после 7.3-RELEASE.
|704000
|link:https://svnweb.freebsd.org/changeset/base/216647[216647]
-|December 22, 2010
+|22 декабря 2010
|7.4-RELEASE
|704100
|link:https://svnweb.freebsd.org/changeset/base/216658[216658]
-|December 22, 2010
-|7.4-STABLE after 7.4-RELEASE.
+|22 декабря 2010
+|7.4-STABLE после 7.4-RELEASE.
|704101
|link:https://svnweb.freebsd.org/changeset/base/221318[221318]
-|May 2, 2011
-|7.4-STABLE after the gcc MFC in rev link:https://svnweb.freebsd.org/changeset/base/221317[221317].
+|2 мая 2011
+|7.4-STABLE после MFC gcc в ревизии link:https://svnweb.freebsd.org/changeset/base/221317[221317].
|===
[[versions-6]]
-== FreeBSD 6 Versions
+== Версии FreeBSD 6
[[freebsd-versions-table-6]]
-.FreeBSD 6 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 6
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|600000
|link:https://svnweb.freebsd.org/changeset/base/133921[133921]
-|August 18, 2004
+|18 августа 2004
|6.0-CURRENT
|600001
|link:https://svnweb.freebsd.org/changeset/base/134396[134396]
-|August 27, 2004
-|6.0-CURRENT after permanently enabling PFIL_HOOKS in the kernel.
+|27 августа 2004
+|6.0-CURRENT после постоянного включения PFIL_HOOKS в ядре.
|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.
+|30 августа 2004
+|6.0-CURRENT после первоначального добавления `ifi_epoch` в структуру `if_data`. Отменено через несколько дней. Не используйте это значение.
|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.
+|8 сентября 2004
+|6.0-CURRENT после повторного добавления члена `ifi_epoch` в структуру `if_data`.
|600004
|link:https://svnweb.freebsd.org/changeset/base/135920[135920]
-|September 29, 2004
-|6.0-CURRENT after addition of the struct inpcb argument to the pfil API.
+|29 сентября 2004
+|6.0-CURRENT после добавления аргумента struct inpcb в API pfil.
|600005
|link:https://svnweb.freebsd.org/changeset/base/136172[136172]
-|October 5, 2004
-|6.0-CURRENT after addition of the "-d DESTDIR" argument to newsyslog.
+|5 октября 2004
+|6.0-CURRENT после добавления аргумента "-d DESTDIR" в newsyslog.
|600006
|link:https://svnweb.freebsd.org/changeset/base/137192[137192]
-|November 4, 2004
-|6.0-CURRENT after addition of glibc style man:strftime[3] padding options.
+|4 ноября 2004
+|6.0-CURRENT после добавления опций заполнения в стиле glibc для man:strftime[3].
|600007
|link:https://svnweb.freebsd.org/changeset/base/138760[138760]
-|December 12, 2004
-|6.0-CURRENT after addition of 802.11 framework updates.
+|12 декабря 2004
+|6.0-CURRENT после добавления обновлений для фреймворка 802.11.
|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.
+|25 января 2005
+|6.0-CURRENT после изменений в функциях `VOP_*VOBJECT()` и введения флага `MNTK_MPSAFE` для файловых систем, работающих без Giant.
|600009
|link:https://svnweb.freebsd.org/changeset/base/141250[141250]
-|February 4, 2005
-|6.0-CURRENT after addition of the cpufreq framework and drivers.
+|4 февраля 2005
+|6.0-CURRENT после добавления фреймворка cpufreq и драйверов.
|600010
|link:https://svnweb.freebsd.org/changeset/base/141394[141394]
-|February 6, 2005
-|6.0-CURRENT after importing OpenBSD's man:nc[1].
+|6 февраля 2005
+|6.0-CURRENT после импорта man:nc[1] из OpenBSD.
|600011
|link:https://svnweb.freebsd.org/changeset/base/141727[141727]
-|February 12, 2005
-|6.0-CURRENT after removing semblance of SVID2 `matherr()` support.
+|12 февраля 2005
+|6.0-CURRENT после удаления подобия поддержки `matherr()` из SVID2.
|600012
|link:https://svnweb.freebsd.org/changeset/base/141940[141940]
-|February 15, 2005
-|6.0-CURRENT after increase of default thread stacks' size.
+|15 февраля 2005
+|6.0-CURRENT после увеличения размера стеков потоков по умолчанию.
|600013
|link:https://svnweb.freebsd.org/changeset/base/142089[142089]
-|February 19, 2005
-|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.
+|19 февраля 2005
+|6.0-CURRENT после исправлений в [.filename]#<src/include/stdbool.h># и [.filename]#<src/sys/i386/include/_types.h># для обеспечения совместимости с GCC компилятора Intel C/C++.
|600014
|link:https://svnweb.freebsd.org/changeset/base/142184[142184]
-|February 21, 2005
-|6.0-CURRENT after EOVERFLOW checks in man:vswprintf[3] fixed.
+|21 февраля 2005
+|6.0-CURRENT после исправления проверок EOVERFLOW в man:vswprintf[3].
|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.
+|25 февраля 2005
+|6.0-CURRENT после изменения члена структуры `if_data`, `ifi_epoch`, с времени настенных часов на время работы системы.
|600016
|link:https://svnweb.freebsd.org/changeset/base/142582[142582]
-|February 26, 2005
-|6.0-CURRENT after LC_CTYPE disk format changed.
+|26 февраля 2005
+|6.0-CURRENT после изменения формата диска LC_CTYPE.
|600017
|link:https://svnweb.freebsd.org/changeset/base/142683[142683]
-|February 27, 2005
-|6.0-CURRENT after NLS catalogs disk format changed.
+|27 февраля 2005
+|6.0-CURRENT после изменения формата диска каталогов NLS.
|600018
|link:https://svnweb.freebsd.org/changeset/base/142686[142686]
-|February 27, 2005
-|6.0-CURRENT after LC_COLLATE disk format changed.
+|27 февраля 2005
+|6.0-CURRENT после изменения формата диска LC_COLLATE.
|600019
|link:https://svnweb.freebsd.org/changeset/base/142752[142752]
-|February 28, 2005
-|Installation of acpica includes into /usr/include.
+|28 февраля 2005
+|Установка `acpica` включает файлы в /usr/include.
|600020
|link:https://svnweb.freebsd.org/changeset/base/143308[143308]
-|March 9, 2005
-|Addition of MSG_NOSIGNAL flag to man:send[2] API.
+|9 марта 2005
+|Добавление флага MSG_NOSIGNAL в API man:send[2].
|600021
|link:https://svnweb.freebsd.org/changeset/base/143746[143746]
-|March 17, 2005
-|Addition of fields to cdevsw
+|17 марта 2005
+|Добавление полей в cdevsw
|600022
|link:https://svnweb.freebsd.org/changeset/base/143901[143901]
-|March 21, 2005
-|Removed gtar from base system.
+|21 марта 2005
+|Удален gtar из базовой системы.
|600023
|link:https://svnweb.freebsd.org/changeset/base/144980[144980]
-|April 13, 2005
-|LOCAL_CREDS, LOCAL_CONNWAIT socket options added to man:unix[4].
+|13 апреля 2005
+|Добавлены параметры сокета LOCAL_CREDS, LOCAL_CONNWAIT в man:unix[4].
|600024
|link:https://svnweb.freebsd.org/changeset/base/145565[145565]
-|April 19, 2005
-|man:hwpmc[4] and related tools added to 6.0-CURRENT.
+|19 апреля 2005
+|man:hwpmc[4] и связанные инструменты добавлены в 6.0-CURRENT.
|600025
|link:https://svnweb.freebsd.org/changeset/base/145565[145565]
-|April 26, 2005
-|struct icmphdr added to 6.0-CURRENT.
+|26 апреля 2005
+|Структура `icmphdr` добавлена в 6.0-CURRENT.
|600026
|link:https://svnweb.freebsd.org/changeset/base/145843[145843]
-|May 3, 2005
-|pf updated to 3.7.
+|3 мая 2005
+|pf обновлен до версии 3.7.
|600027
|link:https://svnweb.freebsd.org/changeset/base/145966[145966]
-|May 6, 2005
-|Kernel libalias and ng_nat introduced.
+|6 мая 2005
+|Добавлены libalias в ядре и `ng_nat`.
|600028
|link:https://svnweb.freebsd.org/changeset/base/146191[146191]
-|May 13, 2005
-|POSIX man:ttyname_r[3] made available through unistd.h and libc.
+|13 мая 2005
+|POSIX man:ttyname_r[3], доступный через unistd.h и libc.
|600029
|link:https://svnweb.freebsd.org/changeset/base/146780[146780]
-|May 29, 2005
-|6.0-CURRENT after libpcap updated to v0.9.1 alpha 096.
+|29 мая 2005
+|6.0-CURRENT после обновления libpcap до v0.9.1 alpha 096.
|600030
|link:https://svnweb.freebsd.org/changeset/base/146988[146988]
-|June 5, 2005
-|6.0-CURRENT after importing NetBSD's man:if_bridge[4].
+|5 июня 2005
+|6.0-CURRENT после импорта man:if_bridge[4] из NetBSD.
|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.
+|10 июня 2005
+|6.0-CURRENT после того, как структура ifnet была вынесена из `softcs` драйвера.
|600032
|link:https://svnweb.freebsd.org/changeset/base/147898[147898]
-|July 11, 2005
-|6.0-CURRENT after the import of libpcap v0.9.1.
+|11 июля 2005
+|6.0-CURRENT после импорта libpcap v0.9.1.
|600033
|link:https://svnweb.freebsd.org/changeset/base/148388[148388]
-|July 25, 2005
-|6.0-STABLE after bump of all shared library versions that had not been changed since RELENG_5.
+|25 июля 2005
+|6.0-STABLE после увеличения версий всех общих библиотек, которые не изменялись с RELENG_5.
|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.
+|13 августа 2005
+|6.0-STABLE после добавления аргумента credential в обработчик события `dev_clone`. 6.0-RELEASE.
|600100
|link:https://svnweb.freebsd.org/changeset/base/151958[151958]
-|November 1, 2005
-|6.0-STABLE after 6.0-RELEASE
+|1 ноября 2005
+|6.0-STABLE после 6.0-RELEASE
|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].
+|21 декабря 2005
+|6.0-STABLE после включения скриптов из каталогов `local_startup` в базовый man:rcorder[8].
|600102
|link:https://svnweb.freebsd.org/changeset/base/153912[153912]
-|December 30, 2005
-|6.0-STABLE after updating the ELF types and constants.
+|30 декабря 2005
+|6.0-STABLE после обновления типов и констант ELF.
|600103
|link:https://svnweb.freebsd.org/changeset/base/154396[154396]
-|January 15, 2006
-|6.0-STABLE after MFC of man:pidfile[3] API.
+|15 января 2006
+|6.0-STABLE после переноса изменений (MFC) API man:pidfile[3].
|600104
|link:https://svnweb.freebsd.org/changeset/base/154453[154453]
-|January 17, 2006
-|6.0-STABLE after MFC of ldconfig_local_dirs change.
+|17 января 2006
+|6.0-STABLE после MFC изменений ldconfig_local_dirs.
|600105
|link:https://svnweb.freebsd.org/changeset/base/156019[156019]
-|February 26, 2006
-|6.0-STABLE after NLS catalog support of man:csh[1].
+|26 февраля 2006
+|6.0-STABLE после поддержки каталога NLS в man:csh[1].
|601000
|link:https://svnweb.freebsd.org/changeset/base/158330[158330]
-|May 6, 2006
+|6 мая 2006
|6.1-RELEASE
|601100
|link:https://svnweb.freebsd.org/changeset/base/158331[158331]
-|May 6, 2006
-|6.1-STABLE after 6.1-RELEASE.
+|6 мая 2006
+|6.1-STABLE после 6.1-RELEASE.
|601101
|link:https://svnweb.freebsd.org/changeset/base/159861[159861]
-|June 22, 2006
-|6.1-STABLE after the import of csup.
+|22 июня 2006
+|6.1-STABLE после импорта `csup`.
|601102
|link:https://svnweb.freebsd.org/changeset/base/160253[160253]
-|July 11, 2006
-|6.1-STABLE after the man:iwi[4] update.
+|11 июля 2006
+|6.1-STABLE после обновления man:iwi[4].
|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.
+|17 июля 2006
+|6.1-STABLE после обновления резолвера до BIND9 и добавления реентерабельной версии функций `netdb`.
|601104
|link:https://svnweb.freebsd.org/changeset/base/161098[161098]
-|August 8, 2006
-|6.1-STABLE after DSO (dynamic shared objects) support has been enabled in OpenSSL.
+|8 августа 2006
+|6.1-STABLE после включения поддержки DSO (динамически разделяемых объектов) в OpenSSL.
|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.
+|2 сентября 2006
+|6.1-STABLE после исправлений 802.11 изменил API для ioctl IEEE80211_IOC_STA_INFO.
|602000
|link:https://svnweb.freebsd.org/changeset/base/164312[164312]
-|November 15, 2006
+|15 ноября 2006
|6.2-RELEASE
|602100
|link:https://svnweb.freebsd.org/changeset/base/162329[162329]
-|September 15, 2006
-|6.2-STABLE after 6.2-RELEASE.
+|15 сентября 2006
+|6.2-STABLE после 6.2-RELEASE.
|602101
|link:https://svnweb.freebsd.org/changeset/base/165122[165122]
-|December 12, 2006
-|6.2-STABLE after the addition of Wi-Spy quirk.
+|12 декабря 2006
+|6.2-STABLE после добавления особенности Wi-Spy.
|602102
|link:https://svnweb.freebsd.org/changeset/base/165596[165596]
-|December 28, 2006
-|6.2-STABLE after pci_find_extcap() addition.
+|28 декабря 2006
+|6.2-STABLE после добавления `pci_find_extcap()`.
|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.
+|16 января 2007
+|6.2-STABLE после MFC изменения `dlsym` для поиска запрошенного символа как в указанном DSO, так и в его неявных зависимостях.
|602104
|link:https://svnweb.freebsd.org/changeset/base/166314[166314]
-|January 28, 2007
-|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.
+|28 января 2007
+|6.2-STABLE после слияния изменений (MFC) узлов netgraph man:ng_deflate[4] и man:ng_pred1[4], а также новых режимов сжатия и шифрования для узла man:ng_ppp[4].
|602105
|link:https://svnweb.freebsd.org/changeset/base/166840[166840]
-|February 20, 2007
-|6.2-STABLE after MFC of BSD licensed version of man:gzip[1] ported from NetBSD.
+|20 февраля 2007
+|6.2-STABLE после переноса (MFC) версии man:gzip[1] под лицензией BSD из NetBSD.
|602106
|link:https://svnweb.freebsd.org/changeset/base/168133[168133]
-|March 31, 2007
-|6.2-STABLE after MFC of PCI MSI and MSI-X support.
+|31 марта 2007
+|6.2-STABLE после слияния изменений (MFC) поддержки PCI MSI и MSI-X.
|602107
|link:https://svnweb.freebsd.org/changeset/base/168438[168438]
-|April 6, 2007
-|6.2-STABLE after MFC of ncurses 5.6 and wide character support.
+|6 апреля 2007
+|6.2-STABLE после слияния изменений (MFC) ncurses 5.6 с поддержкой широких символов.
|602108
|link:https://svnweb.freebsd.org/changeset/base/168611[168611]
-|April 11, 2007
-|6.2-STABLE after MFC of CAM 'SG' peripheral device, which implements a subset of Linux SCSI SG passthrough device API.
+|11 апреля 2007
+|6.2-STABLE после слияния изменений (MFC) для периферийного устройства CAM 'SG', реализующего подмножество API сквозного устройства SCSI SG в Linux.
|602109
|link:https://svnweb.freebsd.org/changeset/base/168805[168805]
-|April 17, 2007
-|6.2-STABLE after MFC of readline 5.2 patchset 002.
+|17 апреля 2007
+|6.2-STABLE после MFC набора исправлений readline 5.2 patch-set 002.
|602110
|link:https://svnweb.freebsd.org/changeset/base/169222[169222]
-|May 2, 2007
-|6.2-STABLE after MFC of pmap_invalidate_cache(), pmap_change_attr(), pmap_mapbios(), pmap_mapdev_attr(), and pmap_unmapbios() for amd64 and i386.
+|2 мая 2007
+|6.2-STABLE после слияния изменений (MFC) функций `pmap_invalidate_cache()`, `pmap_change_attr()`, `pmap_mapbios()`, `pmap_mapdev_attr()` и `pmap_unmapbios()` для архитектур amd64 и i386.
|602111
|link:https://svnweb.freebsd.org/changeset/base/170556[170556]
-|June 11, 2007
-|6.2-STABLE after MFC of BOP_BDFLUSH and caused breakage of the filesystem modules KBI.
+|11 июня 2007
+|6.2-STABLE после слияния изменений BOP_BDFLUSH, что привело к нарушению KBI модулей файловой системы.
|602112
|link:https://svnweb.freebsd.org/changeset/base/172284[172284]
-|September 21, 2007
-|6.2-STABLE after libutil(3) MFC's.
+|21 сентября 2007
+|6.2-STABLE после man:libutil[3] MFC's.
|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.
+|25 октября 2007
+|6.2-STABLE после слияния изменений (MFC) разделения широких и однобайтовых символов ctype. Вновь скомпилированные двоичные файлы, ссылающиеся на ctype.h, могут требовать новый символ `__mb_sb_limit`, который недоступен в старых системах.
|602114
|link:https://svnweb.freebsd.org/changeset/base/173170[173170]
-|October 30, 2007
-|6.2-STABLE after ctype ABI forward compatibility restored.
+|30 октября 2007
+|6.2-STABLE после восстановления прямой совместимости ABI ctype.
|602115
|link:https://svnweb.freebsd.org/changeset/base/173794[173794]
-|November 21, 2007
-|6.2-STABLE after back out of wide and single byte ctype separation.
+|21 ноября 2007
+|6.2-STABLE после отмены разделения широких и однобайтовых символов ctype.
|603000
|link:https://svnweb.freebsd.org/changeset/base/173897[173897]
-|November 25, 2007
+|25 ноября 2007
|6.3-RELEASE
|603100
|link:https://svnweb.freebsd.org/changeset/base/173891[173891]
-|November 25, 2007
-|6.3-STABLE after 6.3-RELEASE.
+|25 ноября 2007
+|6.3-STABLE после 6.3-RELEASE.
-|(not changed)
+|(не изменено)
|link:https://svnweb.freebsd.org/changeset/base/174434[174434]
-|December 7, 2007
-|6.3-STABLE after fixing multibyte type support in bit macro.
+|7 декабря 2007
+|6.3-STABLE после исправления поддержки многобайтовых типов в макросе bit.
|603102
|link:https://svnweb.freebsd.org/changeset/base/178459[178459]
-|April 24, 2008
-|6.3-STABLE after adding l_sysid to struct flock.
+|24 апреля 2008
+|6.3-STABLE после добавления `l_sysid` в структуру flock.
|603103
|link:https://svnweb.freebsd.org/changeset/base/179367[179367]
-|May 27, 2008
-|6.3-STABLE after MFC of the man:memrchr[3] function.
+|27 мая 2008
+|6.3-STABLE после MFC функции man:memrchr[3].
|603104
|link:https://svnweb.freebsd.org/changeset/base/179810[179810]
-|June 15, 2008
-|6.3-STABLE after MFC of support for `:u` variable modifier in man:make[1].
+|15 июня 2008
+|6.3-STABLE после MFC поддержки модификатора переменной `:u` в man:make[1].
|604000
|link:https://svnweb.freebsd.org/changeset/base/183583[183583]
-|October 4, 2008
+|4 октября 2008
|6.4-RELEASE
|604100
|link:https://svnweb.freebsd.org/changeset/base/183584[183584]
-|October 4, 2008
-|6.4-STABLE after 6.4-RELEASE.
+|4 октября 2008
+|6.4-STABLE после 6.4-RELEASE.
|===
[[versions-5]]
-== FreeBSD 5 Versions
+== Версии FreeBSD 5
[[freebsd-versions-table-5]]
-.FreeBSD 5 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 5
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|500000
|link:https://svnweb.freebsd.org/changeset/base/58009[58009]
-|March 13, 2000
+|13 марта 2000
|5.0-CURRENT
|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.
+|18 апреля 2000
+|5.0-CURRENT после добавления дополнительных полей заголовка ELF и изменения метода маркировки ELF-бинарников.
|500002
|link:https://svnweb.freebsd.org/changeset/base/59906[59906]
-|May 2, 2000
-|5.0-CURRENT after kld metadata changes.
+|2 мая 2000
+|5.0-CURRENT после изменений метаданных kld.
|500003
|link:https://svnweb.freebsd.org/changeset/base/60688[60688]
-|May 18, 2000
-|5.0-CURRENT after buf/bio changes.
+|18 мая 2000
+|5.0-CURRENT после изменений в buf/bio.
|500004
|link:https://svnweb.freebsd.org/changeset/base/60936[60936]
-|May 26, 2000
-|5.0-CURRENT after binutils upgrade.
+|26 мая 2000
+|5.0-CURRENT после обновления binutils.
|500005
|link:https://svnweb.freebsd.org/changeset/base/61221[61221]
-|June 3, 2000
-|5.0-CURRENT after merging libxpg4 code into libc and after TASKQ interface introduction.
+|3 июня 2000
+|5.0-CURRENT после объединения кода libxpg4 с libc и после введения интерфейса TASKQ.
|500006
|link:https://svnweb.freebsd.org/changeset/base/61500[61500]
-|June 10, 2000
-|5.0-CURRENT after the addition of AGP interfaces.
+|10 июня 2000
+|5.0-CURRENT после добавления интерфейсов AGP.
|500007
|link:https://svnweb.freebsd.org/changeset/base/62235[62235]
-|June 29, 2000
-|5.0-CURRENT after Perl upgrade to 5.6.0
+|29 июня 2000
+|5.0-CURRENT после обновления Perl до версии 5.6.0
|500008
|link:https://svnweb.freebsd.org/changeset/base/62764[62764]
-|July 7, 2000
-|5.0-CURRENT after the update of KAME code to 2000/07 sources.
+|7 июля 2000
+|5.0-CURRENT после обновления кода KAME до исходников от 2000/07.
|500009
|link:https://svnweb.freebsd.org/changeset/base/63154[63154]
-|July 14, 2000
-|5.0-CURRENT after ether_ifattach() and ether_ifdetach() changes.
+|14 июля 2000
+|5.0-CURRENT после изменений в `ether_ifattach()` и `ether_ifdetach()`.
|500010
|link:https://svnweb.freebsd.org/changeset/base/63265[63265]
-|July 16, 2000
-|5.0-CURRENT after changing mtree defaults back to original variant, adding -L to follow symlinks.
+|16 июля 2000
+|5.0-CURRENT после изменения настроек mtree обратно на исходный вариант, с добавлением -L для следования по символьным ссылкам.
|500011
|link:https://svnweb.freebsd.org/changeset/base/63459[63459]
-|July 18, 2000
-|5.0-CURRENT after kqueue API changed.
+|18 июля 2000
+|5.0-CURRENT после изменения API kqueue.
|500012
|link:https://svnweb.freebsd.org/changeset/base/65353[65353]
-|September 2, 2000
-|5.0-CURRENT after man:setproctitle[3] moved from libutil to libc.
+|2 сентября 2000
+|5.0-CURRENT после переноса man:setproctitle[3] из libutil в libc.
|500013
|link:https://svnweb.freebsd.org/changeset/base/65671[65671]
-|September 10, 2000
-|5.0-CURRENT after the first SMPng commit.
+|10 сентября 2000
+|5.0-CURRENT после первого коммита SMPng.
|500014
|link:https://svnweb.freebsd.org/changeset/base/70650[70650]
-|January 4, 2001
-|5.0-CURRENT after <sys/select.h> moved to <sys/selinfo.h>.
+|4 января 2001
+|5.0-CURRENT после перемещения <sys/select.h> в <sys/selinfo.h>.
|500015
|link:https://svnweb.freebsd.org/changeset/base/70894[70894]
-|January 10, 2001
-|5.0-CURRENT after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes.
+|10 января 2001
+|5.0-CURRENT после объединения libgcc.a и libgcc_r.a, а также связанных изменений в компоновке GCC.
|500016
|link:https://svnweb.freebsd.org/changeset/base/71583[71583]
-|January 24, 2001
-|5.0-CURRENT after change allowing libc and libc_r to be linked together, deprecating -pthread option.
+|24 января 2001
+|5.0-CURRENT после изменения, разрешающего совместную линковку libc и libc_r, с объявлением устаревшим параметра -pthread.
|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.
+|18 февраля 2001
+|5.0-CURRENT после перехода со структуры `ucred` на структуру `xucred` для стабилизации API, экспортируемого ядром, для mountd и других.
|500018
|link:https://svnweb.freebsd.org/changeset/base/72975[72975]
-|February 24, 2001
-|5.0-CURRENT after addition of CPUTYPE make variable for controlling CPU-specific optimizations.
+|24 февраля 2001
+|5.0-CURRENT после добавления переменной сборки CPUTYPE для управления оптимизациями под конкретный процессор.
|500019
|link:https://svnweb.freebsd.org/changeset/base/77937[77937]
-|June 9, 2001
-|5.0-CURRENT after moving machine/ioctl_fd.h to sys/fdcio.h
+|9 июня 2001
+|5.0-CURRENT после перемещения machine/ioctl_fd.h в sys/fdcio.h
|500020
|link:https://svnweb.freebsd.org/changeset/base/78304[78304]
-|June 15, 2001
-|5.0-CURRENT after locale names renaming.
+|15 июня 2001
+|5.0-CURRENT после переименования названий локалей.
|500021
|link:https://svnweb.freebsd.org/changeset/base/78632[78632]
-|June 22, 2001
-|5.0-CURRENT after Bzip2 import. Also signifies removal of S/Key.
+|22 июня 2001
+|5.0-CURRENT после импорта Bzip2. Также означает удаление S/Key.
|500022
|link:https://svnweb.freebsd.org/changeset/base/83435[83435]
-|July 12, 2001
-|5.0-CURRENT after SSE support.
+|12 июля 2001
+|5.0-CURRENT после поддержки SSE.
|500023
|link:https://svnweb.freebsd.org/changeset/base/83435[83435]
-|September 14, 2001
-|5.0-CURRENT after KSE Milestone 2.
+|14 сентября 2001
+|5.0-CURRENT после второго этапа KSE.
|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.
+|1 октября 2001
+|5.0-CURRENT после `d_thread_t` и перемещение UUCP в порты.
|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.
+|4 октября 2001
+|5.0-CURRENT после изменения ABI для передачи дескрипторов и `creds` на 64-битных платформах.
|500026
|link:https://svnweb.freebsd.org/changeset/base/84710[84710]
-|October 9, 2001
-|5.0-CURRENT after moving to XFree86 4 by default for package builds, and after the new libc strnstr() function was added.
+|9 октября 2001
+|5.0-CURRENT после перехода на XFree86 4 по умолчанию для сборки пакетов и после добавления новой функции `strnstr()` в библиотеку libc.
|500027
|link:https://svnweb.freebsd.org/changeset/base/84743[84743]
-|October 10, 2001
-|5.0-CURRENT after the new libc strcasestr() function was added.
+|10 октября 2001
+|5.0-CURRENT после добавления новой функции `strcasestr()` в библиотеку libc.
|500028
|link:https://svnweb.freebsd.org/changeset/base/87879[87879]
-|December 14, 2001
-|5.0-CURRENT after the userland components of smbfs were imported.
+|14 декабря 2001
+|5.0-CURRENT после импорта компонентов пользовательского пространства smbfs.
-|(not changed)
-|
-|
-|5.0-CURRENT after the new C99 specific-width integer types were added.
+|(не изменено)
+|
+|
+|5.0-CURRENT после добавления новых целочисленных типов фиксированной ширины C99.
|500029
|link:https://svnweb.freebsd.org/changeset/base/89938[89938]
-|January 29, 2002
-|5.0-CURRENT after a change was made in the return value of man:sendfile[2].
+|29 января 2002
+|5.0-CURRENT после изменения возвращаемого значения man:sendfile[2].
|500030
|link:https://svnweb.freebsd.org/changeset/base/90711[90711]
-|February 15, 2002
-|5.0-CURRENT after the introduction of the type `fflags_t`, which is the appropriate size for file flags.
+|15 февраля 2002
+|5.0-CURRENT после введения типа `fflags_t`, который имеет подходящий размер для флагов файлов.
|500031
|link:https://svnweb.freebsd.org/changeset/base/91203[91203]
-|February 24, 2002
-|5.0-CURRENT after the usb structure element rename.
+|24 февраля 2002
+|5.0-CURRENT после переименования элемента структуры usb.
|500032
|link:https://svnweb.freebsd.org/changeset/base/92453[92453]
-|March 16, 2002
-|5.0-CURRENT after the introduction of Perl 5.6.1.
+|16 марта 2002
+|5.0-CURRENT после внедрения Perl 5.6.1.
|500033
|link:https://svnweb.freebsd.org/changeset/base/93722[93722]
-|April 3, 2002
-|5.0-CURRENT after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`.
+|3 апреля 2002
+|5.0-CURRENT после того, как переменная `sendmail_enable` из man:rc.conf[5] стала принимать значение `NONE`.
|500034
|link:https://svnweb.freebsd.org/changeset/base/95831[95831]
-|April 30, 2002
-|5.0-CURRENT after mtx_init() grew a third argument.
+|30 апреля 2002
+|5.0-CURRENT после того, как `mtx_init()` получил третий аргумент.
|500035
|link:https://svnweb.freebsd.org/changeset/base/96498[96498]
-|May 13, 2002
-|5.0-CURRENT with Gcc 3.1.
+|13 мая 2002
+|5.0-CURRENT с Gcc 3.1.
|500036
|link:https://svnweb.freebsd.org/changeset/base/96781[96781]
-|May 17, 2002
-|5.0-CURRENT without Perl in /usr/src
+|17 мая 2002
+|5.0-CURRENT без Perl в /usr/src
|500037
|link:https://svnweb.freebsd.org/changeset/base/97516[97516]
-|May 29, 2002
-|5.0-CURRENT after the addition of man:dlfunc[3]
+|29 мая 2002
+|5.0-CURRENT после добавления man:dlfunc[3]
|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.
+|24 июля 2002
+|5.0-CURRENT после изменения типов некоторых членов структуры `sockbuf` и её переупорядочивания.
|500039
|link:https://svnweb.freebsd.org/changeset/base/102757[102757]
-|September 1, 2002
-|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.
+|1 сентября 2002
+|5.0-CURRENT после импорта GCC 3.2.1. Также после того, как заголовки перестали использовать _BSD_FOO_T_ и начали использовать _FOO_T_DECLARED. Это значение также можно использовать как консервативную оценку начала поддержки пакета man:bzip2[1].
|500040
|link:https://svnweb.freebsd.org/changeset/base/103675[103675]
-|September 20, 2002
-|5.0-CURRENT after various changes to disk functions were made in the name of removing dependency on disklabel structure internals.
+|20 сентября 2002
+|5.0-CURRENT после внесения различных изменений в функции работы с дисками, направленных на устранение зависимости от внутренней структуры disklabel.
|500041
|link:https://svnweb.freebsd.org/changeset/base/104250[104250]
-|October 1, 2002
-|5.0-CURRENT after the addition of man:getopt_long[3] to libc.
+|1 октября 2002
+|5.0-CURRENT после добавления man:getopt_long[3] в libc.
|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.
+|15 октября 2002
+|5.0-CURRENT после обновления Binutils 2.13, которое включило новую эмуляцию FreeBSD, `vec` и формат вывода.
|500043
|link:https://svnweb.freebsd.org/changeset/base/106289[106289]
-|November 1, 2002
-|5.0-CURRENT after adding weak pthread_XXX stubs to libc, obsoleting libXThrStub.so. 5.0-RELEASE.
+|1 ноября 2002
+|5.0-CURRENT после добавления слабых заглушек pthread_XXX в libc, что сделало устаревшей libXThrStub.so. 5.0-RELEASE.
|500100
|link:https://svnweb.freebsd.org/changeset/base/109405[109405]
-|January 17, 2003
-|5.0-CURRENT after branching for RELENG_5_0
+|17 января 2003
+|5.0-CURRENT после ветвления для RELENG_5_0
|500101
|link:https://svnweb.freebsd.org/changeset/base/111120[111120]
-|February 19, 2003
-|<sys/dkstat.h> is empty. Do not include it.
+|19 февраля 2003
+|<sys/dkstat.h> пустой. Не включайте его.
|500102
|link:https://svnweb.freebsd.org/changeset/base/111482[111482]
-|February 25, 2003
-|5.0-CURRENT after the d_mmap_t interface change.
+|25 февраля 2003
+|5.0-CURRENT после изменения интерфейса d_mmap_t.
|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.
+|26 февраля 2003
+|5.0-CURRENT после изменения `taskqueue_swi` для работы без Giant и добавления `taskqueue_swi_giant` для работы с Giant.
|500104
|link:https://svnweb.freebsd.org/changeset/base/111600[111600]
-|February 27, 2003
-|cdevsw_add() and cdevsw_remove() no longer exists. Appearance of MAJOR_AUTO allocation facility.
+|27 февраля 2003
+|`cdevsw_add()` и `cdevsw_remove()` больше не существуют. Появление средства выделения `MAJOR_AUTO`.
|500105
|link:https://svnweb.freebsd.org/changeset/base/111864[111864]
-|March 4, 2003
-|5.0-CURRENT after new cdevsw initialization method.
+|4 марта 2003
+|5.0-CURRENT после новой инициализации метода cdevsw.
|500106
|link:https://svnweb.freebsd.org/changeset/base/112007[112007]
-|March 8, 2003
-|devstat_add_entry() has been replaced by devstat_new_entry()
+|8 марта 2003
+|`devstat_add_entry()` был заменён на `devstat_new_entry()`
|500107
|link:https://svnweb.freebsd.org/changeset/base/112288[112288]
-|March 15, 2003
-|Devstat interface change; see sys/sys/param.h 1.149
+|15 марта 2003
+|Изменение интерфейса `devstat`; см. sys/sys/param.h 1.149
|500108
|link:https://svnweb.freebsd.org/changeset/base/112300[112300]
-|March 15, 2003
-|Token-Ring interface changes.
+|15 марта 2003
+|Изменения в интерфейсе Token-Ring.
|500109
|link:https://svnweb.freebsd.org/changeset/base/112571[112571]
-|March 25, 2003
-|Addition of vm_paddr_t.
+|25 марта 2003
+|Добавление `vm_paddr_t`.
|500110
|link:https://svnweb.freebsd.org/changeset/base/112741[112741]
-|March 28, 2003
-|5.0-CURRENT after man:realpath[3] has been made thread-safe
+|28 марта 2003
+|5.0-CURRENT после того, как man:realpath[3] стал потокобезопасным
|500111
|link:https://svnweb.freebsd.org/changeset/base/113273[113273]
-|April 9, 2003
-|5.0-CURRENT after man:usbhid[3] has been synced with NetBSD
+|9 апреля 2003
+|5.0-CURRENT после синхронизации man:usbhid[3] с NetBSD
|500112
|link:https://svnweb.freebsd.org/changeset/base/113597[113597]
-|April 17, 2003
-|5.0-CURRENT after new NSS implementation and addition of POSIX.1 getpw*_r, getgr*_r functions
+|17 апреля 2003
+|5.0-CURRENT после новой реализации NSS и добавления функций POSIX.1 getpw*_r, getgr*_r
|500113
|link:https://svnweb.freebsd.org/changeset/base/114492[114492]
-|May 2, 2003
-|5.0-CURRENT after removal of the old rc system.
+|2 мая 2003
+|5.0-CURRENT после удаления старой системы rc.
|501000
|link:https://svnweb.freebsd.org/changeset/base/115816[115816]
-|June 4, 2003
+|4 июня 2003
|5.1-RELEASE.
|501100
|link:https://svnweb.freebsd.org/changeset/base/115710[115710]
-|June 2, 2003
-|5.1-CURRENT after branching for RELENG_5_1.
+|2 июня 2003
+|5.1-CURRENT после ветвления для RELENG_5_1.
|501101
|link:https://svnweb.freebsd.org/changeset/base/117025[117025]
-|June 29, 2003
-|5.1-CURRENT after correcting the semantics of man:sigtimedwait[2] and man:sigwaitinfo[2].
+|29 июня 2003
+|5.1-CURRENT после исправления семантики man:sigtimedwait[2] и man:sigwaitinfo[2].
|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].
+|3 июля 2003
+|5.1-CURRENT после добавления полей `lockfunc` и `lockfuncarg` в man:bus_dma_tag_create[9].
|501103
|link:https://svnweb.freebsd.org/changeset/base/118241[118241]
-|July 31, 2003
-|5.1-CURRENT after GCC 3.3.1-pre 20030711 snapshot integration.
+|31 июля 2003
+|5.1-CURRENT после интеграции снимка GCC 3.3.1-pre 20030711.
|501104
|link:https://svnweb.freebsd.org/changeset/base/118511[118511]
-|August 5, 2003
-|5.1-CURRENT 3ware API changes to twe.
+|5 августа 2003
+|5.1-CURRENT Изменения API 3ware в twe.
|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.
+|17 августа 2003
+|5.1-CURRENT динамически связанные /bin и /sbin поддержка и перемещение библиотек в /lib.
|501106
|link:https://svnweb.freebsd.org/changeset/base/119881[119881]
-|September 8, 2003
-|5.1-CURRENT after adding kernel support for Coda 6.x.
+|8 сентября 2003
+|5.1-CURRENT после добавления поддержки ядра для Coda 6.x.
|501107
|link:https://svnweb.freebsd.org/changeset/base/120180[120180]
-|September 17, 2003
-|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.
+|17 сентября 2003
+|5.1-CURRENT после того, как константы UART 16550 были перемещены из [.filename]#<dev/sio/sioreg.h># в [.filename]#<dev/ic/ns16550.h>#. Также когда функциональность libmap стала безусловно поддерживаться rtld.
|501108
|link:https://svnweb.freebsd.org/changeset/base/120386[120386]
-|September 23, 2003
-|5.1-CURRENT after PFIL_HOOKS API update
+|23 сентября 2003
+|5.1-CURRENT после обновления API PFIL_HOOKS
|501109
|link:https://svnweb.freebsd.org/changeset/base/120503[120503]
-|September 27, 2003
-|5.1-CURRENT after adding man:kiconv[3]
+|27 сентября 2003
+|5.1-CURRENT после добавления man:kiconv[3]
|501110
|link:https://svnweb.freebsd.org/changeset/base/120556[120556]
-|September 28, 2003
-|5.1-CURRENT after changing default operations for open and close in cdevsw
+|28 сентября 2003
+|5.1-CURRENT после изменения операций по умолчанию для open и close в cdevsw
|501111
|link:https://svnweb.freebsd.org/changeset/base/121125[121125]
-|October 16, 2003
-|5.1-CURRENT after changed layout of cdevsw
+|16 октября 2003
+|5.1-CURRENT после изменения структуры cdevsw
|501112
|link:https://svnweb.freebsd.org/changeset/base/121129[121129]
-|October 16, 2003
-| 5.1-CURRENT after adding kobj multiple inheritance
+|16 октября 2003
+| 5.1-CURRENT после добавления множественного наследования kobj
|501113
|link:https://svnweb.freebsd.org/changeset/base/121816[121816]
-|October 31, 2003
-| 5.1-CURRENT after the if_xname change in struct ifnet
+|31 октября 2003
+| 5.1-CURRENT после изменения `if_xname` в структуре ifnet
|501114
|link:https://svnweb.freebsd.org/changeset/base/122779[122779]
-|November 16, 2003
-| 5.1-CURRENT after changing /bin and /sbin to be dynamically linked
+|16 ноября 2003
+| 5.1-CURRENT после изменения /bin и /sbin на динамически линкуемые
|502000
|link:https://svnweb.freebsd.org/changeset/base/123198[123198]
-|December 7, 2003
+|7 декабря 2003
|5.2-RELEASE
|502010
|link:https://svnweb.freebsd.org/changeset/base/126150[126150]
-|February 23, 2004
+|23 февраля 2004
|5.2.1-RELEASE
|502100
|link:https://svnweb.freebsd.org/changeset/base/123196[123196]
-|December 7, 2003
-|5.2-CURRENT after branching for RELENG_5_2
+|7 декабря 2003
+|5.2-CURRENT после ветвления для RELENG_5_2
|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.
+|19 декабря 2003
+|5.2-CURRENT после добавления функций `__cxa_atexit`/`__cxa_finalize` в libc.
|502102
|link:https://svnweb.freebsd.org/changeset/base/125236[125236]
-|January 30, 2004
-|5.2-CURRENT after change of default thread library from libc_r to libpthread.
+|30 января 2004
+|5.2-CURRENT после изменения стандартной библиотеки потоков с libc_r на libpthread.
|502103
|link:https://svnweb.freebsd.org/changeset/base/126083[126083]
-|February 21, 2004
-|5.2-CURRENT after device driver API megapatch.
+|21 февраля 2004
+|5.2-CURRENT после масштабного патча API драйверов устройств.
|502104
|link:https://svnweb.freebsd.org/changeset/base/126208[126208]
-|February 25, 2004
-|5.2-CURRENT after getopt_long_only() addition.
+|25 февраля 2004
+|5.2-CURRENT после добавления `getopt_long_only()`.
|502105
|link:https://svnweb.freebsd.org/changeset/base/126644[126644]
-|March 5, 2004
-|5.2-CURRENT after NULL is made into ((void *)0) for C, creating more warnings.
+|5 марта 2004
+|5.2-CURRENT после того, как NULL заменён на ((void *)0) для C, что вызывает больше предупреждений.
|502106
|link:https://svnweb.freebsd.org/changeset/base/126757[126757]
-|March 8, 2004
-|5.2-CURRENT after pf is linked to the build and install.
+|8 марта 2004
+|5.2-CURRENT после подключения pf к сборке и установке.
|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.
+|10 марта 2004
+|5.2-CURRENT после изменения `time_t` на 64-битное значение на sparc64.
|502108
|link:https://svnweb.freebsd.org/changeset/base/126891[126891]
-|March 12, 2004
-|5.2-CURRENT after Intel C/C++ compiler support in some headers and man:execve[2] changes to be more strictly conforming to POSIX.
+|12 марта 2004
+|5.2-CURRENT после поддержки компилятора Intel C/C++ в некоторых заголовочных файлах и изменений в man:execve[2] для более строгого соответствия POSIX.
|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
+|22 марта 2004
+|5.2-CURRENT после введения API `bus_alloc_resource_any`
|502110
|link:https://svnweb.freebsd.org/changeset/base/127475[127475]
-|March 27, 2004
-|5.2-CURRENT after the addition of UTF-8 locales
+|27 марта 2004
+|5.2-CURRENT после добавления локалей UTF-8
|502111
|link:https://svnweb.freebsd.org/changeset/base/128144[128144]
-|April 11, 2004
-|5.2-CURRENT after the removal of the man:getvfsent[3] API
+|11 апреля 2004
+|5.2-CURRENT после удаления API man:getvfsent[3]
|502112
|link:https://svnweb.freebsd.org/changeset/base/128182[128182]
-|April 13, 2004
-|5.2-CURRENT after the addition of the .warning directive for make.
+|13 апреля 2004
+|5.2-CURRENT после добавления директивы .warning для make.
|502113
|link:https://svnweb.freebsd.org/changeset/base/130057[130057]
-|June 4, 2004
-|5.2-CURRENT after ttyioctl() was made mandatory for serial drivers.
+|4 июня 2004
+|5.2-CURRENT после того, как `ttyioctl()` стал обязательным для драйверов последовательных портов.
|502114
|link:https://svnweb.freebsd.org/changeset/base/130418[130418]
-|June 13, 2004
-|5.2-CURRENT after import of the ALTQ framework.
+|13 июня 2004
+|5.2-CURRENT после импорта инфраструктуры ALTQ.
|502115
|link:https://svnweb.freebsd.org/changeset/base/130481[130481]
-|June 14, 2004
-|5.2-CURRENT after changing man:sema_timedwait[9] to return 0 on success and a non-zero error code on failure.
+|14 июня 2004
+|5.2-CURRENT после изменения man:sema_timedwait[9] для возврата 0 при успехе и ненулевого кода ошибки при сбое.
|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 *.
+|16 июня 2004
+|5.2-CURRENT после изменения типа `dev_t` в ядре на указатель на структуру 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.
+|17 июня 2004
+|5.2-CURRENT после изменения ядра `udev_t` на `dev_t`.
|502118
|link:https://svnweb.freebsd.org/changeset/base/130656[130656]
-|June 17, 2004
-|5.2-CURRENT after adding support for CLOCK_VIRTUAL and CLOCK_PROF to man:clock_gettime[2] and man:clock_getres[2].
+|17 июня 2004
+|5.2-CURRENT после добавления поддержки CLOCK_VIRTUAL и CLOCK_PROF в man:clock_gettime[2] и man:clock_getres[2].
|502119
|link:https://svnweb.freebsd.org/changeset/base/130934[130934]
-|June 22, 2004
-|5.2-CURRENT after changing network interface cloning overhaul.
+|22 июня 2004
+|5.2-CURRENT после изменения переработки клонирования сетевых интерфейсов.
|502120
|link:https://svnweb.freebsd.org/changeset/base/131429[131429]
-|July 2, 2004
-|5.2-CURRENT after the update of the package tools to revision 20040629.
+|2 июля 2004
+|5.2-CURRENT после обновления инструментов пакетов до ревизии 20040629.
|502121
|link:https://svnweb.freebsd.org/changeset/base/131883[131883]
-|July 9, 2004
-|5.2-CURRENT after marking Bluetooth code as non-i386 specific.
+|9 июля 2004
+|5.2-CURRENT после пометки кода Bluetooth как не специфичного для i386.
|502122
|link:https://svnweb.freebsd.org/changeset/base/131971[131971]
-|July 11, 2004
-|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.
+|11 июля 2004
+|5.2-CURRENT после внедрения фреймворка отладчика KDB, преобразования DDB в бэкенд и добавления бэкенда GDB.
|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.
+|12 июля 2004
+|5.2-CURRENT после изменения, чтобы VFS_ROOT принимал аргумент struct thread, как и vflush. Структура `kinfo_proc` теперь содержит указатель на пользовательские данные. Переключение реализации X по умолчанию на `xorg` также произошло в это время.
|502124
|link:https://svnweb.freebsd.org/changeset/base/132597[132597]
-|July 24, 2004
-|5.2-CURRENT after the change to separate the way ports rc.d and legacy scripts are started.
+|24 июля 2004
+|5.2-CURRENT после изменения, разделяющего способ запуска rc.d портов и устаревших скриптов.
|502125
|link:https://svnweb.freebsd.org/changeset/base/132726[132726]
-|July 28, 2004
-|5.2-CURRENT after the backout of the previous change.
+|28 июля 2004
+|5.2-CURRENT после отмены предыдущего изменения.
|502126
|link:https://svnweb.freebsd.org/changeset/base/132914[132914]
-|July 31, 2004
-|5.2-CURRENT after the removal of kmem_alloc_pageable() and the import of gcc 3.4.2.
+|31 июля 2004
+|5.2-CURRENT после удаления `kmem_alloc_pageable()` и импорта gcc 3.4.2.
|502127
|link:https://svnweb.freebsd.org/changeset/base/132991[132991]
-|August 2, 2004
-|5.2-CURRENT after changing the UMA kernel API to allow ctors/inits to fail.
+|2 августа 2004
+|5.2-CURRENT после изменения UMA API ядра для разрешения ошибок в ctors/inits.
|502128
|link:https://svnweb.freebsd.org/changeset/base/133306[133306]
-|August 8, 2004
-|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.
+|8 августа 2004
+|5.2-CURRENT после изменения сигнатуры vfs_mount, а также глобальной замены PRISON_ROOT на SUSER_ALLOWJAIL для API man:suser[9].
|503000
|link:https://svnweb.freebsd.org/changeset/base/134189[134189]
-|August 23, 2004
-|5.3-BETA/RC before the pfil API change
+|23 августа 2004
+|5.3-BETA/RC до изменения API pfil
|503001
|link:https://svnweb.freebsd.org/changeset/base/135580[135580]
-|September 22, 2004
+|22 сентября 2004
|5.3-RELEASE
|503100
|link:https://svnweb.freebsd.org/changeset/base/136595[136595]
-|October 16, 2004
-|5.3-STABLE after branching for RELENG_5_3
+|16 октября 2004
+|5.3-STABLE после ветвления для RELENG_5_3
|503101
|link:https://svnweb.freebsd.org/changeset/base/138459[138459]
-|December 3, 2004
-|5.3-STABLE after addition of glibc style man:strftime[3] padding options.
+|3 декабря 2004
+|5.3-STABLE после добавления опций заполнения man:strftime[3] в стиле glibc.
|503102
|link:https://svnweb.freebsd.org/changeset/base/141788[141788]
-|February 13, 2005
-|5.3-STABLE after OpenBSD's man:nc[1] import MFC.
+|13 февраля 2005
+|5.3-STABLE после импорта man:nc[1] из OpenBSD MFC.
|503103
|link:https://svnweb.freebsd.org/changeset/base/142639[142639]
-|February 27, 2005
-|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.
+|27 февраля 2005
+|5.4-PRERELEASE после MFC исправлений в [.filename]#<src/include/stdbool.h># и [.filename]#<src/sys/i386/include/_types.h># для обеспечения совместимости с GCC компилятора Intel C/C++.
|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.
+|28 февраля 2005
+|5.4-PRERELEASE после MFC изменения `ifi_epoch` с времени реального мира на время работы системы.
|503105
|link:https://svnweb.freebsd.org/changeset/base/143029[143029]
-|March 2, 2005
-|5.4-PRERELEASE after the MFC of the fix of EOVERFLOW check in man:vswprintf[3].
+|2 марта 2005
+|5.4-PRERELEASE после переноса исправления проверки EOVERFLOW в man:vswprintf[3].
|504000
|link:https://svnweb.freebsd.org/changeset/base/144575[144575]
-|April 3, 2005
+|3 апреля 2005
|5.4-RELEASE.
|504100
|link:https://svnweb.freebsd.org/changeset/base/144581[144581]
-|April 3, 2005
-|5.4-STABLE after branching for RELENG_5_4
+|3 апреля 2005
+|5.4-STABLE после ветвления для RELENG_5_4
|504101
|link:https://svnweb.freebsd.org/changeset/base/146105[146105]
-|May 11, 2005
-|5.4-STABLE after increasing the default thread stacksizes
+|11 мая 2005
+|5.4-STABLE после увеличения размеров стеков потоков по умолчанию
|504102
|link:https://svnweb.freebsd.org/changeset/base/504101[504101]
-|June 24, 2005
-|5.4-STABLE after the addition of sha256
+|24 июня 2005
+|5.4-STABLE после добавления sha256
|504103
|link:https://svnweb.freebsd.org/changeset/base/150892[150892]
-|October 3, 2005
-|5.4-STABLE after the MFC of if_bridge
+|3 октября 2005
+|5.4-STABLE после слияния изменений (MFC) if_bridge
|504104
|link:https://svnweb.freebsd.org/changeset/base/152370[152370]
-|November 13, 2005
-|5.4-STABLE after the MFC of bsdiff and portsnap
+|13 ноября 2005
+|5.4-STABLE после слияния изменений (MFC) bsdiff и portsnap
|504105
|link:https://svnweb.freebsd.org/changeset/base/154464[154464]
-|January 17, 2006
-|5.4-STABLE after MFC of ldconfig_local_dirs change.
+|17 января 2006
+|5.4-STABLE после MFC изменений ldconfig_local_dirs.
|505000
|link:https://svnweb.freebsd.org/changeset/base/158481[158481]
-|May 12, 2006
+|12 мая 2006
|5.5-RELEASE.
|505100
|link:https://svnweb.freebsd.org/changeset/base/158482[158482]
-|May 12, 2006
-|5.5-STABLE after branching for RELENG_5_5
+|12 мая 2006
+|5.5-STABLE после ветвления для RELENG_5_5
|===
[[versions-4]]
-== FreeBSD 4 Versions
+== Версии FreeBSD 4
[[freebsd-versions-table-4]]
-.FreeBSD 4 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 4
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|400000
|link:https://svnweb.freebsd.org/changeset/base/43041[43041]
-|January 22, 1999
-|4.0-CURRENT after 3.4 branch
+|22 января 1999
+|4.0-CURRENT после ветки 3.4
|400001
|link:https://svnweb.freebsd.org/changeset/base/44177[44177]
-|February 20, 1999
-|4.0-CURRENT after change in dynamic linker handling
+|20 февраля 1999
+|4.0-CURRENT после изменения в обработке динамического компоновщика
|400002
|link:https://svnweb.freebsd.org/changeset/base/44699[44699]
-|March 13, 1999
-|4.0-CURRENT after C++ constructor/destructor order change
+|13 марта 1999
+|4.0-CURRENT после изменения порядка конструкторов/деструкторов C++
|400003
|link:https://svnweb.freebsd.org/changeset/base/45059[45059]
-|March 27, 1999
-|4.0-CURRENT after functioning man:dladdr[3]
+|27 марта 1999
+|4.0-CURRENT после функционирования man:dladdr[3]
|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)
+|5 апреля 1999
+|4.0-CURRENT после исправления ошибки динамического компоновщика `__deregister_frame_info` (также 4.0-CURRENT после интеграции EGCS 1.1.2)
|400005
|link:https://svnweb.freebsd.org/changeset/base/46113[46113]
-|April 27, 1999
-|4.0-CURRENT after man:suser[9] API change (also 4.0-CURRENT after newbus)
+|27 апреля 1999
+|4.0-CURRENT после изменения API man:suser[9] (также 4.0-CURRENT после newbus)
|400006
|link:https://svnweb.freebsd.org/changeset/base/47640[47640]
-|May 31, 1999
-|4.0-CURRENT after cdevsw registration change
+|31 мая 1999
+|4.0-CURRENT после изменения регистрации cdevsw
|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
+|17 июня 1999
+|4.0-CURRENT после добавления `so_cred` для учётных данных на уровне сокета
|400008
|link:https://svnweb.freebsd.org/changeset/base/48048[48048]
-|June 20, 1999
-|4.0-CURRENT after the addition of a poll syscall wrapper to libc_r
+|20 июня 1999
+|4.0-CURRENT после добавления обёртки системного вызова poll в libc_r
|400009
|link:https://svnweb.freebsd.org/changeset/base/48936[48936]
-|July 20, 1999
-|4.0-CURRENT after the change of the kernel's `dev_t` type to `struct specinfo` pointer
+|20 июля 1999
+|4.0-CURRENT после изменения типа `dev_t` ядра на указатель `struct specinfo`
|400010
|link:https://svnweb.freebsd.org/changeset/base/51649[51649]
-|September 25, 1999
-|4.0-CURRENT after fixing a hole in man:jail[2]
+|25 сентября 1999
+|4.0-CURRENT после исправления уязвимости в man:jail[2]
|400011
|link:https://svnweb.freebsd.org/changeset/base/51791[51791]
-|September 29, 1999
-|4.0-CURRENT after the `sigset_t` datatype change
+|29 сентября 1999
+|4.0-CURRENT после изменения типа данных `sigset_t`
|400012
|link:https://svnweb.freebsd.org/changeset/base/53164[53164]
-|November 15, 1999
-|4.0-CURRENT after the cutover to the GCC 2.95.2 compiler
+|15 ноября 1999
+|4.0-CURRENT после перехода на компилятор GCC 2.95.2
|400013
|link:https://svnweb.freebsd.org/changeset/base/54123[54123]
-|December 4, 1999
-|4.0-CURRENT after adding pluggable linux-mode ioctl handlers
+|4 декабря 1999
+|4.0-CURRENT после добавления подключаемых обработчиков ioctl в режиме linux
|400014
|link:https://svnweb.freebsd.org/changeset/base/56216[56216]
-|January 18, 2000
-|4.0-CURRENT after importing OpenSSL
+|18 января 2000
+|4.0-CURRENT после импорта OpenSSL
|400015
|link:https://svnweb.freebsd.org/changeset/base/56700[56700]
-|January 27, 2000
-|4.0-CURRENT after the C++ ABI change in GCC 2.95.2 from -fvtable-thunks to -fno-vtable-thunks by default
+|27 января 2000
+|4.0-CURRENT после изменения ABI C++ в GCC 2.95.2 с -fvtable-thunks на -fno-vtable-thunks по умолчанию
|400016
|link:https://svnweb.freebsd.org/changeset/base/57529[57529]
-|February 27, 2000
-|4.0-CURRENT after importing OpenSSH
+|27 февраля 2000
+|4.0-CURRENT после импорта OpenSSH
|400017
|link:https://svnweb.freebsd.org/changeset/base/58005[58005]
-|March 13, 2000
+|13 марта 2000
|4.0-RELEASE
|400018
|link:https://svnweb.freebsd.org/changeset/base/58170[58170]
-|March 17, 2000
-|4.0-STABLE after 4.0-RELEASE
+|17 марта 2000
+|4.0-STABLE после 4.0-RELEASE
|400019
|link:https://svnweb.freebsd.org/changeset/base/60047[60047]
-|May 5, 2000
-|4.0-STABLE after the introduction of delayed checksums.
+|5 мая 2000
+|4.0-STABLE после введения отложенных контрольных сумм.
|400020
|link:https://svnweb.freebsd.org/changeset/base/61262[61262]
-|June 4, 2000
-|4.0-STABLE after merging libxpg4 code into libc.
+|4 июня 2000
+|4.0-STABLE после объединения кода libxpg4 в libc.
|400021
|link:https://svnweb.freebsd.org/changeset/base/62820[62820]
-|July 8, 2000
-|4.0-STABLE after upgrading Binutils to 2.10.0, ELF branding changes, and tcsh in the base system.
+|8 июля 2000
+|4.0-STABLE после обновления Binutils до 2.10.0, изменения маркировки ELF и tcsh в базовой системе.
|410000
|link:https://svnweb.freebsd.org/changeset/base/63095[63095]
-|July 14, 2000
+|14 июля 2000
|4.1-RELEASE
|410001
|link:https://svnweb.freebsd.org/changeset/base/64012[64012]
-|July 29, 2000
-|4.1-STABLE after 4.1-RELEASE
+|29 июля 2000
+|4.1-STABLE после 4.1-RELEASE
|410002
|link:https://svnweb.freebsd.org/changeset/base/65962[65962]
-|September 16, 2000
-|4.1-STABLE after man:setproctitle[3] moved from libutil to libc.
+|16 сентября 2000
+|4.1-STABLE после перемещения man:setproctitle[3] из libutil в libc.
|411000
|link:https://svnweb.freebsd.org/changeset/base/66336[66336]
-|September 25, 2000
+|25 сентября 2000
|4.1.1-RELEASE
|411001
-|
-|
-|4.1.1-STABLE after 4.1.1-RELEASE
+|
+|
+|4.1.1-STABLE после 4.1.1-RELEASE
|420000
|link:https://svnweb.freebsd.org/changeset/base/68066[68066]
-|October 31, 2000
+|31 октября 2000
|4.2-RELEASE
|420001
|link:https://svnweb.freebsd.org/changeset/base/70895[70895]
-|January 10, 2001
-|4.2-STABLE after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes.
+|10 января 2001
+|4.2-STABLE после объединения libgcc.a и libgcc_r.a, а также связанных изменений в компоновке GCC.
|430000
|link:https://svnweb.freebsd.org/changeset/base/73800[73800]
-|March 6, 2001
+|6 марта 2001
|4.3-RELEASE
|430001
|link:https://svnweb.freebsd.org/changeset/base/76779[76779]
-|May 18, 2001
-|4.3-STABLE after wint_t introduction.
+|18 мая 2001
+|4.3-STABLE после введения `wint_t`.
|430002
|link:https://svnweb.freebsd.org/changeset/base/80157[80157]
-|July 22, 2001
-|4.3-STABLE after PCI powerstate API merge.
+|22 июля 2001
+|4.3-STABLE после объединения API управления состоянием питания PCI.
|440000
|link:https://svnweb.freebsd.org/changeset/base/80923[80923]
-|August 1, 2001
+|1 августа 2001
|4.4-RELEASE
|440001
|link:https://svnweb.freebsd.org/changeset/base/85341[85341]
-|October 23, 2001
-|4.4-STABLE after d_thread_t introduction.
+|23 октября 2001
+|4.4-STABLE после введения `d_thread_t`.
|440002
|link:https://svnweb.freebsd.org/changeset/base/86038[86038]
-|November 4, 2001
-|4.4-STABLE after mount structure changes (affects filesystem klds).
+|4 ноября 2001
+|4.4-STABLE после изменений в структуре монтирования (затрагивает модули файловых систем klds).
|440003
|link:https://svnweb.freebsd.org/changeset/base/88130[88130]
-|December 18, 2001
-|4.4-STABLE after the userland components of smbfs were imported.
+|18 декабря 2001
+|4.4-STABLE после импорта компонентов пользовательского пространства smbfs.
|450000
|link:https://svnweb.freebsd.org/changeset/base/88271[88271]
-|December 20, 2001
+|20 декабря 2001
|4.5-RELEASE
|450001
|link:https://svnweb.freebsd.org/changeset/base/91203[91203]
-|February 24, 2002
-|4.5-STABLE after the usb structure element rename.
+|24 февраля 2002
+|4.5-STABLE после переименования элемента структуры usb.
|450002
|link:https://svnweb.freebsd.org/changeset/base/92151[92151]
-|March 12, 2002
-|4.5-STABLE after locale changes.
+|12 марта 2002
+|4.5-STABLE после изменений локали.
|450003
-|
-|
-|(Never created)
+|
+|
+|(Никогда не создавался)
|450004
|link:https://svnweb.freebsd.org/changeset/base/94840[94840]
-|April 16, 2002
-|4.5-STABLE after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`.
+|16 апреля 2002
+|4.5-STABLE после того, как переменная `sendmail_enable` из man:rc.conf[5] стала принимать значение `NONE`.
|450005
|link:https://svnweb.freebsd.org/changeset/base/95555[95555]
-|April 27, 2002
-|4.5-STABLE after moving to XFree86 4 by default for package builds.
+|27 апреля 2002
+|4.5-STABLE после перехода на XFree86 4 по умолчанию для сборки пакетов.
|450006
|link:https://svnweb.freebsd.org/changeset/base/95846[95846]
-|May 1, 2002
-|4.5-STABLE after accept filtering was fixed so that is no longer susceptible to an easy DoS.
+|1 мая 2002
+|4.5-STABLE после исправления фильтрации accept, чтобы он больше не был подвержен простой DoS-атаке.
|460000
|link:https://svnweb.freebsd.org/changeset/base/97923[97923]
-|June 21, 2002
+|21 июня 2002
|4.6-RELEASE
|460001
|link:https://svnweb.freebsd.org/changeset/base/98730[98730]
-|June 21, 2002
-|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.
+|21 июня 2002
+|4.6-STABLE man:sendfile[2] исправлен для соответствия документации, чтобы не учитывать отправленные заголовки в объеме данных, отправляемых из файла.
|460002
|link:https://svnweb.freebsd.org/changeset/base/100366[100366]
-|July 19, 2002
+|19 июля 2002
|4.6.2-RELEASE
|460100
|link:https://svnweb.freebsd.org/changeset/base/98857[98857]
-|June 26, 2002
+|26 июня 2002
|4.6-STABLE
|460101
|link:https://svnweb.freebsd.org/changeset/base/98880[98880]
-|June 26, 2002
-|4.6-STABLE after MFC of `sed -i`.
+|26 июня 2002
+|4.6-STABLE после MFC `sed -i`.
|460102
|link:https://svnweb.freebsd.org/changeset/base/102759[102759]
-|September 1, 2002
-|4.6-STABLE after MFC of many new pkg_install features from the HEAD.
+|1 сентября 2002
+|4.6-STABLE после MFC множества новых функций pkg_install из HEAD.
|470000
|link:https://svnweb.freebsd.org/changeset/base/104655[104655]
-|October 8, 2002
+|8 октября 2002
|4.7-RELEASE
|470100
|link:https://svnweb.freebsd.org/changeset/base/104717[104717]
-|October 9, 2002
+|9 октября 2002
|4.7-STABLE
|470101
|link:https://svnweb.freebsd.org/changeset/base/106732[106732]
-|November 10, 2002
-|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.
+|10 ноября 2002
+|Начинать генерировать ссылки `__std{in,out,err}p` вместо `__sF`. Это изменяет `std{in,out,err}` с выражения времени компиляции на выражение времени выполнения.
|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
+|23 января 2003
+|4.7-STABLE после MFC изменений mbuf для замены `m_aux` mbuf на `m_tag`
|470103
|link:https://svnweb.freebsd.org/changeset/base/110887[110887]
-|February 14, 2003
-|4.7-STABLE gets OpenSSL 0.9.7
+|14 февраля 2003
+|4.7-STABLE получает OpenSSL 0.9.7
|480000
|link:https://svnweb.freebsd.org/changeset/base/112852[112852]
-|March 30, 2003
+|30 марта 2003
|4.8-RELEASE
|480100
|link:https://svnweb.freebsd.org/changeset/base/113107[113107]
-|April 5, 2003
+|5 апреля 2003
|4.8-STABLE
|480101
|link:https://svnweb.freebsd.org/changeset/base/115232[115232]
-|May 22, 2003
-|4.8-STABLE after man:realpath[3] has been made thread-safe
+|22 мая 2003
+|4.8-STABLE после того, как man:realpath[3] стал потокобезопасным
|480102
|link:https://svnweb.freebsd.org/changeset/base/118737[118737]
-|August 10, 2003
-|4.8-STABLE 3ware API changes to twe.
+|10 августа 2003
+|4.8-STABLE Изменения API 3ware в twe.
|490000
|link:https://svnweb.freebsd.org/changeset/base/121592[121592]
-|October 27, 2003
+|27 октября 2003
|4.9-RELEASE
|490100
|link:https://svnweb.freebsd.org/changeset/base/121593[121593]
-|October 27, 2003
+|27 октября 2003
|4.9-STABLE
|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.
+|8 января 2004
+|4.9-STABLE после добавления `e_sid` в структуру `kinfo_eproc`.
|490102
|link:https://svnweb.freebsd.org/changeset/base/125417[125417]
-|February 4, 2004
-|4.9-STABLE after MFC of libmap functionality for rtld.
+|4 февраля 2004
+|4.9-STABLE после MFC функциональности libmap для rtld.
|491000
|link:https://svnweb.freebsd.org/changeset/base/129700[129700]
-|May 25, 2004
+|25 мая 2004
|4.10-RELEASE
|491100
|link:https://svnweb.freebsd.org/changeset/base/129918[129918]
-|June 1, 2004
+|1 июня 2004
|4.10-STABLE
|491101
|link:https://svnweb.freebsd.org/changeset/base/133506[133506]
-|August 11, 2004
-|4.10-STABLE after MFC of revision 20040629 of the package tools
+|11 августа 2004
+|4.10-STABLE после слияния изменения из ревизии 20040629 пакета tools
|491102
|link:https://svnweb.freebsd.org/changeset/base/137786[137786]
-|November 16, 2004
-|4.10-STABLE after VM fix dealing with unwiring of fictitious pages
+|16 ноября 2004
+|4.10-STABLE после исправления VM, связанного с обработкой размонтирования фиктивных страниц
|492000
|link:https://svnweb.freebsd.org/changeset/base/138960[138960]
-|December 17, 2004
+|17 декабря 2004
|4.11-RELEASE
|492100
|link:https://svnweb.freebsd.org/changeset/base/138959[138959]
-|December 17, 2004
+|17 декабря 2004
|4.11-STABLE
|492101
|link:https://svnweb.freebsd.org/changeset/base/157843[157843]
-|April 18, 2006
-|4.11-STABLE after adding libdata/ldconfig directories to mtree files.
+|18 апреля 2006
+|4.11-STABLE после добавления каталогов libdata/ldconfig в файлы mtree.
|===
[[versions-3]]
-== FreeBSD 3 Versions
+== Версии FreeBSD 3
[[freebsd-versions-table-3]]
-.FreeBSD 3 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` для FreeBSD 3
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|300000
|link:https://svnweb.freebsd.org/changeset/base/22917[22917]
-|February 19, 1996
-|3.0-CURRENT before man:mount[2] change
+|19 февраля 1996
+|3.0-CURRENT до изменения man:mount[2]
|300001
|link:https://svnweb.freebsd.org/changeset/base/36283[36283]
-|September 24, 1997
-|3.0-CURRENT after man:mount[2] change
+|24 сентября 1997
+|3.0-CURRENT после изменения man:mount[2]
|300002
|link:https://svnweb.freebsd.org/changeset/base/36592[36592]
-|June 2, 1998
-|3.0-CURRENT after man:semctl[2] change
+|2 июня 1998
+|3.0-CURRENT после изменения man:semctl[2]
|300003
|link:https://svnweb.freebsd.org/changeset/base/36735[36735]
-|June 7, 1998
-|3.0-CURRENT after ioctl arg changes
+|7 июня 1998
+|3.0-CURRENT после изменений аргументов ioctl
|300004
|link:https://svnweb.freebsd.org/changeset/base/38768[38768]
-|September 3, 1998
-|3.0-CURRENT after ELF conversion
+|3 сентября 1998
+|3.0-CURRENT после преобразования в ELF
|300005
|link:https://svnweb.freebsd.org/changeset/base/40438[40438]
-|October 16, 1998
+|16 октября 1998
|3.0-RELEASE
|300006
|link:https://svnweb.freebsd.org/changeset/base/40445[40445]
-|October 16, 1998
-|3.0-CURRENT after 3.0-RELEASE
+|16 октября 1998
+|3.0-CURRENT после 3.0-RELEASE
|300007
|link:https://svnweb.freebsd.org/changeset/base/43042[43042]
-|January 22, 1999
-|3.0-STABLE after 3/4 branch
+|22 января 1999
+|3.0-STABLE после ветвления 3/4
|310000
|link:https://svnweb.freebsd.org/changeset/base/43807[43807]
-|February 9, 1999
+|9 февраля 1999
|3.1-RELEASE
|310001
|link:https://svnweb.freebsd.org/changeset/base/45060[45060]
-|March 27, 1999
-|3.1-STABLE after 3.1-RELEASE
+|27 марта 1999
+|3.1-STABLE после 3.1-RELEASE
|310002
|link:https://svnweb.freebsd.org/changeset/base/45689[45689]
-|April 14, 1999
-|3.1-STABLE after C++ constructor/destructor order change
+|14 апреля 1999
+|3.1-STABLE после изменения порядка конструкторов/деструкторов C++
|320000
-|
-|
+|
+|
|3.2-RELEASE
|320001
|link:https://svnweb.freebsd.org/changeset/base/46742[46742]
-|May 8, 1999
+|8 мая 1999
|3.2-STABLE
|320002
|link:https://svnweb.freebsd.org/changeset/base/50563[50563]
-|August 29, 1999
-|3.2-STABLE after binary-incompatible IPFW and socket changes
+|29 августа 1999
+|3.2-STABLE после бинарно-несовместимых изменений в IPFW и сокетах
|330000
|link:https://svnweb.freebsd.org/changeset/base/50813[50813]
-|September 2, 1999
+|2 сентября 1999
|3.3-RELEASE
|330001
|link:https://svnweb.freebsd.org/changeset/base/51328[51328]
-|September 16, 1999
+|16 сентября 1999
|3.3-STABLE
|330002
|link:https://svnweb.freebsd.org/changeset/base/53671[53671]
-|November 24, 1999
-|3.3-STABLE after adding man:mkstemp[3] to libc
+|24 ноября 1999
+|3.3-STABLE после добавления man:mkstemp[3] в libc
|340000
|link:https://svnweb.freebsd.org/changeset/base/54166[54166]
-|December 5, 1999
+|5 декабря 1999
|3.4-RELEASE
|340001
|link:https://svnweb.freebsd.org/changeset/base/54730[54730]
-|December 17, 1999
+|17 декабря 1999
|3.4-STABLE
|350000
|link:https://svnweb.freebsd.org/changeset/base/61876[61876]
-|June 20, 2000
+|20 июня 2000
|3.5-RELEASE
|350001
|link:https://svnweb.freebsd.org/changeset/base/63043[63043]
-|July 12, 2000
+|12 июля 2000
|3.5-STABLE
|===
[[versions-2.2]]
-== FreeBSD 2.2 Versions
+== Версии FreeBSD 2.2
[[freebsd-versions-table-2.2]]
-.FreeBSD 2.2 `__FreeBSD_version` Values
+.Значения `__FreeBSD_version` в FreeBSD 2.2
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|220000
|link:https://svnweb.freebsd.org/changeset/base/22918[22918]
-|February 19, 1997
+|19 февраля 1997
|2.2-RELEASE
-|(not changed)
-|
-|
+|(не изменено)
+|
+|
|2.2.1-RELEASE
-|(not changed)
-|
-|
-|2.2-STABLE after 2.2.1-RELEASE
+|(не изменено)
+|
+|
+|2.2-STABLE после 2.2.1-RELEASE
|221001
|link:https://svnweb.freebsd.org/changeset/base/24941[24941]
-|April 15, 1997
-|2.2-STABLE after texinfo-3.9
+|15 апреля 1997
+|2.2-STABLE после texinfo-3.9
|221002
|link:https://svnweb.freebsd.org/changeset/base/25325[25325]
-|April 30, 1997
-|2.2-STABLE after top
+|30 апреля 1997
+|2.2-STABLE после обновления
|222000
|link:https://svnweb.freebsd.org/changeset/base/25851[25851]
-|May 16, 1997
+|16 мая 1997
|2.2.2-RELEASE
|222001
|link:https://svnweb.freebsd.org/changeset/base/25921[25921]
-|May 19, 1997
-|2.2-STABLE after 2.2.2-RELEASE
+|19 мая 1997
+|2.2-STABLE после 2.2.2-RELEASE
|225000
|link:https://svnweb.freebsd.org/changeset/base/30053[30053]
-|October 2, 1997
+|2 октября 1997
|2.2.5-RELEASE
|225001
|link:https://svnweb.freebsd.org/changeset/base/31300[31300]
-|November 20, 1997
-|2.2-STABLE after 2.2.5-RELEASE
+|20 ноября 1997
+|2.2-STABLE после 2.2.5-RELEASE
|225002
|link:https://svnweb.freebsd.org/changeset/base/32019[32019]
-|December 27, 1997
-|2.2-STABLE after ldconfig -R merge
+|27 декабря 1997
+|2.2-STABLE после слияния ldconfig -R
|226000
|link:https://svnweb.freebsd.org/changeset/base/34445[34445]
-|March 24, 1998
+|24 марта 1998
|2.2.6-RELEASE
|227000
|link:https://svnweb.freebsd.org/changeset/base/37803[37803]
-|July 21, 1998
+|21 июля 1998
|2.2.7-RELEASE
|227001
|link:https://svnweb.freebsd.org/changeset/base/37809[37809]
-|July 21, 1998
-|2.2-STABLE after 2.2.7-RELEASE
+|21 июля 1998
+|2.2-STABLE после 2.2.7-RELEASE
|227002
|link:https://svnweb.freebsd.org/changeset/base/39489[39489]
-|September 19, 1998
-|2.2-STABLE after man:semctl[2] change
+|19 сентября 1998
+|2.2-STABLE после изменения man:semctl[2]
|228000
|link:https://svnweb.freebsd.org/changeset/base/41403[41403]
-|November 29, 1998
+|29 ноября 1998
|2.2.8-RELEASE
|228001
|link:https://svnweb.freebsd.org/changeset/base/41418[41418]
-|November 29, 1998
-|2.2-STABLE after 2.2.8-RELEASE
+|29 ноября 1998
+|2.2-STABLE после 2.2.8-RELEASE
|===
[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.
+Обратите внимание, что 2.2-STABLE иногда идентифицирует себя как "2.2.5-STABLE" после выпуска 2.2.5-RELEASE. Ранее использовался шаблон "год-месяц", но сообщество решило изменить его на более простую систему "основной/второстепенный", начиная с версии 2.2. Это связано с тем, что параллельная разработка нескольких веток сделала невозможным классифицировать выпуски только по датам их фактического выхода. Не беспокойтесь о старых версиях -CURRENT; они приведены здесь только для справки.
====
[[versions-2]]
-== FreeBSD 2 Before 2.2-RELEASE Versions
+== FreeBSD 2 Версии до 2.2-RELEASE
[[freebsd-versions-table-2]]
-.FreeBSD 2 Before 2.2-RELEASE `__FreeBSD_version` Values
+.FreeBSD 2 До версии 2.2-RELEASE Значения `__FreeBSD_version`
[cols="1,1,1,1", frame="none", options="header"]
|===
-| Value
-| Revision
-| Date
-| Release
+| Значение
+| Версия
+| Дата
+| Релиз
|119411
-|
-|
+|
+|
|2.0-RELEASE
|199501
|link:https://svnweb.freebsd.org/changeset/base/7153[7153]
-|March 19, 1995
+|19 марта 1995
|2.1-CURRENT
|199503
|link:https://svnweb.freebsd.org/changeset/base/7310[7310]
-|March 24, 1995
+|24 марта 1995
|2.1-CURRENT
|199504
|link:https://svnweb.freebsd.org/changeset/base/7704[7704]
-|April 9, 1995
+|9 апреля 1995
|2.0.5-RELEASE
|199508
|link:https://svnweb.freebsd.org/changeset/base/10297[10297]
-|August 26, 1995
-|2.2-CURRENT before 2.1
+|26 августа 1995
+|2.2-CURRENT до 2.1
|199511
|link:https://svnweb.freebsd.org/changeset/base/12189[12189]
-|November 10, 1995
+|10 ноября 1995
|2.1.0-RELEASE
|199512
|link:https://svnweb.freebsd.org/changeset/base/12196[12196]
-|November 10, 1995
-|2.2-CURRENT before 2.1.5
+|10 ноября 1995
+|2.2-CURRENT до 2.1.5
|199607
|link:https://svnweb.freebsd.org/changeset/base/17067[17067]
-|July 10, 1996
+|10 июля 1996
|2.1.5-RELEASE
|199608
|link:https://svnweb.freebsd.org/changeset/base/17127[17127]
-|July 12, 1996
-|2.2-CURRENT before 2.1.6
+|12 июля 1996
+|2.2-CURRENT до 2.1.6
|199612
|link:https://svnweb.freebsd.org/changeset/base/19358[19358]
-|November 15, 1996
+|15 ноября 1996
|2.1.6-RELEASE
|199612
-|
-|
+|
+|
|2.1.7-RELEASE
|===
diff --git a/documentation/content/ru/books/porters-handbook/versions/_index.po b/documentation/content/ru/books/porters-handbook/versions/_index.po
new file mode 100644
index 0000000000..cd5d88613c
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/versions/_index.po
@@ -0,0 +1,33861 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-19 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookversions_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: 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 "Список изменений файла sys/param.h"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1
+#, no-wrap
+msgid "Chapter 18. __FreeBSD_version Values"
+msgstr "Глава 18. Значения __FreeBSD_version"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:13
+#, no-wrap
+msgid "`__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:51
+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 ""
+"Здесь удобный список значений `__FreeBSD_version` как определено в https://"
+"cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]:"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:53
+#, no-wrap
+msgid "FreeBSD 15 Versions"
+msgstr "Версии FreeBSD 15"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:56
+#, no-wrap
+msgid "FreeBSD 15 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 15"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:60
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:259
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:802
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1820
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2628
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3611
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4299
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4742
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5515
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5983
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6361
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6989
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7347
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7465
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7563
+#, no-wrap
+msgid "Value"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:61
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:260
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:803
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1821
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2629
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3612
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4300
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4743
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5516
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5984
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6362
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6990
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7348
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7466
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7564
+#, no-wrap
+msgid "Revision"
+msgstr "Версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:62
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:261
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:804
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1822
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2630
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3613
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4301
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4744
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5517
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5985
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6363
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6991
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7349
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7467
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7565
+#, no-wrap
+msgid "Date"
+msgstr "Дата"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:64
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:263
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:806
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1824
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2632
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3615
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4303
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4746
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5519
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5987
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6365
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6993
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7351
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7469
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7567
+#, no-wrap
+msgid "Release"
+msgstr "Релиз"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:65
+#, no-wrap
+msgid "1500000"
+msgstr "1500000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:66
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:670
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:675
+#, no-wrap
+msgid "gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository=\"src\",length=12]"
+msgstr "gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:67
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:671
+#, no-wrap
+msgid "August 24, 2023"
+msgstr "24 августа 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:69
+#, no-wrap
+msgid "15.0-CURRENT."
+msgstr "15.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:70
+#, no-wrap
+msgid "1500001"
+msgstr "1500001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:71
+#, no-wrap
+msgid "gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository=\"src\",length=12]"
+msgstr "gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:72
+#, no-wrap
+msgid "September 17, 2023"
+msgstr "17 сентября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:74
+#, no-wrap
+msgid "15.0-CURRENT after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc."
+msgstr "15.0-CURRENT после реализации `fpu_kern_enter` и `fpu_kern_leave` для powerpc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:75
+#, no-wrap
+msgid "1500002"
+msgstr "1500002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:76
+#, no-wrap
+msgid "gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository=\"src\",length=12]"
+msgstr "gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:77
+#, no-wrap
+msgid "October 18, 2023"
+msgstr "18 октября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:79
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:119
+#, no-wrap
+msgid "15.0-CURRENT after changing the internal KAPI between the nfscommon and nfscl modules."
+msgstr "15.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfscl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:80
+#, no-wrap
+msgid "1500003"
+msgstr "1500003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:81
+#, no-wrap
+msgid "gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository=\"src\",length=12]"
+msgstr "gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:82
+#, no-wrap
+msgid "November 1, 2023"
+msgstr "1 ноября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:84
+#, no-wrap
+msgid "15.0-CURRENT after removal of the forward compat code for the inode64 conversion."
+msgstr "15.0-CURRENT после удаления кода обратной совместимости для преобразования inode64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:85
+#, no-wrap
+msgid "1500004"
+msgstr "1500004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:86
+#, no-wrap
+msgid "gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository=\"src\",length=12]"
+msgstr "gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:87
+#, no-wrap
+msgid "November 23, 2023"
+msgstr "23 ноября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:89
+#, 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 "15.0-CURRENT после добавления новой функции VFS под названием `vfs_exjail_clone()`, которая будет использоваться модулем ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:90
+#, no-wrap
+msgid "1500005"
+msgstr "1500005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:91
+#, no-wrap
+msgid "gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository=\"src\",length=12]"
+msgstr "gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:92
+#, no-wrap
+msgid "November 27, 2023"
+msgstr "27 ноября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:94
+#, 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 "15.0-CURRENT после серии механических изменений в дереве: идентификаторы SCCS удалены, закомментированные строки с авторскими правами удалены с помощью `#if 0`, механические исправления стиля после этих изменений и удаление некоторых макросов из [.filename]#sys/cdefs.h#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:95
+#, no-wrap
+msgid "1500006"
+msgstr "1500006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:96
+#, no-wrap
+msgid "gitref:c711af7727824da79d87f375f3d6829feec3799a[repository=\"src\",length=12]"
+msgstr "gitref:c711af7727824da79d87f375f3d6829feec3799a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:97
+#, no-wrap
+msgid "December 8, 2023"
+msgstr "8 декабря 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:99
+#, 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 "15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:100
+#, no-wrap
+msgid "1500007"
+msgstr "1500007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:101
+#, no-wrap
+msgid "gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository=\"src\",length=12]"
+msgstr "gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:102
+#, no-wrap
+msgid "December 11, 2023"
+msgstr "11 декабря 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:104
+#, no-wrap
+msgid "15.0-CURRENT after exposing execvpe for Linux compat in libc."
+msgstr "15.0-CURRENT после предоставления доступа к execvpe для совместимости с Linux в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:105
+#, no-wrap
+msgid "1500008"
+msgstr "1500008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:106
+#, no-wrap
+msgid "gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository=\"src\",length=12]"
+msgstr "gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:107
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:686
+#, no-wrap
+msgid "December 24, 2023"
+msgstr "24 декабря 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:109
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:174
+#, no-wrap
+msgid "15.0-CURRENT after LinuxKPI changes."
+msgstr "15.0-CURRENT после изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:110
+#, no-wrap
+msgid "1500009"
+msgstr "1500009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:111
+#, no-wrap
+msgid "gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository=\"src\",length=12]"
+msgstr "gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:112
+#, no-wrap
+msgid "January 11, 2024"
+msgstr "11 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:114
+#, no-wrap
+msgid "15.0-CURRENT after adding man:vnode_pager_clean_async[9] and man:vnode_pager_clean_sync[9]."
+msgstr "15.0-CURRENT после добавления man:vnode_pager_clean_async[9] и man:vnode_pager_clean_sync[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:115
+#, no-wrap
+msgid "1500010"
+msgstr "1500010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:116
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:121
+#, no-wrap
+msgid "gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository=\"src\",length=12]"
+msgstr "gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:117
+#, no-wrap
+msgid "January 12, 2024"
+msgstr "12 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:120
+#, no-wrap
+msgid "1500011"
+msgstr "1500011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:122
+#, no-wrap
+msgid "January 17, 2024"
+msgstr "17 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:124
+#, no-wrap
+msgid "15.0-CURRENT after adding zfs.dataset support to man:jail[8]."
+msgstr "15.0-CURRENT после добавления поддержки zfs.dataset в man:jail[8]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:125
+#, no-wrap
+msgid "1500012"
+msgstr "1500012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:126
+#, no-wrap
+msgid "gitref:120ceebab5d4947dfc80d7492effa034a925d43e[repository=\"src\",length=12]"
+msgstr "gitref:120ceebab5d4947dfc80d7492effa034a925d43e[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:127
+#, no-wrap
+msgid "January 24, 2024"
+msgstr "24 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:129
+#, no-wrap
+msgid "15.0-CURRENT after adding man:kern_openatfp[9] and man:kcmp[2]."
+msgstr "15.0-CURRENT после добавления man:kern_openatfp[9] и man:kcmp[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:130
+#, no-wrap
+msgid "1500013"
+msgstr "1500013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:131
+#, no-wrap
+msgid "gitref:d04abb05375d3525132f1e9f78090db3d0d27f14[repository=\"src\",length=12]"
+msgstr "gitref:d04abb05375d3525132f1e9f78090db3d0d27f14[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:132
+#, no-wrap
+msgid "February 7, 2024"
+msgstr "7 февраля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:134
+#, no-wrap
+msgid "15.0-CURRENT after adding libsys."
+msgstr "15.0-CURRENT после добавления libsys."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:135
+#, no-wrap
+msgid "1500014"
+msgstr "1500014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:136
+#, no-wrap
+msgid "gitref:ed27ae8df4b10f67289a32458d89d143e758f6d4[repository=\"src\",length=12]"
+msgstr "gitref:ed27ae8df4b10f67289a32458d89d143e758f6d4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:137
+#, no-wrap
+msgid "February 11, 2024"
+msgstr "11 февраля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:139
+#, no-wrap
+msgid "15.0-CURRENT after switching clang and other LLVM executables to build as PIE."
+msgstr "15.0-CURRENT после переключения clang и других исполняемых файлов LLVM на сборку как PIE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:140
+#, no-wrap
+msgid "1500015"
+msgstr "1500015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:141
+#, no-wrap
+msgid "gitref:a7b9f4d96e8bdc30db27ec7a193a8d8fdf7c652c[repository=\"src\",length=12]"
+msgstr "gitref:a7b9f4d96e8bdc30db27ec7a193a8d8fdf7c652c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:142
+#, no-wrap
+msgid "March 13, 2024"
+msgstr "13 марта 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:144
+#, no-wrap
+msgid "15.0-CURRENT after removing redundant `type` and `rid` arguments from several functions in the new-bus resource API."
+msgstr "15.0-CURRENT после удаления избыточных аргументов `type` и `rid` из нескольких функций в API ресурсов new-bus."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:145
+#, no-wrap
+msgid "1500016"
+msgstr "1500016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:146
+#, no-wrap
+msgid "gitref:60bc9617e79e99bdf670304923f3baed4b749ad3[repository=\"src\",length=12]"
+msgstr "gitref:60bc9617e79e99bdf670304923f3baed4b749ad3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:147
+#, no-wrap
+msgid "March 18, 2024"
+msgstr "18 марта 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:149
+#, no-wrap
+msgid "15.0-CURRENT after introducing man:livedump_start_vnode[9]."
+msgstr "15.0-CURRENT после введения man:livedump_start_vnode[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:150
+#, no-wrap
+msgid "1500017"
+msgstr "1500017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:151
+#, no-wrap
+msgid "gitref:bcd401b5a39c6186bb1fe450286299f2a481244c[repository=\"src\",length=12]"
+msgstr "gitref:bcd401b5a39c6186bb1fe450286299f2a481244c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:152
+#, no-wrap
+msgid "March 20, 2024"
+msgstr "20 марта 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:154
+#, no-wrap
+msgid "15.0-CURRENT after fixing a clang assertion or crash when building recent boost libraries."
+msgstr "15.0-CURRENT после исправления утверждения или сбоя clang при сборке последних библиотек boost."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:155
+#, no-wrap
+msgid "1500018"
+msgstr "1500018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:156
+#, no-wrap
+msgid "gitref:0192eda105b367d4670205547e8e830e3716bea3[repository=\"src\",length=12]"
+msgstr "gitref:0192eda105b367d4670205547e8e830e3716bea3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:157
+#, no-wrap
+msgid "April 6, 2024"
+msgstr "6 апреля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:159
+#, no-wrap
+msgid "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."
+msgstr "15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-18.1.3-0-gc13b7485b879, также известной как релиз 18.1.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:160
+#, no-wrap
+msgid "1500019"
+msgstr "1500019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:161
+#, no-wrap
+msgid "gitref:e03e8b07743385e5b199409074fb60b1a9ed1fac[repository=\"src\",length=12]"
+msgstr "gitref:e03e8b07743385e5b199409074fb60b1a9ed1fac[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:162
+#, no-wrap
+msgid "May 31, 2024"
+msgstr "31 мая 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:164
+#, no-wrap
+msgid "15.0-CURRENT after redefining `CLOCK_BOOTTIME` to alias `CLOCK_MONOTONIC` instead of `CLOCK_UPTIME`."
+msgstr "15.0-CURRENT после переопределения `CLOCK_BOOTTIME` как псевдонима для `CLOCK_MONOTONIC` вместо `CLOCK_UPTIME`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:165
+#, no-wrap
+msgid "1500020"
+msgstr "1500020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:166
+#, no-wrap
+msgid "gitref:7818c2d37c2c600fc9ad6f2a0951e50dd21b17c8[repository=\"src\",length=12]"
+msgstr "gitref:7818c2d37c2c600fc9ad6f2a0951e50dd21b17c8[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:167
+#, no-wrap
+msgid "July 12, 2024"
+msgstr "12 июля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:169
+#, no-wrap
+msgid "15.0-CURRENT after removing support for building armv6."
+msgstr "15.0-CURRENT после удаления поддержки сборки armv6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:170
+#, no-wrap
+msgid "1500021"
+msgstr "1500021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:171
+#, no-wrap
+msgid "gitref:24388fccd551f79f64e54099a7d78196535c0a29[repository=\"src\",length=12]"
+msgstr "gitref:24388fccd551f79f64e54099a7d78196535c0a29[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:172
+#, no-wrap
+msgid "July 21, 2024"
+msgstr "21 июля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:175
+#, no-wrap
+msgid "1500022"
+msgstr "1500022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:176
+#, no-wrap
+msgid "gitref:a1740cb93639648b41055958ad8c7f6083efdc96[repository=\"src\",length=12]"
+msgstr "gitref:a1740cb93639648b41055958ad8c7f6083efdc96[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:177
+#, no-wrap
+msgid "July 29, 2024"
+msgstr "29 июля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:179
+#, no-wrap
+msgid "15.0-CURRENT after removing kernel stack swapping support."
+msgstr "15.0-CURRENT после удаления поддержки подкачки стека ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:180
+#, no-wrap
+msgid "1500023"
+msgstr "1500023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:181
+#, no-wrap
+msgid "gitref:1206cf04a717a55bc15255ed043b066941cb43f2[repository=\"src\",length=12]"
+msgstr "gitref:1206cf04a717a55bc15255ed043b066941cb43f2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:182
+#, no-wrap
+msgid "July 30, 2024"
+msgstr "30 июля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:184
+#, no-wrap
+msgid "15.0-CURRENT after adding new flags to man:malloc[9]."
+msgstr "15.0-CURRENT после добавления новых флагов в man:malloc[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:185
+#, no-wrap
+msgid "1500024"
+msgstr "1500024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:186
+#, no-wrap
+msgid "gitref:e3953c036f9d66c85b8e19f99f0710b3288ce5fb[repository=\"src\",length=12]"
+msgstr "gitref:e3953c036f9d66c85b8e19f99f0710b3288ce5fb[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:187
+#, no-wrap
+msgid "October 2, 2024"
+msgstr "2 октября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:189
+#, no-wrap
+msgid "15.0-CURRENT after bumping [.filename]#libmd.so.6# to [.filename]#libmd.so.7#."
+msgstr "15.0-CURRENT после увеличения версии [.filename]#libmd.so.6# до [.filename]#libmd.so.7#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:190
+#, no-wrap
+msgid "1500025"
+msgstr "1500025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:191
+#, no-wrap
+msgid "gitref:9d52823bf1dfac237e58b5208299aaa5e2df42e9[repository=\"src\",length=12]"
+msgstr "gitref:9d52823bf1dfac237e58b5208299aaa5e2df42e9[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:192
+#, no-wrap
+msgid "October 6, 2024"
+msgstr "6 октября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:194
+#, no-wrap
+msgid "15.0-CURRENT after widening the `flags` field in `vm_object`."
+msgstr "15.0-CURRENT после расширения поля `flags` в `vm_object`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:195
+#, no-wrap
+msgid "1500026"
+msgstr "1500026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:196
+#, no-wrap
+msgid "gitref:f3dbef108212460489ae68b4c47e20b73984f433[repository=\"src\",length=12]"
+msgstr "gitref:f3dbef108212460489ae68b4c47e20b73984f433[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:197
+#, no-wrap
+msgid "October 23, 2024"
+msgstr "23 октября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:199
+#, no-wrap
+msgid "15.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-19.1.2-0-g7ba7d8e2f7b6, a.k.a. 19.1.2 release."
+msgstr "15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-19.1.2-0-g7ba7d8e2f7b6, также известной как релиз 19.1.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:200
+#, no-wrap
+msgid "1500027"
+msgstr "1500027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:201
+#, no-wrap
+msgid "gitref:893d044346d5ae5fe10cc188b8b0762efd2a5b27[repository=\"src\",length=12]"
+msgstr "gitref:893d044346d5ae5fe10cc188b8b0762efd2a5b27[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:202
+#, no-wrap
+msgid "November 14, 2024"
+msgstr "14 ноября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:204
+#, no-wrap
+msgid "15.0-CURRENT after hiding `struct ifnet` and changing man:sound[4]'s device registration KPI."
+msgstr "15.0-CURRENT после скрытия `struct ifnet` и изменения KPI регистрации устройств man:sound[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:205
+#, no-wrap
+msgid "1500028"
+msgstr "1500028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:206
+#, no-wrap
+msgid "gitref:cab31f5633c1ffdd8b24749a3c9dd22c59568503[repository=\"src\",length=12]"
+msgstr "gitref:cab31f5633c1ffdd8b24749a3c9dd22c59568503[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:207
+#, no-wrap
+msgid "November 25, 2024"
+msgstr "25 ноября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:209
+#, no-wrap
+msgid "15.0-CURRENT after adding a `TDA_PSELECT` flag for early restoration of signal masks."
+msgstr "15.0-CURRENT после добавления флага `TDA_PSELECT` для раннего восстановления масок сигналов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:210
+#, no-wrap
+msgid "1500029"
+msgstr "1500029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:211
+#, no-wrap
+msgid "gitref:46297859a74563dde6fc5bff9f9ecded9fb61ba6[repository=\"src\",length=12]"
+msgstr "gitref:46297859a74563dde6fc5bff9f9ecded9fb61ba6[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:212
+#, no-wrap
+msgid "December 6, 2024"
+msgstr "6 декабря 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:214
+#, no-wrap
+msgid "15.0-CURRENT after adding `bus_attach_children`, `bus_detach_children`, and `bus_identify_children`."
+msgstr "15.0-CURRENT после добавления `bus_attach_children`, `bus_detach_children` и `bus_identify_children`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:215
+#, no-wrap
+msgid "1500030"
+msgstr "1500030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:216
+#, no-wrap
+msgid "gitref:b196276c20b577b364372f1aa1a646b9ce34bf5c[repository=\"src\",length=12]"
+msgstr "gitref:b196276c20b577b364372f1aa1a646b9ce34bf5c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:217
+#, no-wrap
+msgid "January 2, 2025"
+msgstr "2 января 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:219
+#, no-wrap
+msgid "15.0-CURRENT after changing `bus_generic_detach` to delete child devices after detaching them."
+msgstr "15.0-CURRENT после изменения `bus_generic_detach` для удаления дочерних устройств после их отключения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:220
+#, no-wrap
+msgid "1500037"
+msgstr "1500037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:221
+#, no-wrap
+msgid "gitref:7acd5af48cf1870ec48d5910dff1a26466d98074[repository=\"src\",length=12]"
+msgstr "gitref:7acd5af48cf1870ec48d5910dff1a26466d98074[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:222
+#, no-wrap
+msgid "April 12, 2025"
+msgstr "12 апреля 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:224
+#, no-wrap
+msgid "15.0-CURRENT after changing alloc changes to LinuxKPI."
+msgstr "15.0-CURRENT после внесения изменений в alloc в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:225
+#, no-wrap
+msgid "1500038"
+msgstr "1500038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:226
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:231
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:236
+#, no-wrap
+msgid "gitref:[repository=\"src\",length=12]"
+msgstr "gitref:[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:227
+#, no-wrap
+msgid "April 19, 2025"
+msgstr "19 апреля 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:229
+#, no-wrap
+msgid "15.0-CURRENT after removal of vm_page_next() and _prev."
+msgstr "15.0-CURRENT после удаления vm_page_next() и _prev."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:230
+#, no-wrap
+msgid "1500039"
+msgstr "1500039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:232
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:237
+#, no-wrap
+msgid "May 4, 2025"
+msgstr "4 мая 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:234
+#, no-wrap
+msgid "15.0-CURRENT after introducing a properly typed jiffies."
+msgstr "15.0-CURRENT после введения правильно типизированных jiffies."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:235
+#, no-wrap
+msgid "1500040"
+msgstr "1500040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:239
+#, no-wrap
+msgid "15.0-CURRENT after the internal API between the nfscommon and nfscl modules changed."
+msgstr "15.0-CURRENT после изменения внутреннего API между модулями nfscommon и nfscl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:240
+#, no-wrap
+msgid "1500045"
+msgstr "1500045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:241
+#, no-wrap
+msgid "gitref:a02180cf60a6a0102669b678e9c81ad9f1aa4d91[repository=\"src\",length=12]"
+msgstr "gitref:a02180cf60a6a0102669b678e9c81ad9f1aa4d91[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:242
+#, no-wrap
+msgid "June 3, 2025"
+msgstr "3 июня 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:244
+#, no-wrap
+msgid "15.0-CURRENT after pulling in dma-mapping.h changes from drm-kmod to LinuxKPI."
+msgstr "15.0-CURRENT после внесения изменений dma-mapping.h из drm-kmod в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:245
+#, no-wrap
+msgid "1500062"
+msgstr "1500062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:246
+#, no-wrap
+msgid "gitref:567e6250c003eeb251b4bc8dbe60d2adabab2988[repository=\"src\",length=12]"
+msgstr "gitref:567e6250c003eeb251b4bc8dbe60d2adabab2988[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:247
+#, no-wrap
+msgid "August 17, 2025"
+msgstr "17 августа 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:249
+#, no-wrap
+msgid "15.0-CURRENT after introduction of VTYPE_ISDEV(), VN_ISDEV(), and VATTR_ISDEV()."
+msgstr "15.0-CURRENT после добавления VTYPE_ISDEV(), VN_ISDEV() и VATTR_ISDEV()."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:252
+#, no-wrap
+msgid "FreeBSD 14 Versions"
+msgstr "Версии FreeBSD 14"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:255
+#, no-wrap
+msgid "FreeBSD 14 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 14"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:264
+#, no-wrap
+msgid "1400000"
+msgstr "1400000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:265
+#, no-wrap
+msgid "gitref:a53ce3fc4938e37d5ec89304846203d2083c61a2[repository=\"src\",length=12]"
+msgstr "gitref:a53ce3fc4938e37d5ec89304846203d2083c61a2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:266
+#, no-wrap
+msgid "January 22, 2021"
+msgstr "22 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:268
+#, no-wrap
+msgid "14.0-CURRENT."
+msgstr "14.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:269
+#, no-wrap
+msgid "1400001"
+msgstr "1400001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:270
+#, no-wrap
+msgid "gitref:739ecbcf1c4fd22b5f6ee0bb180a67644046a3e0[repository=\"src\",length=12]"
+msgstr "gitref:739ecbcf1c4fd22b5f6ee0bb180a67644046a3e0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:271
+#, no-wrap
+msgid "January 23, 2021"
+msgstr "23 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:273
+#, no-wrap
+msgid "14.0-CURRENT after adding symlink support to lockless lookup."
+msgstr "14.0-CURRENT после добавления поддержки символьных ссылок к бесблокировочному поиску."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:274
+#, no-wrap
+msgid "1400002"
+msgstr "1400002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:275
+#, no-wrap
+msgid "gitref:2cf84258922f306a3f84866685d2f5346f67db58[repository=\"src\",length=12]"
+msgstr "gitref:2cf84258922f306a3f84866685d2f5346f67db58[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:276
+#, no-wrap
+msgid "January 26, 2021"
+msgstr "26 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:278
+#, no-wrap
+msgid "14.0-CURRENT after fixing a clang assertion when building the package:devel/onetbb[] port."
+msgstr "14.0-CURRENT после исправления утверждения clang при сборке порта package:devel/onetbb[]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:279
+#, no-wrap
+msgid "1400003"
+msgstr "1400003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:280
+#, no-wrap
+msgid "gitref:d386f3a3c32f0396aa7995349dd65d6c59711393[repository=\"src\",length=12]"
+msgstr "gitref:d386f3a3c32f0396aa7995349dd65d6c59711393[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:281
+#, no-wrap
+msgid "January 28, 2021"
+msgstr "28 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:283
+#, no-wrap
+msgid "14.0-CURRENT after adding various LinuxKPI bits conflicting with drm-kmod."
+msgstr "14.0-CURRENT после добавления различных компонентов LinuxKPI, конфликтующих с drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:284
+#, no-wrap
+msgid "1400004"
+msgstr "1400004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:285
+#, no-wrap
+msgid "gitref:68f6800ce05c386ff045b4416d8595d09c4d8fdd[repository=\"src\",length=12]"
+msgstr "gitref:68f6800ce05c386ff045b4416d8595d09c4d8fdd[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:286
+#, no-wrap
+msgid "February 8, 2021"
+msgstr "8 февраля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:288
+#, no-wrap
+msgid "14.0-CURRENT after kernel interfaces for dispatching cryptographic operations were changed."
+msgstr "14.0-CURRENT после изменения интерфейсов ядра для диспетчеризации криптографических операций."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:289
+#, no-wrap
+msgid "1400005"
+msgstr "1400005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:290
+#, no-wrap
+msgid "gitref:45eabf5754ac1d291bd677fdf29f59ce4bbc2c8f[repository=\"src\",length=12]"
+msgstr "gitref:45eabf5754ac1d291bd677fdf29f59ce4bbc2c8f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:291
+#, no-wrap
+msgid "February 17, 2021"
+msgstr "17 февраля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:293
+#, no-wrap
+msgid "14.0-CURRENT after changing the API of man:ptrace[2] `PT_GETDBREGS`/`PT_SETDBREGS` on arm64."
+msgstr "14.0-CURRENT после изменения API man:ptrace[2] `PT_GETDBREGS`/`PT_SETDBREGS` на arm64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:294
+#, no-wrap
+msgid "1400006"
+msgstr "1400006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:295
+#, no-wrap
+msgid "gitref:c96151d33509655efb7fb26768cb56a041c176f1[repository=\"src\",length=12]"
+msgstr "gitref:c96151d33509655efb7fb26768cb56a041c176f1[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:296
+#, no-wrap
+msgid "March 17, 2021"
+msgstr "17 марта 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:298
+#, no-wrap
+msgid "14.0-CURRENT after adding man:sndstat[4] enumeration ioctls."
+msgstr "14.0-CURRENT после добавления перечисляющих ioctl в man:sndstat[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:299
+#, no-wrap
+msgid "1400007"
+msgstr "1400007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:300
+#, no-wrap
+msgid "gitref:d36d6816151705907393889d661cbfd25c630ca8[repository=\"src\",length=12]"
+msgstr "gitref:d36d6816151705907393889d661cbfd25c630ca8[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:301
+#, no-wrap
+msgid "April 6, 2021"
+msgstr "6 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:303
+#, no-wrap
+msgid "14.0-CURRENT after fixing wrong `dlpi_tls_data`."
+msgstr "14.0-CURRENT после исправления некорректного `dlpi_tls_data`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:304
+#, no-wrap
+msgid "1400008"
+msgstr "1400008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:305
+#, no-wrap
+msgid "gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository=\"src\",length=12]"
+msgstr "gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:306
+#, no-wrap
+msgid "April 11, 2021"
+msgstr "11 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:308
+#, no-wrap
+msgid "14.0-CURRENT after changing the internal KAPI between the `krpc` and NFS modules."
+msgstr "14.0-CURRENT после изменения внутреннего KAPI между модулями `krpc` и NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:309
+#, no-wrap
+msgid "1400009"
+msgstr "1400009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:310
+#, no-wrap
+msgid "gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository=\"src\",length=12]"
+msgstr "gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:311
+#, no-wrap
+msgid "April 20, 2021"
+msgstr "20 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:313
+#, no-wrap
+msgid "14.0-CURRENT after adding TCP LRO support for VLAN and VxLAN."
+msgstr "14.0-CURRENT после добавления поддержки TCP LRO для VLAN и VxLAN."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:314
+#, no-wrap
+msgid "1400010"
+msgstr "1400010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:315
+#, no-wrap
+msgid "gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository=\"src\",length=12]"
+msgstr "gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:316
+#, no-wrap
+msgid "April 21, 2021"
+msgstr "21 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:318
+#, no-wrap
+msgid "14.0-CURRENT after changing the man:sndstat[4] ioctls `nvlist` schema and definitions."
+msgstr "14.0-CURRENT после изменения схемы и определений `nvlist` для ioctl man:sndstat[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:319
+#, no-wrap
+msgid "1400015"
+msgstr "1400015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:320
+#, no-wrap
+msgid "gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository=\"src\",length=12]"
+msgstr "gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:321
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:326
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:331
+#, no-wrap
+msgid "May 25, 2021"
+msgstr "25 мая 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:323
+#, no-wrap
+msgid "14.0-CURRENT after adding more LinuxKPI changes needing adjustments to drm-kmod."
+msgstr "14.0-CURRENT после добавления дополнительных изменений LinuxKPI, требующих корректировки drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:324
+#, no-wrap
+msgid "1400016"
+msgstr "1400016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:325
+#, no-wrap
+msgid "gitref:21e3c1fbe2460f144f6d4dfd61c3346b2de59667[repository=\"src\",length=12]"
+msgstr "gitref:21e3c1fbe2460f144f6d4dfd61c3346b2de59667[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:328
+#, no-wrap
+msgid "14.0-CURRENT after removing support for KTLS software backends."
+msgstr "14.0-CURRENT после удаления поддержки программных бэкендов KTLS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:329
+#, no-wrap
+msgid "1400017"
+msgstr "1400017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:330
+#, no-wrap
+msgid "gitref:beb817edfe22cdea91e19a60c42caabd9404da48[repository=\"src\",length=12]"
+msgstr "gitref:beb817edfe22cdea91e19a60c42caabd9404da48[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:333
+#, no-wrap
+msgid "14.0-CURRENT after adding `crypto_cursor_segment()`."
+msgstr "14.0-CURRENT после добавления `crypto_cursor_segment()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:334
+#, no-wrap
+msgid "1400018"
+msgstr "1400018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:335
+#, no-wrap
+msgid "gitref:a4b07a2701f568c2c0f0c0426091f1489244a92d[repository=\"src\",length=12]"
+msgstr "gitref:a4b07a2701f568c2c0f0c0426091f1489244a92d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:336
+#, no-wrap
+msgid "May 30, 2021"
+msgstr "30 мая 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:338
+#, no-wrap
+msgid "14.0-CURRENT after allowing the man:VFS_QUOTACTL[9] implementation to indicate busy state changes."
+msgstr "14.0-CURRENT после разрешения реализации man:VFS_QUOTACTL[9] указывать изменения состояния занятости."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:339
+#, no-wrap
+msgid "1400019"
+msgstr "1400019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:340
+#, no-wrap
+msgid "gitref:37d64dcdfa519157aff9711f1f226ad7bd778f46[repository=\"src\",length=12]"
+msgstr "gitref:37d64dcdfa519157aff9711f1f226ad7bd778f46[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:341
+#, no-wrap
+msgid "June 7, 2021"
+msgstr "7 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:343
+#, no-wrap
+msgid "14.0-CURRENT after including `pr_err_once()` in the LinuxKPI [.filename]#printk.h#."
+msgstr "14.0-CURRENT после включения `pr_err_once()` в LinuxKPI [.filename]#printk.h#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:344
+#, no-wrap
+msgid "1400020"
+msgstr "1400020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:345
+#, no-wrap
+msgid "gitref:8a1a42b2a7a428fb97fda9f19fd0d67a4eec7535[repository=\"src\",length=12]"
+msgstr "gitref:8a1a42b2a7a428fb97fda9f19fd0d67a4eec7535[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:346
+#, no-wrap
+msgid "June 9, 2021"
+msgstr "9 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:348
+#, no-wrap
+msgid "14.0-CURRENT after adding macros for `might_lock_nested()` and `lockdep_(re/un/)pin_lock()` to the LinuxKPI."
+msgstr "14.0-CURRENT после добавления макросов для `might_lock_nested()` и `lockdep_(re/un/)pin_lock()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:349
+#, no-wrap
+msgid "1400021"
+msgstr "1400021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:350
+#, no-wrap
+msgid "gitref:b47f461c8e67253fdb394968428b760e880baa08[repository=\"src\",length=12]"
+msgstr "gitref:b47f461c8e67253fdb394968428b760e880baa08[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:351
+#, no-wrap
+msgid "June 10, 2021"
+msgstr "10 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:353
+#, no-wrap
+msgid "14.0-CURRENT after adding a `list_for_each_entry_lockless()` macro to the LinuxKPI."
+msgstr "14.0-CURRENT после добавления макроса `list_for_each_entry_lockless()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:354
+#, no-wrap
+msgid "1400022"
+msgstr "1400022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:355
+#, no-wrap
+msgid "gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository=\"src\",length=12]"
+msgstr "gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:356
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1569
+#, no-wrap
+msgid "June 11, 2021"
+msgstr "11 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:358
+#, 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 "14.0-CURRENT после коммита gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository=\"src\",length=12] изменил внутренний KAPI между модулями `krpc` и nfsserver."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:359
+#, no-wrap
+msgid "1400023"
+msgstr "1400023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:360
+#, no-wrap
+msgid "gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository=\"src\",length=12]"
+msgstr "gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:361
+#, no-wrap
+msgid "June 13, 2021"
+msgstr "13 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:363
+#, 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 "14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-12.0.0-0-gd28af7c654d8, также известной как релиз 12.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:364
+#, no-wrap
+msgid "1400024"
+msgstr "1400024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:365
+#, no-wrap
+msgid "gitref:41dfd8bd6466fd39957dee2614d88c81cdf420a7[repository=\"src\",length=12]"
+msgstr "gitref:41dfd8bd6466fd39957dee2614d88c81cdf420a7[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:366
+#, no-wrap
+msgid "June 18, 2021"
+msgstr "18 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:368
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:373
+#, no-wrap
+msgid "14.0-CURRENT after various additions to LinuxKPI."
+msgstr "14.0-CURRENT после различных добавлений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:369
+#, no-wrap
+msgid "1400025"
+msgstr "1400025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:370
+#, no-wrap
+msgid "gitref:5fa1eb1cd927219070b5753b64114a9240d76bf8[repository=\"src\",length=12]"
+msgstr "gitref:5fa1eb1cd927219070b5753b64114a9240d76bf8[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:371
+#, no-wrap
+msgid "July 5, 2021"
+msgstr "5 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:374
+#, no-wrap
+msgid "1400026"
+msgstr "1400026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:375
+#, no-wrap
+msgid "gitref:fad3f322efb53d4924fdda34f9f23f881659c269[repository=\"src\",length=12]"
+msgstr "gitref:fad3f322efb53d4924fdda34f9f23f881659c269[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:376
+#, no-wrap
+msgid "July 16, 2021"
+msgstr "16 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:378
+#, no-wrap
+msgid "14.0-CURRENT after changing the internal KAPI between the nfscommon and nfsd modules."
+msgstr "14.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfsd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:379
+#, no-wrap
+msgid "1400027"
+msgstr "1400027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:380
+#, no-wrap
+msgid "gitref:cc55ee8009a550810d38777fd6ace9abf3a2f6b4[repository=\"src\",length=12]"
+msgstr "gitref:cc55ee8009a550810d38777fd6ace9abf3a2f6b4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:381
+#, no-wrap
+msgid "July 28, 2021"
+msgstr "28 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:383
+#, no-wrap
+msgid "14.0-CURRENT after adding out-of-line LSE atomics helpers to [.filename]#libcompiler_rt.a# on aarch64."
+msgstr "14.0-CURRENT после добавления вспомогательных функций LSE атомарных операций вне строки в [.filename]#libcompiler_rt.a# для архитектуры aarch64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:384
+#, no-wrap
+msgid "1400028"
+msgstr "1400028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:385
+#, no-wrap
+msgid "gitref:792b602a337ddc5efaa5e5326d9433fe3da7f303[repository=\"src\",length=12]"
+msgstr "gitref:792b602a337ddc5efaa5e5326d9433fe3da7f303[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:386
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1594
+#, no-wrap
+msgid "July 31, 2021"
+msgstr "31 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:388
+#, no-wrap
+msgid "14.0-CURRENT after making FPU sections thread-safe in the LinuxKPI."
+msgstr "14.0-CURRENT после обеспечения потокобезопасности разделов FPU в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:389
+#, no-wrap
+msgid "1400029"
+msgstr "1400029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:390
+#, no-wrap
+msgid "gitref:245ec7651e4221043d1032fb3f82f335dc65fc7f[repository=\"src\",length=12]"
+msgstr "gitref:245ec7651e4221043d1032fb3f82f335dc65fc7f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:391
+#, no-wrap
+msgid "August 5, 2021"
+msgstr "5 августа 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:393
+#, no-wrap
+msgid "14.0-CURRENT after adding man:fspacectl[2], man:vn_deallocate[9] and man:VOP_DEALLOCATE[9]."
+msgstr "14.0-CURRENT после добавления man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:394
+#, no-wrap
+msgid "1400030"
+msgstr "1400030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:395
+#, no-wrap
+msgid "gitref:95941b963606f6e03282cd6f866f3166dcedfa5b[repository=\"src\",length=12]"
+msgstr "gitref:95941b963606f6e03282cd6f866f3166dcedfa5b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:396
+#, no-wrap
+msgid "August 12, 2021"
+msgstr "12 августа 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:398
+#, 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 "14.0-CURRENT после изменений параметров man:VOP_DEALLOCATE[9] и добавления поддержки man:fspacectl[2] для POSIX разделяемой памяти."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:399
+#, no-wrap
+msgid "1400031"
+msgstr "1400031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:400
+#, no-wrap
+msgid "gitref:1a4c5061fc5ba8f2eee41456a6873547915f268a[repository=\"src\",length=12]"
+msgstr "gitref:1a4c5061fc5ba8f2eee41456a6873547915f268a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:401
+#, no-wrap
+msgid "August 24, 2021"
+msgstr "24 августа 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:403
+#, 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 "14.0-CURRENT после изменения man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9] для обновления rmsr.r_offset до значимого значения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:404
+#, no-wrap
+msgid "1400032"
+msgstr "1400032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:405
+#, no-wrap
+msgid "gitref:76321d2d432ed270d93b282e54e59b708c0cf3b4[repository=\"src\",length=12]"
+msgstr "gitref:76321d2d432ed270d93b282e54e59b708c0cf3b4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:406
+#, no-wrap
+msgid "August 25, 2021"
+msgstr "25 августа 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:408
+#, 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 "14.0-CURRENT после изменения man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9] для упрощения подсчёта количества обнулённых байт."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:409
+#, no-wrap
+msgid "1400033"
+msgstr "1400033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:410
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:415
+#, no-wrap
+msgid "gitref:c751d067c166db71ce8bf3a323c62ac3428bd32a[repository=\"src\",length=12]"
+msgstr "gitref:c751d067c166db71ce8bf3a323c62ac3428bd32a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:411
+#, no-wrap
+msgid "September 7, 2021"
+msgstr "7 сентября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:413
+#, 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 "14.0-CURRENT после перемещения блокировок буфера сокета в содержащий сокет и переименования sb(un)lock в SOCK_IO_RECV_LOCK, SOCK_IO_RECV_UNLOCK, SOCK_IO_SEND_LOCK и SOCK_IO_SEND_UNLOCK."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:414
+#, no-wrap
+msgid "1400034"
+msgstr "1400034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:416
+#, no-wrap
+msgid "September 29, 2021"
+msgstr "29 сентября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:418
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI changes."
+msgstr "14.0-CURRENT после изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:419
+#, no-wrap
+msgid "1400035"
+msgstr "1400035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:420
+#, no-wrap
+msgid "gitref:16f1ee11e6574d7f8d8a9dc6ebc9be3036ff9fd0[repository=\"src\",length=12]"
+msgstr "gitref:16f1ee11e6574d7f8d8a9dc6ebc9be3036ff9fd0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:421
+#, no-wrap
+msgid "October 4, 2021"
+msgstr "4 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:423
+#, no-wrap
+msgid "14.0-CURRENT after splitting libtinfow from libncurses."
+msgstr "14.0-CURRENT после разделения libtinfow и libncurses."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:424
+#, no-wrap
+msgid "1400036"
+msgstr "1400036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:425
+#, no-wrap
+msgid "gitref:ac847dbf73685a5df9f70bbcdefa9fdeb559071d[repository=\"src\",length=12]"
+msgstr "gitref:ac847dbf73685a5df9f70bbcdefa9fdeb559071d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:426
+#, no-wrap
+msgid "October 6, 2021"
+msgstr "6 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:428
+#, no-wrap
+msgid "14.0-CURRENT after extending the AES-CCM and Chacha20-Poly1305 ciphers in OCF to support multiple nonce lengths."
+msgstr "14.0-CURRENT после расширения шифров AES-CCM и Chacha20-Poly1305 в OCF для поддержки нескольких длин одноразовых номеров."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:429
+#, no-wrap
+msgid "1400037"
+msgstr "1400037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:430
+#, no-wrap
+msgid "gitref:2b68eb8e1dbbdaf6a0df1c83b26f5403ca52d4c3[repository=\"src\",length=12]"
+msgstr "gitref:2b68eb8e1dbbdaf6a0df1c83b26f5403ca52d4c3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:431
+#, no-wrap
+msgid "October 11, 2021"
+msgstr "11 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:433
+#, no-wrap
+msgid "14.0-CURRENT after removal of thread argument from man:VOP_STAT[9] and `fo_stat`."
+msgstr "14.0-CURRENT после удаления аргумента thread из man:VOP_STAT[9] и `fo_stat`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:434
+#, no-wrap
+msgid "1400038"
+msgstr "1400038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:435
+#, no-wrap
+msgid "gitref:0d6516b453469ce1d92ec903c4c4df9ee08be0f9[repository=\"src\",length=12]"
+msgstr "gitref:0d6516b453469ce1d92ec903c4c4df9ee08be0f9[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:436
+#, no-wrap
+msgid "October 17, 2021"
+msgstr "17 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:438
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI gained support of lazy BAR allocation."
+msgstr "14.0-CURRENT после того, как LinuxKPI получил поддержку отложенного выделения BAR."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:439
+#, no-wrap
+msgid "1400039"
+msgstr "1400039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:440
+#, no-wrap
+msgid "gitref:bd49c454ca62170506a98959c1acab7ad50c3276[repository=\"src\",length=12]"
+msgstr "gitref:bd49c454ca62170506a98959c1acab7ad50c3276[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:441
+#, no-wrap
+msgid "October 19, 2021"
+msgstr "19 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:443
+#, no-wrap
+msgid "14.0-CURRENT after page allocator changes."
+msgstr "14.0-CURRENT после изменений в аллокаторе страниц."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:444
+#, no-wrap
+msgid "1400040"
+msgstr "1400040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:445
+#, no-wrap
+msgid "gitref:f38bef2ce417d6270f32b4ed17cec84bfd95d548[repository=\"src\",length=12]"
+msgstr "gitref:f38bef2ce417d6270f32b4ed17cec84bfd95d548[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:446
+#, no-wrap
+msgid "October 30, 2021"
+msgstr "30 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:448
+#, no-wrap
+msgid "14.0-CURRENT after libdialog shared library version number bump."
+msgstr "14.0-CURRENT после увеличения номера версии разделяемой библиотеки libdialog."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:449
+#, no-wrap
+msgid "1400041"
+msgstr "1400041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:450
+#, no-wrap
+msgid "gitref:0c276dee030b241e12e1ceb1b2ab619004f08ce1[repository=\"src\",length=12]"
+msgstr "gitref:0c276dee030b241e12e1ceb1b2ab619004f08ce1[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:451
+#, no-wrap
+msgid "November 6, 2021"
+msgstr "6 ноября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:453
+#, no-wrap
+msgid "14.0-CURRENT after changing the arguments for man:VOP_ALLOCATE[9]."
+msgstr "14.0-CURRENT после изменения аргументов для man:VOP_ALLOCATE[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:454
+#, no-wrap
+msgid "1400042"
+msgstr "1400042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:455
+#, no-wrap
+msgid "gitref:20aa359773befc8182f6b5dcb5aad7390cab6c26[repository=\"src\",length=12]"
+msgstr "gitref:20aa359773befc8182f6b5dcb5aad7390cab6c26[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:456
+#, no-wrap
+msgid "November 13, 2021"
+msgstr "13 ноября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:458
+#, 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 "14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-13.0.0-0-gd7b669b3a303, также известного как релиз 13.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:459
+#, no-wrap
+msgid "1400043"
+msgstr "1400043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:460
+#, no-wrap
+msgid "gitref:7e1d3eefd410ca0fbae5a217422821244c3eeee4[repository=\"src\",length=12]"
+msgstr "gitref:7e1d3eefd410ca0fbae5a217422821244c3eeee4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:461
+#, no-wrap
+msgid "November 25, 2021"
+msgstr "25 ноября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:463
+#, no-wrap
+msgid "14.0-CURRENT after removing the unused thread argument from man:NDINIT[9]*."
+msgstr "14.0-CURRENT после удаления неиспользуемого аргумента потока из man:NDINIT[9]*."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:464
+#, no-wrap
+msgid "1400044"
+msgstr "1400044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:465
+#, no-wrap
+msgid "gitref:ec434c85b46dd715da1940e2a8911bf476b0e477[repository=\"src\",length=12]"
+msgstr "gitref:ec434c85b46dd715da1940e2a8911bf476b0e477[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:466
+#, no-wrap
+msgid "December 9, 2021"
+msgstr "9 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:468
+#, 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 "14.0-CURRENT после изменения встроенных программных криптографических преобразований для поддержки AEAD-шифров и изменения аутентификационных преобразований Blake-2S/B для поддержки Init перед Setkey, как в других аутентификационных преобразованиях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:469
+#, no-wrap
+msgid "1400045"
+msgstr "1400045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:470
+#, no-wrap
+msgid "gitref:b214fcceacad6b842545150664bd2695c1c2b34f[repository=\"src\",length=12]"
+msgstr "gitref:b214fcceacad6b842545150664bd2695c1c2b34f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:471
+#, no-wrap
+msgid "December 15, 2021"
+msgstr "15 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:473
+#, no-wrap
+msgid "14.0-CURRENT after changing man:VOP_READDIR[9]'s cookies argument to a `**uint64_t`."
+msgstr "14.0-CURRENT после изменения аргумента cookies в man:VOP_READDIR[9] на `**uint64_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:474
+#, no-wrap
+msgid "1400046"
+msgstr "1400046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:475
+#, no-wrap
+msgid "gitref:e2650af157bc7489deaf2c9054995f0f88a6e5da[repository=\"src\",length=12]"
+msgstr "gitref:e2650af157bc7489deaf2c9054995f0f88a6e5da[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:476
+#, no-wrap
+msgid "December 30, 2021"
+msgstr "30 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:478
+#, no-wrap
+msgid "14.0-CURRENT after making the CPU_SET macros compatible with glibc."
+msgstr "14.0-CURRENT после приведения макросов CPU_SET в соответствие с glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:479
+#, no-wrap
+msgid "1400047"
+msgstr "1400047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:480
+#, no-wrap
+msgid "gitref:ed6417cd8d0bb5a2c175fce9d8e4a495fae9e9f4[repository=\"src\",length=12]"
+msgstr "gitref:ed6417cd8d0bb5a2c175fce9d8e4a495fae9e9f4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:481
+#, no-wrap
+msgid "January 17, 2022"
+msgstr "January 17, 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:483
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:563
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:573
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:578
+#, no-wrap
+msgid "14.0-CURRENT after multiple LinuxKPI changes required by drm-kmod."
+msgstr "14.0-CURRENT после множества изменений LinuxKPI, необходимых для drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:484
+#, no-wrap
+msgid "1400048"
+msgstr "1400048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:485
+#, no-wrap
+msgid "gitref:dd2f7a4b45eb1285e710cfce60cb77f7c11f8075[repository=\"src\",length=12]"
+msgstr "gitref:dd2f7a4b45eb1285e710cfce60cb77f7c11f8075[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:486
+#, no-wrap
+msgid "January 18, 2022"
+msgstr "18 января 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:488
+#, no-wrap
+msgid "14.0-CURRENT after adding <crypto/chacha20_poly1305.h>."
+msgstr "14.0-CURRENT после добавления <crypto/chacha20_poly1305.h>."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:489
+#, no-wrap
+msgid "1400049"
+msgstr "1400049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:490
+#, no-wrap
+msgid "gitref:2c4b65cc3d227f31864e183c15f6c42e2c596cd9[repository=\"src\",length=12]"
+msgstr "gitref:2c4b65cc3d227f31864e183c15f6c42e2c596cd9[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:491
+#, no-wrap
+msgid "January 24, 2022"
+msgstr "January 24, 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:493
+#, no-wrap
+msgid "14.0-CURRENT after adding <crypto/curve25519.h>."
+msgstr "14.0-CURRENT after adding <crypto/curve25519.h>."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:494
+#, no-wrap
+msgid "1400050"
+msgstr "1400050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:495
+#, no-wrap
+msgid "gitref:213e91399b7998554d787bb290109ebe602aa279[repository=\"src\",length=12]"
+msgstr "gitref:213e91399b7998554d787bb290109ebe602aa279[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:496
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:501
+#, no-wrap
+msgid "January 25, 2022"
+msgstr "25 января 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:498
+#, 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 "14.0-CURRENT после iflib добавляет возможность, при которой драйвер может установить свою собственную функцию выбора TX-очереди как `ift_txq_select` в структуре `if_txrx`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:499
+#, no-wrap
+msgid "1400051"
+msgstr "1400051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:500
+#, no-wrap
+msgid "gitref:59d465e200bb7058dfdb183c061730c10dd5bc03[repository=\"src\",length=12]"
+msgstr "gitref:59d465e200bb7058dfdb183c061730c10dd5bc03[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:503
+#, no-wrap
+msgid "14.0-CURRENT after adding i2c support for LinuxKPI."
+msgstr "14.0-CURRENT после добавления поддержки i2c для LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:504
+#, no-wrap
+msgid "1400052"
+msgstr "1400052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:505
+#, no-wrap
+msgid "gitref:05f0b24bfb3416606c8ea02bc1bdb9bcee7aee0c[repository=\"src\",length=12]"
+msgstr "gitref:05f0b24bfb3416606c8ea02bc1bdb9bcee7aee0c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:506
+#, no-wrap
+msgid "February 14, 2022"
+msgstr "February 14, 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:508
+#, no-wrap
+msgid "14.0-CURRENT after adding GUID_INIT and pm_qos.h support for LinuxKPI."
+msgstr "14.0-CURRENT после добавления поддержки GUID_INIT и pm_qos.h для LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:509
+#, no-wrap
+msgid "1400053"
+msgstr "1400053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:510
+#, no-wrap
+msgid "gitref:ba87e9bf74202b08b8e3b0a297b9b88f6869fbfb[repository=\"src\",length=12]"
+msgstr "gitref:ba87e9bf74202b08b8e3b0a297b9b88f6869fbfb[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:511
+#, no-wrap
+msgid "February 17, 2022"
+msgstr "February 17, 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:513
+#, no-wrap
+msgid "14.0-CURRENT after adding mmap_lock.h to LinuxKPI."
+msgstr "14.0-CURRENT после добавления mmap_lock.h в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:514
+#, no-wrap
+msgid "1400054"
+msgstr "1400054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:515
+#, no-wrap
+msgid "gitref:50bb3a33d879536e86e8a23365f070ef00b5cb32[repository=\"src\",length=12]"
+msgstr "gitref:50bb3a33d879536e86e8a23365f070ef00b5cb32[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:516
+#, no-wrap
+msgid "March 28, 2022"
+msgstr "28 марта 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:518
+#, no-wrap
+msgid "14.0-CURRENT after changing `irq_work_queue` to return a bool in LinuxKPI to match 5.10 API."
+msgstr "14.0-CURRENT после изменения `irq_work_queue` для возврата типа bool в LinuxKPI в соответствии с API 5.10."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:519
+#, no-wrap
+msgid "1400055"
+msgstr "1400055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:520
+#, no-wrap
+msgid "gitref:d69af4758be912625ec08656ba64eb90a98c9a7f[repository=\"src\",length=12]"
+msgstr "gitref:d69af4758be912625ec08656ba64eb90a98c9a7f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:521
+#, no-wrap
+msgid "March 29, 2022"
+msgstr "29 марта 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:523
+#, no-wrap
+msgid "14.0-CURRENT after adding `for_each_sgtable_dma_sg` and `for_each_sgtable_dma_page` to LinuxKPI"
+msgstr "14.0-CURRENT после добавления `for_each_sgtable_dma_sg` и `for_each_sgtable_dma_page` в LinuxKPI"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:524
+#, no-wrap
+msgid "1400056"
+msgstr "1400056"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:525
+#, no-wrap
+msgid "gitref:ab8ac4c28574a42a2891b2e2341f802949c1fb57[repository=\"src\",length=12]"
+msgstr "gitref:ab8ac4c28574a42a2891b2e2341f802949c1fb57[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:526
+#, no-wrap
+msgid "March 31, 2022"
+msgstr "31 марта 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:528
+#, no-wrap
+msgid "14.0-CURRENT after zlib upgrade to 1.2.12"
+msgstr "14.0-CURRENT после обновления zlib до версии 1.2.12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:529
+#, no-wrap
+msgid "1400057"
+msgstr "1400057"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:530
+#, no-wrap
+msgid "gitref:e68b35e40881a1bd858e1b4b5003123a484fd7cd[repository=\"src\",length=12]"
+msgstr "gitref:e68b35e40881a1bd858e1b4b5003123a484fd7cd[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:531
+#, no-wrap
+msgid "April 22, 2022"
+msgstr "22 апреля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:533
+#, no-wrap
+msgid "14.0-CURRENT after changing udp_tun_func_t() prototype."
+msgstr "14.0-CURRENT после изменения прототипа udp_tun_func_t()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:534
+#, no-wrap
+msgid "1400058"
+msgstr "1400058"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:535
+#, no-wrap
+msgid "gitref:2e32d4e41d205d6f14834f87306a77ff77b9c0bd[repository=\"src\",length=12]"
+msgstr "gitref:2e32d4e41d205d6f14834f87306a77ff77b9c0bd[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:536
+#, no-wrap
+msgid "May 7, 2022"
+msgstr "7 мая 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:538
+#, no-wrap
+msgid "14.0-CURRENT after newbus changes to remove devclass arguments."
+msgstr "14.0-CURRENT после изменений в newbus для удаления аргументов devclass."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:539
+#, no-wrap
+msgid "1400059"
+msgstr "1400059"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:540
+#, no-wrap
+msgid "gitref:3a9a9c0ca44ec535dcf73fe8462bee458e54814b[repository=\"src\",length=12]"
+msgstr "gitref:3a9a9c0ca44ec535dcf73fe8462bee458e54814b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:541
+#, no-wrap
+msgid "May 14, 2022"
+msgstr "14 мая 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:543
+#, 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 "14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-14.0.3-0-g1f9140064dfb, также известной как релиз 14.0.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:544
+#, no-wrap
+msgid "1400060"
+msgstr "1400060"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:545
+#, no-wrap
+msgid "gitref:85d7875d42913c2cb10a007a1be05b210dc6aab2[repository=\"src\",length=12]"
+msgstr "gitref:85d7875d42913c2cb10a007a1be05b210dc6aab2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:546
+#, no-wrap
+msgid "June 6, 2022"
+msgstr "6 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:548
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI dmi_matches() fixes."
+msgstr "14.0-CURRENT после исправлений LinuxKPI dmi_matches()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:549
+#, no-wrap
+msgid "1400061"
+msgstr "1400061"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:550
+#, no-wrap
+msgid "gitref:c4c5981c14d5bd69e9df9ae691069ec4c2e92174[repository=\"src\",length=12]"
+msgstr "gitref:c4c5981c14d5bd69e9df9ae691069ec4c2e92174[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:551
+#, no-wrap
+msgid "June 8, 2022"
+msgstr "8 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:553
+#, no-wrap
+msgid "14.0-CURRENT after man:mbuf[9] structure changes."
+msgstr "14.0-CURRENT после изменений структуры man:mbuf[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:554
+#, no-wrap
+msgid "1400062"
+msgstr "1400062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:555
+#, no-wrap
+msgid "gitref:8c309d48aabf1cb469334c7716033f177a2715c0[repository=\"src\",length=12]"
+msgstr "gitref:8c309d48aabf1cb469334c7716033f177a2715c0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:556
+#, no-wrap
+msgid "June 18, 2022"
+msgstr "18 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:558
+#, no-wrap
+msgid "14.0-CURRENT after struct `kinfo_file` changes."
+msgstr "14.0-CURRENT после изменений структуры `kinfo_file`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:559
+#, no-wrap
+msgid "1400063"
+msgstr "1400063"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:560
+#, no-wrap
+msgid "gitref:8cff8e6e13a6d3ccff40fc0d8d97f5aef22a8f4d[repository=\"src\",length=12]"
+msgstr "gitref:8cff8e6e13a6d3ccff40fc0d8d97f5aef22a8f4d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:561
+#, no-wrap
+msgid "June 29, 2022"
+msgstr "29 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:564
+#, no-wrap
+msgid "1400064"
+msgstr "1400064"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:565
+#, no-wrap
+msgid "gitref:ddd9004e7a5dbf02c34ef0effcef90f7d5df357d[repository=\"src\",length=12]"
+msgstr "gitref:ddd9004e7a5dbf02c34ef0effcef90f7d5df357d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:566
+#, no-wrap
+msgid "July 18, 2022"
+msgstr "18 июля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:568
+#, no-wrap
+msgid "14.0-CURRENT after the removal of OBJT_DEFAULT."
+msgstr "14.0-CURRENT после удаления OBJT_DEFAULT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:569
+#, no-wrap
+msgid "1400065"
+msgstr "1400065"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:570
+#, no-wrap
+msgid "gitref:b273f93657cf0e6f2c6ee4d0f40a43656233c6d0[repository=\"src\",length=12]"
+msgstr "gitref:b273f93657cf0e6f2c6ee4d0f40a43656233c6d0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:571
+#, no-wrap
+msgid "August 8, 2022"
+msgstr "8 августа 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:574
+#, no-wrap
+msgid "1400066"
+msgstr "1400066"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:575
+#, no-wrap
+msgid "gitref:ff7812ee7d444b738a454064f9639c3feb5743e8[repository=\"src\",length=12]"
+msgstr "gitref:ff7812ee7d444b738a454064f9639c3feb5743e8[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:576
+#, no-wrap
+msgid "August 18, 2022"
+msgstr "18 августа 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:579
+#, no-wrap
+msgid "1400069"
+msgstr "1400069"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:580
+#, no-wrap
+msgid "gitref:f95c0bc89ea4fcde04b0990d57e842ef387ea896[repository=\"src\",length=12]"
+msgstr "gitref:f95c0bc89ea4fcde04b0990d57e842ef387ea896[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:581
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:586
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:596
+#, no-wrap
+msgid "September 22, 2022"
+msgstr "22 сентября 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:583
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:628
+#, no-wrap
+msgid "14.0-CURRENT after multiple LinuxKPI changes."
+msgstr "14.0-CURRENT после нескольких изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:584
+#, no-wrap
+msgid "1400070"
+msgstr "1400070"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:585
+#, no-wrap
+msgid "gitref:6bddde307e21eba297ac3f3e534b4cf3be81dfe2[repository=\"src\",length=12]"
+msgstr "gitref:6bddde307e21eba297ac3f3e534b4cf3be81dfe2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:588
+#, no-wrap
+msgid "14.0-CURRENT after KPI changes to pmap_unmapdev() and kmem_*()."
+msgstr "14.0-CURRENT после изменений KPI в pmap_unmapdev() и kmem_*()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:589
+#, no-wrap
+msgid "1400071"
+msgstr "1400071"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:590
+#, no-wrap
+msgid "gitref:d3f96f661050e9bd21fe29931992a8b9e67ff189[repository=\"src\",length=12]"
+msgstr "gitref:d3f96f661050e9bd21fe29931992a8b9e67ff189[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:591
+#, no-wrap
+msgid "September 26, 2022"
+msgstr "26 сентября 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:593
+#, no-wrap
+msgid "14.0-CURRENT after KPI changes that sysctl OIDs lists converted to RB trees."
+msgstr "14.0-CURRENT после изменений KPI, когда списки OID sysctl были преобразованы в RB-деревья."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:594
+#, no-wrap
+msgid "1400072"
+msgstr "1400072"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:595
+#, no-wrap
+msgid "gitref:8a96874eeeee5195b0b0952b77227bef6a26d1a6[repository=\"src\",length=12]"
+msgstr "gitref:8a96874eeeee5195b0b0952b77227bef6a26d1a6[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:598
+#, no-wrap
+msgid "14.0-CURRENT after `qsort_r` prototype modified to match POSIX."
+msgstr "14.0-CURRENT после изменения прототипа `qsort_r` для соответствия POSIX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:599
+#, no-wrap
+msgid "1400073"
+msgstr "1400073"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:600
+#, no-wrap
+msgid "gitref:9c950139051298831ce19d01ea5fb33ec6ea7f89[repository=\"src\",length=12]"
+msgstr "gitref:9c950139051298831ce19d01ea5fb33ec6ea7f89[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:601
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1699
+#, no-wrap
+msgid "October 17, 2022"
+msgstr "17 октября 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:603
+#, no-wrap
+msgid "14.0-CURRENT after introduction of v2 of TX Queue Select Functionality."
+msgstr "14.0-CURRENT after introduction of v2 of TX Queue Select Functionality."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:604
+#, no-wrap
+msgid "1400074"
+msgstr "1400074"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:605
+#, no-wrap
+msgid "gitref:e28932c643e891294a49f386ba65322cf8410225[repository=\"src\",length=12]"
+msgstr "gitref:e28932c643e891294a49f386ba65322cf8410225[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:606
+#, no-wrap
+msgid "December 9, 2022"
+msgstr "9 декабря 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:608
+#, no-wrap
+msgid "14.0-CURRENT after adding spare fops slots in fileops."
+msgstr "14.0-CURRENT после добавления запасных слотов fops в fileops."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:609
+#, no-wrap
+msgid "1400078"
+msgstr "1400078"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:610
+#, no-wrap
+msgid "gitref:4b56afaf7bf4fa37bae5b26fd93ee1ff5969c1bb[repository=\"src\",length=12]"
+msgstr "gitref:4b56afaf7bf4fa37bae5b26fd93ee1ff5969c1bb[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:611
+#, no-wrap
+msgid "January 13, 2023"
+msgstr "13 января 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:613
+#, no-wrap
+msgid "14.0-CURRENT after changing LinuxKPI pci.h."
+msgstr "14.0-CURRENT после изменения LinuxKPI pci.h."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:614
+#, no-wrap
+msgid "1400079"
+msgstr "1400079"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:615
+#, no-wrap
+msgid "gitref:3264f6b88fce7c5437d205685863617d8f6a22dd[repository=\"src\",length=12]"
+msgstr "gitref:3264f6b88fce7c5437d205685863617d8f6a22dd[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:616
+#, no-wrap
+msgid "February 8, 2023"
+msgstr "8 февраля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:618
+#, 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 "14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-15.0.7-0-g8dfdcc7b7bf6, также известного как релиз 15.0.7."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:619
+#, no-wrap
+msgid "1400084"
+msgstr "1400084"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:620
+#, no-wrap
+msgid "gitref:ea3061526e9ce5d3b65932c1d3e4437abd556d65[repository=\"src\",length=12]"
+msgstr "gitref:ea3061526e9ce5d3b65932c1d3e4437abd556d65[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:621
+#, no-wrap
+msgid "March 23, 2023"
+msgstr "23 марта 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:623
+#, no-wrap
+msgid "14.0-CURRENT after changing the arm64 struct reg, struct gpreg, struct trapframe, and struct pcb."
+msgstr "14.0-CURRENT после изменения структур reg, gpreg, trapframe и pcb для архитектуры arm64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:624
+#, no-wrap
+msgid "1400085"
+msgstr "1400085"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:625
+#, no-wrap
+msgid "gitref:1cebc9298cf2272da46c3c574d06a80ce59854aa[repository=\"src\",length=12]"
+msgstr "gitref:1cebc9298cf2272da46c3c574d06a80ce59854aa[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:626
+#, no-wrap
+msgid "March 28, 2023"
+msgstr "28 марта 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:629
+#, no-wrap
+msgid "1400086"
+msgstr "1400086"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:630
+#, no-wrap
+msgid "gitref:c17eb99a66e7d1e8a64458a969eeb7649f827493[repository=\"src\",length=12]"
+msgstr "gitref:c17eb99a66e7d1e8a64458a969eeb7649f827493[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:631
+#, no-wrap
+msgid "April 8, 2023"
+msgstr "8 апреля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:633
+#, no-wrap
+msgid "14.0-CURRENT after vn_lock_pair() argument changes."
+msgstr "14.0-CURRENT после изменений аргументов vn_lock_pair()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:634
+#, no-wrap
+msgid "1400087"
+msgstr "1400087"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:635
+#, no-wrap
+msgid "gitref:af22da75a035e25cb47cd3f2eabe5a84d8a5cb34[repository=\"src\",length=12]"
+msgstr "gitref:af22da75a035e25cb47cd3f2eabe5a84d8a5cb34[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:636
+#, no-wrap
+msgid "April 22, 2023"
+msgstr "22 апреля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:638
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI updates."
+msgstr "14.0-CURRENT после обновлений LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:639
+#, no-wrap
+msgid "1400088"
+msgstr "1400088"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:640
+#, no-wrap
+msgid "gitref:97583aa2567589cb83540d2d9de1980b76db9a99[repository=\"src\",length=12]"
+msgstr "gitref:97583aa2567589cb83540d2d9de1980b76db9a99[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:641
+#, no-wrap
+msgid "April 24, 2023"
+msgstr "24 апреля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:643
+#, no-wrap
+msgid "14.0-CURRENT after migrating the LinuxKPI to IfAPI."
+msgstr "14.0-CURRENT после миграции LinuxKPI на IfAPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:644
+#, no-wrap
+msgid "1400089"
+msgstr "1400089"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:645
+#, no-wrap
+msgid "gitref:9fb6718d1b180c341373b25c03dbfc221ddee311[repository=\"src\",length=12]"
+msgstr "gitref:9fb6718d1b180c341373b25c03dbfc221ddee311[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:646
+#, no-wrap
+msgid "April 25, 2023"
+msgstr "25 апреля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:648
+#, no-wrap
+msgid "14.0-CURRENT after dynamically allocating the stoppcbs array in smp."
+msgstr "14.0-CURRENT после динамического выделения массива stoppcbs в smp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:649
+#, no-wrap
+msgid "1400090"
+msgstr "1400090"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:650
+#, no-wrap
+msgid "gitref:653738e895ba022be1179a95a85089e7bc66dbbe[repository=\"src\",length=12]"
+msgstr "gitref:653738e895ba022be1179a95a85089e7bc66dbbe[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:651
+#, no-wrap
+msgid "June 7, 2023"
+msgstr "7 июня 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:653
+#, no-wrap
+msgid "14.0-CURRENT after ptrace started clearing TDB_BORN during PT_DETACH."
+msgstr "14.0-CURRENT после того, как ptrace начал очищать TDB_BORN во время PT_DETACH."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:654
+#, no-wrap
+msgid "1400091"
+msgstr "1400091"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:655
+#, no-wrap
+msgid "gitref:a681cba16d8967651a2146385ce44a2bfeb1c4c3[repository=\"src\",length=12]"
+msgstr "gitref:a681cba16d8967651a2146385ce44a2bfeb1c4c3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:656
+#, no-wrap
+msgid "June 22, 2023"
+msgstr "22 июня 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:658
+#, 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 "14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-16.0.6-0-g7cbf1a259152, также известного как релиз 16.0.6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:659
+#, no-wrap
+msgid "1400092"
+msgstr "1400092"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:660
+#, no-wrap
+msgid "gitref:9ead001d5b42ef9cba04757c9e7ee74c06037139[repository=\"src\",length=12]"
+msgstr "gitref:9ead001d5b42ef9cba04757c9e7ee74c06037139[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:661
+#, no-wrap
+msgid "June 24, 2023"
+msgstr "24 июня 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:663
+#, no-wrap
+msgid "14.0-CURRENT after importing OpenSSL 3.0.9 into base."
+msgstr "14.0-CURRENT после импорта OpenSSL 3.0.9 в базовую систему."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:664
+#, no-wrap
+msgid "1400093"
+msgstr "1400093"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:665
+#, no-wrap
+msgid "gitref:ba8cc6d7271a50fec978a1d3a088aec7985fae48[repository=\"src\",length=12]"
+msgstr "gitref:ba8cc6d7271a50fec978a1d3a088aec7985fae48[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:666
+#, no-wrap
+msgid "July 5, 2023"
+msgstr "5 июля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:668
+#, no-wrap
+msgid "14.0-CURRENT after using __enum_uint8 for vtype and vstate in VFS"
+msgstr "14.0-CURRENT после использования __enum_uint8 для vtype и vstate в VFS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:669
+#, no-wrap
+msgid "1400097"
+msgstr "1400097"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:673
+#, no-wrap
+msgid "14.0-STABLE after branching stable/14"
+msgstr "14.0-STABLE после ветвления stable/14"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:674
+#, no-wrap
+msgid "1400500"
+msgstr "1400500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:676
+#, no-wrap
+msgid "September 8, 2023"
+msgstr "8 сентября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:678
+#, no-wrap
+msgid "14.0-STABLE after branching releng/14.0"
+msgstr "14.0-STABLE после ветвления releng/14.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:679
+#, no-wrap
+msgid "1400501"
+msgstr "1400501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:680
+#, no-wrap
+msgid "gitref:91e53779b4fc39e755a03190f785ce0cf3f83eb7[repository=\"src\",length=12]"
+msgstr "gitref:91e53779b4fc39e755a03190f785ce0cf3f83eb7[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:681
+#, no-wrap
+msgid "November 19, 2023"
+msgstr "19 ноября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:683
+#, no-wrap
+msgid "14.0-STABLE after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc."
+msgstr "14.0-STABLE после реализации `fpu_kern_enter` и `fpu_kern_leave` для powerpc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:684
+#, no-wrap
+msgid "1400502"
+msgstr "1400502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:685
+#, no-wrap
+msgid "gitref:092abb839d1d2826533bb9c4c93d713f8b5043f9[repository=\"src\",length=12]"
+msgstr "gitref:092abb839d1d2826533bb9c4c93d713f8b5043f9[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:688
+#, no-wrap
+msgid "14.0-STABLE after modifying the internal API between the kgssapi and krpc modules."
+msgstr "14.0-STABLE после изменения внутреннего API между модулями kgssapi и krpc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:689
+#, no-wrap
+msgid "1400503"
+msgstr "1400503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:690
+#, no-wrap
+msgid "gitref:ba99d960884d50eb7d36146914206644ee132aa4[repository=\"src\",length=12]"
+msgstr "gitref:ba99d960884d50eb7d36146914206644ee132aa4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:691
+#, no-wrap
+msgid "December 29, 2023"
+msgstr "29 декабря 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:693
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:708
+#, no-wrap
+msgid "14.0-STABLE after changing the internal KAPI between the nfscommon and nfscl modules."
+msgstr "14.0-STABLE после изменения внутреннего KAPI между модулями nfscommon и nfscl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:694
+#, no-wrap
+msgid "1400504"
+msgstr "1400504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:695
+#, no-wrap
+msgid "gitref:68584c97ecfb3046de7fb1b16c2caa785392237c[repository=\"src\",length=12]"
+msgstr "gitref:68584c97ecfb3046de7fb1b16c2caa785392237c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:696
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:701
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1769
+#, no-wrap
+msgid "January 7, 2024"
+msgstr "7 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:698
+#, 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 "14.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:699
+#, no-wrap
+msgid "1400505"
+msgstr "1400505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:700
+#, no-wrap
+msgid "gitref:64e869e9b93c8ce47f874b770df696c06bcba0d3[repository=\"src\",length=12]"
+msgstr "gitref:64e869e9b93c8ce47f874b770df696c06bcba0d3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:703
+#, no-wrap
+msgid "14.0-STABLE after adding man:vnode_pager_clean_async[9] and man:vnode_pager_clean_sync[9]."
+msgstr "14.0-STABLE после добавления man:vnode_pager_clean_async[9] и man:vnode_pager_clean_sync[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:704
+#, no-wrap
+msgid "1400506"
+msgstr "1400506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:705
+#, no-wrap
+msgid "gitref:d9041710958227194c5e34b169ae73d7ad411017[repository=\"src\",length=12]"
+msgstr "gitref:d9041710958227194c5e34b169ae73d7ad411017[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:706
+#, no-wrap
+msgid "January 19, 2024"
+msgstr "19 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:709
+#, no-wrap
+msgid "1400507"
+msgstr "1400507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:710
+#, no-wrap
+msgid "gitref:b566e44b2b88eb9f1b3b658998c7418cccab9e2f[repository=\"src\",length=12]"
+msgstr "gitref:b566e44b2b88eb9f1b3b658998c7418cccab9e2f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:711
+#, no-wrap
+msgid "January 31, 2024"
+msgstr "31 января 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:713
+#, no-wrap
+msgid "14.0-STABLE after adding man:kern_openatfp[9] and man:kcmp[2]."
+msgstr "14.0-STABLE после добавления man:kern_openatfp[9] и man:kcmp[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:714
+#, no-wrap
+msgid "1400508"
+msgstr "1400508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:715
+#, no-wrap
+msgid "gitref:2d120981e26dfef5c9cb9eb9936bb46cb6918136[repository=\"src\",length=12]"
+msgstr "gitref:2d120981e26dfef5c9cb9eb9936bb46cb6918136[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:716
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:721
+#, no-wrap
+msgid "February 18, 2024"
+msgstr "18 февраля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:718
+#, no-wrap
+msgid "14.0-STABLE after LinuxKPI updates."
+msgstr "14.0-STABLE после обновлений LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:719
+#, no-wrap
+msgid "1400509"
+msgstr "1400509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:720
+#, no-wrap
+msgid "gitref:b392b36d3776b696601ce0253256803276d24ea2[repository=\"src\",length=12]"
+msgstr "gitref:b392b36d3776b696601ce0253256803276d24ea2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:723
+#, no-wrap
+msgid "14.0-STABLE after changing net80211 `struct ieee80211vap` internals."
+msgstr "14.0-STABLE после изменения внутренней структуры `struct ieee80211vap` в net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:724
+#, no-wrap
+msgid "1400510"
+msgstr "1400510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:725
+#, no-wrap
+msgid "gitref:69da6e0879831f1ccc5c60135ed43fcea10a933b[repository=\"src\",length=12]"
+msgstr "gitref:69da6e0879831f1ccc5c60135ed43fcea10a933b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:726
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1784
+#, no-wrap
+msgid "March 23, 2024"
+msgstr "23 марта 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:728
+#, no-wrap
+msgid "14.0-STABLE after fixing a clang assertion or crash when building recent boost libraries."
+msgstr "14.0-STABLE после исправления утверждения или падения clang при сборке последних библиотек boost."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:729
+#, no-wrap
+msgid "1400511"
+msgstr "1400511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:730
+#, no-wrap
+msgid "gitref:7c41358a2b0a2e70a2b61ec347354f3452e4d2f3[repository=\"src\",length=12]"
+msgstr "gitref:7c41358a2b0a2e70a2b61ec347354f3452e4d2f3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:731
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1789
+#, no-wrap
+msgid "April 20, 2024"
+msgstr "20 апреля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:733
+#, no-wrap
+msgid "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."
+msgstr "14.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-18.1.3-0-gc13b7485b879, также известной как релиз 18.1.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:734
+#, no-wrap
+msgid "1401500"
+msgstr "1401500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:735
+#, no-wrap
+msgid "gitref:7b082bdf72e65f94b9b17d9fa1d0c1c202e4eb49[repository=\"src\",length=12]"
+msgstr "gitref:7b082bdf72e65f94b9b17d9fa1d0c1c202e4eb49[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:736
+#, no-wrap
+msgid "May 2, 2024"
+msgstr "2 мая 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:738
+#, no-wrap
+msgid "14.1-STABLE after it was renamed from 14.1-PRERELEASE."
+msgstr "14.1-STABLE после переименования из 14.1-PRERELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:739
+#, no-wrap
+msgid "1401501"
+msgstr "1401501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:740
+#, no-wrap
+msgid "gitref:f285eabc89ce8ccf3aaf563401df942e406c2b5f[repository=\"src\",length=12]"
+msgstr "gitref:f285eabc89ce8ccf3aaf563401df942e406c2b5f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:741
+#, no-wrap
+msgid "June 6, 2024"
+msgstr "6 июня 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:743
+#, no-wrap
+msgid "14.1-STABLE after adding the linuxkpi_video module."
+msgstr "14.1-STABLE после добавления модуля linuxkpi_video."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:744
+#, no-wrap
+msgid "1401502"
+msgstr "1401502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:745
+#, no-wrap
+msgid "gitref:b37a6d41a046dbb46ee1d6bf00c710c03c944a24[repository=\"src\",length=12]"
+msgstr "gitref:b37a6d41a046dbb46ee1d6bf00c710c03c944a24[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:746
+#, no-wrap
+msgid "August 2, 2024"
+msgstr "2 августа 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:748
+#, no-wrap
+msgid "14.1-STABLE after LinuxKPI changes."
+msgstr "14.1-STABLE после изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:749
+#, no-wrap
+msgid "1401503"
+msgstr "1401503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:750
+#, no-wrap
+msgid "gitref:8a5a9dbf389e86d278764ababf2f1eb8ee276680[repository=\"src\",length=12]"
+msgstr "gitref:8a5a9dbf389e86d278764ababf2f1eb8ee276680[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:751
+#, no-wrap
+msgid "October 15, 2024"
+msgstr "15 октября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:753
+#, no-wrap
+msgid "14.1-STABLE after widening the `flags` field in `vm_object`."
+msgstr "14.1-STABLE после расширения поля `flags` в `vm_object`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:754
+#, no-wrap
+msgid "1402500"
+msgstr "1402500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:755
+#, no-wrap
+msgid "gitref:4e8444d5750a5d9da9c812e8f6caf6d62862be0a[repository=\"src\",length=12]"
+msgstr "gitref:4e8444d5750a5d9da9c812e8f6caf6d62862be0a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:756
+#, no-wrap
+msgid "October 31, 2024"
+msgstr "31 октября 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:758
+#, no-wrap
+msgid "14.2-STABLE after it was renamed from 14.2-PRERELEASE."
+msgstr "14.2-STABLE после переименования из 14.2-PRERELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:759
+#, no-wrap
+msgid "1402501"
+msgstr "1402501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:760
+#, no-wrap
+msgid "gitref:35d2f335e855af816d0a7fe5baf6a3facba84562[repository=\"src\",length=12]"
+msgstr "gitref:35d2f335e855af816d0a7fe5baf6a3facba84562[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:761
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1799
+#, no-wrap
+msgid "December 1, 2024"
+msgstr "1 декабря 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:763
+#, no-wrap
+msgid "14.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-19.1.4-0-gaadaa00de76e, a.k.a. 19.1.4 release."
+msgstr "14.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-19.1.4-0-gaadaa00de76e, также известного как релиз 19.1.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:764
+#, no-wrap
+msgid "1402502"
+msgstr "1402502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:765
+#, no-wrap
+msgid "gitref:d172f42e4ba7ba8542ae0866aaba56e329b4ea2c[repository=\"src\",length=12]"
+msgstr "gitref:d172f42e4ba7ba8542ae0866aaba56e329b4ea2c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:766
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:771
+#, no-wrap
+msgid "February 27, 2025"
+msgstr "27 февраля 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:768
+#, no-wrap
+msgid "14.2-STABLE after removing redundant `type` and `rid` arguments from several functions in the new-bus resource API."
+msgstr "14.2-STABLE после удаления избыточных аргументов `type` и `rid` из нескольких функций в API ресурсов new-bus."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:769
+#, no-wrap
+msgid "1402503"
+msgstr "1402503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:770
+#, no-wrap
+msgid "gitref:4aed8b3b613c5e1499336e4d7ec7e9a3ac3d9a12[repository=\"src\",length=12]"
+msgstr "gitref:4aed8b3b613c5e1499336e4d7ec7e9a3ac3d9a12[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:773
+#, no-wrap
+msgid "14.2-STABLE after adding `bus_attach_children`, `bus_detach_children`, and `bus_identify_children`."
+msgstr "14.2-STABLE после добавления `bus_attach_children`, `bus_detach_children` и `bus_identify_children`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:774
+#, no-wrap
+msgid "1402505"
+msgstr "1402505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:775
+#, no-wrap
+msgid "gitref:a3b2d8e360c37853035f9cede6064c4602312bfc[repository=\"src\",length=12]"
+msgstr "gitref:a3b2d8e360c37853035f9cede6064c4602312bfc[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:776
+#, no-wrap
+msgid "April 18, 2025"
+msgstr "18 апреля 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:778
+#, no-wrap
+msgid "14.2-STABLE after changing alloc changes to LinuxKPI and removing iwlwifi firmware."
+msgstr "14.2-STABLE после изменения аллокации в LinuxKPI и удаления микропрограммы iwlwifi."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:779
+#, no-wrap
+msgid "1403503"
+msgstr "1403503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:780
+#, no-wrap
+msgid "gitref:6cdcf08c9c5eda6dc3b8395cefd9d30a4f5e2f1a[repository=\"src\",length=12]"
+msgstr "gitref:6cdcf08c9c5eda6dc3b8395cefd9d30a4f5e2f1a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:781
+#, no-wrap
+msgid "July 13, 2025"
+msgstr "13 июля 2025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:783
+#, no-wrap
+msgid "14.3-STABLE after LinuxKPI dma-mapping.h and acpi changes."
+msgstr "14.3-STABLE после изменений в LinuxKPI dma-mapping.h and acpi."
+
+#. 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:795
+#, no-wrap
+msgid "FreeBSD 13 Versions"
+msgstr "FreeBSD 13 Версии"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:798
+#, no-wrap
+msgid "FreeBSD 13 `__FreeBSD_version` Values"
+msgstr "FreeBSD 13 Значения `__FreeBSD_version`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:807
+#, no-wrap
+msgid "1300000"
+msgstr "1300000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:808
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339436[339436]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/339436[339436]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:809
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2257
+#, no-wrap
+msgid "October 19, 2018"
+msgstr "19 октября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:811
+#, no-wrap
+msgid "13.0-CURRENT."
+msgstr "13.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:812
+#, no-wrap
+msgid "1300001"
+msgstr "1300001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:813
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339730[339730]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/339730[339730]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:814
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:819
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2262
+#, no-wrap
+msgid "October 25, 2018"
+msgstr "25 октября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:816
+#, no-wrap
+msgid "13.0-CURRENT after bumping OpenSSL shared library version numbers."
+msgstr "13.0-CURRENT после увеличения номеров версий разделяемых библиотек OpenSSL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:817
+#, no-wrap
+msgid "1300002"
+msgstr "1300002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:818
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339765[339765]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/339765[339765]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:821
+#, no-wrap
+msgid "13.0-CURRENT after restoration of [.filename]#sys/joystick.h#."
+msgstr "13.0-CURRENT после восстановления [.filename]#sys/joystick.h#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:822
+#, no-wrap
+msgid "1300003"
+msgstr "1300003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:823
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340055[340055]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/340055[340055]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:824
+#, no-wrap
+msgid "November 2, 2018"
+msgstr "2 ноября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:826
+#, no-wrap
+msgid "13.0-CURRENT after `vop_symlink` API change (`a_target` is now `const`.)"
+msgstr "13.0-CURRENT после изменения API `vop_symlink` (параметр `a_target` теперь объявлен как `const`.)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:827
+#, no-wrap
+msgid "1300004"
+msgstr "1300004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:828
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340841[340841]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/340841[340841]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:829
+#, no-wrap
+msgid "November 23, 2018"
+msgstr "23 ноября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:831
+#, no-wrap
+msgid "13.0-CURRENT after enabling crtbegin and crtend code."
+msgstr "13.0-CURRENT после включения кода crtbegin и crtend."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:832
+#, no-wrap
+msgid "1300005"
+msgstr "1300005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:833
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/341836[341836]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/341836[341836]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:834
+#, no-wrap
+msgid "December 11, 2018"
+msgstr "11 декабря 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:836
+#, no-wrap
+msgid "13.0-CURRENT after enabling UFS inode checksums."
+msgstr "13.0-CURRENT после включения контрольных сумм inode в UFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:837
+#, no-wrap
+msgid "1300006"
+msgstr "1300006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:838
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342398[342398]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/342398[342398]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:839
+#, no-wrap
+msgid "December 24, 2018"
+msgstr "24 декабря 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:841
+#, no-wrap
+msgid "13.0-CURRENT after fixing [.filename]#sys/random.h# include to be usable from C++."
+msgstr "13.0-CURRENT после исправления включения [.filename]#sys/random.h# для использования из C++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:842
+#, no-wrap
+msgid "1300007"
+msgstr "1300007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:843
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342629[342629]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/342629[342629]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:844
+#, no-wrap
+msgid "December 30, 2018"
+msgstr "30 декабря 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:846
+#, no-wrap
+msgid "13.0-CURRENT after changing the size of `struct linux_cdev` on 32-bit platforms."
+msgstr "13.0-CURRENT после изменения размера `struct linux_cdev` на 32-битных платформах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:847
+#, no-wrap
+msgid "1300008"
+msgstr "1300008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:848
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342772[342772]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/342772[342772]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:849
+#, no-wrap
+msgid "January 4, 2019"
+msgstr "4 января 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:851
+#, no-wrap
+msgid "13.0-CURRENT after adding `kern.smp.threads_per_core` and `kern.smp.cores` sysctls."
+msgstr "13.0-CURRENT после добавления системных переменных `kern.smp.threads_per_core` и `kern.smp.cores`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:852
+#, no-wrap
+msgid "1300009"
+msgstr "1300009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:853
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343213[343213]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/343213[343213]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:854
+#, no-wrap
+msgid "January 20, 2019"
+msgstr "20 января 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:856
+#, no-wrap
+msgid "13.0-CURRENT after `struct ieee80211vap` structure change to resolve ioctl/detach race for ieee80211com structure."
+msgstr "13.0-CURRENT после изменения структуры `struct ieee80211vap` для устранения состояния гонки между ioctl и detach в структуре ieee80211com."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:857
+#, no-wrap
+msgid "1300010"
+msgstr "1300010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:858
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343485[343485]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/343485[343485]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:859
+#, no-wrap
+msgid "January 27, 2019"
+msgstr "27 января 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:861
+#, no-wrap
+msgid "13.0-CURRENT after increasing `SPECNAMELEN` from 63 to `MAXNAMELEN` (255)."
+msgstr "13.0-CURRENT после увеличения `SPECNAMELEN` с 63 до `MAXNAMELEN` (255)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:862
+#, no-wrap
+msgid "1300011"
+msgstr "1300011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:863
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344041[344041]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344041[344041]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:864
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:869
+#, no-wrap
+msgid "February 12, 2019"
+msgstr "12 февраля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:866
+#, no-wrap
+msgid "13.0-CURRENT after man:renameat[2] has been corrected to work with kernels built with the `CAPABILITIES` option."
+msgstr "13.0-CURRENT после исправления man:renameat[2] для работы с ядрами, собранными с опцией `CAPABILITIES`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:867
+#, no-wrap
+msgid "1300012"
+msgstr "1300012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:868
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344062[344062]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344062[344062]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:871
+#, 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 "13.0-CURRENT после того, как `taskqgroup_attach()` и `taskqgroup_attach_cpu()` принимают аргументы `device_t` и указатель на структуру resource для обозначения прерываний устройства."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:872
+#, no-wrap
+msgid "1300013"
+msgstr "1300013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:873
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344300[344300]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344300[344300]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:874
+#, no-wrap
+msgid "February 19, 2019"
+msgstr "19 февраля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:876
+#, no-wrap
+msgid "13.0-CURRENT after the removal of drm and drm2."
+msgstr "13.0-CURRENT после удаления drm и drm2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:877
+#, no-wrap
+msgid "1300014"
+msgstr "1300014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:878
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344779[344779]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344779[344779]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:879
+#, no-wrap
+msgid "March 4, 2019"
+msgstr "4 марта 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:881
+#, no-wrap
+msgid "13.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 8.0.0 rc3."
+msgstr "13.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 8.0.0 rc3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:882
+#, no-wrap
+msgid "1300015"
+msgstr "1300015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:883
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345196[345196]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/345196[345196]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:884
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2287
+#, no-wrap
+msgid "March 15, 2019"
+msgstr "15 марта 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:886
+#, 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 "13.0-CURRENT после деанонимизации перечислений состояний потоков и процессов, что позволяет приложениям пользовательского пространства использовать их без переопределения имен значений."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:887
+#, no-wrap
+msgid "1300016"
+msgstr "1300016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:888
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345236[345236]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/345236[345236]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:889
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:899
+#, no-wrap
+msgid "March 16, 2019"
+msgstr "16 марта 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:891
+#, no-wrap
+msgid "13.0-CURRENT after enabling LLVM OpenMP 8.0.0 rc5 on amd64 by default."
+msgstr "13.0-CURRENT после включения LLVM OpenMP 8.0.0 rc5 на amd64 по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:892
+#, no-wrap
+msgid "1300017"
+msgstr "1300017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:893
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345305[345305]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/345305[345305]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:894
+#, no-wrap
+msgid "March 19, 2019"
+msgstr "19 марта 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:896
+#, no-wrap
+msgid "13.0-CURRENT after exposing the Rx mbuf buffer size to drivers in iflib."
+msgstr "13.0-CURRENT после раскрытия размера буфера Rx mbuf для драйверов в iflib."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:897
+#, no-wrap
+msgid "1300018"
+msgstr "1300018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:898
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346012[346012]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346012[346012]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:901
+#, no-wrap
+msgid "13.0-CURRENT after introduction of `funlinkat` syscall in link:https://svnweb.freebsd.org/changeset/base/345982[345982]."
+msgstr "13.0-CURRENT после введения системного вызова `funlinkat` в link:https://svnweb.freebsd.org/changeset/base/345982[345982]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:902
+#, no-wrap
+msgid "1300019"
+msgstr "1300019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:903
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346282[346282]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346282[346282]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:904
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3455
+#, no-wrap
+msgid "April 16, 2019"
+msgstr "16 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:906
+#, no-wrap
+msgid "13.0-CURRENT after addition of man:is_random_seeded[9] to man:random[4]."
+msgstr "13.0-CURRENT после добавления man:is_random_seeded[9] в man:random[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:907
+#, no-wrap
+msgid "1300020"
+msgstr "1300020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:908
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346358[346358]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346358[346358]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:909
+#, no-wrap
+msgid "April 18, 2019"
+msgstr "18 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:911
+#, 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 "13.0-CURRENT после восстановления доступности man:random[4] с учетом компромиссов до link:https://svnweb.freebsd.org/changeset/base/346250[346250] и добавления новых настроек и диагностических sysctl для программного обнаружения проблем с ранней инициализацией семени после загрузки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:912
+#, no-wrap
+msgid "1300021"
+msgstr "1300021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:913
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346645[346645]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346645[346645]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:914
+#, no-wrap
+msgid "April 24, 2019"
+msgstr "24 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:916
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI uses man:bus_dma[9] to be compatible with an IOMMU."
+msgstr "13.0-CURRENT после того, как LinuxKPI использует man:bus_dma[9] для совместимости с IOMMU."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:917
+#, no-wrap
+msgid "1300022"
+msgstr "1300022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:918
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347089[347089]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347089[347089]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:919
+#, no-wrap
+msgid "May 4, 2019"
+msgstr "4 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:921
+#, no-wrap
+msgid "13.0-CURRENT after fixing regression issue after link:https://svnweb.freebsd.org/changeset/base/346645[346645] in the LinuxKPI."
+msgstr "13.0-CURRENT после исправления регрессии, возникшей после link:https://svnweb.freebsd.org/changeset/base/346645[346645] в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:922
+#, no-wrap
+msgid "1300023"
+msgstr "1300023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:923
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347192[347192]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347192[347192]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:924
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3465
+#, no-wrap
+msgid "May 6, 2019"
+msgstr "6 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:926
+#, no-wrap
+msgid "13.0-CURRENT after list-ifying kernel dump device configuration."
+msgstr "13.0-CURRENT после преобразования конфигурации устройства дампа ядра в список."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:927
+#, no-wrap
+msgid "1300024"
+msgstr "1300024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:928
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347325[347325]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347325[347325]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:929
+#, no-wrap
+msgid "May 8, 2019"
+msgstr "8 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:931
+#, no-wrap
+msgid "13.0-CURRENT after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr "13.0-CURRENT после увеличения номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:932
+#, no-wrap
+msgid "1300025"
+msgstr "1300025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:933
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347532[347532]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347532[347532]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:934
+#, no-wrap
+msgid "May 13, 2019"
+msgstr "13 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:936
+#, no-wrap
+msgid "13.0-CURRENT after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type."
+msgstr "13.0-CURRENT после переименования `vm.max_wired` в `vm.max_user_wired` и изменения его типа."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:937
+#, no-wrap
+msgid "1300026"
+msgstr "1300026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:938
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347596[347596]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347596[347596]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:939
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:944
+#, no-wrap
+msgid "May 14, 2019"
+msgstr "14 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:941
+#, no-wrap
+msgid "13.0-CURRENT after adding context member to ww_mutex in LinuxKPI."
+msgstr "13.0-CURRENT после добавления члена контекста к ww_mutex в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:942
+#, no-wrap
+msgid "1300027"
+msgstr "1300027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:943
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347601[347601]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347601[347601]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:946
+#, no-wrap
+msgid "13.0-CURRENT after adding prepare to `pm_ops` in LinuxKPI."
+msgstr "13.0-CURRENT после добавления prepare в `pm_ops` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:947
+#, no-wrap
+msgid "1300028"
+msgstr "1300028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:948
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347925[347925]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347925[347925]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:949
+#, no-wrap
+msgid "May 17, 2019"
+msgstr "17 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:951
+#, 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 "13.0-CURRENT после удаления драйверов `bm`, `cs`, de, ed, `ep`, ex, `fe`, `pcn`, sf, `sn`, `tl`, `tx`, `txp`, `vx`, `wb` и xe."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:952
+#, no-wrap
+msgid "1300029"
+msgstr "1300029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:953
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347984[347984]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347984[347984]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:954
+#, no-wrap
+msgid "May 20, 2019"
+msgstr "20 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:956
+#, 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 "13.0-CURRENT после удаления некоторых загрязнений заголовков из-за [.filename]#sys/eventhandler.h#. Затронутые файлы теперь могут требовать явного включения одного или нескольких заголовков: [.filename]#sys/eventhandler.h#, [.filename]#sys/ktr.h#, [.filename]#sys/lock.h# или [.filename]#sys/mutex.h#, тогда как ранее они могли включаться неявно до версии 1300029."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:957
+#, no-wrap
+msgid "1300030"
+msgstr "1300030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:958
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348350[348350]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/348350[348350]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:959
+#, no-wrap
+msgid "May 29, 2019"
+msgstr "29 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:961
+#, 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 "13.0-CURRENT после добавления поддержки перемещения в libdwarf на powerpc64 для исправления обработки DWARF-информации в несвязанных объектах. Оригинальный коммит в ссылке:https://svnweb.freebsd.org/changeset/base/348347[348347]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:962
+#, no-wrap
+msgid "1300031"
+msgstr "1300031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:963
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348808[348808]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/348808[348808]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:964
+#, no-wrap
+msgid "June 8, 2019"
+msgstr "8 июня 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:966
+#, 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 "13.0-CURRENT после добавления исправлений разделов dpcpu и vnet в модули ядра i386 для предотвращения паники в определённых условиях. Модули ядра i386 необходимо перекомпилировать с включёнными изменениями в скрипт компоновщика, иначе они откажутся загружаться."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:967
+#, no-wrap
+msgid "1300032"
+msgstr "1300032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:968
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349151[349151]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349151[349151]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:969
+#, no-wrap
+msgid "June 17, 2019"
+msgstr "17 июня 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:971
+#, 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 "13.0-CURRENT после выделения реализации `crc32()` ядра в отдельный заголовочный файл ([.filename]#gsb_crc32.h#) и переименования исходного файла в [.filename]#gsb_crc32.c#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:972
+#, no-wrap
+msgid "1300033"
+msgstr "1300033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:973
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349277[349277]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349277[349277]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:974
+#, no-wrap
+msgid "June 21, 2019"
+msgstr "June 21, 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:976
+#, no-wrap
+msgid "13.0-CURRENT after additions to LinuxKPI's `rcu` list."
+msgstr "13.0-CURRENT после добавлений в список `rcu` LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:977
+#, no-wrap
+msgid "1300034"
+msgstr "1300034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:978
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349352[349352]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349352[349352]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:979
+#, no-wrap
+msgid "June 24, 2019"
+msgstr "24 июня 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:981
+#, no-wrap
+msgid "13.0-CURRENT after NAND and NANDFS removal."
+msgstr "13.0-CURRENT после удаления NAND и NANDFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:982
+#, no-wrap
+msgid "1300035"
+msgstr "1300035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:983
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349846[349846]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349846[349846]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:984
+#, no-wrap
+msgid "July 8, 2019"
+msgstr "8 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:986
+#, no-wrap
+msgid "13.0-CURRENT after merging the `vm_page` hold and wire mechanisms."
+msgstr "13.0-CURRENT после объединения механизмов удержания и фиксации `vm_page`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:987
+#, no-wrap
+msgid "1300036"
+msgstr "1300036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:988
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349972[349972]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349972[349972]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:989
+#, no-wrap
+msgid "July 13, 2019"
+msgstr "13 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:991
+#, no-wrap
+msgid "13.0-CURRENT after adding `arm_drain_writebuf()` and `arm_sync_icache()` for compatibility with NetBSD and OpenBSD."
+msgstr "13.0-CURRENT после добавления `arm_drain_writebuf()` и `arm_sync_icache()` для совместимости с NetBSD и OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:992
+#, no-wrap
+msgid "1300037"
+msgstr "1300037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:993
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350307[350307]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/350307[350307]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:994
+#, no-wrap
+msgid "July 24, 2019"
+msgstr "24 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:996
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:libcap_random[3]."
+msgstr "13.0-CURRENT после удаления man:libcap_random[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:997
+#, no-wrap
+msgid "1300038"
+msgstr "1300038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:998
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350437[350437]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/350437[350437]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:999
+#, no-wrap
+msgid "July 30, 2019"
+msgstr "30 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1001
+#, no-wrap
+msgid "13.0-CURRENT after removal of gzip'ed a.out support."
+msgstr "13.0-CURRENT после удаления поддержки gzip'ed a.out."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1002
+#, no-wrap
+msgid "1300039"
+msgstr "1300039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1003
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350665[350665]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/350665[350665]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1004
+#, no-wrap
+msgid "August 7, 2019"
+msgstr "7 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1006
+#, no-wrap
+msgid "13.0-CURRENT after merge of fusefs from projects/fuse2."
+msgstr "13.0-CURRENT после объединения fusefs из projects/fuse2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1007
+#, no-wrap
+msgid "1300040"
+msgstr "1300040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1008
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351140[351140]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351140[351140]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1009
+#, no-wrap
+msgid "August 16, 2019"
+msgstr "16 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1011
+#, no-wrap
+msgid "13.0-CURRENT after deletion of [.filename]#sys/dir.h# which has been deprecated since 1997."
+msgstr "13.0-CURRENT после удаления [.filename]#sys/dir.h#, который был устаревшим с 1997 года."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1012
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1197
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1367
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1627
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1940
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3696
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5237
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5770
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6323
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6511
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7475
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7480
+#, no-wrap
+msgid "(not changed)"
+msgstr "(не изменено)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1013
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351423[351423]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351423[351423]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1014
+#, no-wrap
+msgid "August 23, 2019"
+msgstr "23 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1016
+#, no-wrap
+msgid "13.0-CURRENT after changing most arguments to man:ping6[8]."
+msgstr "13.0-CURRENT после изменения большинства аргументов в man:ping6[8]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1017
+#, no-wrap
+msgid "1300041"
+msgstr "1300041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1018
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351480[351480]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351480[351480]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1019
+#, no-wrap
+msgid "August 25, 2019"
+msgstr "25 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1021
+#, no-wrap
+msgid "13.0-CURRENT after removal of zlib 1.0.4 after the completion of kernel zlib unification."
+msgstr "13.0-CURRENT после удаления zlib 1.0.4 по завершении унификации zlib в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1022
+#, no-wrap
+msgid "1300042"
+msgstr "1300042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1023
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351522[351522]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351522[351522]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1024
+#, no-wrap
+msgid "August 27, 2019"
+msgstr "27 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1026
+#, no-wrap
+msgid "13.0-CURRENT after addition of kernel-side support for in-kernel TLS."
+msgstr "13.0-CURRENT после добавления поддержки TLS внутри ядра на уровне ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1027
+#, no-wrap
+msgid "1300043"
+msgstr "1300043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1028
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351698[351698]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351698[351698]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1029
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1034
+#, no-wrap
+msgid "September 2, 2019"
+msgstr "2 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1031
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:gets[3]."
+msgstr "13.0-CURRENT после удаления man:gets[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1032
+#, no-wrap
+msgid "1300044"
+msgstr "1300044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1033
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351701[351701]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351701[351701]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1036
+#, no-wrap
+msgid "13.0-CURRENT after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr "13.0-CURRENT после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов, в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1037
+#, no-wrap
+msgid "1300045"
+msgstr "1300045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1038
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351729[351729]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351729[351729]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1039
+#, no-wrap
+msgid "September 3, 2019"
+msgstr "3 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1041
+#, no-wrap
+msgid "13.0-CURRENT after adding man:sysctlbyname[3] system call."
+msgstr "13.0-CURRENT после добавления системного вызова man:sysctlbyname[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1042
+#, no-wrap
+msgid "1300046"
+msgstr "1300046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1043
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351937[351937]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351937[351937]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1044
+#, no-wrap
+msgid "September 6, 2019"
+msgstr "6 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1046
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI sysfs improvements."
+msgstr "13.0-CURRENT после улучшений LinuxKPI sysfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1047
+#, no-wrap
+msgid "1300047"
+msgstr "1300047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1048
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352110[352110]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352110[352110]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1049
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2352
+#, no-wrap
+msgid "September 9, 2019"
+msgstr "9 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1051
+#, no-wrap
+msgid "13.0-CURRENT after changing the synchronization rules for `vm_page` reference counting.."
+msgstr "13.0-CURRENT после изменения правил синхронизации для подсчета ссылок `vm_page`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1052
+#, no-wrap
+msgid "1300048"
+msgstr "1300048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1053
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352700[352700]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352700[352700]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1054
+#, no-wrap
+msgid "September 25, 2019"
+msgstr "25 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1056
+#, no-wrap
+msgid "13.0-CURRENT after adding a shm_open2 syscall to support the upcoming man:memfd_create[2] syscall."
+msgstr "13.0-CURRENT после добавления системного вызова shm_open2 для поддержки готовящегося системного вызова man:memfd_create[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1057
+#, no-wrap
+msgid "1300049"
+msgstr "1300049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1058
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353274[353274]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353274[353274]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1059
+#, no-wrap
+msgid "October 7, 2019"
+msgstr "7 октября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1061
+#, no-wrap
+msgid "13.0-CURRENT after factoring out the VNET shutdown check into an own vnet structure field."
+msgstr "13.0-CURRENT после вынесения проверки отключения VNET в отдельное поле структуры vnet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1062
+#, no-wrap
+msgid "1300050"
+msgstr "1300050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1063
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353358[353358]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353358[353358]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1064
+#, no-wrap
+msgid "October 9, 2019"
+msgstr "9 октября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1066
+#, 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 "13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1067
+#, no-wrap
+msgid "1300051"
+msgstr "1300051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1068
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353685[353685]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353685[353685]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1069
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1074
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1079
+#, no-wrap
+msgid "October 17, 2019"
+msgstr "17 октября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1071
+#, no-wrap
+msgid "13.0-CURRENT after splitting out a more generic man:debugnet[4] from man:netdump[4]."
+msgstr "13.0-CURRENT после выделения более универсального man:debugnet[4] из man:netdump[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1072
+#, no-wrap
+msgid "1300052"
+msgstr "1300052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1073
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353698[353698]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353698[353698]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1076
+#, 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 "13.0-CURRENT после преобразования поля busy page в полноценную блокировку, которая больше не требует блокировки объекта для обеспечения согласованности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1077
+#, no-wrap
+msgid "1300053"
+msgstr "1300053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1078
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353700[353700]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353700[353700]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1081
+#, no-wrap
+msgid "13.0-CURRENT after implementing NetGDB."
+msgstr "13.0-CURRENT после реализации NetGDB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1082
+#, no-wrap
+msgid "1300054"
+msgstr "1300054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1083
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353868[353868]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/353868[353868]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1084
+#, no-wrap
+msgid "October 21, 2019"
+msgstr "21 октября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1086
+#, no-wrap
+msgid "13.0-CURRENT after removing obsoleted KPIs that were used to access interface address lists."
+msgstr "13.0-CURRENT после удаления устаревших KPIs, которые использовались для доступа к спискам адресов интерфейсов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1087
+#, no-wrap
+msgid "1300055"
+msgstr "1300055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1088
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354335[354335]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354335[354335]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1089
+#, no-wrap
+msgid "November 4, 2019"
+msgstr "4 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1091
+#, no-wrap
+msgid "13.0-CURRENT after enabling device class group attributes in the LinuxKPI."
+msgstr "13.0-CURRENT после включения атрибутов группы классов устройств в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1092
+#, no-wrap
+msgid "1300056"
+msgstr "1300056"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1093
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354460[354460]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354460[354460]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1094
+#, no-wrap
+msgid "November 7, 2019"
+msgstr "7 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1096
+#, no-wrap
+msgid "13.0-CURRENT after fixing a potential OOB read security issue in libc++."
+msgstr "13.0-CURRENT после исправления потенциальной проблемы безопасности с чтением за границами в libc++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1097
+#, no-wrap
+msgid "1300057"
+msgstr "1300057"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1098
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354694[354694]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354694[354694]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1099
+#, no-wrap
+msgid "November 13, 2019"
+msgstr "13 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1101
+#, no-wrap
+msgid "13.0-CURRENT after adding support for `AT_EXECPATH` to man:elf_aux_info[3]."
+msgstr "13.0-CURRENT после добавления поддержки `AT_EXECPATH` в man:elf_aux_info[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1102
+#, no-wrap
+msgid "1300058"
+msgstr "1300058"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1103
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354820[354820]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354820[354820]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1104
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1109
+#, no-wrap
+msgid "November 18, 2019"
+msgstr "18 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1106
+#, no-wrap
+msgid "13.0-CURRENT after widening the `vm_page` `aflags` field to 16 bits."
+msgstr "13.0-CURRENT после расширения поля `aflags` в `vm_page` до 16 бит."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1107
+#, no-wrap
+msgid "1300059"
+msgstr "1300059"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1108
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354835[354835]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354835[354835]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1111
+#, no-wrap
+msgid "13.0-CURRENT after converting the in-tree `sysent` targets to use the new [.filename]#makesyscalls.lua#."
+msgstr "13.0-CURRENT после преобразования встроенных целей `sysent` для использования нового [.filename]#makesyscalls.lua#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1112
+#, no-wrap
+msgid "1300060"
+msgstr "1300060"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1113
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354922[354922]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354922[354922]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1114
+#, no-wrap
+msgid "November 20, 2019"
+msgstr "20 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1116
+#, no-wrap
+msgid "13.0-CURRENT after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#."
+msgstr "13.0-CURRENT после добавления символической ссылки [.filename]#/etc/os-release# на [.filename]#/var/run/os-release#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1117
+#, no-wrap
+msgid "1300061"
+msgstr "1300061"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1118
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354977[354977]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354977[354977]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1119
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2387
+#, no-wrap
+msgid "November 21, 2019"
+msgstr "21 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1121
+#, no-wrap
+msgid "13.0-CURRENT after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits."
+msgstr "13.0-CURRENT после добавления функций в man:bitstring[3] для поиска непрерывных последовательностей установленных или сброшенных битов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1122
+#, no-wrap
+msgid "1300062"
+msgstr "1300062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1123
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355309[355309]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355309[355309]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1124
+#, no-wrap
+msgid "December 2, 2019"
+msgstr "2 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1126
+#, no-wrap
+msgid "13.0-CURRENT after adding TCP_STATS support."
+msgstr "13.0-CURRENT после добавления поддержки TCP_STATS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1127
+#, no-wrap
+msgid "1300063"
+msgstr "1300063"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1128
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355537[355537]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355537[355537]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1129
+#, no-wrap
+msgid "December 8, 2019"
+msgstr "8 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1131
+#, no-wrap
+msgid "13.0-CURRENT after removal of VI_DOOMED (use VN_IS_DOOMED instead)."
+msgstr "13.0-CURRENT после удаления VI_DOOMED (используйте VN_IS_DOOMED вместо этого)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1132
+#, no-wrap
+msgid "1300064"
+msgstr "1300064"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1133
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2391
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355658[355658]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355658[355658]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1134
+#, no-wrap
+msgid "December 9, 2019"
+msgstr "9 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1136
+#, no-wrap
+msgid "13.0-CURRENT after correcting the C++ version check for declaring man:timespec_get[3]."
+msgstr "13.0-CURRENT после исправления проверки версии C++ для объявления man:timespec_get[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1137
+#, no-wrap
+msgid "1300065"
+msgstr "1300065"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1138
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355643[355643]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355643[355643]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1139
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1144
+#, no-wrap
+msgid "December 12, 2019"
+msgstr "12 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1141
+#, no-wrap
+msgid "13.0-CURRENT after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr "13.0-CURRENT после добавления расширений `sigsetop`, которые обычно встречаются в musl libc и glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1142
+#, no-wrap
+msgid "1300066"
+msgstr "1300066"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1143
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355679[355679]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355679[355679]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1146
+#, 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 "13.0-CURRENT после изменения внутреннего интерфейса между модулями NFS в рамках внедрения NFS 4.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1147
+#, no-wrap
+msgid "1300067"
+msgstr "1300067"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1148
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355732[355732]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355732[355732]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1149
+#, no-wrap
+msgid "December 13, 2019"
+msgstr "13 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1151
+#, no-wrap
+msgid "13.0-CURRENT after removing the deprecated `callout_handle_init`, `timeout`, and `untimeout` functions."
+msgstr "13.0-CURRENT после удаления устаревших функций `callout_handle_init`, `timeout` и `untimeout`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1152
+#, no-wrap
+msgid "1300068"
+msgstr "1300068"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1153
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355828[355828]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355828[355828]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1154
+#, no-wrap
+msgid "December 16, 2019"
+msgstr "16 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1156
+#, no-wrap
+msgid "13.0-CURRENT after doubling the value of `ARG_MAX`, for 64 bit platforms."
+msgstr "13.0-CURRENT после удвоения значения `ARG_MAX` для 64-битных платформ."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1157
+#, no-wrap
+msgid "1300069"
+msgstr "1300069"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1158
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356051[356051]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356051[356051]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1159
+#, no-wrap
+msgid "December 24, 2019"
+msgstr "24 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1161
+#, no-wrap
+msgid "13.0-CURRENT after the addition of busdma templates."
+msgstr "13.0-CURRENT после добавления шаблонов busdma."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1162
+#, no-wrap
+msgid "1300070"
+msgstr "1300070"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1163
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356113[356113]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356113[356113]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1164
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1169
+#, no-wrap
+msgid "December 27, 2019"
+msgstr "27 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1166
+#, no-wrap
+msgid "13.0-CURRENT after eliminating the last MI difference in AT_* definitions (for powerpc)."
+msgstr "13.0-CURRENT после устранения последнего различия MI в определениях AT_* (для powerpc)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1167
+#, no-wrap
+msgid "1300071"
+msgstr "1300071"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1168
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356135[356135]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356135[356135]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1171
+#, no-wrap
+msgid "13.0-CURRENT after making USB statistics be per-device instead of per bus."
+msgstr "13.0-CURRENT после изменения статистики USB для каждого устройства вместо каждой шины."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1172
+#, no-wrap
+msgid "1300072"
+msgstr "1300072"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1173
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356185[356185]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356185[356185]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1174
+#, no-wrap
+msgid "December 29, 2019"
+msgstr "29 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1176
+#, no-wrap
+msgid "13.0-CURRENT after removal of `GEOM_SCHED` class and `gsched` tool."
+msgstr "13.0-CURRENT после удаления класса `GEOM_SCHED` и утилиты `gsched`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1177
+#, no-wrap
+msgid "1300073"
+msgstr "1300073"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1178
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356263[356263]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356263[356263]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1179
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2407
+#, no-wrap
+msgid "January 2, 2020"
+msgstr "2 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1181
+#, no-wrap
+msgid "13.0-CURRENT after removing arm/arm as a valid target."
+msgstr "13.0-CURRENT после удаления arm/arm как допустимой цели."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1182
+#, no-wrap
+msgid "1300074"
+msgstr "1300074"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1183
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356337[356337]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356337[356337]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1184
+#, no-wrap
+msgid "January 3, 2020"
+msgstr "3 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1186
+#, no-wrap
+msgid "13.0-CURRENT after removing flags argument from `VOP_UNLOCK`."
+msgstr "13.0-CURRENT после удаления аргумента flags из `VOP_UNLOCK`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1187
+#, no-wrap
+msgid "1300075"
+msgstr "1300075"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1188
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356409[356409]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356409[356409]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1189
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2412
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3510
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4283
+#, no-wrap
+msgid "January 6, 2020"
+msgstr "6 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1191
+#, no-wrap
+msgid "13.0-CURRENT after adding own counter for cancelled USB transfers."
+msgstr "13.0-CURRENT после добавления собственного счетчика отмененных USB-передач."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1192
+#, no-wrap
+msgid "1300076"
+msgstr "1300076"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1193
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356511[356511]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356511[356511]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1194
+#, no-wrap
+msgid "January 8, 2020"
+msgstr "8 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1196
+#, no-wrap
+msgid "13.0-CURRENT after pushing `vnop` implementation into the `fileop` layer in man:posix_fallocate[2]."
+msgstr "13.0-CURRENT после внедрения реализации `vnop` в слой `fileop` в man:posix_fallocate[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1198
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357396[357396]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/357396[357396]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1199
+#, no-wrap
+msgid "February 2, 2020"
+msgstr "2 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1201
+#, no-wrap
+msgid "13.0-CURRENT after removal of armv5 architecture code from the src tree."
+msgstr "13.0-CURRENT после удаления кода архитектуры armv5 из дерева src."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1202
+#, no-wrap
+msgid "1300077"
+msgstr "1300077"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1203
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357455[357455]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/357455[357455]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1204
+#, no-wrap
+msgid "February 3, 2020"
+msgstr "3 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1206
+#, no-wrap
+msgid "13.0-CURRENT after removal of sparc64 architecture code from the src tree."
+msgstr "13.0-CURRENT после удаления кода архитектуры sparc64 из дерева src."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1207
+#, no-wrap
+msgid "1300078"
+msgstr "1300078"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1208
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358020[358020]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358020[358020]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1209
+#, no-wrap
+msgid "February 17, 2020"
+msgstr "17 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1211
+#, no-wrap
+msgid "13.0-CURRENT after changing `struct vnet` and the VNET magic cookie."
+msgstr "13.0-CURRENT после изменения `struct vnet` и волшебного cookie VNET."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1212
+#, no-wrap
+msgid "1300079"
+msgstr "1300079"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1213
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358164[358164]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358164[358164]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1214
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1219
+#, no-wrap
+msgid "February 20, 2020"
+msgstr "20 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1216
+#, no-wrap
+msgid "13.0-CURRENT after upgrading ncurses to 6.2.x"
+msgstr "13.0-CURRENT после обновления ncurses до версии 6.2.x"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1217
+#, no-wrap
+msgid "1300080"
+msgstr "1300080"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1218
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358172[358172]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358172[358172]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1221
+#, no-wrap
+msgid "13.0-CURRENT after adding `realpathat` syscall to VFS."
+msgstr "13.0-CURRENT после добавления системного вызова `realpathat` в VFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1222
+#, no-wrap
+msgid "1300081"
+msgstr "1300081"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1223
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358218[358218]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358218[358218]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1224
+#, no-wrap
+msgid "February 21, 2020"
+msgstr "21 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1226
+#, no-wrap
+msgid "13.0-CURRENT after recent linuxkpi changes."
+msgstr "13.0-CURRENT после недавних изменений в linuxkpi."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1227
+#, no-wrap
+msgid "1300082"
+msgstr "1300082"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1228
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358497[358497]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358497[358497]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1229
+#, no-wrap
+msgid "March 1, 2020"
+msgstr "1 марта 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1231
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:bktr[4]."
+msgstr "13.0-CURRENT после удаления man:bktr[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1232
+#, no-wrap
+msgid "1300083"
+msgstr "1300083"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1233
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358834[358834]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358834[358834]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1234
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1239
+#, no-wrap
+msgid "March 10, 2020"
+msgstr "10 марта 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1236
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:amd[8], r358821."
+msgstr "13.0-CURRENT после удаления man:amd[8], r358821."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1237
+#, no-wrap
+msgid "1300084"
+msgstr "1300084"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1238
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358851[358851]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/358851[358851]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1241
+#, 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 "13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0-rc3 c290cb61fdc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1242
+#, no-wrap
+msgid "1300085"
+msgstr "1300085"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1243
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359261[359261]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359261[359261]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1244
+#, no-wrap
+msgid "March 23, 2020"
+msgstr "23 марта 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1246
+#, no-wrap
+msgid "13.0-CURRENT after the import of the kyua test framework."
+msgstr "13.0-CURRENT после импорта тестового фреймворка kyua."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1247
+#, no-wrap
+msgid "1300086"
+msgstr "1300086"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1248
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359347[359347]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359347[359347]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1249
+#, no-wrap
+msgid "March 26, 2020"
+msgstr "26 марта 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1251
+#, no-wrap
+msgid "13.0-CURRENT after switching powerpc and powerpcspe to the lld linker."
+msgstr "13.0-CURRENT после переключения powerpc и powerpcspe на компоновщик lld."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1252
+#, no-wrap
+msgid "1300087"
+msgstr "1300087"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1253
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359374[359374]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359374[359374]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1254
+#, no-wrap
+msgid "March 27, 2020"
+msgstr "27 марта 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1256
+#, no-wrap
+msgid "13.0-CURRENT after refactoring the driver and consumer interfaces for in-kernel cryptography."
+msgstr "13.0-CURRENT после рефакторинга интерфейсов драйвера и потребителя для внутриядерного шифрования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1257
+#, no-wrap
+msgid "1300088"
+msgstr "1300088"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1258
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359530[359530]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359530[359530]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1259
+#, no-wrap
+msgid "April 1, 2020"
+msgstr "1 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1261
+#, no-wrap
+msgid "13.0-CURRENT after removing support for procfs process debugging."
+msgstr "13.0-CURRENT после удаления поддержки отладки процессов через procfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1262
+#, no-wrap
+msgid "1300089"
+msgstr "1300089"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1263
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359727[359727]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359727[359727]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1264
+#, no-wrap
+msgid "April 8, 2020"
+msgstr "8 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1266
+#, no-wrap
+msgid "13.0-CURRENT after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI."
+msgstr "13.0-CURRENT после разделения интерфейса RCU на части с возможностью ожидания и без неё в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1267
+#, no-wrap
+msgid "1300090"
+msgstr "1300090"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1268
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359747[359747]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359747[359747]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1269
+#, no-wrap
+msgid "April 9, 2020"
+msgstr "9 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1271
+#, no-wrap
+msgid "13.0-CURRENT after removing the old NFS lock device driver that uses Giant."
+msgstr "13.0-CURRENT после удаления старого драйвера устройства блокировки NFS, использующего Giant."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1272
+#, no-wrap
+msgid "1300091"
+msgstr "1300091"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1273
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359839[359839]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359839[359839]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1274
+#, no-wrap
+msgid "April 12, 2020"
+msgstr "12 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1276
+#, no-wrap
+msgid "13.0-CURRENT after implementing a man:close_range[2] syscall."
+msgstr "13.0-CURRENT после реализации системного вызова man:close_range[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1277
+#, no-wrap
+msgid "1300092"
+msgstr "1300092"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1278
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359920[359920]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359920[359920]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1279
+#, no-wrap
+msgid "April 14, 2020"
+msgstr "14 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1281
+#, no-wrap
+msgid "13.0-CURRENT after reworking unmapped mbufs in KTLS to carry `ext_pgs` in the mbuf itself."
+msgstr "13.0-CURRENT после переработки немэппированных mbuf в KTLS для хранения `ext_pgs` в самом mbuf."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1282
+#, no-wrap
+msgid "1300093"
+msgstr "1300093"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1283
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360418[360418]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360418[360418]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1284
+#, no-wrap
+msgid "April 27, 2020"
+msgstr "27 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1286
+#, no-wrap
+msgid "13.0-CURRENT after adding support for kernel TLS receive offload."
+msgstr "13.0-CURRENT после добавления поддержки выгрузки приема TLS в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1287
+#, no-wrap
+msgid "1300094"
+msgstr "1300094"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1288
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360796[360796]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360796[360796]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1289
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3535
+#, no-wrap
+msgid "May 7, 2020"
+msgstr "7 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1291
+#, no-wrap
+msgid "13.0-CURRENT after linuxkpi changes."
+msgstr "13.0-CURRENT после изменений в linuxkpi."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1292
+#, no-wrap
+msgid "1300095"
+msgstr "1300095"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1293
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361275[361275]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/361275[361275]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1294
+#, no-wrap
+msgid "May 20, 2020"
+msgstr "20 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1296
+#, no-wrap
+msgid "13.0-CURRENT after adding HyperV socket support for FreeBSD guests."
+msgstr "13.0-CURRENT после добавления поддержки сокетов HyperV для гостевых систем FreeBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1297
+#, no-wrap
+msgid "1300096"
+msgstr "1300096"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1298
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361410[361410]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/361410[361410]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1299
+#, no-wrap
+msgid "May 23, 2020"
+msgstr "23 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1301
+#, 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 "13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1 rc1 f79cd71e145."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1302
+#, no-wrap
+msgid "1300097"
+msgstr "1300097"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1303
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361724[361724]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/361724[361724]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1304
+#, no-wrap
+msgid "June 2, 2020"
+msgstr "2 июня 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1306
+#, no-wrap
+msgid "13.0-CURRENT after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr "13.0-CURRENT после реализации макроса функции `__is_constexpr()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1307
+#, no-wrap
+msgid "1300098"
+msgstr "1300098"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1308
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362159[362159]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362159[362159]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1309
+#, no-wrap
+msgid "June 14, 2020"
+msgstr "14 июня 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1311
+#, no-wrap
+msgid "13.0-CURRENT after changing the `export_args ex_flags` field so that is 64bits."
+msgstr "13.0-CURRENT после изменения поля `export_args ex_flags`, чтобы оно было 64-битным."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1312
+#, no-wrap
+msgid "1300099"
+msgstr "1300099"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1313
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362453[362453]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362453[362453]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1314
+#, no-wrap
+msgid "June 20, 2020"
+msgstr "20 июня 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1316
+#, no-wrap
+msgid "13.0-CURRENT after making liblzma use libmd implementation of SHA256."
+msgstr "13.0-CURRENT после перевода liblzma на использование реализации SHA256 из libmd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1317
+#, no-wrap
+msgid "1300100"
+msgstr "1300100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1318
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362640[362640]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362640[362640]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1319
+#, no-wrap
+msgid "June 26, 2020"
+msgstr "June 26, 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1321
+#, no-wrap
+msgid "13.0-CURRENT after changing the internal API between the NFS kernel modules."
+msgstr "13.0-CURRENT после изменения внутреннего API между модулями ядра NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1322
+#, no-wrap
+msgid "1300101"
+msgstr "1300101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1323
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363077[363077]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363077[363077]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1324
+#, no-wrap
+msgid "July 10, 2020"
+msgstr "10 июля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1326
+#, no-wrap
+msgid "13.0-CURRENT after implementing the `array_size()` function in the LinuxKPI."
+msgstr "13.0-CURRENT после реализации функции `array_size()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1327
+#, no-wrap
+msgid "1300102"
+msgstr "1300102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1328
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363562[363562]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363562[363562]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1329
+#, no-wrap
+msgid "July 26, 2020"
+msgstr "26 июля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1331
+#, no-wrap
+msgid "13.0-CURRENT after implementing lockless lookup in the VFS layer."
+msgstr "13.0-CURRENT после реализации бесблокировочного поиска в слое VFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1332
+#, no-wrap
+msgid "1300103"
+msgstr "1300103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1333
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363757[363757]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363757[363757]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1334
+#, no-wrap
+msgid "August 1, 2020"
+msgstr "1 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1336
+#, no-wrap
+msgid "13.0-CURRENT after making rights mandatory for NDINIT_ALL."
+msgstr "13.0-CURRENT после того, как права для NDINIT_ALL стали обязательными."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1337
+#, no-wrap
+msgid "1300104"
+msgstr "1300104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1338
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363783[363783]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363783[363783]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1339
+#, no-wrap
+msgid "August 2, 2020"
+msgstr "2 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1341
+#, no-wrap
+msgid "13.0-CURRENT after vnode layout changes."
+msgstr "13.0-CURRENT после изменений в структуре vnode."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1342
+#, no-wrap
+msgid "1300105"
+msgstr "1300105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1343
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363894[363894]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363894[363894]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1344
+#, no-wrap
+msgid "August 5, 2020"
+msgstr "5 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1346
+#, no-wrap
+msgid "13.0-CURRENT after `vaccess()` change."
+msgstr "13.0-CURRENT после изменения `vaccess()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1347
+#, no-wrap
+msgid "1300106"
+msgstr "1300106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1348
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364092[364092]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364092[364092]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1349
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1354
+#, no-wrap
+msgid "August 11, 2020"
+msgstr "11 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1351
+#, no-wrap
+msgid "13.0-CURRENT after adding an argument to `newnfs_connect()` that indicates use TLS for the connection."
+msgstr "13.0-CURRENT после добавления аргумента в `newnfs_connect()`, указывающего на использование TLS для соединения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1352
+#, no-wrap
+msgid "1300107"
+msgstr "1300107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1353
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364109[364109]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364109[364109]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1356
+#, no-wrap
+msgid "13.0-CURRENT after change to clone the task struct fields related to RCU."
+msgstr "13.0-CURRENT после изменения для клонирования полей структуры задачи, связанных с RCU."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1357
+#, no-wrap
+msgid "1300108"
+msgstr "1300108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1358
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364233[364233]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364233[364233]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1359
+#, no-wrap
+msgid "August 14, 2020"
+msgstr "14 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1361
+#, 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 "13.0-CURRENT после добавления нескольких функций `wait_bit` в linuxkpi, которые необходимы для DRM из Linux v5.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1362
+#, no-wrap
+msgid "1300109"
+msgstr "1300109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1363
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364274[364274]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364274[364274]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1364
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1369
+#, no-wrap
+msgid "August 16, 2020"
+msgstr "16 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1366
+#, no-wrap
+msgid "13.0-CURRENT after `vget()` argument removal and `namei` flags renumbering."
+msgstr "13.0-CURRENT после удаления аргумента `vget()` и перенумерации флагов `namei`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1368
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364284[364284]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364284[364284]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1371
+#, 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 "13.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии release/11.x llvmorg-11.0.0-rc1-47-gff47911ddfc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1372
+#, no-wrap
+msgid "1300110"
+msgstr "1300110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1373
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364331[364331]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364331[364331]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1374
+#, no-wrap
+msgid "August 18, 2020"
+msgstr "18 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1376
+#, no-wrap
+msgid "13.0-CURRENT after deleting the unused `use_ext` argument to `nfscl_reqstart()`."
+msgstr "13.0-CURRENT после удаления неиспользуемого аргумента `use_ext` в `nfscl_reqstart()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1377
+#, no-wrap
+msgid "1300111"
+msgstr "1300111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1378
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364476[364476]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364476[364476]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1379
+#, no-wrap
+msgid "August 22, 2020"
+msgstr "22 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1381
+#, no-wrap
+msgid "13.0-CURRENT after adding TLS support to the kernel RPC."
+msgstr "13.0-CURRENT после добавления поддержки TLS в RPC ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1382
+#, no-wrap
+msgid "1300112"
+msgstr "1300112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1383
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364747[364747]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364747[364747]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1384
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1389
+#, no-wrap
+msgid "August 25, 2020"
+msgstr "August 25, 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1386
+#, no-wrap
+msgid "13.0-CURRENT after merging OpenZFS support."
+msgstr "13.0-CURRENT после объединения поддержки OpenZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1387
+#, no-wrap
+msgid "1300113"
+msgstr "1300113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1388
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364753[364753]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364753[364753]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1391
+#, no-wrap
+msgid "13.0-CURRENT after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr "13.0-CURRENT после добавления атомарных функций и функций `bswap` в libcompiler_rt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1392
+#, no-wrap
+msgid "1300114"
+msgstr "1300114"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1393
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365459[365459]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365459[365459]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1394
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2497
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3580
+#, no-wrap
+msgid "September 8, 2020"
+msgstr "8 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1396
+#, no-wrap
+msgid "13.0-CURRENT after changing arm64 AT_HWCAP definitions for man:elf_aux_info[3]."
+msgstr "13.0-CURRENT после изменения определений AT_HWCAP для arm64 в man:elf_aux_info[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1397
+#, no-wrap
+msgid "1300115"
+msgstr "1300115"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1398
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365705[365705]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365705[365705]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1399
+#, no-wrap
+msgid "September 14, 2020"
+msgstr "14 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1401
+#, no-wrap
+msgid "13.0-CURRENT after fixing man:crunchgen[1] application build with `WARNS=6`."
+msgstr "13.0-CURRENT после исправления сборки приложения man:crunchgen[1] с `WARNS=6`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1402
+#, no-wrap
+msgid "1300116"
+msgstr "1300116"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1403
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366062[366062]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366062[366062]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1404
+#, no-wrap
+msgid "September 22, 2020"
+msgstr "22 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1406
+#, no-wrap
+msgid "13.0-CURRENT after the introduction of the powerpc64le ARCH."
+msgstr "13.0-CURRENT после введения архитектуры powerpc64le."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1407
+#, no-wrap
+msgid "1300117"
+msgstr "1300117"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1408
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366070[366070]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366070[366070]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1409
+#, no-wrap
+msgid "September 23, 2020"
+msgstr "23 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1411
+#, no-wrap
+msgid "13.0-CURRENT after reimplementing `purgevfs` to iterate vnodes instead of the entire hash."
+msgstr "13.0-CURRENT после перереализации `purgevfs` для итерации по vnodes вместо всего хэша."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1412
+#, no-wrap
+msgid "1300118"
+msgstr "1300118"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1413
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366374[366374]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366374[366374]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1414
+#, no-wrap
+msgid "October 2, 2020"
+msgstr "2 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1416
+#, no-wrap
+msgid "13.0-CURRENT after adding backlight support and `dmi_*` functions to the linuxkpi."
+msgstr "13.0-CURRENT после добавления поддержки подсветки и функций `dmi_*` в linuxkpi."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1417
+#, no-wrap
+msgid "1300119"
+msgstr "1300119"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1418
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366432[366432]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366432[366432]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1419
+#, no-wrap
+msgid "October 6, 2020"
+msgstr "6 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1421
+#, no-wrap
+msgid "13.0-CURRENT after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr "13.0-CURRENT после заполнения поля контекста получения `ww_mutex` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1422
+#, no-wrap
+msgid "1300120"
+msgstr "1300120"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1423
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366666[366666]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366666[366666]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1424
+#, no-wrap
+msgid "October 13, 2020"
+msgstr "13 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1426
+#, no-wrap
+msgid "13.0-CURRENT after the fix to arm64 write-only mappings."
+msgstr "13.0-CURRENT после исправления отображений только для записи на arm64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1427
+#, no-wrap
+msgid "1300121"
+msgstr "1300121"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1428
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366719[366719]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366719[366719]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1429
+#, no-wrap
+msgid "October 15, 2020"
+msgstr "15 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1431
+#, no-wrap
+msgid "13.0-CURRENT after the addition of `VOP_EAGAIN`."
+msgstr "13.0-CURRENT после добавления `VOP_EAGAIN`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1432
+#, no-wrap
+msgid "1300122"
+msgstr "1300122"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1433
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366782[366782]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366782[366782]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1434
+#, no-wrap
+msgid "October 17, 2020"
+msgstr "17 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1436
+#, no-wrap
+msgid "13.0-CURRENT after the addition of `ptsname_r`."
+msgstr "13.0-CURRENT после добавления `ptsname_r`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1437
+#, no-wrap
+msgid "1300123"
+msgstr "1300123"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1438
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366871[366871]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366871[366871]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1439
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2527
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3590
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3595
+#, no-wrap
+msgid "October 20, 2020"
+msgstr "20 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1441
+#, no-wrap
+msgid "13.0-CURRENT after `VOP`, `VPTOCNP`, and `INACTIVE` changes."
+msgstr "13.0-CURRENT после изменений `VOP`, `VPTOCNP` и `INACTIVE`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1442
+#, no-wrap
+msgid "1300124"
+msgstr "1300124"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1443
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367162[367162]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367162[367162]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1444
+#, no-wrap
+msgid "October 30, 2020"
+msgstr "30 октября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1446
+#, no-wrap
+msgid "13.0-CURRENT after adding `cache_vop_mkdir` and renaming `cache_rename` to `cache_vop_rename`."
+msgstr "13.0-CURRENT после добавления `cache_vop_mkdir` и переименования `cache_rename` в `cache_vop_rename`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1447
+#, no-wrap
+msgid "1300125"
+msgstr "1300125"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1448
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367347[367347]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367347[367347]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1449
+#, no-wrap
+msgid "November 4, 2020"
+msgstr "4 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1451
+#, no-wrap
+msgid "13.0-CURRENT after using a `rms` lock for teardown handling in `zfs`."
+msgstr "13.0-CURRENT после использования блокировки `rms` для обработки демонтажа в `zfs`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1452
+#, no-wrap
+msgid "1300126"
+msgstr "1300126"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1453
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367384[367384]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367384[367384]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1454
+#, no-wrap
+msgid "November 5, 2020"
+msgstr "5 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1456
+#, no-wrap
+msgid "13.0-CURRENT after rationalizing per-cpu zones."
+msgstr "13.0-CURRENT после оптимизации зон на каждый процессор."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1457
+#, no-wrap
+msgid "1300127"
+msgstr "1300127"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1458
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367432[367432]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367432[367432]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1459
+#, no-wrap
+msgid "November 6, 2020"
+msgstr "6 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1461
+#, no-wrap
+msgid "13.0-CURRENT after moving `malloc_type_internal` into `malloc_type`."
+msgstr "13.0-CURRENT после перемещения `malloc_type_internal` в `malloc_type`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1462
+#, no-wrap
+msgid "1300128"
+msgstr "1300128"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1463
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367522[367522]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367522[367522]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1464
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2532
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3600
+#, no-wrap
+msgid "November 9, 2020"
+msgstr "9 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1466
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI additions to implement ACPI bits required by `drm-kmod` in the base system."
+msgstr "13.0-CURRENT после добавлений LinuxKPI для реализации частей ACPI, необходимых `drm-kmod` в базовой системе."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1467
+#, no-wrap
+msgid "1300129"
+msgstr "1300129"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1468
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367627[367627]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367627[367627]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1469
+#, no-wrap
+msgid "November 12, 2020"
+msgstr "12 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1471
+#, no-wrap
+msgid "13.0-CURRENT after retiring `malloc_last_fail`."
+msgstr "13.0-CURRENT после удаления `malloc_last_fail`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1472
+#, no-wrap
+msgid "1300130"
+msgstr "1300130"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1473
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367777[367777]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367777[367777]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1474
+#, no-wrap
+msgid "November 17, 2020"
+msgstr "17 ноября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1476
+#, no-wrap
+msgid "13.0-CURRENT after `p_pd` / `pwddesc` split from `p_fd` / filedesc."
+msgstr "13.0-CURRENT после разделения `p_pd` / `pwddesc` и `p_fd` / filedesc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1477
+#, no-wrap
+msgid "1300131"
+msgstr "1300131"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1478
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/368417[368417]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/368417[368417]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1479
+#, no-wrap
+msgid "December 7, 2020"
+msgstr "7 декабря 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1481
+#, no-wrap
+msgid "13.0-CURRENT after removal of crypto file descriptors."
+msgstr "13.0-CURRENT после удаления криптографических файловых дескрипторов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1482
+#, no-wrap
+msgid "1300132"
+msgstr "1300132"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1483
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/368659[368659]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/368659[368659]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1484
+#, no-wrap
+msgid "December 15, 2020"
+msgstr "15 декабря 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1486
+#, no-wrap
+msgid "13.0-CURRENT after improving handling of alternate settings in the USB stack."
+msgstr "13.0-CURRENT после улучшения обработки альтернативных настроек в стеке USB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1487
+#, no-wrap
+msgid "1300133"
+msgstr "1300133"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1488
+#, no-wrap
+msgid "gitref:2ed0c8d801f5f72dbde7a7d30135c1cc361a1e90[repository=\"src\",length=12]"
+msgstr "gitref:2ed0c8d801f5f72dbde7a7d30135c1cc361a1e90[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1489
+#, no-wrap
+msgid "December 23, 2020"
+msgstr "23 декабря 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1491
+#, no-wrap
+msgid "13.0-CURRENT after changing the internal API between the NFS and kernel RPC modules."
+msgstr "13.0-CURRENT после изменения внутреннего API между модулями NFS и RPC ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1492
+#, no-wrap
+msgid "1300134"
+msgstr "1300134"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1493
+#, no-wrap
+msgid "gitref:a84b0e94cdbf1a17a798ab7f77375aacb4d400ff[repository=\"src\",length=12]"
+msgstr "gitref:a84b0e94cdbf1a17a798ab7f77375aacb4d400ff[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1494
+#, no-wrap
+msgid "January 7, 2021"
+msgstr "7 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1496
+#, no-wrap
+msgid "13.0-CURRENT after factoring out the hardware-independent part of USB HID support to a new module."
+msgstr "13.0-CURRENT после выделения аппаратно-независимой части поддержки USB HID в новый модуль."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1497
+#, no-wrap
+msgid "1300135"
+msgstr "1300135"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1498
+#, no-wrap
+msgid "gitref:35a39dc5b34962081eeda8dbcf0b99a31585499b[repository=\"src\",length=12]"
+msgstr "gitref:35a39dc5b34962081eeda8dbcf0b99a31585499b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1499
+#, no-wrap
+msgid "January 12, 2021"
+msgstr "12 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1501
+#, no-wrap
+msgid "13.0-CURRENT after adding `kernel_fpu_begin`/`kernel_fpu_end` to the LinuxKPI."
+msgstr "13.0-CURRENT после добавления `kernel_fpu_begin`/`kernel_fpu_end` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1502
+#, no-wrap
+msgid "1300136"
+msgstr "1300136"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1503
+#, no-wrap
+msgid "gitref:72c551930be195b5ea982c1b16767f54388424f2[repository=\"src\",length=12]"
+msgstr "gitref:72c551930be195b5ea982c1b16767f54388424f2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1504
+#, no-wrap
+msgid "January 17, 2021"
+msgstr "17 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1506
+#, no-wrap
+msgid "13.0-CURRENT after reimplementing LinuxKPI's `irq_work` queue on top of fast `taskqueue`."
+msgstr "13.0-CURRENT после переработки очереди `irq_work` в LinuxKPI на основе быстрой `taskqueue`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1507
+#, no-wrap
+msgid "1300137"
+msgstr "1300137"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1508
+#, no-wrap
+msgid "gitref:010196adcfaf2bb610725394d40691874b4ff2af[repository=\"src\",length=12]"
+msgstr "gitref:010196adcfaf2bb610725394d40691874b4ff2af[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1509
+#, no-wrap
+msgid "January 30, 2021"
+msgstr "30 января 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1511
+#, no-wrap
+msgid "13.0-CURRENT after fixing a clang assertion when building the package:devel/onetbb[] port."
+msgstr "13.0-CURRENT после исправления утверждения clang при сборке порта package:devel/onetbb[]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1512
+#, no-wrap
+msgid "1300138"
+msgstr "1300138"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1513
+#, no-wrap
+msgid "gitref:dcee9964238b12a8e55917f292139f074b1a80b2[repository=\"src\",length=12]"
+msgstr "gitref:dcee9964238b12a8e55917f292139f074b1a80b2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1514
+#, no-wrap
+msgid "February 1, 2021"
+msgstr "1 февраля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1516
+#, no-wrap
+msgid "13.0-ALPHA3 after adding lockless symlink lookup to vfs cache."
+msgstr "13.0-ALPHA3 после добавления блокировки при поиске символьных ссылок в кэше VFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1517
+#, no-wrap
+msgid "1300139"
+msgstr "1300139"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1518
+#, no-wrap
+msgid "gitref:91a07ed50ffca4dfada3e7f1f050ea746c1bac66[repository=\"src\",length=12]"
+msgstr "gitref:91a07ed50ffca4dfada3e7f1f050ea746c1bac66[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1519
+#, no-wrap
+msgid "February 2, 2021"
+msgstr "2 февраля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1521
+#, no-wrap
+msgid "13.0-ALPHA3 after adding various LinuxKPI bits conflicting with drm-kmod."
+msgstr "13.0-ALPHA3 после добавления различных компонентов LinuxKPI, конфликтующих с drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1522
+#, no-wrap
+msgid "1300500"
+msgstr "1300500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1523
+#, no-wrap
+msgid "gitref:3c6a89748a01869c18955d5e3bfcdf35f6705d26[repository=\"src\",length=12]"
+msgstr "gitref:3c6a89748a01869c18955d5e3bfcdf35f6705d26[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1524
+#, no-wrap
+msgid "February 5, 2021"
+msgstr "5 февраля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1526
+#, no-wrap
+msgid "13.0-STABLE after releng/13.0 was branched."
+msgstr "13.0-STABLE после ветвления releng/13.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1527
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1532
+#, no-wrap
+msgid "1300501"
+msgstr "1300501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1528
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1533
+#, no-wrap
+msgid "gitref:c3f97dd75a1c294c4f60f42b604ee8bcda17be09[repository=\"src\",length=12]"
+msgstr "gitref:c3f97dd75a1c294c4f60f42b604ee8bcda17be09[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1529
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1534
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1539
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1544
+#, no-wrap
+msgid "April 23, 2021"
+msgstr "23 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1531
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1536
+#, no-wrap
+msgid "13.0-STABLE after fixing rtld's `dl_iterate_phdr()`."
+msgstr "13.0-STABLE после исправления `dl_iterate_phdr()` в rtld."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1537
+#, no-wrap
+msgid "1300502"
+msgstr "1300502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1538
+#, no-wrap
+msgid "gitref:da6a8ccfa293c3c831fdde51169754fcb9587657[repository=\"src\",length=12]"
+msgstr "gitref:da6a8ccfa293c3c831fdde51169754fcb9587657[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1541
+#, no-wrap
+msgid "13.0-STABLE after implementing `atomic_dec_and_lock_irqsave()` in the LinuxKPI."
+msgstr "13.0-STABLE после реализации `atomic_dec_and_lock_irqsave()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1542
+#, no-wrap
+msgid "1300503"
+msgstr "1300503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1543
+#, no-wrap
+msgid "gitref:d60c6dc8f69b1264c7af5e2479ea94f000fd2c6d[repository=\"src\",length=12]"
+msgstr "gitref:d60c6dc8f69b1264c7af5e2479ea94f000fd2c6d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1546
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the krpc and NFS."
+msgstr "13.0-STABLE после изменения внутреннего KAPI между krpc и NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1547
+#, no-wrap
+msgid "1300504"
+msgstr "1300504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1548
+#, no-wrap
+msgid "gitref:fb34817c686cc130449325499870e36979899801[repository=\"src\",length=12]"
+msgstr "gitref:fb34817c686cc130449325499870e36979899801[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1549
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2542
+#, no-wrap
+msgid "April 30, 2021"
+msgstr "30 апреля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1551
+#, no-wrap
+msgid "13.0-STABLE after updating the LinuxKPI to accommodate the drm-kmod 5.5 update."
+msgstr "13.0-STABLE после обновления LinuxKPI для поддержки обновления drm-kmod 5.5."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1552
+#, no-wrap
+msgid "1300505"
+msgstr "1300505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1553
+#, no-wrap
+msgid "gitref:8f81f190a640e211dd814bdde7811982b9491fb0[repository=\"src\",length=12]"
+msgstr "gitref:8f81f190a640e211dd814bdde7811982b9491fb0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1554
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2547
+#, no-wrap
+msgid "May 10, 2021"
+msgstr "10 мая 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1556
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the nscl.ko and nfscommon.ko modules."
+msgstr "13.0-STABLE после изменения внутреннего KAPI между модулями nscl.ko и nfscommon.ko."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1557
+#, no-wrap
+msgid "1300506"
+msgstr "1300506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1558
+#, no-wrap
+msgid "gitref:e31579b8558db508dfc3f8fc276611a7c3c93aa1[repository=\"src\",length=12]"
+msgstr "gitref:e31579b8558db508dfc3f8fc276611a7c3c93aa1[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1559
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1564
+#, no-wrap
+msgid "June 2, 2021"
+msgstr "2 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1561
+#, no-wrap
+msgid "13.0-STABLE after adding TCP LRO support for VLAN and VxLAN."
+msgstr "13.0-STABLE после добавления поддержки TCP LRO для VLAN и VxLAN."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1562
+#, no-wrap
+msgid "1300507"
+msgstr "1300507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1563
+#, no-wrap
+msgid "gitref:c64d1bd7145b5d30c97d1cd99e584da529d95100[repository=\"src\",length=12]"
+msgstr "gitref:c64d1bd7145b5d30c97d1cd99e584da529d95100[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1566
+#, no-wrap
+msgid "13.0-STABLE after adding a new member to the man:EPOCH[9] tracker structure."
+msgstr "13.0-STABLE после добавления нового элемента в структуру отслеживания man:EPOCH[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1567
+#, no-wrap
+msgid "1300508"
+msgstr "1300508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1568
+#, no-wrap
+msgid "gitref:658f5eed38c35f3f7d6695110b7dae8dc94d12c7[repository=\"src\",length=12]"
+msgstr "gitref:658f5eed38c35f3f7d6695110b7dae8dc94d12c7[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1571
+#, no-wrap
+msgid "13.0-STABLE after adding macros for `might_lock_nested()` and `lockdep_(re/un/)pin_lock()` to the LinuxKPI."
+msgstr "13.0-STABLE после добавления макросов для `might_lock_nested()` и `lockdep_(re/un/)pin_lock()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1572
+#, no-wrap
+msgid "1300509"
+msgstr "1300509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1573
+#, no-wrap
+msgid "gitref:210349325af9920d1535ad76fa3b92847684f6e0[repository=\"src\",length=12]"
+msgstr "gitref:210349325af9920d1535ad76fa3b92847684f6e0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1574
+#, no-wrap
+msgid "June 14, 2021"
+msgstr "14 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1576
+#, no-wrap
+msgid "13.0-STABLE after adding a macro for `list_for_each_entry_lockless()` to the LinuxKPI."
+msgstr "13.0-STABLE после добавления макроса `list_for_each_entry_lockless()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1577
+#, no-wrap
+msgid "1300510"
+msgstr "1300510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1578
+#, no-wrap
+msgid "gitref:eb3397588e1b48043e166587ea454f60efea88d0[repository=\"src\",length=12]"
+msgstr "gitref:eb3397588e1b48043e166587ea454f60efea88d0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1579
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2552
+#, no-wrap
+msgid "June 26, 2021"
+msgstr "26 июня 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1581
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the krpc and nfsd modules."
+msgstr "13.0-STABLE после изменения внутреннего KAPI между модулями krpc и nfsd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1582
+#, no-wrap
+msgid "1300511"
+msgstr "1300511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1583
+#, no-wrap
+msgid "gitref:2622570aeb3d162812d72f7ef192c322cd8b73ef[repository=\"src\",length=12]"
+msgstr "gitref:2622570aeb3d162812d72f7ef192c322cd8b73ef[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1584
+#, no-wrap
+msgid "July 7, 2021"
+msgstr "7 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1586
+#, 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 "13.0-STABLE после изменения `softdep_prelink()` для выполнения синхронизации только в случае, если другой поток изменил метаданные vnode с момента предыдущего `prelink`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1587
+#, no-wrap
+msgid "1300512"
+msgstr "1300512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1588
+#, no-wrap
+msgid "gitref:f72db34d2295080f57a283858125aa906c0d409e[repository=\"src\",length=12]"
+msgstr "gitref:f72db34d2295080f57a283858125aa906c0d409e[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1589
+#, no-wrap
+msgid "July 18, 2021"
+msgstr "18 июля 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1591
+#, no-wrap
+msgid "13.0-STABLE after various merges to LinuxKPI, OFED, net80211, and drivers."
+msgstr "13.0-STABLE после различных слияний LinuxKPI, OFED, net80211 и драйверов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1592
+#, no-wrap
+msgid "1300513"
+msgstr "1300513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1593
+#, no-wrap
+msgid "gitref:af732203b8f7f006927528db5497f5cbc4c4742a[repository=\"src\",length=12]"
+msgstr "gitref:af732203b8f7f006927528db5497f5cbc4c4742a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1596
+#, 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 "13.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-12.0.1-0-gfed41342a82f, также известной как релиз 12.0.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1597
+#, no-wrap
+msgid "1300514"
+msgstr "1300514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1598
+#, no-wrap
+msgid "gitref:53d162819c20e5cf267cb91f7a19940e96e8bec4[repository=\"src\",length=12]"
+msgstr "gitref:53d162819c20e5cf267cb91f7a19940e96e8bec4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1599
+#, no-wrap
+msgid "August 3, 2021"
+msgstr "3 августа 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1601
+#, no-wrap
+msgid "Incompatible changes to the KBI of internal interfaces between NFS requires rebuilding modules."
+msgstr "Несовместимые изменения в KBI внутренних интерфейсов между NFS требуют пересборки модулей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1602
+#, no-wrap
+msgid "1300515"
+msgstr "1300515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1603
+#, no-wrap
+msgid "gitref:0437d10e359ea1cbefff8d17cd18ca491dbbd5d7[repository=\"src\",length=12]"
+msgstr "gitref:0437d10e359ea1cbefff8d17cd18ca491dbbd5d7[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1604
+#, no-wrap
+msgid "September 22, 2021"
+msgstr "22 сентября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1606
+#, no-wrap
+msgid "13.0-STABLE returning to 13.0 KBI for linuxkpi."
+msgstr "13.0-STABLE возвращается к KBI 13.0 для linuxkpi."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1607
+#, no-wrap
+msgid "1300518"
+msgstr "1300518"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1608
+#, no-wrap
+msgid "gitref:a017868e281874261a560ba1e3069b4e14b7483e[repository=\"src\",length=12]"
+msgstr "gitref:a017868e281874261a560ba1e3069b4e14b7483e[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1609
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1614
+#, no-wrap
+msgid "October 21, 2021"
+msgstr "21 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1611
+#, no-wrap
+msgid "13.0-STABLE after adding `crypto_cursor_segment()`."
+msgstr "13.0-STABLE после добавления `crypto_cursor_segment()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1612
+#, no-wrap
+msgid "1300519"
+msgstr "1300519"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1613
+#, no-wrap
+msgid "gitref:fe2827f1678b8ff0baf62a1529b2cc121a25b090[repository=\"src\",length=12]"
+msgstr "gitref:fe2827f1678b8ff0baf62a1529b2cc121a25b090[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1616
+#, no-wrap
+msgid "13.0-STABLE after extending the AES-CCM and Chacha20-Poly1305 ciphers in OCF to support multiple nonce lengths."
+msgstr "13.0-STABLE после расширения шифров AES-CCM и Chacha20-Poly1305 в OCF для поддержки нескольких длин одноразовых номеров."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1617
+#, no-wrap
+msgid "1300521"
+msgstr "1300521"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1618
+#, no-wrap
+msgid "gitref:29745cf91cfc22afa94da0ce43e07a6dc377f631[repository=\"src\",length=12]"
+msgstr "gitref:29745cf91cfc22afa94da0ce43e07a6dc377f631[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1619
+#, no-wrap
+msgid "November 19, 2021"
+msgstr "19 ноября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1621
+#, no-wrap
+msgid "13.0-STABLE after various merges to LinuxKPI and net80211."
+msgstr "13.0-STABLE после различных слияний с LinuxKPI и net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1622
+#, no-wrap
+msgid "1300522"
+msgstr "1300522"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1623
+#, no-wrap
+msgid "gitref:0c8684ae20019b63c6672cc9fa40e1426708b007[repository=\"src\",length=12]"
+msgstr "gitref:0c8684ae20019b63c6672cc9fa40e1426708b007[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1624
+#, no-wrap
+msgid "November 24, 2021"
+msgstr "24 ноября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1626
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the NFS modules."
+msgstr "13.0-STABLE после изменения внутреннего KAPI между модулями NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1628
+#, no-wrap
+msgid "gitref:7224d4125ab57bc1c4c799a6c286be42f8d37a83[repository=\"src\",length=12]"
+msgstr "gitref:7224d4125ab57bc1c4c799a6c286be42f8d37a83[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1629
+#, no-wrap
+msgid "December 6, 2021"
+msgstr "6 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1631
+#, 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 "13.0-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-13.0.0-0-gd7b669b3a303, также известной как релиз 13.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1632
+#, no-wrap
+msgid "1300523"
+msgstr "1300523"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1633
+#, no-wrap
+msgid "gitref:690bcf605d84283c1f9d254885a3cac69c5e80a6[repository=\"src\",length=12]"
+msgstr "gitref:690bcf605d84283c1f9d254885a3cac69c5e80a6[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1634
+#, no-wrap
+msgid "December 18, 2021"
+msgstr "18 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1636
+#, no-wrap
+msgid "13.0-STABLE after adding two arguments to man:VOP_ALLOCATE[9]."
+msgstr "13.0-STABLE после добавления двух аргументов в man:VOP_ALLOCATE[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1637
+#, no-wrap
+msgid "1300524"
+msgstr "1300524"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1638
+#, no-wrap
+msgid "gitref:dc4114875ef10618002d3eeb46f09dc42da56b30[repository=\"src\",length=12]"
+msgstr "gitref:dc4114875ef10618002d3eeb46f09dc42da56b30[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1639
+#, no-wrap
+msgid "January 14, 2022"
+msgstr "14 января 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1641
+#, no-wrap
+msgid "13.0-STABLE after making the CPU_SET macros compatible with glibc."
+msgstr "13.0-STABLE после обеспечения совместимости макросов CPU_SET с glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1642
+#, no-wrap
+msgid "1300525"
+msgstr "1300525"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1643
+#, no-wrap
+msgid "gitref:dee0854a009cde7dcdb16ba39754237737022c8a[repository=\"src\",length=12]"
+msgstr "gitref:dee0854a009cde7dcdb16ba39754237737022c8a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1644
+#, no-wrap
+msgid "January 22, 2022"
+msgstr "22 января 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1646
+#, no-wrap
+msgid "13.0-STABLE after multiple LinuxKPI changes required by drm-kmod."
+msgstr "13.0-STABLE после множества изменений LinuxKPI, необходимых для drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1647
+#, no-wrap
+msgid "1300526"
+msgstr "1300526"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1648
+#, no-wrap
+msgid "gitref:c39ff2415cb965b729fd16f9eae91e712313877b[repository=\"src\",length=12]"
+msgstr "gitref:c39ff2415cb965b729fd16f9eae91e712313877b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1649
+#, no-wrap
+msgid "February 20, 2022"
+msgstr "20 февраля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1651
+#, no-wrap
+msgid "13.0-STABLE after multiple LinuxKPI changes overlapping but not conflicting with drm-kmod."
+msgstr "13.0-STABLE после нескольких изменений LinuxKPI, пересекающихся, но не конфликтующих с drm-kmod."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1652
+#, no-wrap
+msgid "1301000"
+msgstr "1301000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1653
+#, no-wrap
+msgid "gitref:ad329796bdb29c69bce610ad332d08257d7157ac[repository=\"src\",length=12]"
+msgstr "gitref:ad329796bdb29c69bce610ad332d08257d7157ac[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1654
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1659
+#, no-wrap
+msgid "March 10, 2022"
+msgstr "10 марта 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1656
+#, no-wrap
+msgid "releng/13.1 branched."
+msgstr "Ветка releng/13.1 создана."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1657
+#, no-wrap
+msgid "1301500"
+msgstr "1301500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1658
+#, no-wrap
+msgid "gitref:08523c8c63bbcdcd3f0d36787a544817cb5b8282[repository=\"src\",length=12]"
+msgstr "gitref:08523c8c63bbcdcd3f0d36787a544817cb5b8282[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1661
+#, no-wrap
+msgid "13.1-STABLE after releng/13.1 branched."
+msgstr "13.1-STABLE после ветвления releng/13.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1662
+#, no-wrap
+msgid "1301501"
+msgstr "1301501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1663
+#, no-wrap
+msgid "gitref:6663718bb49635deac3f5dc55fa6f0f7cba593ba[repository=\"src\",length=12]"
+msgstr "gitref:6663718bb49635deac3f5dc55fa6f0f7cba593ba[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1664
+#, no-wrap
+msgid "March 27, 2022"
+msgstr "27 марта 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1666
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI and net80211."
+msgstr "13.1-STABLE после различных слияний с LinuxKPI и net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1667
+#, no-wrap
+msgid "1301502"
+msgstr "1301502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1668
+#, no-wrap
+msgid "gitref:2278cf4e48e7679b0a60008a83c764fe852174b2[repository=\"src\",length=12]"
+msgstr "gitref:2278cf4e48e7679b0a60008a83c764fe852174b2[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1669
+#, no-wrap
+msgid "April 27, 2022"
+msgstr "27 апреля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1671
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1686
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1696
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI."
+msgstr "13.1-STABLE после различных слияний с LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1672
+#, no-wrap
+msgid "1301503"
+msgstr "1301503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1673
+#, no-wrap
+msgid "gitref:b2aa64d05bd8b04a1bdb63f2a5f9de39c600b463[repository=\"src\",length=12]"
+msgstr "gitref:b2aa64d05bd8b04a1bdb63f2a5f9de39c600b463[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1674
+#, no-wrap
+msgid "May 19, 2022"
+msgstr "19 мая 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1676
+#, no-wrap
+msgid "13.1-STABLE after adding alternate DRIVER_MODULE macros without a devclass argument."
+msgstr "13.1-STABLE после добавления альтернативных макросов DRIVER_MODULE без аргумента devclass."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1677
+#, no-wrap
+msgid "1301504"
+msgstr "1301504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1678
+#, no-wrap
+msgid "gitref:a13b6fc61908fd6afa460b88f94e4a67be74bb9a[repository=\"src\",length=12]"
+msgstr "gitref:a13b6fc61908fd6afa460b88f94e4a67be74bb9a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1679
+#, no-wrap
+msgid "June 4, 2022"
+msgstr "4 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1681
+#, 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 "13.1-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-14.0.3-0-g1f9140064dfb, также известной как релиз 14.0.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1682
+#, no-wrap
+msgid "1301505"
+msgstr "1301505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1683
+#, no-wrap
+msgid "gitref:6f93a76ffeabf7d4488edc73a0cca01436c2903b[repository=\"src\",length=12]"
+msgstr "gitref:6f93a76ffeabf7d4488edc73a0cca01436c2903b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1684
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1694
+#, no-wrap
+msgid "June 21, 2022"
+msgstr "21 июня 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1687
+#, no-wrap
+msgid "1301506"
+msgstr "1301506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1688
+#, no-wrap
+msgid "gitref:8e6cfc632cf6f9fc906df9d825649443939b55c6[repository=\"src\",length=12]"
+msgstr "gitref:8e6cfc632cf6f9fc906df9d825649443939b55c6[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1689
+#, no-wrap
+msgid "July 13, 2022"
+msgstr "13 июля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1691
+#, no-wrap
+msgid "13.1-STABLE after adding <crypto/chacha20_poly1305.h> and <crypto/curve25519.h>."
+msgstr "13.1-STABLE после добавления <crypto/chacha20_poly1305.h> и <crypto/curve25519.h>."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1692
+#, no-wrap
+msgid "1301507"
+msgstr "1301507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1693
+#, no-wrap
+msgid "gitref:9cbba5950123f3afedcc5f24c43956e7a26f22f4[repository=\"src\",length=12]"
+msgstr "gitref:9cbba5950123f3afedcc5f24c43956e7a26f22f4[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1697
+#, no-wrap
+msgid "1301508"
+msgstr "1301508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1698
+#, no-wrap
+msgid "gitref:83ac15a799e348c391951f5877feecd4089bab80[repository=\"src\",length=12]"
+msgstr "gitref:83ac15a799e348c391951f5877feecd4089bab80[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1701
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI, and for de-macrofying pause()."
+msgstr "13.1-STABLE после различных слияний в LinuxKPI и для удаления макросов из pause()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1702
+#, no-wrap
+msgid "1301509"
+msgstr "1301509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1703
+#, no-wrap
+msgid "gitref:baa97013121a915057ee54dfcb2cb87e541f7d7f[repository=\"src\",length=12]"
+msgstr "gitref:baa97013121a915057ee54dfcb2cb87e541f7d7f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1704
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2597
+#, no-wrap
+msgid "October 19, 2022"
+msgstr "19 октября 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1706
+#, no-wrap
+msgid "13.1-STABLE after introduction of v2 of TX Queue Select Functionality."
+msgstr "13.1-STABLE после введения версии 2 функциональности выбора очереди TX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1707
+#, no-wrap
+msgid "1301510"
+msgstr "1301510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1708
+#, no-wrap
+msgid "gitref:6820a0512fa6616ee1da46cb0075da80478776f0[repository=\"src\",length=12]"
+msgstr "gitref:6820a0512fa6616ee1da46cb0075da80478776f0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1709
+#, no-wrap
+msgid "December 8, 2022"
+msgstr "8 декабря 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1711
+#, no-wrap
+msgid "13.1-STABLE after LinuxKPI dmi_matches() fixes."
+msgstr "13.1-STABLE после исправлений LinuxKPI dmi_matches()."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1712
+#, no-wrap
+msgid "1301511"
+msgstr "1301511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1713
+#, no-wrap
+msgid "gitref:17333d92643d998d1c6a2dc5f6b1508b6507ad31[repository=\"src\",length=12]"
+msgstr "gitref:17333d92643d998d1c6a2dc5f6b1508b6507ad31[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1714
+#, no-wrap
+msgid "December 17, 2022"
+msgstr "17 декабря 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1716
+#, no-wrap
+msgid "13.1-STABLE after adding a new rc: `machine_id` to generate `/etc/machine-id`."
+msgstr "13.1-STABLE после добавления нового rc: `machine_id` для генерации `/etc/machine-id`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1717
+#, no-wrap
+msgid "1302500"
+msgstr "1302500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1718
+#, no-wrap
+msgid "gitref:c243de11cf7c4bb3d67bbc1655b149037e5b04f1[repository=\"src\",length=12]"
+msgstr "gitref:c243de11cf7c4bb3d67bbc1655b149037e5b04f1[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1719
+#, no-wrap
+msgid "February 9, 2023"
+msgstr "9 февраля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1721
+#, no-wrap
+msgid "13.2-STABLE after releng/13.2 was branched."
+msgstr "13.2-STABLE после ветвления releng/13.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1722
+#, no-wrap
+msgid "1302501"
+msgstr "1302501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1723
+#, no-wrap
+msgid "gitref:e3068d2655e2aea3e0b462a7298a68d344769ec6[repository=\"src\",length=12]"
+msgstr "gitref:e3068d2655e2aea3e0b462a7298a68d344769ec6[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1724
+#, no-wrap
+msgid "February 16, 2023"
+msgstr "16 февраля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1726
+#, no-wrap
+msgid "13.2-STABLE after adding `totalram_pages()` to the LinuxKPI."
+msgstr "13.2-STABLE после добавления `totalram_pages()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1727
+#, no-wrap
+msgid "1302502"
+msgstr "1302502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1728
+#, no-wrap
+msgid "gitref:5ca371f4f536f9ee9d6c9fb178bf1f7f6de33216[repository=\"src\",length=12]"
+msgstr "gitref:5ca371f4f536f9ee9d6c9fb178bf1f7f6de33216[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1729
+#, no-wrap
+msgid "February 17, 2023"
+msgstr "17 февраля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1731
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1736
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1751
+#, no-wrap
+msgid "13.2-STABLE after various merges to LinuxKPI."
+msgstr "13.2-STABLE после различных слияний с LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1732
+#, no-wrap
+msgid "1302503"
+msgstr "1302503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1733
+#, no-wrap
+msgid "gitref:aaca677fee21f202db4bb974fc5056f4dcbbb598[repository=\"src\",length=12]"
+msgstr "gitref:aaca677fee21f202db4bb974fc5056f4dcbbb598[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1734
+#, no-wrap
+msgid "February 21, 2023"
+msgstr "21 февраля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1737
+#, no-wrap
+msgid "1302504"
+msgstr "1302504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1738
+#, no-wrap
+msgid "gitref:d6852eed98ed32ad51120a22aa1ebdf0601917b3[repository=\"src\",length=12]"
+msgstr "gitref:d6852eed98ed32ad51120a22aa1ebdf0601917b3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1739
+#, no-wrap
+msgid "March 12, 2023"
+msgstr "12 марта 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1741
+#, no-wrap
+msgid "13.2-STABLE after merging machine-id into `hostid_save`."
+msgstr "13.2-STABLE после объединения machine-id в `hostid_save`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1742
+#, no-wrap
+msgid "1302505"
+msgstr "1302505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1743
+#, no-wrap
+msgid "gitref:85e32e957fcca01d50e29e543584909795c1acef[repository=\"src\",length=12]"
+msgstr "gitref:85e32e957fcca01d50e29e543584909795c1acef[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1744
+#, no-wrap
+msgid "April 9, 2023"
+msgstr "9 апреля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1746
+#, 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 "13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-15.0.7-0-g8dfdcc7b7bf6, также известного как релиз 15.0.7."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1747
+#, no-wrap
+msgid "1302506"
+msgstr "1302506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1748
+#, no-wrap
+msgid "gitref:e982b1cf1fe1dc0b84dc24f03d1c21e3fe6bdef3[repository=\"src\",length=12]"
+msgstr "gitref:e982b1cf1fe1dc0b84dc24f03d1c21e3fe6bdef3[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1749
+#, no-wrap
+msgid "June 26, 2023"
+msgstr "26 июня 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1752
+#, no-wrap
+msgid "1302507"
+msgstr "1302507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1753
+#, no-wrap
+msgid "gitref:b2acc21dfbd6fab28b1715c775b43d4914b75e0c[repository=\"src\",length=12]"
+msgstr "gitref:b2acc21dfbd6fab28b1715c775b43d4914b75e0c[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1754
+#, no-wrap
+msgid "July 23, 2023"
+msgstr "23 июля 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1756
+#, 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 "13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-16.0.6-0-g7cbf1a259152, также известного как релиз 16.0.6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1757
+#, no-wrap
+msgid "1302508"
+msgstr "1302508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1758
+#, no-wrap
+msgid "gitref:21ccba43f511cc4089899619b5a85e6d83a200dc[repository=\"src\",length=12]"
+msgstr "gitref:21ccba43f511cc4089899619b5a85e6d83a200dc[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1759
+#, no-wrap
+msgid "September 6, 2023"
+msgstr "6 сентября 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1761
+#, no-wrap
+msgid "13.2-STABLE after ptrace started clearing TDB_BORN during PT_DETACH."
+msgstr "13.2-STABLE после того, как ptrace начал очищать TDB_BORN во время PT_DETACH."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1762
+#, no-wrap
+msgid "1302509"
+msgstr "1302509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1763
+#, no-wrap
+msgid "gitref:faedeaf7377ba7253c281cf3315b17e0cb979075[repository=\"src\",length=12]"
+msgstr "gitref:faedeaf7377ba7253c281cf3315b17e0cb979075[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1764
+#, no-wrap
+msgid "December 2, 2023"
+msgstr "2 декабря 2023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1766
+#, 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 "13.2-STABLE после добавления новой функции VFS под названием `vfs_exjail_clone()`, которая будет использоваться модулем ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1767
+#, no-wrap
+msgid "1302510"
+msgstr "1302510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1768
+#, no-wrap
+msgid "gitref:45758665781dd63dfa38bcb646d4f36b0a6a104f[repository=\"src\",length=12]"
+msgstr "gitref:45758665781dd63dfa38bcb646d4f36b0a6a104f[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1771
+#, 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 "13.2-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1772
+#, no-wrap
+msgid "1303001"
+msgstr "1303001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1773
+#, no-wrap
+msgid "gitref:a75a3d7afcc88dc0bc9b2797cce983056acadf10[repository=\"src\",length=12]"
+msgstr "gitref:a75a3d7afcc88dc0bc9b2797cce983056acadf10[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1774
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1779
+#, no-wrap
+msgid "February 19, 2024"
+msgstr "19 февраля 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1776
+#, no-wrap
+msgid "13.3-BETA3 after changing net80211 `struct ieee80211vap` internals."
+msgstr "13.3-BETA3 после изменения внутренней структуры `struct ieee80211vap` в net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1777
+#, no-wrap
+msgid "1303501"
+msgstr "1303501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1778
+#, no-wrap
+msgid "gitref:a7e1fc7f620d3341549c1380f550aaafbdb45622[repository=\"src\",length=12]"
+msgstr "gitref:a7e1fc7f620d3341549c1380f550aaafbdb45622[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1781
+#, no-wrap
+msgid "13.3-STABLE after changing net80211 `struct ieee80211vap` internals."
+msgstr "13.3-STABLE после изменения внутренней структуры `struct ieee80211vap` в net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1782
+#, no-wrap
+msgid "1303502"
+msgstr "1303502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1783
+#, no-wrap
+msgid "gitref:07839ae99c06fcbebd5da6ead49c160c32046542[repository=\"src\",length=12]"
+msgstr "gitref:07839ae99c06fcbebd5da6ead49c160c32046542[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1786
+#, no-wrap
+msgid "13.3-STABLE after fixing a clang assertion or crash when building recent boost libraries."
+msgstr "13.3-STABLE после исправления утверждения или падения clang при сборке последних библиотек boost."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1787
+#, no-wrap
+msgid "1303503"
+msgstr "1303503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1788
+#, no-wrap
+msgid "gitref:055e875e6077ed1eb2256c3ab5de59a3f6fbce18[repository=\"src\",length=12]"
+msgstr "gitref:055e875e6077ed1eb2256c3ab5de59a3f6fbce18[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1791
+#, no-wrap
+msgid "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."
+msgstr "13.3-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-18.1.3-0-gc13b7485b879, также известного как релиз 18.1.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1792
+#, no-wrap
+msgid "1304500"
+msgstr "1304500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1793
+#, no-wrap
+msgid "gitref:77064cddb94875dc8d9693a93ac25019b7f62c59[repository=\"src\",length=12]"
+msgstr "gitref:77064cddb94875dc8d9693a93ac25019b7f62c59[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1794
+#, no-wrap
+msgid "August 1, 2024"
+msgstr "1 августа 2024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1796
+#, no-wrap
+msgid "13.4-STABLE after it was renamed from 13.4-PRERELEASE."
+msgstr "13.4-STABLE после переименования из 13.4-PRERELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1797
+#, no-wrap
+msgid "1304501"
+msgstr "1304501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1798
+#, no-wrap
+msgid "gitref:b802ab153dd24f468b9bfe33a96c61408e0d0565[repository=\"src\",length=12]"
+msgstr "gitref:b802ab153dd24f468b9bfe33a96c61408e0d0565[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1801
+#, no-wrap
+msgid "13.4-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-19.1.4-0-gaadaa00de76e, a.k.a. 19.1.4 release."
+msgstr "13.4-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-19.1.4-0-gaadaa00de76e, также известного как релиз 19.1.4."
+
+#. 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:1813
+#, no-wrap
+msgid "FreeBSD 12 Versions"
+msgstr "Версии FreeBSD 12"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1816
+#, no-wrap
+msgid "FreeBSD 12 `__FreeBSD_version` Values"
+msgstr "FreeBSD 12 Значения `__FreeBSD_version`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1825
+#, no-wrap
+msgid "1200000"
+msgstr "1200000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1826
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302409[302409]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302409[302409]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1827
+#, no-wrap
+msgid "July 7, 2016"
+msgstr "7 июля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1829
+#, no-wrap
+msgid "12.0-CURRENT."
+msgstr "12.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1830
+#, no-wrap
+msgid "1200001"
+msgstr "1200001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1831
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302628[302628]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302628[302628]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1832
+#, no-wrap
+msgid "July 12, 2016"
+msgstr "12 июля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1834
+#, no-wrap
+msgid "12.0-CURRENT after removing collation from `[a-z]`-type ranges."
+msgstr "12.0-CURRENT после удаления правил сортировки из диапазонов типа `[a-z]`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1835
+#, no-wrap
+msgid "1200002"
+msgstr "1200002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1836
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304395[304395]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304395[304395]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1837
+#, no-wrap
+msgid "August 18, 2016"
+msgstr "18 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1839
+#, no-wrap
+msgid "12.0-CURRENT after removing unused and obsolete `openbsd_poll` system call."
+msgstr "12.0-CURRENT после удаления неиспользуемого и устаревшего системного вызова `openbsd_poll`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1840
+#, no-wrap
+msgid "1200003"
+msgstr "1200003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1841
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304608[304608]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304608[304608]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1842
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3250
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4213
+#, no-wrap
+msgid "August 22, 2016"
+msgstr "22 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1844
+#, 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 "12.0-CURRENT после добавления поддержки `thread_local` из C++11 в ревизии link:https://svnweb.freebsd.org/changeset/base/303795[303795]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1845
+#, no-wrap
+msgid "1200004"
+msgstr "1200004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1846
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304752[304752]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304752[304752]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1847
+#, no-wrap
+msgid "August 24, 2016"
+msgstr "24 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1849
+#, 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 "12.0-CURRENT после исправления LC*MASK для man:newlocale[3] и man:querylocale[3] (rev link:https://svnweb.freebsd.org/changeset/base/304703[304703])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1850
+#, no-wrap
+msgid "1200005"
+msgstr "1200005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1851
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304789[304789]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304789[304789]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1852
+#, no-wrap
+msgid "August 25, 2016"
+msgstr "25 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1854
+#, 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 "12.0-CURRENT после изменения некоторых интерфейсов ioctl в ревизии link:https://svnweb.freebsd.org/changeset/base/304787[304787] между пользовательскими программами iSCSI и ядром."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1855
+#, no-wrap
+msgid "1200006"
+msgstr "1200006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1856
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305256[305256]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305256[305256]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1857
+#, no-wrap
+msgid "September 1, 2016"
+msgstr "1 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1859
+#, no-wrap
+msgid "12.0-CURRENT after man:crunchgen[1] META_MODE fix in link:https://svnweb.freebsd.org/changeset/base/305254[305254]."
+msgstr "12.0-CURRENT после исправления META_MODE в man:crunchgen[1] в link:https://svnweb.freebsd.org/changeset/base/305254[305254]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1860
+#, no-wrap
+msgid "1200007"
+msgstr "1200007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1861
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305421[305421]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305421[305421]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1862
+#, no-wrap
+msgid "September 5, 2016"
+msgstr "5 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1864
+#, no-wrap
+msgid "12.0-CURRENT after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr "12.0-CURRENT после разрешения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1865
+#, no-wrap
+msgid "1200008"
+msgstr "1200008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1866
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305833[305833]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305833[305833]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1867
+#, no-wrap
+msgid "September 15, 2016"
+msgstr "15 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1869
+#, 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 "12.0-CURRENT после удаления совместимого с 4.3BSD макроса `m_copy()` в link:https://svnweb.freebsd.org/changeset/base/305824[305824]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1870
+#, no-wrap
+msgid "1200009"
+msgstr "1200009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1871
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306077[306077]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/306077[306077]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1872
+#, no-wrap
+msgid "September 21, 2016"
+msgstr "21 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1874
+#, no-wrap
+msgid "12.0-CURRENT after removing `bio_taskqueue()` in link:https://svnweb.freebsd.org/changeset/base/305988[305988]."
+msgstr "12.0-CURRENT после удаления `bio_taskqueue()` в link:https://svnweb.freebsd.org/changeset/base/305988[305988]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1875
+#, no-wrap
+msgid "1200010"
+msgstr "1200010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1876
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306276[306276]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/306276[306276]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1877
+#, no-wrap
+msgid "September 23, 2016"
+msgstr "23 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1879
+#, no-wrap
+msgid "12.0-CURRENT after mounting man:msdosfs[5] with `longnames` support by default."
+msgstr "12.0-CURRENT после монтирования man:msdosfs[5] с поддержкой `longnames` по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1880
+#, no-wrap
+msgid "1200011"
+msgstr "1200011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1881
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306556[306556]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/306556[306556]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1882
+#, no-wrap
+msgid "October 1, 2016"
+msgstr "1 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1884
+#, 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 "12.0-CURRENT после добавления поля `fb_memattr` в `fb_info` в link:https://svnweb.freebsd.org/changeset/base/306555[306555]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1885
+#, no-wrap
+msgid "1200012"
+msgstr "1200012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1886
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306592[306592]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/306592[306592]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1887
+#, no-wrap
+msgid "October 2, 2016"
+msgstr "2 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1889
+#, 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 "12.0-CURRENT после изменений в man:net80211[4] (rev link:https://svnweb.freebsd.org/changeset/base/306590[306590], link:https://svnweb.freebsd.org/changeset/base/306591[306591])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1890
+#, no-wrap
+msgid "1200013"
+msgstr "1200013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1891
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307140[307140]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/307140[307140]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1892
+#, no-wrap
+msgid "October 12, 2016"
+msgstr "12 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1894
+#, no-wrap
+msgid "12.0-CURRENT after installing header files required development with `libzfs_core`."
+msgstr "12.0-CURRENT после установки заголовочных файлов, необходимых для разработки с `libzfs_core`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1895
+#, no-wrap
+msgid "1200014"
+msgstr "1200014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1896
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307529[307529]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/307529[307529]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1897
+#, no-wrap
+msgid "October 17, 2016"
+msgstr "17 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1899
+#, 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 "12.0-CURRENT после объединения общего кода в man:rtwn[4] и man:urtwn[4], а также добавления поддержки устройств 802.11ac."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1900
+#, no-wrap
+msgid "1200015"
+msgstr "1200015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1901
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308874[308874]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/308874[308874]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1902
+#, no-wrap
+msgid "November 20, 2016"
+msgstr "20 ноября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1904
+#, no-wrap
+msgid "12.0-CURRENT after some ABI change for unbreaking powerpc."
+msgstr "12.0-CURRENT после некоторого изменения ABI для исправления powerpc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1905
+#, no-wrap
+msgid "1200016"
+msgstr "1200016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1906
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309017[309017]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/309017[309017]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1907
+#, no-wrap
+msgid "November 22, 2016"
+msgstr "22 ноября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1909
+#, no-wrap
+msgid "12.0-CURRENT after removing `PG_CACHED`-related fields from `vmmeter`."
+msgstr "12.0-CURRENT после удаления полей, связанных с `PG_CACHED`, из `vmmeter`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1910
+#, no-wrap
+msgid "1200017"
+msgstr "1200017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1911
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309124[309124]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/309124[309124]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1912
+#, no-wrap
+msgid "November 25, 2016"
+msgstr "25 ноября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1914
+#, 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 "12.0-CURRENT после обновления копий clang, llvm, lldb, compiler-rt и libc++ до версии 3.9.0 и добавления lld 3.9.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1915
+#, no-wrap
+msgid "1200018"
+msgstr "1200018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1916
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309676[309676]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/309676[309676]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1917
+#, no-wrap
+msgid "December 7, 2016"
+msgstr "7 декабря 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1919
+#, 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 "12.0-CURRENT после добавления члена `ki_moretdname` в структуры `struct kinfo_proc` и `struct kinfo_proc32` для экспорта полного имени потока в пользовательские утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1920
+#, no-wrap
+msgid "1200019"
+msgstr "1200019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1921
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310149[310149]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/310149[310149]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1922
+#, no-wrap
+msgid "December 16, 2016"
+msgstr "16 декабря 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1924
+#, no-wrap
+msgid "12.0-CURRENT after starting to lay down the foundation for 11ac support."
+msgstr "12.0-CURRENT после начала закладки основы для поддержки 11ac."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1925
+#, no-wrap
+msgid "1200020"
+msgstr "1200020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1926
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/312087[312087]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/312087[312087]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1927
+#, no-wrap
+msgid "January 13, 2017"
+msgstr "13 января 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1929
+#, no-wrap
+msgid "12.0-CURRENT after removing `fgetsock` and `fputsock`."
+msgstr "12.0-CURRENT после удаления `fgetsock` и `fputsock`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1930
+#, no-wrap
+msgid "1200021"
+msgstr "1200021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1931
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/313858[313858]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/313858[313858]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1932
+#, no-wrap
+msgid "February 16, 2017"
+msgstr "16 февраля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1934
+#, no-wrap
+msgid "12.0-CURRENT after removing MCA and EISA support."
+msgstr "12.0-CURRENT после удаления поддержки MCA и EISA."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1935
+#, no-wrap
+msgid "1200022"
+msgstr "1200022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1936
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314040[314040]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/314040[314040]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1937
+#, no-wrap
+msgid "February 21, 2017"
+msgstr "21 февраля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1939
+#, no-wrap
+msgid "12.0-CURRENT after making the LinuxKPI task struct persistent across system calls."
+msgstr "12.0-CURRENT после обеспечения сохранности структуры задач LinuxKPI между системными вызовами."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1941
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314373[314373]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/314373[314373]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1942
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1947
+#, no-wrap
+msgid "March 2, 2017"
+msgstr "2 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1944
+#, no-wrap
+msgid "12.0-CURRENT after removing System V Release 4 binary compatibility support."
+msgstr "12.0-CURRENT после удаления поддержки бинарной совместимости с System V Release 4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1945
+#, no-wrap
+msgid "1200023"
+msgstr "1200023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1946
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314564[314564]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/314564[314564]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1949
+#, no-wrap
+msgid "12.0-CURRENT after upgrading copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0."
+msgstr "12.0-CURRENT после обновления копий clang, llvm, lld, lldb, compiler-rt и libc++ до версии 4.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1950
+#, no-wrap
+msgid "1200024"
+msgstr "1200024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1951
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314865[314865]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/314865[314865]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1952
+#, no-wrap
+msgid "March 7, 2017"
+msgstr "7 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1954
+#, no-wrap
+msgid "12.0-CURRENT after removal of [.filename]#pcap-int.h#"
+msgstr "12.0-CURRENT после удаления [.filename]#pcap-int.h#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1955
+#, no-wrap
+msgid "1200025"
+msgstr "1200025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1956
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315430[315430]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/315430[315430]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1957
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1962
+#, no-wrap
+msgid "March 16, 2017"
+msgstr "16 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1959
+#, no-wrap
+msgid "12.0-CURRENT after addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr "12.0-CURRENT после добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1960
+#, no-wrap
+msgid "1200026"
+msgstr "1200026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1961
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315662[315662]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/315662[315662]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1964
+#, no-wrap
+msgid "12.0-CURRENT after hiding `struct inpcb` and `struct tcpcb` from userland."
+msgstr "12.0-CURRENT после скрытия `struct inpcb` и `struct tcpcb` от пользовательского пространства."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1965
+#, no-wrap
+msgid "1200027"
+msgstr "1200027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1966
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315673[315673]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/315673[315673]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1967
+#, no-wrap
+msgid "March 21, 2017"
+msgstr "21 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1969
+#, no-wrap
+msgid "12.0-CURRENT after making CAM SIM lock optional."
+msgstr "12.0-CURRENT после того, как блокировка CAM SIM стала опциональной."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1970
+#, no-wrap
+msgid "1200028"
+msgstr "1200028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1971
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316683[316683]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/316683[316683]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1972
+#, no-wrap
+msgid "April 10, 2017"
+msgstr "10 апреля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1974
+#, 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 "12.0-CURRENT после переименования `smp_no_rendevous_barrier()` в `smp_no_rendezvous_barrier()` в link:https://svnweb.freebsd.org/changeset/base/316648[316648]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1975
+#, no-wrap
+msgid "1200029"
+msgstr "1200029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1976
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/317176[317176]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/317176[317176]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1977
+#, no-wrap
+msgid "April 19, 2017"
+msgstr "April 19, 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1979
+#, 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 "12.0-CURRENT после удаления `struct vmmeter` из `struct pcpu` в link:https://svnweb.freebsd.org/changeset/base/317061[317061]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1980
+#, no-wrap
+msgid "1200030"
+msgstr "1200030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1981
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/317383[317383]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/317383[317383]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1982
+#, no-wrap
+msgid "April 24, 2017"
+msgstr "24 апреля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1984
+#, 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 "12.0-CURRENT после удаления поддержки NATM, включая man:en[4], man:fatm[4], man:hatm[4] и man:patm[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1985
+#, no-wrap
+msgid "1200031"
+msgstr "1200031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1986
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318736[318736]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/318736[318736]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1987
+#, no-wrap
+msgid "May 23, 2017"
+msgstr "23 мая 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1989
+#, 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 "12.0-CURRENT после расширения типов `ino_t`, `dev_t`, `nlink_t` до 64 бит и изменения структуры `struct dirent` (также известное как ino64)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1990
+#, no-wrap
+msgid "1200032"
+msgstr "1200032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1991
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/319664[319664]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/319664[319664]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1992
+#, no-wrap
+msgid "June 8, 2017"
+msgstr "8 июня 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1994
+#, no-wrap
+msgid "12.0-CURRENT after removal of `groff`."
+msgstr "12.0-CURRENT после удаления `groff`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1995
+#, no-wrap
+msgid "1200033"
+msgstr "1200033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1996
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320043[320043]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320043[320043]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1997
+#, no-wrap
+msgid "June 17, 2017"
+msgstr "17 июня 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1999
+#, 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 "12.0-CURRENT после того, как тип члена `data` структуры `struct event` был увеличен до 64 бит, и добавлены члены расширенной структуры."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2000
+#, no-wrap
+msgid "1200034"
+msgstr "1200034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2001
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320085[320085]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320085[320085]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2002
+#, no-wrap
+msgid "June 19, 2017"
+msgstr "19 июня 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2004
+#, no-wrap
+msgid "12.0-CURRENT after the NFS client and server were changed so that they actually use the 64bit `ino_t`."
+msgstr "12.0-CURRENT после изменения клиента и сервера NFS для фактического использования 64-битного `ino_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2005
+#, no-wrap
+msgid "1200035"
+msgstr "1200035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2006
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320317[320317]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320317[320317]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2007
+#, no-wrap
+msgid "June 24, 2017"
+msgstr "June 24, 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2009
+#, no-wrap
+msgid "12.0-CURRENT after the `MAP_GUARD` man:mmap[2] flag was added."
+msgstr "12.0-CURRENT после добавления флага `MAP_GUARD` в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2010
+#, no-wrap
+msgid "1200036"
+msgstr "1200036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2011
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320347[320347]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320347[320347]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2012
+#, no-wrap
+msgid "June 26, 2017"
+msgstr "26 июня 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2014
+#, no-wrap
+msgid "12.0-CURRENT after changing `time_t` to 64 bits on powerpc (32-bit version)."
+msgstr "12.0-CURRENT после изменения `time_t` на 64 бита на powerpc (32-битная версия)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2015
+#, no-wrap
+msgid "1200037"
+msgstr "1200037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2016
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320545[320545]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320545[320545]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2017
+#, no-wrap
+msgid "July 1, 2017"
+msgstr "1 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2019
+#, 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 "12.0-CURRENT после очистки и встраивания функций `bus_dmamap*` (link:https://svnweb.freebsd.org/changeset/base/320528[320528])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2020
+#, no-wrap
+msgid "1200038"
+msgstr "1200038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2021
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320879[320879]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320879[320879]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2022
+#, no-wrap
+msgid "July 10, 2017"
+msgstr "10 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2024
+#, no-wrap
+msgid "12.0-CURRENT after MMC CAM committed. (link:https://svnweb.freebsd.org/changeset/base/320844[320844])."
+msgstr "12.0-CURRENT после коммита MMC CAM (link:https://svnweb.freebsd.org/changeset/base/320844[320844])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2025
+#, no-wrap
+msgid "1200039"
+msgstr "1200039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2026
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321369[321369]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/321369[321369]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2027
+#, no-wrap
+msgid "July 22, 2017"
+msgstr "22 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2029
+#, 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 "12.0-CURRENT после обновления копий clang, llvm, lld, lldb, compiler-rt и libc++ до версии 5.0.0 (trunk r308421)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2030
+#, no-wrap
+msgid "1200040"
+msgstr "1200040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2031
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3339
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321688[321688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/321688[321688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2032
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3340
+#, no-wrap
+msgid "July 29, 2017"
+msgstr "29 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2034
+#, no-wrap
+msgid "12.0-CURRENT after adding NFS client forced dismount support `umount -N`."
+msgstr "12.0-CURRENT после добавления поддержки принудительного демонтирования клиента NFS `umount -N`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2035
+#, no-wrap
+msgid "1200041"
+msgstr "1200041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2036
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322762[322762]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/322762[322762]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2037
+#, no-wrap
+msgid "August 21, 2017"
+msgstr "21 августа 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2039
+#, no-wrap
+msgid "12.0-CURRENT after WRFSBASE instruction become operational on amd64."
+msgstr "12.0-CURRENT после того, как инструкция WRFSBASE стала работоспособной на amd64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2040
+#, no-wrap
+msgid "1200042"
+msgstr "1200042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2041
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322900[322900]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/322900[322900]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2042
+#, no-wrap
+msgid "August 25, 2017"
+msgstr "25 августа 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2044
+#, no-wrap
+msgid "12.0-CURRENT after PLPMTUD counters were changed to use man:counter[9]."
+msgstr "12.0-CURRENT после изменения счетчиков PLPMTUD для использования man:counter[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2045
+#, no-wrap
+msgid "1200043"
+msgstr "1200043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2046
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322989[322989]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/322989[322989]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2047
+#, no-wrap
+msgid "August 28, 2017"
+msgstr "28 августа 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2049
+#, no-wrap
+msgid "12.0-CURRENT after dropping x86 CACHE_LINE_SIZE down to 64 bytes."
+msgstr "12.0-CURRENT после уменьшения CACHE_LINE_SIZE для x86 до 64 байт."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2050
+#, no-wrap
+msgid "1200044"
+msgstr "1200044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2051
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323349[323349]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323349[323349]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2052
+#, no-wrap
+msgid "September 8, 2017"
+msgstr "8 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2054
+#, no-wrap
+msgid "12.0-CURRENT after implementing `poll_wait()` in the LinuxKPI."
+msgstr "12.0-CURRENT после реализации `poll_wait()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2055
+#, no-wrap
+msgid "1200045"
+msgstr "1200045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2056
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323706[323706]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323706[323706]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2057
+#, no-wrap
+msgid "September 18, 2017"
+msgstr "18 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2059
+#, no-wrap
+msgid "12.0-CURRENT after adding shared memory support to LinuxKPI. (link:https://svnweb.freebsd.org/changeset/base/323703[323703])."
+msgstr "12.0-CURRENT после добавления поддержки разделяемой памяти в LinuxKPI. (link:https://svnweb.freebsd.org/changeset/base/323703[323703])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2060
+#, no-wrap
+msgid "1200046"
+msgstr "1200046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2061
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323910[323910]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323910[323910]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2062
+#, no-wrap
+msgid "September 22, 2017"
+msgstr "22 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2064
+#, no-wrap
+msgid "12.0-CURRENT after adding support for 32-bit compatibility IOCTLs to LinuxKPI."
+msgstr "12.0-CURRENT после добавления поддержки 32-битных совместимых IOCTL в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2065
+#, no-wrap
+msgid "1200047"
+msgstr "1200047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2066
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324053[324053]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324053[324053]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2067
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3350
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3355
+#, no-wrap
+msgid "September 26, 2017"
+msgstr "26 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2069
+#, no-wrap
+msgid "12.0-CURRENT after removing M_HASHTYPE_RSS_UDP_IPV4_EX. (link:https://svnweb.freebsd.org/changeset/base/324052[324052])."
+msgstr "12.0-CURRENT после удаления M_HASHTYPE_RSS_UDP_IPV4_EX. (link:https://svnweb.freebsd.org/changeset/base/324052[324052])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2070
+#, no-wrap
+msgid "1200048"
+msgstr "1200048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2071
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324227[324227]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324227[324227]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2072
+#, no-wrap
+msgid "October 2, 2017"
+msgstr "2 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2074
+#, no-wrap
+msgid "12.0-CURRENT after hiding `struct socket` and `struct unpcb` from userland."
+msgstr "12.0-CURRENT после скрытия `struct socket` и `struct unpcb` из пользовательского пространства."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2075
+#, no-wrap
+msgid "1200049"
+msgstr "1200049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2076
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324281[324281]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324281[324281]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2077
+#, no-wrap
+msgid "October 4, 2017"
+msgstr "4 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2079
+#, no-wrap
+msgid "12.0-CURRENT after adding the `value.u16` field to `struct diocgattr_arg`."
+msgstr "12.0-CURRENT после добавления поля `value.u16` в структуру `struct diocgattr_arg`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2080
+#, no-wrap
+msgid "1200050"
+msgstr "1200050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2081
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324342[324342]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324342[324342]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2082
+#, no-wrap
+msgid "October 5, 2017"
+msgstr "5 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2084
+#, no-wrap
+msgid "12.0-CURRENT after adding the `armv7 MACHINE_ARCH`. (link:https://svnweb.freebsd.org/changeset/base/324340[324340])."
+msgstr "12.0-CURRENT после добавления `armv7 MACHINE_ARCH`. (link:https://svnweb.freebsd.org/changeset/base/324340[324340])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2085
+#, no-wrap
+msgid "1200051"
+msgstr "1200051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2086
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324455[324455]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324455[324455]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2087
+#, no-wrap
+msgid "October 9, 2017"
+msgstr "9 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2089
+#, 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 "12.0-CURRENT после удаления [.filename]#libstand.a# как публичного интерфейса. (link:https://svnweb.freebsd.org/changeset/base/324454[324454])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2090
+#, no-wrap
+msgid "1200052"
+msgstr "1200052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2091
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325028[325028]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/325028[325028]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2092
+#, no-wrap
+msgid "October 26, 2017"
+msgstr "26 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2094
+#, no-wrap
+msgid "12.0-CURRENT after fixing `ptrace()` to always clear the correct thread event when resuming."
+msgstr "12.0-CURRENT после исправления `ptrace()`, чтобы всегда очищать правильное событие потока при возобновлении."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2095
+#, no-wrap
+msgid "1200053"
+msgstr "1200053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2096
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325506[325506]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/325506[325506]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2097
+#, no-wrap
+msgid "November 7, 2017"
+msgstr "7 ноября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2099
+#, no-wrap
+msgid "12.0-CURRENT after changing `struct mbuf` layout to add optional hardware timestamps for receive packets."
+msgstr "12.0-CURRENT после изменения структуры `struct mbuf` для добавления опциональных аппаратных меток времени для принимаемых пакетов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2100
+#, no-wrap
+msgid "1200054"
+msgstr "1200054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2101
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325852[325852]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/325852[325852]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2102
+#, no-wrap
+msgid "November 15, 2017"
+msgstr "15 ноября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2104
+#, no-wrap
+msgid "12.0-CURRENT after changing the layout of `struct vmtotal` to allow for reporting large memory counters."
+msgstr "12.0-CURRENT после изменения структуры `struct vmtotal` для поддержки отчёта больших счётчиков памяти."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2105
+#, no-wrap
+msgid "1200055"
+msgstr "1200055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2106
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/327740[327740]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/327740[327740]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2107
+#, no-wrap
+msgid "January 9, 2018"
+msgstr "9 января 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2109
+#, no-wrap
+msgid "12.0-CURRENT after adding `cpucontrol -e` support."
+msgstr "12.0-CURRENT после добавления поддержки `cpucontrol -e`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2110
+#, no-wrap
+msgid "1200056"
+msgstr "1200056"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2111
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/327952[327952]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/327952[327952]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2112
+#, no-wrap
+msgid "January 14, 2018"
+msgstr "14 января 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2114
+#, 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 "12.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 6.0.0 (ветки/release_60 r321788)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2115
+#, no-wrap
+msgid "1200057"
+msgstr "1200057"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2116
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329033[329033]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/329033[329033]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2117
+#, no-wrap
+msgid "February 8, 2018"
+msgstr "8 февраля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2119
+#, no-wrap
+msgid "12.0-CURRENT after applying a clang 6.0.0 fix to make the wine ports build correctly."
+msgstr "12.0-CURRENT после применения исправления в clang 6.0.0 для корректной сборки портов wine."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2120
+#, no-wrap
+msgid "1200058"
+msgstr "1200058"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2121
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329166[329166]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/329166[329166]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2122
+#, no-wrap
+msgid "February 12, 2018"
+msgstr "12 февраля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2124
+#, no-wrap
+msgid "12.0-CURRENT after the Lua loader was committed."
+msgstr "12.0-CURRENT после включения загрузчика Lua."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2125
+#, no-wrap
+msgid "1200059"
+msgstr "1200059"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2126
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/330299[330299]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/330299[330299]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2127
+#, no-wrap
+msgid "March 2, 2018"
+msgstr "2 марта 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2129
+#, 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 "12.0-CURRENT после удаления объявления `union semun`, если не определено `_WANT_SEMUN`. Также удаление `struct mymsg` и переименование членов `struct semid_ds` и `struct msgid_ds`, предназначенных только для ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2130
+#, no-wrap
+msgid "1200060"
+msgstr "1200060"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2131
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/330384[330384]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/330384[330384]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2132
+#, no-wrap
+msgid "March 4, 2018"
+msgstr "4 марта 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2134
+#, no-wrap
+msgid "12.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 6.0.0 release."
+msgstr "12.0-CURRENT после обновления clang, llvm, lld, lldb, compiler-rt и libc++ до версии 6.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2135
+#, no-wrap
+msgid "1200061"
+msgstr "1200061"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2136
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332100[332100]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/332100[332100]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2137
+#, no-wrap
+msgid "April 6, 2018"
+msgstr "6 апреля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2139
+#, no-wrap
+msgid "12.0-CURRENT after changing man:syslog[3] to emit RFC 5424 formatted messages."
+msgstr "12.0-CURRENT после изменения man:syslog[3] для генерации сообщений в формате RFC 5424."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2140
+#, no-wrap
+msgid "1200062"
+msgstr "1200062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2141
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332423[332423]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/332423[332423]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2142
+#, no-wrap
+msgid "April 12, 2018"
+msgstr "12 апреля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2144
+#, no-wrap
+msgid "12.0-CURRENT after changing the Netmap API."
+msgstr "12.0-CURRENT после изменения API Netmap."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2145
+#, no-wrap
+msgid "1200063"
+msgstr "1200063"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2146
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/333446[333446]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/333446[333446]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2147
+#, no-wrap
+msgid "May 10, 2018"
+msgstr "10 мая 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2149
+#, 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 "12.0-CURRENT после переработки параметров интерфейса и внутренней части CTL для использования man:nv[3], разрешено создание нескольких портов ioctl интерфейса."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2150
+#, no-wrap
+msgid "1200064"
+msgstr "1200064"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2151
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334074[334074]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334074[334074]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2152
+#, no-wrap
+msgid "May 22, 2018"
+msgstr "22 мая 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2154
+#, no-wrap
+msgid "12.0-CURRENT after changing the ifnet address and multicast address TAILQ to CK_STAILQ."
+msgstr "12.0-CURRENT после изменения ifnet address и multicast address TAILQ на CK_STAILQ."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2155
+#, no-wrap
+msgid "1200065"
+msgstr "1200065"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2156
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334290[334290]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334290[334290]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2157
+#, no-wrap
+msgid "May 28, 2018"
+msgstr "28 мая 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2159
+#, no-wrap
+msgid "12.0-CURRENT after changing man:dwatch[1] to allow '-E code' to override profile EVENT_DETAILS."
+msgstr "12.0-CURRENT после изменения man:dwatch[1] для разрешения использования '-E code' для переопределения EVENT_DETAILS в профиле."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2160
+#, no-wrap
+msgid "1200066"
+msgstr "1200066"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2161
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334466[334466]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334466[334466]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2162
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3415
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3420
+#, no-wrap
+msgid "June 1, 2018"
+msgstr "1 июня 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2164
+#, no-wrap
+msgid "12.0-CURRENT after removal of in-kernel pmc tables for Intel."
+msgstr "12.0-CURRENT после удаления внутриядерных таблиц pmc для Intel."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2165
+#, no-wrap
+msgid "1200067"
+msgstr "1200067"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2166
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334892[334892]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334892[334892]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2167
+#, no-wrap
+msgid "June 9, 2018"
+msgstr "9 июня 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2169
+#, no-wrap
+msgid "12.0-CURRENT after adding DW_LANG constants to libdwarf."
+msgstr "12.0-CURRENT после добавления констант DW_LANG в libdwarf."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2170
+#, no-wrap
+msgid "1200068"
+msgstr "1200068"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2171
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334930[334930]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334930[334930]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2172
+#, no-wrap
+msgid "June 12, 2018"
+msgstr "12 июня 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2174
+#, no-wrap
+msgid "12.0-CURRENT after changing the interface between the NFS modules."
+msgstr "12.0-CURRENT после изменения интерфейса между модулями NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2175
+#, no-wrap
+msgid "1200069"
+msgstr "1200069"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2176
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335237[335237]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/335237[335237]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2177
+#, no-wrap
+msgid "June 15, 2018"
+msgstr "15 июня 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2179
+#, no-wrap
+msgid "12.0-CURRENT after changing `struct kerneldumpheader` to version 4 (similar to version 2 in 11-STABLE and previous)."
+msgstr "12.0-CURRENT после изменения `struct kerneldumpheader` до версии 4 (аналогично версии 2 в 11-STABLE и более ранних)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2180
+#, no-wrap
+msgid "1200070"
+msgstr "1200070"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2181
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335873[335873]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/335873[335873]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2182
+#, no-wrap
+msgid "July 2, 2018"
+msgstr "2 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2184
+#, 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 "12.0-CURRENT после встраивания man:atomic[9] в модули на amd64 и i386, что потребовало пересборки всех модулей потребителей для этих архитектур."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2185
+#, no-wrap
+msgid "1200071"
+msgstr "1200071"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2186
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335930[335930]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/335930[335930]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2187
+#, no-wrap
+msgid "July 4, 2018"
+msgstr "4 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2189
+#, 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 "12.0-CURRENT после изменения ABI и API man:epoch[9] (link:https://svnweb.freebsd.org/changeset/base/335924[335924]), что потребовало пересборки модулей потребителей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2190
+#, no-wrap
+msgid "1200072"
+msgstr "1200072"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2191
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335979[335979]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/335979[335979]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2192
+#, no-wrap
+msgid "July 5, 2018"
+msgstr "5 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2194
+#, no-wrap
+msgid "12.0-CURRENT after changing the ABI and API of `struct xinpcb` and friends."
+msgstr "12.0-CURRENT после изменения ABI и API `struct xinpcb` и связанных структур."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2195
+#, no-wrap
+msgid "1200073"
+msgstr "1200073"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2196
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336313[336313]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/336313[336313]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2197
+#, no-wrap
+msgid "July 15, 2018"
+msgstr "15 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2199
+#, 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 "12.0-CURRENT после изменения ABI и API структур `struct if_shared_ctx` и `struct if_softc_ctx`, что потребовало пересборки модулей потребителей man:iflib[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2200
+#, no-wrap
+msgid "1200074"
+msgstr "1200074"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2201
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336360[336360]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/336360[336360]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2202
+#, no-wrap
+msgid "July 16, 2018"
+msgstr "16 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2204
+#, no-wrap
+msgid "12.0-CURRENT after updating the configuration of libstdc++ to make use of C99 functions."
+msgstr "12.0-CURRENT после обновления конфигурации libstdc++ для использования функций C99."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2205
+#, no-wrap
+msgid "1200075"
+msgstr "1200075"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2206
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336538[336538]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/336538[336538]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2207
+#, no-wrap
+msgid "July 19, 2018"
+msgstr "19 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2209
+#, 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 "12.0-CURRENT после объединения `zfsloader` в `loader`, после добавления ntpd:ntpd как uid:gid 123:123 и после удаления поддержки big-endian для архитектуры arm (MACHINE_ARCH=armeb)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2210
+#, no-wrap
+msgid "1200076"
+msgstr "1200076"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2211
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336914[336914]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/336914[336914]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2212
+#, no-wrap
+msgid "July 30, 2018"
+msgstr "30 июля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2214
+#, no-wrap
+msgid "12.0-CURRENT after KPI changes to `timespecadd`."
+msgstr "12.0-CURRENT после изменений KPI в `timespecadd`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2215
+#, no-wrap
+msgid "1200077"
+msgstr "1200077"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2216
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/337576[337576]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/337576[337576]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2217
+#, no-wrap
+msgid "August 10, 2018"
+msgstr "10 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2219
+#, no-wrap
+msgid "12.0-CURRENT after man:timespec_get[3] was added to the system."
+msgstr "12.0-CURRENT после добавления в систему man:timespec_get[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2220
+#, no-wrap
+msgid "1200078"
+msgstr "1200078"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2221
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/337863[337863]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/337863[337863]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2222
+#, no-wrap
+msgid "August 15, 2018"
+msgstr "15 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2224
+#, no-wrap
+msgid "12.0-CURRENT after exec.created hook for jails."
+msgstr "12.0-CURRENT после выполнения хука exec.created для клеток."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2225
+#, no-wrap
+msgid "1200079"
+msgstr "1200079"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2226
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338061[338061]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338061[338061]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2227
+#, no-wrap
+msgid "August 19, 2018"
+msgstr "19 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2229
+#, no-wrap
+msgid "12.0-CURRENT after converting `arc4random` to using the Chacha20 algorithm and deprecating `arc4random_stir` and `arc4random_addrandom`."
+msgstr "12.0-CURRENT после перевода `arc4random` на использование алгоритма Chacha20 и устаревания `arc4random_stir` и `arc4random_addrandom`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2230
+#, no-wrap
+msgid "1200080"
+msgstr "1200080"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2231
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338172[338172]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338172[338172]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2232
+#, no-wrap
+msgid "August 22, 2018"
+msgstr "22 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2234
+#, no-wrap
+msgid "12.0-CURRENT after removing the drm drivers."
+msgstr "12.0-CURRENT после удаления драйверов drm."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2235
+#, no-wrap
+msgid "1200081"
+msgstr "1200081"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2236
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338182[338182]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338182[338182]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2237
+#, no-wrap
+msgid "August 21, 2018"
+msgstr "21 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2239
+#, no-wrap
+msgid "12.0-CURRENT after KPI changes to NVMe."
+msgstr "12.0-CURRENT после изменений KPI для NVMe."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2240
+#, no-wrap
+msgid "1200082"
+msgstr "1200082"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2241
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338285[338285]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338285[338285]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2242
+#, no-wrap
+msgid "August 24, 2018"
+msgstr "24 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2244
+#, no-wrap
+msgid "12.0-CURRENT after reverting the removal of the drm drivers."
+msgstr "12.0-CURRENT после отмены удаления драйверов drm."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2245
+#, no-wrap
+msgid "1200083"
+msgstr "1200083"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2246
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338331[338331]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338331[338331]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2247
+#, no-wrap
+msgid "August 26, 2018"
+msgstr "26 августа 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2249
+#, no-wrap
+msgid "12.0-CURRENT after removing `arc4random_stir` and `arc4random_addrandom`."
+msgstr "12.0-CURRENT после удаления `arc4random_stir` и `arc4random_addrandom`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2250
+#, no-wrap
+msgid "1200084"
+msgstr "1200084"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2251
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338478[338478]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338478[338478]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2252
+#, no-wrap
+msgid "September 5, 2018"
+msgstr "5 сентября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2254
+#, no-wrap
+msgid "12.0-CURRENT after updating man:objcopy[1] to properly handle little-endian MIPS64 object files."
+msgstr "12.0-CURRENT после обновления man:objcopy[1] для корректной обработки little-endian MIPS64 объектных файлов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2255
+#, no-wrap
+msgid "1200085"
+msgstr "1200085"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2256
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339270[339270]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/339270[339270]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2259
+#, no-wrap
+msgid "12.0-STABLE after updating OpenSSL to version 1.1.1."
+msgstr "12.0-STABLE после обновления OpenSSL до версии 1.1.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2260
+#, no-wrap
+msgid "1200086"
+msgstr "1200086"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2261
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339732[339732]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/339732[339732]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2264
+#, no-wrap
+msgid "12.0-STABLE after updating OpenSSL shared library version numbers."
+msgstr "12.0-STABLE после обновления номеров версий разделяемых библиотек OpenSSL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2265
+#, no-wrap
+msgid "1200500"
+msgstr "1200500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2266
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340471[340471]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/340471[340471]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2267
+#, no-wrap
+msgid "November 16, 2018"
+msgstr "16 ноября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2269
+#, no-wrap
+msgid "12-STABLE after releng/12.0 was branched."
+msgstr "12-STABLE после ветвления releng/12.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2270
+#, no-wrap
+msgid "1200501"
+msgstr "1200501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2271
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342801[342801]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/342801[342801]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2272
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3445
+#, no-wrap
+msgid "January 6, 2019"
+msgstr "6 января 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2274
+#, no-wrap
+msgid "12-STABLE after merge of fixing `linux_destroy_dev()` behaviour when there are still files open from the destroying cdev."
+msgstr "12-STABLE после слияния исправления поведения `linux_destroy_dev()`, когда остаются открытые файлы из уничтожаемого cdev."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2275
+#, no-wrap
+msgid "1200502"
+msgstr "1200502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2276
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343126[343126]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/343126[343126]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2277
+#, no-wrap
+msgid "January 17, 2019"
+msgstr "January 17, 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2279
+#, no-wrap
+msgid "12-STABLE after enabling sys/random.h #include from C++."
+msgstr "12-STABLE после включения #include <sys/random.h> в C++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2280
+#, no-wrap
+msgid "1200503"
+msgstr "1200503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2281
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344152[344152]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344152[344152]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2282
+#, no-wrap
+msgid "February 15, 2019"
+msgstr "15 февраля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2284
+#, no-wrap
+msgid "12-STABLE after merge of fixing man:renameat[2] for CAPABILITIES kernels."
+msgstr "12-STABLE после слияния исправления man:renameat[2] для ядер с CAPABILITIES."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2285
+#, no-wrap
+msgid "1200504"
+msgstr "1200504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2286
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345169[345169]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/345169[345169]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2289
+#, no-wrap
+msgid "12-STABLE after merging CCM for the benefit of the ZoF port."
+msgstr "12-STABLE после слияния CCM для работы с портом ZoF."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2290
+#, no-wrap
+msgid "1200505"
+msgstr "1200505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2291
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345327[345327]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/345327[345327]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2292
+#, no-wrap
+msgid "March 20, 2019"
+msgstr "20 марта 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2294
+#, no-wrap
+msgid "12-STABLE after merging support for selectively disabling ZFS without disabling loader."
+msgstr "12-STABLE после объединения поддержки выборочного отключения ZFS без отключения загрузчика."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2295
+#, no-wrap
+msgid "1200506"
+msgstr "1200506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2296
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346168[346168]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346168[346168]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2297
+#, no-wrap
+msgid "April 12, 2019"
+msgstr "12 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2299
+#, no-wrap
+msgid "12-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365."
+msgstr "12-STABLE после слияния llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp 8.0.0 финальный релиз r356365."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2300
+#, no-wrap
+msgid "1200507"
+msgstr "1200507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2301
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346337[346337]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346337[346337]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2302
+#, no-wrap
+msgid "April 17, 2019"
+msgstr "17 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2304
+#, 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 "12-STABLE после слияния изменений iflib из ревизий link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] и частично из link:https://svnweb.freebsd.org/changeset/base/345305[345305]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2305
+#, no-wrap
+msgid "1200508"
+msgstr "1200508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2306
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3459
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346784[346784]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346784[346784]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2307
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3460
+#, no-wrap
+msgid "April 27, 2019"
+msgstr "27 апреля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2309
+#, no-wrap
+msgid "12-STABLE after `ether_gen_addr` availability."
+msgstr "12-STABLE после появления `ether_gen_addr`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2310
+#, no-wrap
+msgid "1200509"
+msgstr "1200509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2311
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347790[347790]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347790[347790]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2312
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3470
+#, no-wrap
+msgid "May 16, 2019"
+msgstr "16 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2314
+#, no-wrap
+msgid "12-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr "12-STABLE после обновления номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2315
+#, no-wrap
+msgid "1200510"
+msgstr "1200510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2316
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348036[348036]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/348036[348036]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2317
+#, no-wrap
+msgid "May 21, 2019"
+msgstr "21 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2319
+#, no-wrap
+msgid "12-STABLE after change to struct in linuxkpi from link:https://svnweb.freebsd.org/changeset/base/348035[348035]."
+msgstr "12-STABLE после изменения структуры в linuxkpi из link:https://svnweb.freebsd.org/changeset/base/348035[348035]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2320
+#, no-wrap
+msgid "1200511"
+msgstr "1200511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2321
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348243[348243]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/348243[348243]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2322
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2327
+#, no-wrap
+msgid "May 24, 2019"
+msgstr "24 мая 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2324
+#, 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 "12-STABLE после MFC изменения link:https://svnweb.freebsd.org/changeset/base/347843[347843]: добавление элемента `group_leader` в структуру `task_struct` для LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2325
+#, no-wrap
+msgid "1200512"
+msgstr "1200512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2326
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348245[348245]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/348245[348245]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2329
+#, no-wrap
+msgid "12-STABLE after adding context member to ww_mutex in LinuxKPI."
+msgstr "12-STABLE после добавления элемента контекста к ww_mutex в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2330
+#, no-wrap
+msgid "1200513"
+msgstr "1200513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2331
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349763[349763]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349763[349763]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2332
+#, no-wrap
+msgid "July 5, 2019"
+msgstr "5 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2334
+#, 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 "12-STABLE после MFC man:epoch[9] изменил: 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]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2335
+#, no-wrap
+msgid "1200514"
+msgstr "1200514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2336
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350083[350083]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/350083[350083]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2337
+#, no-wrap
+msgid "July 17, 2019"
+msgstr "17 июля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2339
+#, no-wrap
+msgid "12-STABLE after additions to LinuxKPI's rcu list."
+msgstr "12-STABLE после добавлений в список rcu LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2340
+#, no-wrap
+msgid "1200515"
+msgstr "1200515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2341
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350877[350877]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/350877[350877]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2342
+#, no-wrap
+msgid "August 11, 2019"
+msgstr "11 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2344
+#, 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 "12-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/349891[349891] (реорганизация списков SRCS в виде одного файла на строку с последующей сортировкой по алфавиту) и link:https://svnweb.freebsd.org/changeset/base/349972[349972] (добавление обёрток системных вызовов `arm_sync_icache()` и `arm_drain_writebuf()` для sysarch)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2345
+#, no-wrap
+msgid "1200516"
+msgstr "1200516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2346
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351276[351276]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/351276[351276]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2347
+#, no-wrap
+msgid "August 20, 2019"
+msgstr "20 августа 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2349
+#, no-wrap
+msgid "12-STABLE after MFC of various changes to iflib link:https://svnweb.freebsd.org/changeset/base/351276[351276]."
+msgstr "12-STABLE после слияния различных изменений в iflib (MFC) link:https://svnweb.freebsd.org/changeset/base/351276[351276]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2350
+#, no-wrap
+msgid "1200517"
+msgstr "1200517"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2351
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352076[352076]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352076[352076]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2354
+#, no-wrap
+msgid "12-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr "12-STABLE после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2355
+#, no-wrap
+msgid "1200518"
+msgstr "1200518"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2356
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352114[352114]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352114[352114]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2357
+#, no-wrap
+msgid "September 10, 2019"
+msgstr "10 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2359
+#, no-wrap
+msgid "12-STABLE after additional updates to LinuxKPI's sysfs."
+msgstr "12-STABLE после дополнительных обновлений LinuxKPI в sysfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2360
+#, no-wrap
+msgid "1200519"
+msgstr "1200519"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2361
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352351[352351]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352351[352351]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2362
+#, no-wrap
+msgid "September 15, 2019"
+msgstr "15 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2364
+#, no-wrap
+msgid "12-STABLE after MFC of the new fusefs driver."
+msgstr "12-STABLE после переноса (MFC) нового драйвера fusefs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2365
+#, no-wrap
+msgid "1201000"
+msgstr "1201000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2366
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352546[352546]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352546[352546]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2367
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2372
+#, no-wrap
+msgid "September 20, 2019"
+msgstr "20 сентября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2369
+#, no-wrap
+msgid "releng/12.1 branched from stable/12@r352480."
+msgstr "releng/12.1 ответвился от stable/12@r352480."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2370
+#, no-wrap
+msgid "1201500"
+msgstr "1201500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2371
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352547[352547]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/352547[352547]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2374
+#, no-wrap
+msgid "12-STABLE after branching releng/12.1."
+msgstr "12-STABLE после ветвления releng/12.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2375
+#, no-wrap
+msgid "1201501"
+msgstr "1201501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2376
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3484
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354598[354598]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354598[354598]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2377
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2392
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3485
+#, no-wrap
+msgid "November 10, 2019"
+msgstr "10 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2379
+#, no-wrap
+msgid "12-STABLE after fixing a potential OOB read security issue in libc++."
+msgstr "12-STABLE после исправления потенциальной проблемы безопасности OOB-чтения в libc++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2380
+#, no-wrap
+msgid "1201502"
+msgstr "1201502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2381
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354613[354613]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354613[354613]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2382
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3490
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3495
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3500
+#, no-wrap
+msgid "November 11, 2019"
+msgstr "11 ноября 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2384
+#, no-wrap
+msgid "12-STABLE after enabling device class group attributes in the LinuxKPI."
+msgstr "12-STABLE после включения атрибутов группы классов устройств в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2385
+#, no-wrap
+msgid "1201503"
+msgstr "1201503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2386
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354928[354928]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354928[354928]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2389
+#, no-wrap
+msgid "12-STABLE after adding support for `AT_EXECPATH` to man:elf_aux_info[3]."
+msgstr "12-STABLE после добавления поддержки `AT_EXECPATH` в man:elf_aux_info[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2390
+#, no-wrap
+msgid "1201504"
+msgstr "1201504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2394
+#, no-wrap
+msgid "12-STABLE after correcting the C++ version check for declaring man:timespec_get[3]."
+msgstr "12-STABLE после исправления проверки версии C++ для объявления man:timespec_get[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2395
+#, no-wrap
+msgid "1201505"
+msgstr "1201505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2396
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3504
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355899[355899]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355899[355899]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2397
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3505
+#, no-wrap
+msgid "December 19, 2019"
+msgstr "19 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2399
+#, no-wrap
+msgid "12-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr "12-STABLE после добавления расширений `sigsetop`, которые часто встречаются в musl libc и glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2400
+#, no-wrap
+msgid "1201506"
+msgstr "1201506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2401
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355968[355968]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/355968[355968]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2402
+#, no-wrap
+msgid "December 21, 2019"
+msgstr "21 декабря 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2404
+#, no-wrap
+msgid "12-STABLE after doubling the value of `ARG_MAX`, for 64 bit platforms."
+msgstr "12-STABLE после удвоения значения `ARG_MAX` для 64-битных платформ."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2405
+#, no-wrap
+msgid "1201507"
+msgstr "1201507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2406
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356306[356306]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356306[356306]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2409
+#, no-wrap
+msgid "12-STABLE after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits."
+msgstr "12-STABLE после добавления функций в man:bitstring[3] для поиска непрерывных последовательностей установленных или сброшенных битов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2410
+#, no-wrap
+msgid "1201508"
+msgstr "1201508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2411
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356394[356394]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356394[356394]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2414
+#, no-wrap
+msgid "12-STABLE after making USB statistics be per-device instead of per bus."
+msgstr "12-STABLE после изменения статистики USB для каждого устройства вместо каждой шины."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2415
+#, no-wrap
+msgid "1201509"
+msgstr "1201509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2416
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356460[356460]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356460[356460]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2417
+#, no-wrap
+msgid "January 7, 2020"
+msgstr "7 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2419
+#, 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 "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2420
+#, no-wrap
+msgid "1201510"
+msgstr "1201510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2421
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356679[356679]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356679[356679]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2422
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3515
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4288
+#, no-wrap
+msgid "January 13, 2020"
+msgstr "13 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2424
+#, no-wrap
+msgid "12-STABLE after adding own counter for cancelled USB transfers."
+msgstr "12-STABLE после добавления собственного счётчика для отменённых USB-передач."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2425
+#, no-wrap
+msgid "1201511"
+msgstr "1201511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2426
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357333[357333]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/357333[357333]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2427
+#, no-wrap
+msgid "January 31, 2020"
+msgstr "31 января 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2429
+#, no-wrap
+msgid "12-STABLE after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#."
+msgstr "12-STABLE после добавления символической ссылки [.filename]#/etc/os-release# на [.filename]#/var/run/os-release#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2430
+#, no-wrap
+msgid "1201512"
+msgstr "1201512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2431
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357612[357612]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/357612[357612]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2432
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3520
+#, no-wrap
+msgid "February 6, 2020"
+msgstr "6 февраля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2434
+#, no-wrap
+msgid "12-STABLE after recent LinuxKPI changes."
+msgstr "12-STABLE после недавних изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2435
+#, no-wrap
+msgid "1201513"
+msgstr "1201513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2436
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359957[359957]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359957[359957]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2437
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3525
+#, no-wrap
+msgid "April 15, 2020"
+msgstr "15 апреля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2439
+#, no-wrap
+msgid "12-STABLE after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI."
+msgstr "12-STABLE после разделения интерфейса RCU на допускающий и не допускающий сон части в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2440
+#, no-wrap
+msgid "1201514"
+msgstr "1201514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2441
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360525[360525]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360525[360525]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2442
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2447
+#, no-wrap
+msgid "May 1, 2020"
+msgstr "1 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2444
+#, no-wrap
+msgid "12-STABLE after implementing full man:bus_dma[9] support in the LinuxKPI and pulling in all dependencies."
+msgstr "12-STABLE после реализации полной поддержки man:bus_dma[9] в LinuxKPI и включения всех зависимостей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2445
+#, no-wrap
+msgid "1201515"
+msgstr "1201515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2446
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360545[360545]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360545[360545]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2449
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2450
+#, no-wrap
+msgid "1201516"
+msgstr "1201516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2451
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360620[360620]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360620[360620]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2452
+#, no-wrap
+msgid "May 4, 2020"
+msgstr "4 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2454
+#, no-wrap
+msgid "12-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI."
+msgstr "12-STABLE после перемещения `id_mapped` в конец структуры `bus_dma_impl` для сохранения KPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2455
+#, no-wrap
+msgid "1201517"
+msgstr "1201517"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2456
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361350[361350]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/361350[361350]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2457
+#, no-wrap
+msgid "May 21, 2020"
+msgstr "21 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2459
+#, no-wrap
+msgid "12-STABLE after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type."
+msgstr "12-STABLE после переименования `vm.max_wired` в `vm.max_user_wired` и изменения его типа."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2460
+#, no-wrap
+msgid "1201518"
+msgstr "1201518"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2461
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362319[362319]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362319[362319]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2462
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3555
+#, no-wrap
+msgid "June 18, 2020"
+msgstr "18 июня 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2464
+#, no-wrap
+msgid "12-STABLE after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr "12-STABLE после реализации макроса функции `__is_constexpr()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2465
+#, no-wrap
+msgid "1201519"
+msgstr "1201519"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2466
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362916[362916]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362916[362916]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2467
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3560
+#, no-wrap
+msgid "July 4, 2020"
+msgstr "4 июля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2469
+#, no-wrap
+msgid "12-STABLE after making liblzma use libmd implementation of SHA256."
+msgstr "12-STABLE после перевода liblzma на использование реализации SHA256 из libmd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2470
+#, no-wrap
+msgid "1201520"
+msgstr "1201520"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2471
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363494[363494]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363494[363494]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2472
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3565
+#, no-wrap
+msgid "July 24, 2020"
+msgstr "24 июля 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2474
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release."
+msgstr "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2475
+#, no-wrap
+msgid "1201521"
+msgstr "1201521"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2476
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363790[363790]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363790[363790]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2477
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3570
+#, no-wrap
+msgid "August 3, 2020"
+msgstr "3 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2479
+#, no-wrap
+msgid "12-STABLE after implementing the `array_size()` function in the LinuxKPI."
+msgstr "12-STABLE после реализации функции `array_size()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2480
+#, no-wrap
+msgid "1201522"
+msgstr "1201522"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2481
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363832[363832]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363832[363832]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2482
+#, no-wrap
+msgid "August 4, 2020"
+msgstr "4 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2484
+#, no-wrap
+msgid "12-STABLE after adding sysctlbyname system call."
+msgstr "12-STABLE после добавления системного вызова sysctlbyname."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2485
+#, no-wrap
+msgid "1201523"
+msgstr "1201523"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2486
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364390[364390]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364390[364390]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2487
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3575
+#, no-wrap
+msgid "August 19, 2020"
+msgstr "19 августа 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2489
+#, no-wrap
+msgid "12-STABLE after change to clone the task struct fields related to RCU."
+msgstr "12-STABLE после изменения для клонирования полей структуры задачи, связанных с RCU."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2490
+#, no-wrap
+msgid "1201524"
+msgstr "1201524"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2491
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365356[365356]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365356[365356]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2492
+#, no-wrap
+msgid "September 5, 2020"
+msgstr "5 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2494
+#, no-wrap
+msgid "12-STABLE after splitting XDR off into a separate kernel module, to minimize ZFS dependencies."
+msgstr "12-STABLE после выделения XDR в отдельный модуль ядра для минимизации зависимостей ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2495
+#, no-wrap
+msgid "1201525"
+msgstr "1201525"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2496
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3579
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365471[365471]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365471[365471]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2499
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2564
+#, no-wrap
+msgid "12-STABLE after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr "12-STABLE после добавления атомарных функций и функций `bswap` в libcompiler_rt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2500
+#, no-wrap
+msgid "1201526"
+msgstr "1201526"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2501
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365608[365608]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365608[365608]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2502
+#, no-wrap
+msgid "September 10, 2020"
+msgstr "10 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2504
+#, no-wrap
+msgid "12-STABLE after updating net80211 and kernel privilege checking API changes."
+msgstr "12-STABLE после обновления net80211 и изменений API проверки привилегий ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2505
+#, no-wrap
+msgid "1202000"
+msgstr "1202000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2506
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365618[365618]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365618[365618]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2507
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2512
+#, no-wrap
+msgid "September 11, 2020"
+msgstr "11 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2509
+#, no-wrap
+msgid "releng/12.2 branched from stable/12@r365618."
+msgstr "releng/12.2 ответвился от stable/12@r365618."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2510
+#, no-wrap
+msgid "1202500"
+msgstr "1202500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2511
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365619[365619]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365619[365619]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2514
+#, no-wrap
+msgid "12-STABLE after branching releng/12.2."
+msgstr "12-STABLE после ветвления releng/12.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2515
+#, no-wrap
+msgid "1202501"
+msgstr "1202501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2516
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3584
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365661[365661]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365661[365661]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2517
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3585
+#, no-wrap
+msgid "September 12, 2020"
+msgstr "12 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2519
+#, no-wrap
+msgid "12-STABLE after followup commits to libcompiler_rt."
+msgstr "12-STABLE после последующих коммитов в libcompiler_rt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2520
+#, no-wrap
+msgid "1202502"
+msgstr "1202502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365816[365816]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/365816[365816]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2522
+#, no-wrap
+msgid "September 16, 2020"
+msgstr "16 сентября 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2524
+#, no-wrap
+msgid "12-STABLE after fixing man:crunchgen[1] application build with `WARNS=6`."
+msgstr "12-STABLE после исправления сборки приложения man:crunchgen[1] с `WARNS=6`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2525
+#, no-wrap
+msgid "1202503"
+msgstr "1202503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366878[366878]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366878[366878]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2529
+#, no-wrap
+msgid "12-STABLE after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr "12-STABLE после заполнения поля контекста захвата `ww_mutex` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2530
+#, no-wrap
+msgid "1202504"
+msgstr "1202504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367511[367511]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367511[367511]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2534
+#, no-wrap
+msgid "12-STABLE after the addition of man:ptsname_r[3]."
+msgstr "12-STABLE после добавления man:ptsname_r[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2535
+#, no-wrap
+msgid "1202505"
+msgstr "1202505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2536
+#, no-wrap
+msgid "gitref:f3d75bed5475b15f21edf4052665b1212b548bd0[repository=\"src\",length=12]"
+msgstr "gitref:f3d75bed5475b15f21edf4052665b1212b548bd0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2537
+#, no-wrap
+msgid "December 28, 2020"
+msgstr "28 декабря 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2539
+#, no-wrap
+msgid "12-STABLE after improving handling of alternate settings in the USB stack."
+msgstr "12-STABLE после улучшения обработки альтернативных настроек в стеке USB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2540
+#, no-wrap
+msgid "1202506"
+msgstr "1202506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2541
+#, no-wrap
+msgid "gitref:d36cc12ddfe3335ec8306bd4b393f11069551fa0[repository=\"src\",length=12]"
+msgstr "gitref:d36cc12ddfe3335ec8306bd4b393f11069551fa0[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2544
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the krpc and NFS."
+msgstr "12-STABLE после изменения внутреннего KAPI между krpc и NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2545
+#, no-wrap
+msgid "1202507"
+msgstr "1202507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2546
+#, no-wrap
+msgid "gitref:1e279fe9deaea1c5e3503117dd3077dcffb1276d[repository=\"src\",length=12]"
+msgstr "gitref:1e279fe9deaea1c5e3503117dd3077dcffb1276d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2549
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the nscl.ko and nfscommon.ko modules."
+msgstr "12-STABLE после изменения внутреннего KAPI между модулями nscl.ko и nfscommon.ko."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2550
+#, no-wrap
+msgid "1202508"
+msgstr "1202508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2551
+#, no-wrap
+msgid "gitref:489236b0474857b0a7a2df77c302290e12be9e7b[repository=\"src\",length=12]"
+msgstr "gitref:489236b0474857b0a7a2df77c302290e12be9e7b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2554
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the krpc and nfsd modules."
+msgstr "12-STABLE после изменения внутреннего KAPI между модулями krpc и nfsd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2555
+#, no-wrap
+msgid "1203500"
+msgstr "1203500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2556
+#, no-wrap
+msgid "gitref:f2900e784cb024e55ec0f5cd6834af5fadcb9f9a[repository=\"src\",length=12]"
+msgstr "gitref:f2900e784cb024e55ec0f5cd6834af5fadcb9f9a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2557
+#, no-wrap
+msgid "October 20, 2021"
+msgstr "20 октября 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2559
+#, no-wrap
+msgid "12-STABLE after branching releng/12.3."
+msgstr "12-STABLE после ветвления releng/12.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2560
+#, no-wrap
+msgid "1203501"
+msgstr "1203501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2561
+#, no-wrap
+msgid "gitref:b148c7b87148b653fdbef9c5aa591b9abcd99e26[repository=\"src\",length=12]"
+msgstr "gitref:b148c7b87148b653fdbef9c5aa591b9abcd99e26[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2562
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2567
+#, no-wrap
+msgid "December 22, 2021"
+msgstr "22 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2565
+#, no-wrap
+msgid "1203502"
+msgstr "1203502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2566
+#, no-wrap
+msgid "gitref:4772e4135cb3fe7f25531894f3b02f35ec086bda[repository=\"src\",length=12]"
+msgstr "gitref:4772e4135cb3fe7f25531894f3b02f35ec086bda[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2569
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 11.0.1."
+msgstr "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 11.0.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2570
+#, no-wrap
+msgid "1203503"
+msgstr "1203503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2571
+#, no-wrap
+msgid "gitref:e405b2dc913c99189aa9b923ed686a790253cc7e[repository=\"src\",length=12]"
+msgstr "gitref:e405b2dc913c99189aa9b923ed686a790253cc7e[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2572
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2577
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2582
+#, no-wrap
+msgid "December 25, 2021"
+msgstr "25 декабря 2021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2574
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 12.0.0."
+msgstr "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 12.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2575
+#, no-wrap
+msgid "1203504"
+msgstr "1203504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2576
+#, no-wrap
+msgid "gitref:1a398266112e73f91a4f2e2701ceefd3f2948aac[repository=\"src\",length=12]"
+msgstr "gitref:1a398266112e73f91a4f2e2701ceefd3f2948aac[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2579
+#, no-wrap
+msgid "12-STABLE after adding out-of-line LSE atomics helpers to [.filename]#libcompiler_rt.a# on aarch64."
+msgstr "12-STABLE после добавления вспомогательных функций LSE атомарных операций вне строки в [.filename]#libcompiler_rt.a# для архитектуры aarch64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2580
+#, no-wrap
+msgid "1203505"
+msgstr "1203505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2581
+#, no-wrap
+msgid "gitref:0b7be89b329e0f862c25f34abfb13c75a4d45f2a[repository=\"src\",length=12]"
+msgstr "gitref:0b7be89b329e0f862c25f34abfb13c75a4d45f2a[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2584
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 13.0.0."
+msgstr "12-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 13.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2585
+#, no-wrap
+msgid "1203506"
+msgstr "1203506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2586
+#, no-wrap
+msgid "gitref:f591279d9c93bc2ea9cd1a447c2df11d437fbc7b[repository=\"src\",length=12]"
+msgstr "gitref:f591279d9c93bc2ea9cd1a447c2df11d437fbc7b[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2587
+#, no-wrap
+msgid "February 12, 2022"
+msgstr "12 февраля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2589
+#, no-wrap
+msgid "12-STABLE after restoring availability tradeoff of random(4)."
+msgstr "12-STABLE после восстановления компромисса доступности random(4)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2590
+#, no-wrap
+msgid "1203507"
+msgstr "1203507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2591
+#, no-wrap
+msgid "gitref:180d95e04e938328de8f2a24d16fdb5049e15262[repository=\"src\",length=12]"
+msgstr "gitref:180d95e04e938328de8f2a24d16fdb5049e15262[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2592
+#, no-wrap
+msgid "April 9, 2022"
+msgstr "9 апреля 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2594
+#, no-wrap
+msgid "12-STABLE after zlib unification."
+msgstr "12-STABLE после объединения zlib."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2595
+#, no-wrap
+msgid "1203508"
+msgstr "1203508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2596
+#, no-wrap
+msgid "gitref:6c717a28505d3e77a0c3780ca1f65eb85b538eb9[repository=\"src\",length=12]"
+msgstr "gitref:6c717a28505d3e77a0c3780ca1f65eb85b538eb9[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2599
+#, no-wrap
+msgid "12-STABLE after iflib: Allow drivers to determine which queue to TX on."
+msgstr "12-STABLE после iflib: Разрешить драйверам определять, в какую очередь передавать данные."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2600
+#, no-wrap
+msgid "1204000"
+msgstr "1204000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2601
+#, no-wrap
+msgid "gitref:fce871fe35204527a2ce08e43e1572ae9295cc00[repository=\"src\",length=12]"
+msgstr "gitref:fce871fe35204527a2ce08e43e1572ae9295cc00[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2602
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2607
+#, no-wrap
+msgid "October 20, 2022"
+msgstr "20 октября 2022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2604
+#, no-wrap
+msgid "releng/12.4 branched from stable/12."
+msgstr "releng/12.4 — ветка от stable/12."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2605
+#, no-wrap
+msgid "1204500"
+msgstr "1204500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2606
+#, no-wrap
+msgid "gitref:6a9031c5e2ba5435aa4ea08ee05c351d5bef035d[repository=\"src\",length=12]"
+msgstr "gitref:6a9031c5e2ba5435aa4ea08ee05c351d5bef035d[repository=\"src\",length=12]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2609
+#, no-wrap
+msgid "12-STABLE after branching releng/12.4."
+msgstr "12-STABLE после ветвления releng/12.4."
+
+#. 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:2621
+#, no-wrap
+msgid "FreeBSD 11 Versions"
+msgstr "FreeBSD 11 Версии"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2624
+#, no-wrap
+msgid "FreeBSD 11 `__FreeBSD_version` Values"
+msgstr "FreeBSD 11 Значения `__FreeBSD_version`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2633
+#, no-wrap
+msgid "1100000"
+msgstr "1100000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2634
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256284[256284]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/256284[256284]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2635
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3908
+#, no-wrap
+msgid "October 10, 2013"
+msgstr "10 октября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2637
+#, no-wrap
+msgid "11.0-CURRENT."
+msgstr "11.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2638
+#, no-wrap
+msgid "1100001"
+msgstr "1100001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2639
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256776[256776]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/256776[256776]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2640
+#, no-wrap
+msgid "October 19, 2013"
+msgstr "19 октября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2642
+#, 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 "11.0-CURRENT после добавления поддержки сценариев [.filename]#rc.d# для \"первой загрузки\", что позволяет портам использовать эту возможность."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2643
+#, no-wrap
+msgid "1100002"
+msgstr "1100002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2644
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/257696[257696]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/257696[257696]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2645
+#, no-wrap
+msgid "November 5, 2013"
+msgstr "5 ноября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2647
+#, no-wrap
+msgid "11.0-CURRENT after dropping support for historic ioctls."
+msgstr "11.0-CURRENT после прекращения поддержки устаревших ioctl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2648
+#, no-wrap
+msgid "1100003"
+msgstr "1100003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2649
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/258284[258284]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/258284[258284]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2650
+#, no-wrap
+msgid "November 17, 2013"
+msgstr "17 ноября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2652
+#, no-wrap
+msgid "11.0-CURRENT after iconv changes."
+msgstr "11.0-CURRENT после изменений в iconv."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2653
+#, no-wrap
+msgid "1100004"
+msgstr "1100004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2654
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259424[259424]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259424[259424]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2655
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3933
+#, no-wrap
+msgid "December 15, 2013"
+msgstr "15 декабря 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2657
+#, 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 "11.0-CURRENT после изменения поведения `gss_pseudo_random`, внесённого в link:https://svnweb.freebsd.org/changeset/base/259286[259286]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2658
+#, no-wrap
+msgid "1100005"
+msgstr "1100005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2659
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260010[260010]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/260010[260010]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2660
+#, no-wrap
+msgid "December 28, 2013"
+msgstr "28 декабря 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2662
+#, 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 "11.0-CURRENT после link:https://svnweb.freebsd.org/changeset/base/259951[259951] - Не объединять записи в man:vm_map_stack[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2663
+#, no-wrap
+msgid "1100006"
+msgstr "1100006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2664
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261246[261246]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/261246[261246]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2665
+#, no-wrap
+msgid "January 28, 2014"
+msgstr "28 января 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2667
+#, no-wrap
+msgid "11.0-CURRENT after upgrades of libelf and libdwarf."
+msgstr "11.0-CURRENT после обновления libelf и libdwarf."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2668
+#, no-wrap
+msgid "1100007"
+msgstr "1100007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2669
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261283[261283]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/261283[261283]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2670
+#, no-wrap
+msgid "January 30, 2014"
+msgstr "30 января 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2672
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of libc++ to 3.4 release."
+msgstr "11.0-CURRENT после обновления libc++ до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2673
+#, no-wrap
+msgid "1100008"
+msgstr "1100008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2674
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261881[261881]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/261881[261881]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2675
+#, no-wrap
+msgid "February 14, 2014"
+msgstr "February 14, 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2677
+#, no-wrap
+msgid "11.0-CURRENT after libc++ 3.4 ABI compatibility fix."
+msgstr "11.0-CURRENT после исправления совместимости ABI в libc++ 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2678
+#, no-wrap
+msgid "1100009"
+msgstr "1100009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2679
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261991[261991]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/261991[261991]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2680
+#, no-wrap
+msgid "February 16, 2014"
+msgstr "16 февраля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2682
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of llvm/clang to 3.4 release."
+msgstr "11.0-CURRENT после обновления llvm/clang до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2683
+#, no-wrap
+msgid "1100010"
+msgstr "1100010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2684
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262630[262630]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/262630[262630]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2685
+#, no-wrap
+msgid "February 28, 2014"
+msgstr "28 февраля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2687
+#, 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 "11.0-CURRENT после обновления ncurses до версии 5.9 (ревизия link:https://svnweb.freebsd.org/changeset/base/262629[262629])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2688
+#, no-wrap
+msgid "1100011"
+msgstr "1100011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2689
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263102[263102]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263102[263102]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2690
+#, no-wrap
+msgid "March 13, 2014"
+msgstr "13 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2692
+#, no-wrap
+msgid "11.0-CURRENT after ABI change in struct `if_data`."
+msgstr "11.0-CURRENT после изменения ABI в структуре `if_data`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2693
+#, no-wrap
+msgid "1100012"
+msgstr "1100012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2694
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263140[263140]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263140[263140]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2695
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2700
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4646
+#, no-wrap
+msgid "March 14, 2014"
+msgstr "14 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2697
+#, no-wrap
+msgid "11.0-CURRENT after removal of Novell IPX protocol support."
+msgstr "11.0-CURRENT после удаления поддержки протокола Novell IPX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2698
+#, no-wrap
+msgid "1100013"
+msgstr "1100013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2699
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263152[263152]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263152[263152]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2702
+#, no-wrap
+msgid "11.0-CURRENT after removal of AppleTalk protocol support."
+msgstr "11.0-CURRENT после удаления поддержки протокола AppleTalk."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2703
+#, no-wrap
+msgid "1100014"
+msgstr "1100014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2704
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263235[263235]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263235[263235]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2705
+#, no-wrap
+msgid "March 16, 2014"
+msgstr "March 16, 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2707
+#, 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 "11.0-CURRENT после переименования [.filename]#<sys/capability.h># в [.filename]#<sys/capsicum.h># во избежание конфликта с одноименными заголовочными файлами в других операционных системах. Совместимый заголовочный файл оставлен для уменьшения количества проблем при сборке, но в будущем будет устаревшим."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2708
+#, no-wrap
+msgid "1100015"
+msgstr "1100015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2709
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263620[263620]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263620[263620]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2710
+#, no-wrap
+msgid "March 22, 2014"
+msgstr "22 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2712
+#, no-wrap
+msgid "11.0-CURRENT after `cnt` rename to `vm_cnt`."
+msgstr "11.0-CURRENT после переименования `cnt` в `vm_cnt`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2713
+#, no-wrap
+msgid "1100016"
+msgstr "1100016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2714
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263660[263660]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263660[263660]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2715
+#, no-wrap
+msgid "March 23, 2014"
+msgstr "23 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2717
+#, no-wrap
+msgid "11.0-CURRENT after addition of `armv6hf TARGET_ARCH`."
+msgstr "11.0-CURRENT после добавления `armv6hf TARGET_ARCH`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2718
+#, no-wrap
+msgid "1100017"
+msgstr "1100017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2719
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264121[264121]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/264121[264121]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2720
+#, no-wrap
+msgid "April 4, 2014"
+msgstr "4 апреля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2722
+#, no-wrap
+msgid "11.0-CURRENT after GCC support for `__block` definition."
+msgstr "11.0-CURRENT после удаления поддержки GCC для определения `__block`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2723
+#, no-wrap
+msgid "1100018"
+msgstr "1100018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2724
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264212[264212]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/264212[264212]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2725
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3958
+#, no-wrap
+msgid "April 6, 2014"
+msgstr "6 апреля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2727
+#, no-wrap
+msgid "11.0-CURRENT after support for UDP-Lite protocol (RFC 3828)."
+msgstr "11.0-CURRENT после добавления поддержки протокола UDP-Lite (RFC 3828)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2728
+#, no-wrap
+msgid "1100019"
+msgstr "1100019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2729
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3962
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4660
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264289[264289]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/264289[264289]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2730
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3963
+#, no-wrap
+msgid "April 8, 2014"
+msgstr "8 апреля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2732
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:06.openssl (rev link:https://svnweb.freebsd.org/changeset/base/264265[264265])."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:06.openssl (ревизия link:https://svnweb.freebsd.org/changeset/base/264265[264265])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2733
+#, no-wrap
+msgid "1100020"
+msgstr "1100020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2734
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265215[265215]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/265215[265215]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2735
+#, no-wrap
+msgid "May 1, 2014"
+msgstr "1 мая 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2737
+#, 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 "11.0-CURRENT после удаления `lindev` в пользу наличия /dev/full по умолчанию (rev link:https://svnweb.freebsd.org/changeset/base/265212[265212])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2738
+#, no-wrap
+msgid "1100021"
+msgstr "1100021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2739
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/266151[266151]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/266151[266151]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2740
+#, no-wrap
+msgid "May 6, 2014"
+msgstr "6 мая 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2742
+#, 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 "11.0-CURRENT после изменений в [.filename]#src.opts.mk#, отделяющих man:make.conf[5] от `buildworld` (rev link:https://svnweb.freebsd.org/changeset/base/265419[265419])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2743
+#, no-wrap
+msgid "1100022"
+msgstr "1100022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2744
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/266904[266904]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/266904[266904]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2745
+#, no-wrap
+msgid "May 30, 2014"
+msgstr "30 мая 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2747
+#, 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 "11.0-CURRENT после изменений в man:strcasecmp[3], перемещении man:strcasecmp_l[3] и man:strncasecmp_l[3] из [.filename]#<string.h># в [.filename]#<strings.h># для соответствия POSIX 2008 (rev link:https://svnweb.freebsd.org/changeset/base/266865[266865])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2748
+#, no-wrap
+msgid "1100023"
+msgstr "1100023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2749
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267440[267440]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/267440[267440]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2750
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3978
+#, no-wrap
+msgid "June 13, 2014"
+msgstr "13 июня 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2752
+#, no-wrap
+msgid "11.0-CURRENT after the CUSE library and kernel module have been attached to the build by default."
+msgstr "11.0-CURRENT после подключения библиотеки CUSE и модуля ядра к сборке по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2753
+#, no-wrap
+msgid "1100024"
+msgstr "1100024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2754
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267992[267992]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/267992[267992]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2755
+#, no-wrap
+msgid "June 27, 2014"
+msgstr "27 июня 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2757
+#, no-wrap
+msgid "11.0-CURRENT after man:sysctl[3] API change."
+msgstr "11.0-CURRENT после изменения API man:sysctl[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2758
+#, no-wrap
+msgid "1100025"
+msgstr "1100025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2759
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268066[268066]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268066[268066]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2760
+#, no-wrap
+msgid "June 30, 2014"
+msgstr "30 июня 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2762
+#, no-wrap
+msgid "11.0-CURRENT after man:regex[3] library update to add \">\" and \"<\" delimiters."
+msgstr "11.0-CURRENT после обновления библиотеки man:regex[3] для добавления разделителей \">\" и \"<\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2763
+#, no-wrap
+msgid "1100026"
+msgstr "1100026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2764
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268118[268118]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268118[268118]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2765
+#, no-wrap
+msgid "July 1, 2014"
+msgstr "1 июля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2767
+#, 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 "11.0-CURRENT после изменения внутреннего интерфейса между модулями NFS, включая krpc, в (rev link:https://svnweb.freebsd.org/changeset/base/268115[268115])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2768
+#, no-wrap
+msgid "1100027"
+msgstr "1100027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2769
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268441[268441]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268441[268441]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2770
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3983
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4681
+#, no-wrap
+msgid "July 8, 2014"
+msgstr "8 июля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2772
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268431[268431])."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:17.kmem (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/268431[268431])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2773
+#, no-wrap
+msgid "1100028"
+msgstr "1100028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2774
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268945[268945]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268945[268945]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2775
+#, no-wrap
+msgid "July 21, 2014"
+msgstr "21 июля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2777
+#, no-wrap
+msgid "11.0-CURRENT after man:hdestroy[3] compliance fix changed ABI."
+msgstr "11.0-CURRENT после исправления соответствия man:hdestroy[3] изменился ABI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2778
+#, no-wrap
+msgid "1100029"
+msgstr "1100029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2779
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270173[270173]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/270173[270173]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2780
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3993
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3998
+#, no-wrap
+msgid "August 3, 2014"
+msgstr "3 августа 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2782
+#, no-wrap
+msgid "11.0-CURRENT after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269489[269489])."
+msgstr "11.0-CURRENT после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269489[269489])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2783
+#, no-wrap
+msgid "1100030"
+msgstr "1100030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2784
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270929[270929]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/270929[270929]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2785
+#, no-wrap
+msgid "September 1, 2014"
+msgstr "1 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2787
+#, no-wrap
+msgid "11.0-CURRENT after `SOCK_RAW` sockets were changed to not modify packets at all."
+msgstr "11.0-CURRENT после того, как сокеты `SOCK_RAW` были изменены так, чтобы вообще не модифицировать пакеты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2788
+#, no-wrap
+msgid "1100031"
+msgstr "1100031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2789
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4002
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4690
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5478
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271341[271341]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271341[271341]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2790
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2800
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4003
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4691
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5479
+#, no-wrap
+msgid "September 9, 2014"
+msgstr "9 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2792
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:18.openssl (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:18.openssl (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2793
+#, no-wrap
+msgid "1100032"
+msgstr "1100032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2794
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271438[271438]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271438[271438]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2795
+#, no-wrap
+msgid "September 11, 2014"
+msgstr "11 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2797
+#, no-wrap
+msgid "11.0-CURRENT after API changes to `ifa_ifwithbroadaddr`, `ifa_ifwithdstaddr`, `ifa_ifwithnet`, and `ifa_ifwithroute`."
+msgstr "11.0-CURRENT после изменений API в `ifa_ifwithbroadaddr`, `ifa_ifwithdstaddr`, `ifa_ifwithnet` и `ifa_ifwithroute`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2798
+#, no-wrap
+msgid "1100033"
+msgstr "1100033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2799
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271657[271657]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271657[271657]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2802
+#, no-wrap
+msgid "11.0-CURRENT after changing `access`, `eaccess`, and `faccessat` to validate the mode argument."
+msgstr "11.0-CURRENT после изменения `access`, `eaccess` и `faccessat` для проверки аргумента mode."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2803
+#, no-wrap
+msgid "1100034"
+msgstr "1100034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2804
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4007
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4695
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5483
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271686[271686]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271686[271686]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2805
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4008
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4696
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5484
+#, no-wrap
+msgid "September 16, 2014"
+msgstr "16 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2807
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:19.tcp (rev link:https://svnweb.freebsd.org/changeset/base/271666[271666])."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:19.tcp (rev link:https://svnweb.freebsd.org/changeset/base/271666[271666])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2808
+#, no-wrap
+msgid "1100035"
+msgstr "1100035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2809
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271705[271705]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271705[271705]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2810
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2815
+#, no-wrap
+msgid "September 17, 2014"
+msgstr "17 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2812
+#, no-wrap
+msgid "11.0-CURRENT after i915 HW context support."
+msgstr "11.0-CURRENT после добавления поддержки аппаратного контекста i915."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2813
+#, no-wrap
+msgid "1100036"
+msgstr "1100036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2814
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271724[271724]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271724[271724]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2817
+#, 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 "Увеличение версии для различия в ABI-примечании бинарных файлов, готовых к строгой проверке флагов man:mmap[2] (изменение link:https://svnweb.freebsd.org/changeset/base/271724[271724])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2818
+#, no-wrap
+msgid "1100037"
+msgstr "1100037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2819
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272674[272674]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/272674[272674]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2820
+#, no-wrap
+msgid "October 6, 2014"
+msgstr "6 октября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2822
+#, no-wrap
+msgid "11.0-CURRENT after addition of man:explicit_bzero[3] (rev link:https://svnweb.freebsd.org/changeset/base/272673[272673])."
+msgstr "11.0-CURRENT после добавления man:explicit_bzero[3] (изменение:https://svnweb.freebsd.org/changeset/base/272673[272673])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2823
+#, no-wrap
+msgid "1100038"
+msgstr "1100038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2824
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272951[272951]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/272951[272951]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2825
+#, no-wrap
+msgid "October 11, 2014"
+msgstr "October 11, 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2827
+#, no-wrap
+msgid "11.0-CURRENT after cleanup of TCP wrapper headers."
+msgstr "11.0-CURRENT после очистки заголовков TCP wrapper."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2828
+#, no-wrap
+msgid "1100039"
+msgstr "1100039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2829
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273250[273250]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/273250[273250]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2830
+#, no-wrap
+msgid "October 18, 2014"
+msgstr "18 октября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2832
+#, no-wrap
+msgid "11.0-CURRENT after removal of `MAP_RENAME` and `MAP_NORESERVE`."
+msgstr "11.0-CURRENT после удаления `MAP_RENAME` и `MAP_NORESERVE`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2833
+#, no-wrap
+msgid "1100040"
+msgstr "1100040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2834
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4027
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4700
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5488
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273432[273432]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/273432[273432]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2835
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4028
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4701
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5489
+#, no-wrap
+msgid "October 21, 2014"
+msgstr "21 октября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2837
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:23 (rev link:https://svnweb.freebsd.org/changeset/base/273146[273146])."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:23 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/273146[273146])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2838
+#, no-wrap
+msgid "1100041"
+msgstr "1100041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2839
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273875[273875]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/273875[273875]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2840
+#, no-wrap
+msgid "October 30, 2014"
+msgstr "30 октября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2842
+#, 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 "11.0-CURRENT после изменений API в `syscall_register`, `syscall32_register`, `syscall_register_helper` и `syscall32_register_helper` (rev link:https://svnweb.freebsd.org/changeset/base/273707[273707])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2843
+#, no-wrap
+msgid "1100042"
+msgstr "1100042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2844
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274046[274046]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274046[274046]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2845
+#, no-wrap
+msgid "November 3, 2014"
+msgstr "3 ноября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2847
+#, no-wrap
+msgid "11.0-CURRENT after a change to `struct tcpcb`."
+msgstr "11.0-CURRENT после изменения `struct tcpcb`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2848
+#, no-wrap
+msgid "1100043"
+msgstr "1100043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2849
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274085[274085]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274085[274085]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2850
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2855
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2860
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4033
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4706
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5494
+#, no-wrap
+msgid "November 4, 2014"
+msgstr "4 ноября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2852
+#, no-wrap
+msgid "11.0-CURRENT after enabling man:vt[4] by default."
+msgstr "11.0-CURRENT после включения man:vt[4] по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2853
+#, no-wrap
+msgid "1100044"
+msgstr "1100044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2854
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274116[274116]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274116[274116]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2857
+#, no-wrap
+msgid "11.0-CURRENT after adding new libraries/utilities (`dpv` and `figpar`) for data throughput visualization."
+msgstr "11.0-CURRENT после добавления новых библиотек/утилит (`dpv` и `figpar`) для визуализации пропускной способности данных."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2858
+#, no-wrap
+msgid "1100045"
+msgstr "1100045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2859
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4032
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4705
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5493
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274162[274162]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274162[274162]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2862
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr "11.0-CURRENT после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2863
+#, no-wrap
+msgid "1100046"
+msgstr "1100046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2864
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274470[274470]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274470[274470]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2865
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2870
+#, no-wrap
+msgid "November 13, 2014"
+msgstr "13 ноября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2867
+#, no-wrap
+msgid "11.0-CURRENT after `kern_poll` signature change (rev link:https://svnweb.freebsd.org/changeset/base/274462[274462])."
+msgstr "11.0-CURRENT после изменения сигнатуры `kern_poll` (rev link:https://svnweb.freebsd.org/changeset/base/274462[274462])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2868
+#, no-wrap
+msgid "1100047"
+msgstr "1100047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2869
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274476[274476]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/274476[274476]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2872
+#, no-wrap
+msgid "11.0-CURRENT after removal of no-at version of VFS syscalls helpers, like `kern_open`."
+msgstr "11.0-CURRENT после удаления no-at версий вспомогательных системных вызовов VFS, таких как `kern_open`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2873
+#, no-wrap
+msgid "1100048"
+msgstr "1100048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2874
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275358[275358]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/275358[275358]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2875
+#, no-wrap
+msgid "December 1, 2014"
+msgstr "1 декабря 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2877
+#, 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 "11.0-CURRENT после начала процесса удаления использования устаревшего флага \"M_FLOWID\" из сетевого кода."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2878
+#, no-wrap
+msgid "1100049"
+msgstr "1100049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2879
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275633[275633]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/275633[275633]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2880
+#, no-wrap
+msgid "December 9, 2014"
+msgstr "9 декабря 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2882
+#, 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 "11.0-CURRENT после импорта важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2883
+#, no-wrap
+msgid "1100050"
+msgstr "1100050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2884
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275732[275732]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/275732[275732]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2885
+#, no-wrap
+msgid "December 12, 2014"
+msgstr "12 декабря 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2887
+#, no-wrap
+msgid "11.0-CURRENT after adding AES-ICM and AES-GCM to OpenCrypto."
+msgstr "11.0-CURRENT после добавления AES-ICM и AES-GCM в OpenCrypto."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2888
+#, no-wrap
+msgid "1100051"
+msgstr "1100051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2889
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276096[276096]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/276096[276096]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2890
+#, no-wrap
+msgid "December 23, 2014"
+msgstr "December 23, 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2892
+#, no-wrap
+msgid "11.0-CURRENT after removing old NFS client and server code from the kernel."
+msgstr "11.0-CURRENT после удаления старого кода клиента и сервера NFS из ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2893
+#, no-wrap
+msgid "1100052"
+msgstr "1100052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2894
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276479[276479]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/276479[276479]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2895
+#, no-wrap
+msgid "December 31, 2014"
+msgstr "31 декабря 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2897
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of clang, llvm and lldb to 3.5.0 release."
+msgstr "11.0-CURRENT после обновления clang, llvm и lldb до версии 3.5.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2898
+#, no-wrap
+msgid "1100053"
+msgstr "1100053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2899
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276781[276781]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/276781[276781]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2900
+#, no-wrap
+msgid "January 7, 2015"
+msgstr "7 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2902
+#, 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 "11.0-CURRENT после того, как man:MCLGET[9] получил возвращаемое значение (rev link:https://svnweb.freebsd.org/changeset/base/276750[276750])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2903
+#, no-wrap
+msgid "1100054"
+msgstr "1100054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2904
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277213[277213]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277213[277213]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2905
+#, no-wrap
+msgid "January 15, 2015"
+msgstr "15 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2907
+#, no-wrap
+msgid "11.0-CURRENT after rewrite of callout subsystem."
+msgstr "11.0-CURRENT после переработки подсистемы вызовов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2908
+#, no-wrap
+msgid "1100055"
+msgstr "1100055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2909
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277528[277528]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277528[277528]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2910
+#, no-wrap
+msgid "January 22, 2015"
+msgstr "22 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2912
+#, no-wrap
+msgid "11.0-CURRENT after reverting callout changes in link:https://svnweb.freebsd.org/changeset/base/277213[277213]."
+msgstr "11.0-CURRENT после отмены изменений callout в link:https://svnweb.freebsd.org/changeset/base/277213[277213]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2913
+#, no-wrap
+msgid "1100056"
+msgstr "1100056"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2914
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277610[277610]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277610[277610]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2915
+#, no-wrap
+msgid "January 23, 2015"
+msgstr "23 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2917
+#, no-wrap
+msgid "11.0-CURRENT after addition of `futimens` and `utimensat` system calls."
+msgstr "11.0-CURRENT после добавления системных вызовов `futimens` и `utimensat`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2918
+#, no-wrap
+msgid "1100057"
+msgstr "1100057"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2919
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277897[277897]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277897[277897]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2920
+#, no-wrap
+msgid "January 29, 2015"
+msgstr "29 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2922
+#, no-wrap
+msgid "11.0-CURRENT after removal of `d_thread_t`."
+msgstr "11.0-CURRENT после удаления `d_thread_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2923
+#, no-wrap
+msgid "1100058"
+msgstr "1100058"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2924
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278228[278228]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/278228[278228]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2925
+#, no-wrap
+msgid "February 5, 2015"
+msgstr "5 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2927
+#, no-wrap
+msgid "11.0-CURRENT after addition of support for probing the SCSI VPD Extended Inquiry page (0x86)."
+msgstr "11.0-CURRENT после добавления поддержки запроса страницы расширенного запроса SCSI VPD (0x86)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2928
+#, no-wrap
+msgid "1100059"
+msgstr "1100059"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2929
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278442[278442]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/278442[278442]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2930
+#, no-wrap
+msgid "February 9, 2015"
+msgstr "9 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2932
+#, 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 "11.0-CURRENT после импорта xz 5.2.0, который добавил многопоточное сжатие, и lzma получила зависимость от libthr (rev link:https://svnweb.freebsd.org/changeset/base/278433[278433])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2933
+#, no-wrap
+msgid "1100060"
+msgstr "1100060"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2934
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278846[278846]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/278846[278846]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2935
+#, no-wrap
+msgid "February 16, 2015"
+msgstr "16 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2937
+#, no-wrap
+msgid "11.0-CURRENT after forwarding `FBIO_BLANK` to framebuffer clients."
+msgstr "11.0-CURRENT после пересылки `FBIO_BLANK` клиентам фреймбуфера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2938
+#, no-wrap
+msgid "1100061"
+msgstr "1100061"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2939
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278964[278964]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/278964[278964]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2940
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4063
+#, no-wrap
+msgid "February 18, 2015"
+msgstr "18 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2942
+#, no-wrap
+msgid "11.0-CURRENT after `CDAI_FLAG_NONE` addition."
+msgstr "11.0-CURRENT после добавления `CDAI_FLAG_NONE`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2943
+#, no-wrap
+msgid "1100062"
+msgstr "1100062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2944
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279221[279221]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/279221[279221]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2945
+#, no-wrap
+msgid "February 23, 2015"
+msgstr "23 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2947
+#, no-wrap
+msgid "11.0-CURRENT after man:mtio[4] and man:sa[4] API and man:ioctl[2] additions."
+msgstr "11.0-CURRENT после добавлений API man:mtio[4] и man:sa[4], а также man:ioctl[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2948
+#, no-wrap
+msgid "1100063"
+msgstr "1100063"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2949
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279728[279728]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/279728[279728]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2950
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2955
+#, no-wrap
+msgid "March 7, 2015"
+msgstr "7 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2952
+#, no-wrap
+msgid "11.0-CURRENT after adding mutex support to the `pps_ioctl()` API in the kernel."
+msgstr "11.0-CURRENT после добавления поддержки мьютексов в API `pps_ioctl()` в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2953
+#, no-wrap
+msgid "1100064"
+msgstr "1100064"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2954
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279729[279729]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/279729[279729]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2957
+#, no-wrap
+msgid "11.0-CURRENT after adding PPS support to USB serial drivers."
+msgstr "11.0-CURRENT после добавления поддержки PPS в драйверы USB-последовательных портов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2958
+#, no-wrap
+msgid "1100065"
+msgstr "1100065"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2959
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280031[280031]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/280031[280031]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2960
+#, no-wrap
+msgid "March 15, 2015"
+msgstr "15 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2962
+#, no-wrap
+msgid "11.0-CURRENT after upgrading clang, llvm and lldb to 3.6.0."
+msgstr "11.0-CURRENT после обновления clang, llvm и lldb до версии 3.6.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2963
+#, no-wrap
+msgid "1100066"
+msgstr "1100066"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2964
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280306[280306]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/280306[280306]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2965
+#, no-wrap
+msgid "March 20, 2015"
+msgstr "20 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2967
+#, no-wrap
+msgid "11.0-CURRENT after removal of SSLv2 support from OpenSSL."
+msgstr "11.0-CURRENT после удаления поддержки SSLv2 из OpenSSL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2968
+#, no-wrap
+msgid "1100067"
+msgstr "1100067"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2969
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280630[280630]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/280630[280630]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2970
+#, no-wrap
+msgid "March 25, 2015"
+msgstr "25 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2972
+#, no-wrap
+msgid "11.0-CURRENT after removal of SSLv2 support from man:fetch[1] and man:fetch[3]."
+msgstr "11.0-CURRENT после удаления поддержки SSLv2 из man:fetch[1] и man:fetch[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2973
+#, no-wrap
+msgid "1100068"
+msgstr "1100068"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2974
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281172[281172]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/281172[281172]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2975
+#, no-wrap
+msgid "April 6, 2015"
+msgstr "6 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2977
+#, no-wrap
+msgid "11.0-CURRENT after change to net.inet6.ip6.mif6table sysctl."
+msgstr "11.0-CURRENT после изменения системной настройки net.inet6.ip6.mif6table."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2978
+#, no-wrap
+msgid "1100069"
+msgstr "1100069"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2979
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281550[281550]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/281550[281550]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2980
+#, no-wrap
+msgid "April 15, 2015"
+msgstr "15 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2982
+#, no-wrap
+msgid "11.0-CURRENT after removal of const qualifier from man:iconv[3]."
+msgstr "11.0-CURRENT после удаления квалификатора const из man:iconv[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2983
+#, no-wrap
+msgid "1100070"
+msgstr "1100070"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2984
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281613[281613]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/281613[281613]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2985
+#, no-wrap
+msgid "April 16, 2015"
+msgstr "16 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2987
+#, no-wrap
+msgid "11.0-CURRENT after moving ALTQ from [.filename]#contrib# to [.filename]#net/altq#."
+msgstr "11.0-CURRENT после перемещения ALTQ из [.filename]#contrib# в [.filename]#net/altq#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2988
+#, no-wrap
+msgid "1100071"
+msgstr "1100071"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2989
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282256[282256]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/282256[282256]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2990
+#, no-wrap
+msgid "April 29, 2015"
+msgstr "29 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2992
+#, 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 "11.0-CURRENT после изменения API/ABI в man:smb[4] (rev link:https://svnweb.freebsd.org/changeset/base/281985[281985])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2993
+#, no-wrap
+msgid "1100072"
+msgstr "1100072"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2994
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282319[282319]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/282319[282319]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2995
+#, no-wrap
+msgid "May 1, 2015"
+msgstr "1 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2997
+#, no-wrap
+msgid "11.0-CURRENT after adding man:reallocarray[3] in libc (rev link:https://svnweb.freebsd.org/changeset/base/282314[282314])."
+msgstr "11.0-CURRENT после добавления man:reallocarray[3] в libc (изменение link:https://svnweb.freebsd.org/changeset/base/282314[282314])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2998
+#, no-wrap
+msgid "1100073"
+msgstr "1100073"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2999
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282650[282650]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/282650[282650]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3000
+#, no-wrap
+msgid "May 8, 2015"
+msgstr "8 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3002
+#, 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 "11.0-CURRENT после увеличения максимального количества разрешённых PCM-каналов в PCM-потоке до 127 и уменьшения максимального количества подканалов до 1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3003
+#, no-wrap
+msgid "1100074"
+msgstr "1100074"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3004
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283526[283526]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/283526[283526]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3005
+#, no-wrap
+msgid "May 25, 2015"
+msgstr "25 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3007
+#, 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 "11.0-CURRENT после добавления предварительной поддержки бинарных файлов Linux для x86-64 (rev link:https://svnweb.freebsd.org/changeset/base/283424[283424]) и обновления clang и llvm до версии 3.6.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3008
+#, no-wrap
+msgid "1100075"
+msgstr "1100075"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3009
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283623[283623]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/283623[283623]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3010
+#, no-wrap
+msgid "May 27, 2015"
+msgstr "27 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3012
+#, 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 "11.0-CURRENT после `dounmount()`, требующей ссылки на переданную структуру mount (изменение rev link:https://svnweb.freebsd.org/changeset/base/283602[283602])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3013
+#, no-wrap
+msgid "1100076"
+msgstr "1100076"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3014
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283983[283983]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/283983[283983]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3015
+#, no-wrap
+msgid "June 4, 2015"
+msgstr "4 июня 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3017
+#, no-wrap
+msgid "11.0-CURRENT after disabled generation of legacy formatted password databases entries by default."
+msgstr "11.0-CURRENT после отключения генерации записей в устаревших форматах баз данных паролей по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3018
+#, no-wrap
+msgid "1100077"
+msgstr "1100077"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3019
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284233[284233]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/284233[284233]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3020
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4113
+#, no-wrap
+msgid "June 10, 2015"
+msgstr "10 июня 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3022
+#, 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 "11.0-CURRENT после изменений API в `lim_cur`, `lim_max` и `lim_rlimit` (rev link:https://svnweb.freebsd.org/changeset/base/284215[284215])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3023
+#, no-wrap
+msgid "1100078"
+msgstr "1100078"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3024
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/286672[286672]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/286672[286672]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3025
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3240
+#, no-wrap
+msgid "August 12, 2015"
+msgstr "12 августа 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3027
+#, 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 "11.0-CURRENT после изменений man:crunchgen[1] в ревизиях link:https://svnweb.freebsd.org/changeset/base/284356[284356] до link:https://svnweb.freebsd.org/changeset/base/285986[285986]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3028
+#, no-wrap
+msgid "1100079"
+msgstr "1100079"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3029
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/286874[286874]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/286874[286874]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3030
+#, no-wrap
+msgid "August 18, 2015"
+msgstr "18 августа 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3032
+#, no-wrap
+msgid "11.0-CURRENT after import of jemalloc 4.0.0 (rev link:https://svnweb.freebsd.org/changeset/base/286866[286866])."
+msgstr "11.0-CURRENT после импорта jemalloc 4.0.0 (ревизия link:https://svnweb.freebsd.org/changeset/base/286866[286866])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3033
+#, no-wrap
+msgid "1100080"
+msgstr "1100080"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3034
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/288943[288943]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/288943[288943]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3035
+#, no-wrap
+msgid "October 5, 2015"
+msgstr "5 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3037
+#, no-wrap
+msgid "11.0-CURRENT after upgrading clang, llvm, lldb, compiler-rt and libc++ to 3.7.0."
+msgstr "11.0-CURRENT после обновления clang, llvm, lldb, compiler-rt и libc++ до версии 3.7.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3038
+#, no-wrap
+msgid "1100081"
+msgstr "1100081"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3039
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289415[289415]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/289415[289415]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3040
+#, no-wrap
+msgid "October 16, 2015"
+msgstr "16 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3042
+#, 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 "11.0-CURRENT после `обновления` ZFS для поддержки возобновляемой отправки/приёмки (rev link:https://svnweb.freebsd.org/changeset/base/289362[289362])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3043
+#, no-wrap
+msgid "1100082"
+msgstr "1100082"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3044
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289594[289594]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/289594[289594]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3045
+#, no-wrap
+msgid "October 19, 2015"
+msgstr "19 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3047
+#, no-wrap
+msgid "11.0-CURRENT after Linux KPI updates."
+msgstr "11.0-CURRENT после обновлений Linux KPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3048
+#, no-wrap
+msgid "1100083"
+msgstr "1100083"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3049
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289749[289749]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/289749[289749]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3050
+#, no-wrap
+msgid "October 22, 2015"
+msgstr "October 22, 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3052
+#, no-wrap
+msgid "11.0-CURRENT after renaming [.filename]#linuxapi.ko# to [.filename]#linuxkpi.ko#."
+msgstr "11.0-CURRENT после переименования [.filename]#linuxapi.ko# в [.filename]#linuxkpi.ko#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3053
+#, no-wrap
+msgid "1100084"
+msgstr "1100084"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3054
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290135[290135]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290135[290135]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3055
+#, no-wrap
+msgid "October 29, 2015"
+msgstr "29 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3057
+#, no-wrap
+msgid "11.0-CURRENT after moving the LinuxKPI module into the default kernel build."
+msgstr "11.0-CURRENT после перемещения модуля LinuxKPI в стандартную сборку ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3058
+#, no-wrap
+msgid "1100085"
+msgstr "1100085"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3059
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290207[290207]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290207[290207]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3060
+#, no-wrap
+msgid "October 30, 2015"
+msgstr "30 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3062
+#, no-wrap
+msgid "11.0-CURRENT after import of OpenSSL 1.0.2d."
+msgstr "11.0-CURRENT после импорта OpenSSL 1.0.2d."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3063
+#, no-wrap
+msgid "1100086"
+msgstr "1100086"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3064
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290275[290275]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290275[290275]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3065
+#, no-wrap
+msgid "November 2, 2015"
+msgstr "2 ноября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3067
+#, no-wrap
+msgid "11.0-CURRENT after making man:figpar[3] macros more unique."
+msgstr "11.0-CURRENT после изменения макросов man:figpar[3] для большей уникальности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3068
+#, no-wrap
+msgid "1100087"
+msgstr "1100087"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3069
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290479[290479]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290479[290479]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3070
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3075
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3080
+#, no-wrap
+msgid "November 7, 2015"
+msgstr "7 ноября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3072
+#, no-wrap
+msgid "11.0-CURRENT after changing man:sysctl_add_oid[9]'s ABI."
+msgstr "11.0-CURRENT после изменения ABI man:sysctl_add_oid[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3073
+#, no-wrap
+msgid "1100088"
+msgstr "1100088"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3074
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290495[290495]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290495[290495]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3077
+#, no-wrap
+msgid "11.0-CURRENT after string collation and locales rework."
+msgstr "11.0-CURRENT после переработки сортировки строк и локалей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3078
+#, no-wrap
+msgid "1100089"
+msgstr "1100089"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3079
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290505[290505]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290505[290505]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3082
+#, 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 "11.0-CURRENT после изменения API в man:sysctl_add_oid[9] (rev link:https://svnweb.freebsd.org/changeset/base/290475[290475])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3083
+#, no-wrap
+msgid "1100090"
+msgstr "1100090"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3084
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290715[290715]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/290715[290715]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3085
+#, no-wrap
+msgid "November 10, 2015"
+msgstr "10 ноября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3087
+#, no-wrap
+msgid "11.0-CURRENT after API change to callout_stop macro; (rev link:https://svnweb.freebsd.org/changeset/base/290664[290664])."
+msgstr "11.0-CURRENT после изменения API для макроса callout_stop; (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/290664[290664])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3088
+#, no-wrap
+msgid "1100091"
+msgstr "1100091"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3089
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/291537[291537]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/291537[291537]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3090
+#, no-wrap
+msgid "November 30, 2015"
+msgstr "30 ноября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3092
+#, 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 "11.0-CURRENT после изменения интерфейса между модулями [.filename]#nfsd.ko# и [.filename]#nfscommon.ko# в link:https://svnweb.freebsd.org/changeset/base/291527[291527]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3093
+#, no-wrap
+msgid "1100092"
+msgstr "1100092"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3094
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292499[292499]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/292499[292499]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3095
+#, no-wrap
+msgid "December 19, 2015"
+msgstr "19 декабря 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3097
+#, no-wrap
+msgid "11.0-CURRENT after removal of `vm_pageout_grow_cache` (rev link:https://svnweb.freebsd.org/changeset/base/292469[292469])."
+msgstr "11.0-CURRENT после удаления `vm_pageout_grow_cache` (изменение:https://svnweb.freebsd.org/changeset/base/292469[292469])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3098
+#, no-wrap
+msgid "1100093"
+msgstr "1100093"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3099
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292966[292966]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/292966[292966]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3100
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4153
+#, no-wrap
+msgid "December 30, 2015"
+msgstr "30 декабря 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3102
+#, no-wrap
+msgid "11.0-CURRENT after removal of sys/crypto/sha2.h (rev link:https://svnweb.freebsd.org/changeset/base/292782[292782])."
+msgstr "11.0-CURRENT после удаления sys/crypto/sha2.h (изменение link:https://svnweb.freebsd.org/changeset/base/292782[292782])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3103
+#, no-wrap
+msgid "1100094"
+msgstr "1100094"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3104
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294086[294086]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/294086[294086]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3105
+#, no-wrap
+msgid "January 15, 2016"
+msgstr "15 января 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3107
+#, no-wrap
+msgid "11.0-CURRENT after LinuxKPI PCI changes (rev link:https://svnweb.freebsd.org/changeset/base/294086[294086])."
+msgstr "11.0-CURRENT после изменений LinuxKPI PCI (rev link:https://svnweb.freebsd.org/changeset/base/294086[294086])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3108
+#, no-wrap
+msgid "1100095"
+msgstr "1100095"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3109
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294327[294327]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/294327[294327]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3110
+#, no-wrap
+msgid "January 19, 2016"
+msgstr "19 января 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3112
+#, no-wrap
+msgid "11.0-CURRENT after LRO optimizations."
+msgstr "11.0-CURRENT после оптимизаций LRO."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3113
+#, no-wrap
+msgid "1100096"
+msgstr "1100096"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3114
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294505[294505]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/294505[294505]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3115
+#, no-wrap
+msgid "January 21, 2016"
+msgstr "21 января 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3117
+#, no-wrap
+msgid "11.0-CURRENT after LinuxKPI idr_* additions."
+msgstr "11.0-CURRENT после добавления LinuxKPI idr_*."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3118
+#, no-wrap
+msgid "1100097"
+msgstr "1100097"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3119
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294860[294860]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/294860[294860]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3120
+#, no-wrap
+msgid "January 26, 2016"
+msgstr "26 января 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3122
+#, no-wrap
+msgid "11.0-CURRENT after API change to man:dpv[3]."
+msgstr "11.0-CURRENT после изменения API в man:dpv[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3123
+#, no-wrap
+msgid "1100098"
+msgstr "1100098"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3124
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295682[295682]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/295682[295682]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3125
+#, no-wrap
+msgid "February 16, 2016"
+msgstr "16 февраля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3127
+#, no-wrap
+msgid "11.0-CURRENT after API change to `rman` (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883])."
+msgstr "11.0-CURRENT после изменения API в `rman` (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3128
+#, no-wrap
+msgid "1100099"
+msgstr "1100099"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3129
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295739[295739]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/295739[295739]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3130
+#, no-wrap
+msgid "February 18, 2016"
+msgstr "18 февраля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3132
+#, no-wrap
+msgid "11.0-CURRENT after allowing drivers to set the TCP ACK/data segment aggregation limit."
+msgstr "11.0-CURRENT после разрешения драйверам устанавливать лимит агрегации сегментов TCP ACK/данных."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3133
+#, no-wrap
+msgid "1100100"
+msgstr "1100100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3134
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296136[296136]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296136[296136]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3135
+#, no-wrap
+msgid "February 26, 2016"
+msgstr "26 февраля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3137
+#, no-wrap
+msgid "11.0-CURRENT after man:bus_alloc_resource_any[9] API addition."
+msgstr "11.0-CURRENT после добавления API man:bus_alloc_resource_any[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3138
+#, no-wrap
+msgid "1100101"
+msgstr "1100101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3139
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296417[296417]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296417[296417]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3140
+#, no-wrap
+msgid "March 5, 2016"
+msgstr "5 марта 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3142
+#, no-wrap
+msgid "11.0-CURRENT after upgrading copies of clang, llvm, lldb and compiler-rt to 3.8.0 release."
+msgstr "11.0-CURRENT после обновления копий clang, llvm, lldb и compiler-rt до релиза 3.8.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3143
+#, no-wrap
+msgid "1100102"
+msgstr "1100102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3144
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296749[296749]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296749[296749]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3145
+#, no-wrap
+msgid "March 12, 2016"
+msgstr "12 марта 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3147
+#, no-wrap
+msgid "11.0-CURRENT after libelf cross-endian fix in rev link:https://svnweb.freebsd.org/changeset/base/296685[296685]."
+msgstr "11.0-CURRENT после исправления кросс-эндианности libelf в ревизии link:https://svnweb.freebsd.org/changeset/base/296685[296685]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3148
+#, no-wrap
+msgid "1100103"
+msgstr "1100103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3149
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297000[297000]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/297000[297000]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3150
+#, no-wrap
+msgid "March 18, 2016"
+msgstr "18 марта 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3152
+#, no-wrap
+msgid "11.0-CURRENT after using `uintmax_t` for `rman` ranges."
+msgstr "11.0-CURRENT после использования `uintmax_t` для диапазонов `rman`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3153
+#, no-wrap
+msgid "1100104"
+msgstr "1100104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3154
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297156[297156]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/297156[297156]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3155
+#, no-wrap
+msgid "March 21, 2016"
+msgstr "21 марта 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3157
+#, no-wrap
+msgid "11.0-CURRENT after tracking `filemon` usage via a proc.p_filemon pointer rather than its own lists."
+msgstr "11.0-CURRENT после отслеживания использования `filemon` через указатель proc.p_filemon вместо собственных списков."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3158
+#, no-wrap
+msgid "1100105"
+msgstr "1100105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3159
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297602[297602]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/297602[297602]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3160
+#, no-wrap
+msgid "April 6, 2016"
+msgstr "6 апреля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3162
+#, no-wrap
+msgid "11.0-CURRENT after fixing sed functions `i` and `a` from discarding leading space."
+msgstr "11.0-CURRENT после исправления функций `i` и `a` в sed, которые отбрасывали начальные пробелы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3163
+#, no-wrap
+msgid "1100106"
+msgstr "1100106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3164
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/298486[298486]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/298486[298486]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3165
+#, no-wrap
+msgid "April 22, 2016"
+msgstr "22 апреля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3167
+#, no-wrap
+msgid "11.0-CURRENT after fixes for using IPv6 addresses with RDMA."
+msgstr "11.0-CURRENT после исправлений для использования IPv6-адресов с RDMA."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3168
+#, no-wrap
+msgid "1100107"
+msgstr "1100107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3169
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299090[299090]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/299090[299090]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3170
+#, no-wrap
+msgid "May 4, 2016"
+msgstr "4 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3172
+#, no-wrap
+msgid "11.0-CURRENT after improving performance and functionality of the man:bitstring[3] API."
+msgstr "11.0-CURRENT после улучшения производительности и функциональности API man:bitstring[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3173
+#, no-wrap
+msgid "1100108"
+msgstr "1100108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3174
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299530[299530]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/299530[299530]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3175
+#, no-wrap
+msgid "May 12, 2016"
+msgstr "12 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3177
+#, no-wrap
+msgid "11.0-CURRENT after fixing handling of IOCTLs in the LinuxKPI."
+msgstr "11.0-CURRENT после исправления обработки IOCTL в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3178
+#, no-wrap
+msgid "1100109"
+msgstr "1100109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3179
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299933[299933]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/299933[299933]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3180
+#, no-wrap
+msgid "May 16, 2016"
+msgstr "16 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3182
+#, no-wrap
+msgid "11.0-CURRENT after implementing more Linux device related functions in the LinuxKPI."
+msgstr "11.0-CURRENT после реализации дополнительных функций, связанных с устройствами Linux, в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3183
+#, no-wrap
+msgid "1100110"
+msgstr "1100110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3184
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300207[300207]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300207[300207]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3185
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4726
+#, no-wrap
+msgid "May 19, 2016"
+msgstr "19 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3187
+#, no-wrap
+msgid "11.0-CURRENT after adding support for managing Shingled Magnetic Recording (SMR) drives."
+msgstr "11.0-CURRENT после добавления поддержки управления дисками с черепичной магнитной записью (Shingled Magnetic Recording, SMR)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3188
+#, no-wrap
+msgid "1100111"
+msgstr "1100111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3189
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300303[300303]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300303[300303]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3190
+#, no-wrap
+msgid "May 20, 2016"
+msgstr "20 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3192
+#, no-wrap
+msgid "11.0-CURRENT after removing `brk` and `sbrk` from arm64."
+msgstr "11.0-CURRENT после удаления `brk` и `sbrk` из arm64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3193
+#, no-wrap
+msgid "1100112"
+msgstr "1100112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3194
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300539[300539]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300539[300539]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3195
+#, no-wrap
+msgid "May 23, 2016"
+msgstr "23 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3197
+#, no-wrap
+msgid "11.0-CURRENT after adding `bit_count` to the man:bitstring[3] API."
+msgstr "11.0-CURRENT после добавления `bit_count` в man:bitstring[3] API."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3198
+#, no-wrap
+msgid "1100113"
+msgstr "1100113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3199
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300701[300701]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300701[300701]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3200
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3205
+#, no-wrap
+msgid "May 26, 2016"
+msgstr "26 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3202
+#, no-wrap
+msgid "11.0-CURRENT after disabling alignment faults on armv6."
+msgstr "11.0-CURRENT после отключения ошибок выравнивания на armv6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3203
+#, no-wrap
+msgid "1100114"
+msgstr "1100114"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3204
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300806[300806]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300806[300806]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3207
+#, no-wrap
+msgid "11.0-CURRENT after fixing man:crunchgen[1] usage with `MAKEOBJDIRPREFIX`."
+msgstr "11.0-CURRENT после исправления использования man:crunchgen[1] с `MAKEOBJDIRPREFIX`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3208
+#, no-wrap
+msgid "1100115"
+msgstr "1100115"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3209
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300982[300982]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300982[300982]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3210
+#, no-wrap
+msgid "May 30, 2016"
+msgstr "30 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3212
+#, no-wrap
+msgid "11.0-CURRENT after adding an mbuf flag for `M_HASHTYPE_`."
+msgstr "11.0-CURRENT после добавления флага mbuf для `M_HASHTYPE_`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3213
+#, no-wrap
+msgid "1100116"
+msgstr "1100116"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3214
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/301011[301011]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/301011[301011]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3215
+#, no-wrap
+msgid "May 31, 2016"
+msgstr "31 мая 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3217
+#, 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 "11.0-CURRENT после добавления SHA-512t256 (ревизия link:https://svnweb.freebsd.org/changeset/base/300903[300903]) и Skein (ревизия link:https://svnweb.freebsd.org/changeset/base/300966[300966]) в libmd, libcrypt, ядро и ZFS (ревизия link:https://svnweb.freebsd.org/changeset/base/301010[301010])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3218
+#, no-wrap
+msgid "1100117"
+msgstr "1100117"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3219
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/301892[301892]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/301892[301892]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3220
+#, no-wrap
+msgid "June 6, 2016"
+msgstr "6 июня 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3222
+#, 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 "11.0-CURRENT после синхронизации libpam с основной версией link:https://svnweb.freebsd.org/changeset/base/301602[301602], что привело к увеличению версии библиотеки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3223
+#, no-wrap
+msgid "1100118"
+msgstr "1100118"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3224
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302071[302071]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302071[302071]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3225
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4203
+#, no-wrap
+msgid "June 21, 2016"
+msgstr "21 июня 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3227
+#, no-wrap
+msgid "11.0-CURRENT after breaking binary compatibility of struct disk link:https://svnweb.freebsd.org/changeset/base/302069[302069]."
+msgstr "11.0-CURRENT после нарушения бинарной совместимости структуры disk link:https://svnweb.freebsd.org/changeset/base/302069[302069]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3228
+#, no-wrap
+msgid "1100119"
+msgstr "1100119"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3229
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302150[302150]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302150[302150]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3230
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3235
+#, no-wrap
+msgid "June 23, 2016"
+msgstr "23 июня 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3232
+#, no-wrap
+msgid "11.0-CURRENT after switching `geom_disk` to using a pool mutex."
+msgstr "11.0-CURRENT после перевода `geom_disk` на использование мьютекса пула."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3233
+#, no-wrap
+msgid "1100120"
+msgstr "1100120"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3234
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302153[302153]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302153[302153]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3237
+#, no-wrap
+msgid "11.0-CURRENT after adding spares to struct ifnet."
+msgstr "11.0-CURRENT после добавления запасных элементов в struct ifnet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3238
+#, no-wrap
+msgid "1100121"
+msgstr "1100121"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3239
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3244
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/303979[303979]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/303979[303979]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3242
+#, no-wrap
+msgid "11-STABLE after `releng/11.0` branched from 11-STABLE (rev link:https://svnweb.freebsd.org/changeset/base/303975[303975])."
+msgstr "11-STABLE после того, как ветка `releng/11.0` отделилась от 11-STABLE (изменение:https://svnweb.freebsd.org/changeset/base/303975[303975])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3243
+#, no-wrap
+msgid "1100500"
+msgstr "1100500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3245
+#, no-wrap
+msgid "August 12, 2016"
+msgstr "12 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3247
+#, no-wrap
+msgid "11.0-STABLE adding branched link:https://svnweb.freebsd.org/changeset/base/303976[303976]."
+msgstr "11.0-STABLE добавлена ветвленная link: https://svnweb.freebsd.org/changeset/base/303976[303976]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3248
+#, no-wrap
+msgid "1100501"
+msgstr "1100501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3249
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304609[304609]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304609[304609]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3252
+#, no-wrap
+msgid "11.0-STABLE after adding C++11 `thread_local` support."
+msgstr "11.0-STABLE после добавления поддержки `thread_local` в C++11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3253
+#, no-wrap
+msgid "1100502"
+msgstr "1100502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3254
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304865[304865]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304865[304865]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3255
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4218
+#, no-wrap
+msgid "August 26, 2016"
+msgstr "26 августа 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3257
+#, no-wrap
+msgid "11.0-STABLE after `LC_*_MASK` fix."
+msgstr "11.0-STABLE после исправления `LC_*_MASK`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3258
+#, no-wrap
+msgid "1100503"
+msgstr "1100503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3259
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305733[305733]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305733[305733]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3260
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4223
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4731
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5504
+#, no-wrap
+msgid "September 12, 2016"
+msgstr "12 сентября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3262
+#, no-wrap
+msgid "11.0-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr "11.0-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3263
+#, no-wrap
+msgid "1100504"
+msgstr "1100504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3264
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307330[307330]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/307330[307330]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3265
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4228
+#, no-wrap
+msgid "October 14, 2016"
+msgstr "14 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3267
+#, no-wrap
+msgid "11.0-STABLE after ZFS merges."
+msgstr "11.0-STABLE после объединения ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3268
+#, no-wrap
+msgid "1100505"
+msgstr "1100505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3269
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307590[307590]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/307590[307590]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3270
+#, no-wrap
+msgid "October 19, 2016"
+msgstr "19 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3272
+#, no-wrap
+msgid "11.0-STABLE after `struct fb_info` change."
+msgstr "11.0-STABLE после изменения `struct fb_info`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3273
+#, no-wrap
+msgid "1100506"
+msgstr "1100506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3274
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308048[308048]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/308048[308048]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3275
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4233
+#, no-wrap
+msgid "October 28, 2016"
+msgstr "28 октября 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3277
+#, no-wrap
+msgid "11.0-STABLE after installing header files required development with `libzfs_core`."
+msgstr "11.0-STABLE после установки заголовочных файлов, необходимых для разработки с `libzfs_core`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3278
+#, no-wrap
+msgid "1100507"
+msgstr "1100507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3279
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310120[310120]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/310120[310120]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3280
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4238
+#, no-wrap
+msgid "December 15, 2016"
+msgstr "15 декабря 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3282
+#, 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 "11.0-STABLE после добавления члена `ki_moretdname` в структуры `struct kinfo_proc` и `struct kinfo_proc32` для экспорта полного имени потока в пользовательские утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3283
+#, no-wrap
+msgid "1100508"
+msgstr "1100508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3284
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310618[310618]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/310618[310618]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3285
+#, no-wrap
+msgid "December 26, 2016"
+msgstr "26 декабря 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3287
+#, 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 "11.0-STABLE после обновления копий clang, llvm, lldb, compiler-rt и libc++ до версии 3.9.1, а также добавления lld 3.9.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3288
+#, no-wrap
+msgid "1100509"
+msgstr "1100509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3289
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/311186[311186]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/311186[311186]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3290
+#, no-wrap
+msgid "January 3, 2017"
+msgstr "3 января 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3292
+#, no-wrap
+msgid "11.0-STABLE after man:crunchgen[1] META_MODE fix (rev link:https://svnweb.freebsd.org/changeset/base/311185[311185])."
+msgstr "11.0-STABLE после исправления META_MODE в man:crunchgen[1] (изменение link:https://svnweb.freebsd.org/changeset/base/311185[311185])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3293
+#, no-wrap
+msgid "1100510"
+msgstr "1100510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3294
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315312[315312]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/315312[315312]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3295
+#, no-wrap
+msgid "March 15, 2017"
+msgstr "15 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3297
+#, no-wrap
+msgid "11.0-STABLE after MFC of `fget_cap`, `getsock_cap`, and related changes."
+msgstr "11.0-STABLE после MFC изменений, связанных с `fget_cap`, `getsock_cap` и другими."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3298
+#, no-wrap
+msgid "1100511"
+msgstr "1100511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3299
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316423[316423]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/316423[316423]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3300
+#, no-wrap
+msgid "April 2, 2017"
+msgstr "2 апреля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3302
+#, no-wrap
+msgid "11.0-STABLE after multiple MFCs updating clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0 release."
+msgstr "11.0-STABLE после нескольких MFC, обновляющих clang, llvm, lld, lldb, compiler-rt и libc++ до версии 4.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3303
+#, no-wrap
+msgid "1100512"
+msgstr "1100512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3304
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316498[316498]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/316498[316498]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3305
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4248
+#, no-wrap
+msgid "April 4, 2017"
+msgstr "4 апреля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3307
+#, 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 "11.0-STABLE после того, как блокировка CAM SIM стала опциональной (ревизии link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3308
+#, no-wrap
+msgid "1100513"
+msgstr "1100513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3309
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318197[318197]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/318197[318197]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3310
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4253
+#, no-wrap
+msgid "May 11, 2017"
+msgstr "11 мая 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3312
+#, no-wrap
+msgid "11.0-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr "11.0-STABLE после объединения добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3313
+#, no-wrap
+msgid "1100514"
+msgstr "1100514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3314
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/319279[319279]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/319279[319279]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3315
+#, no-wrap
+msgid "May 31, 2017"
+msgstr "31 мая 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3317
+#, no-wrap
+msgid "11.0-STABLE after multiple MFCs of `libpcap`, `WITHOUT_INET6`, and a few other minor changes."
+msgstr "11.0-STABLE после нескольких MFC для `libpcap`, `WITHOUT_INET6` и нескольких других незначительных изменений."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3318
+#, no-wrap
+msgid "1101000"
+msgstr "1101000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3319
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320486[320486]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320486[320486]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3320
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3325
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3330
+#, no-wrap
+msgid "June 30, 2017"
+msgstr "June 30, 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3322
+#, no-wrap
+msgid "`releng/11.1` branched from `stable/11`."
+msgstr "`releng/11.1` отделился от `stable/11`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3323
+#, no-wrap
+msgid "1101001"
+msgstr "1101001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3324
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320763[320763]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320763[320763]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3327
+#, no-wrap
+msgid "11.1-RC1 After merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr "11.1-RC1 После объединения добавления флага `MAP_GUARD` в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3328
+#, no-wrap
+msgid "1101500"
+msgstr "1101500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3329
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320487[320487]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320487[320487]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3332
+#, no-wrap
+msgid "11-STABLE after `releng/11.1` branched."
+msgstr "11-STABLE после ветвления `releng/11.1`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3333
+#, no-wrap
+msgid "1101501"
+msgstr "1101501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3334
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320666[320666]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/320666[320666]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3335
+#, no-wrap
+msgid "July 5, 2017"
+msgstr "5 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3337
+#, no-wrap
+msgid "11-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr "11-STABLE после объединения добавления флага `MAP_GUARD` в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3338
+#, no-wrap
+msgid "1101502"
+msgstr "1101502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3342
+#, no-wrap
+msgid "11-STABLE after merging the NFS client forced dismount support `umount -N` addition."
+msgstr "11-STABLE после объединения поддержки принудительного демонтирования клиента NFS с добавлением `umount -N`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3343
+#, no-wrap
+msgid "1101503"
+msgstr "1101503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3344
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323431[323431]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323431[323431]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3345
+#, no-wrap
+msgid "September 11, 2017"
+msgstr "11 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3347
+#, no-wrap
+msgid "11-STABLE after merging changes making the WRFSBASE instruction operational on amd64."
+msgstr "11-STABLE после объединения изменений, сделавших инструкцию WRFSBASE работоспособной на amd64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3348
+#, no-wrap
+msgid "1101504"
+msgstr "1101504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3349
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324006[324006]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324006[324006]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3352
+#, 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 "11-STABLE после слияния libm из head, что добавляет man:cacoshl[3], man:cacosl[3], man:casinhl[3], man:casinl[3], man:catanl[3], man:catanhl[3], man:sincos[3], man:sincosf[3] и man:sincosl[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3353
+#, no-wrap
+msgid "1101505"
+msgstr "1101505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3354
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324023[324023]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/324023[324023]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3357
+#, no-wrap
+msgid "11-STABLE after merging clang, llvm, lld, lldb, compiler-rt and libc++ 5.0.0 release."
+msgstr "11-STABLE после объединения clang, llvm, lld, lldb, compiler-rt и libc++ версии 5.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3358
+#, no-wrap
+msgid "1101506"
+msgstr "1101506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3359
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325003[325003]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/325003[325003]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3360
+#, no-wrap
+msgid "October 25, 2017"
+msgstr "25 октября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3362
+#, 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 "11-STABLE после слияния link:https://svnweb.freebsd.org/changeset/base/324281[324281], добавления поля `value.u16` в структуру `struct diocgattr_arg`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3363
+#, no-wrap
+msgid "1101507"
+msgstr "1101507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3364
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4277
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328379[328379]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/328379[328379]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3365
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3370
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4278
+#, no-wrap
+msgid "January 24, 2018"
+msgstr "24 января 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3367
+#, 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 "11-STABLE после слияния с link:https://svnweb.freebsd.org/changeset/base/325028[325028], исправление `ptrace()` для корректной очистки события нужного потока при возобновлении."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3368
+#, no-wrap
+msgid "1101508"
+msgstr "1101508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3369
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328386[328386]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/328386[328386]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3372
+#, 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 "11-STABLE после объединения изменений link:https://svnweb.freebsd.org/changeset/base/316648[316648], переименование `smp_no_rendevous_barrier()` в `smp_no_rendezvous_barrier()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3373
+#, no-wrap
+msgid "1101509"
+msgstr "1101509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3374
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328653[328653]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/328653[328653]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3375
+#, no-wrap
+msgid "February 1, 2018"
+msgstr "1 февраля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3377
+#, no-wrap
+msgid "11-STABLE after an overwrite merge backport of the LinuxKPI from FreeBSD-head."
+msgstr "11-STABLE после обратного переноса (overwrite merge) LinuxKPI из FreeBSD-head."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3378
+#, no-wrap
+msgid "1101510"
+msgstr "1101510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3379
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329450[329450]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/329450[329450]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3380
+#, no-wrap
+msgid "February 17, 2018"
+msgstr "17 февраля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3382
+#, no-wrap
+msgid "11-STABLE after the `cmpxchg()` macro is now fully functional in the LinuxKPI."
+msgstr "11-STABLE после того, как макрос `cmpxchg()` стал полностью функциональным в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3383
+#, no-wrap
+msgid "1101511"
+msgstr "1101511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3384
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329981[329981]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/329981[329981]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3385
+#, no-wrap
+msgid "February 25, 2018"
+msgstr "25 февраля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3387
+#, no-wrap
+msgid "11-STABLE after concluding the recent LinuxKPI related updates."
+msgstr "11-STABLE после завершения недавних обновлений, связанных с LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3388
+#, no-wrap
+msgid "1101512"
+msgstr "1101512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3389
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/331219[331219]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/331219[331219]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3390
+#, no-wrap
+msgid "March 19, 2018"
+msgstr "19 марта 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3392
+#, no-wrap
+msgid "11-STABLE after merging `retpoline` support from the upstream llvm, clang and lld 5.0 branches."
+msgstr "11-STABLE после объединения поддержки `retpoline` из вышестоящих веток llvm, clang и lld 5.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3393
+#, no-wrap
+msgid "1101513"
+msgstr "1101513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3394
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/331838[331838]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/331838[331838]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3395
+#, no-wrap
+msgid "March 31, 2018"
+msgstr "31 марта 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3397
+#, 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 "11-STABLE после объединения clang, llvm, lld, lldb, compiler-rt и libc++ версии 6.0.0, а также нескольких последующих исправлений."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3398
+#, no-wrap
+msgid "1101514"
+msgstr "1101514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3399
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332089[332089]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/332089[332089]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3400
+#, no-wrap
+msgid "April 5, 2018"
+msgstr "5 апреля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3402
+#, 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 "11-STABLE после объединения изменений link:https://svnweb.freebsd.org/changeset/base/328331[328331], добавляющего новую и несовместимую интерпретацию `${name}_limits` в rc-скриптах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3403
+#, no-wrap
+msgid "1101515"
+msgstr "1101515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3404
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332363[332363]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/332363[332363]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3405
+#, no-wrap
+msgid "April 10, 2018"
+msgstr "10 апреля 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3407
+#, 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 "11-STABLE после отмены изменений из link:https://svnweb.freebsd.org/changeset/base/331880[331880], удаляющих новую и несовместимую интерпретацию `${name}_limits` в rc-скриптах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3408
+#, no-wrap
+msgid "1101516"
+msgstr "1101516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3409
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334392[334392]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334392[334392]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3410
+#, no-wrap
+msgid "May 30, 2018"
+msgstr "30 мая 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3412
+#, no-wrap
+msgid "11-STABLE after man:dwatch[1] touch-ups."
+msgstr "11-STABLE после доработок man:dwatch[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3413
+#, no-wrap
+msgid "1102000"
+msgstr "1102000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3414
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334459[334459]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334459[334459]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3417
+#, no-wrap
+msgid "`releng/11.2` branched from `stable/11`."
+msgstr "`releng/11.2` отделился от `stable/11`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3418
+#, no-wrap
+msgid "1102500"
+msgstr "1102500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3419
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334461[334461]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/334461[334461]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3422
+#, no-wrap
+msgid "11-STABLE after releng/11.2 branched."
+msgstr "11-STABLE после ветвления releng/11.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3423
+#, no-wrap
+msgid "1102501"
+msgstr "1102501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3424
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335436[335436]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/335436[335436]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3425
+#, no-wrap
+msgid "June 20, 2018"
+msgstr "June 20, 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3427
+#, no-wrap
+msgid "11-STABLE after LinuxKPI updates requiring recompilation of external kernel modules."
+msgstr "11-STABLE после обновлений LinuxKPI, требующих перекомпиляции внешних модулей ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3428
+#, no-wrap
+msgid "1102502"
+msgstr "1102502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3429
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338617[338617]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338617[338617]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3430
+#, no-wrap
+msgid "September 12, 2018"
+msgstr "12 сентября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3432
+#, 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 "11-STABLE после добавления сокет-опции SO_TS_CLOCK и исправления системного вызова `recvmsg32()` для корректного преобразования структуры 64-битных данных в формат, ожидаемый 32-битными приложениями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3433
+#, no-wrap
+msgid "1102503"
+msgstr "1102503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3434
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338931[338931]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/338931[338931]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3435
+#, no-wrap
+msgid "September 25, 2018"
+msgstr "25 сентября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3437
+#, 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 "11-STABLE после объединения исправления контрольной суммы TCP в man:iflib[9] и добавления новых типов носителей в if_media.h"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3438
+#, no-wrap
+msgid "1102504"
+msgstr "1102504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3439
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340309[340309]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/340309[340309]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3440
+#, no-wrap
+msgid "November 9, 2018"
+msgstr "9 ноября 2018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3442
+#, 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 "11-STABLE после нескольких MFC: обновление man:objcopy[1] для корректной обработки little-endian MIPS64 объектов; исправление теста mips64el для использования заголовка ELF; добавление теста для 64-битного ELF в _libelf_is_mips64el."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3443
+#, no-wrap
+msgid "1102505"
+msgstr "1102505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3444
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342804[342804]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/342804[342804]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3447
+#, no-wrap
+msgid "11-STABLE after merge of fixing `linux_destroy_dev()` behaviour when there are still files open from the destroying cdev."
+msgstr "11-STABLE после слияния исправления поведения `linux_destroy_dev()`, когда остаются открытые файлы из уничтожаемого cdev."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3448
+#, no-wrap
+msgid "1102506"
+msgstr "1102506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3449
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344220[344220]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/344220[344220]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3450
+#, no-wrap
+msgid "February 17, 2019"
+msgstr "17 февраля 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3452
+#, no-wrap
+msgid "11-STABLE after merging multiple commits to lualoader."
+msgstr "11-STABLE после объединения нескольких коммитов в lualoader."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3453
+#, no-wrap
+msgid "1102507"
+msgstr "1102507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3454
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346296[346296]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/346296[346296]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3457
+#, no-wrap
+msgid "11-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365."
+msgstr "11-STABLE после объединения llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp 8.0.0 финальный релиз r356365."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3458
+#, no-wrap
+msgid "1102508"
+msgstr "1102508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3462
+#, no-wrap
+msgid "11-STABLE after `ether_gen_addr` availability."
+msgstr "11-STABLE после появления `ether_gen_addr`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3463
+#, no-wrap
+msgid "1102509"
+msgstr "1102509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3464
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347212[347212]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347212[347212]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3467
+#, 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 "11-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] и частично link:https://svnweb.freebsd.org/changeset/base/345305[345305]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3468
+#, no-wrap
+msgid "1102510"
+msgstr "1102510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3469
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347883[347883]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/347883[347883]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3472
+#, no-wrap
+msgid "11-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr "11-STABLE после увеличения номеров версий драйверов Mellanox (man:mlx4en[4]; man:mlx5en[4])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3473
+#, no-wrap
+msgid "1103000"
+msgstr "1103000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3474
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349026[349026]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349026[349026]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3475
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3480
+#, no-wrap
+msgid "June 14, 2019"
+msgstr "14 июня 2019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3477
+#, no-wrap
+msgid "`releng/11.3` branched from `stable/11`."
+msgstr "`releng/11.3` отделился от `stable/11`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3478
+#, no-wrap
+msgid "1103500"
+msgstr "1103500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3479
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349027[349027]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/349027[349027]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3482
+#, no-wrap
+msgid "11-STABLE after releng/11.3 branched."
+msgstr "11-STABLE после ветвления releng/11.3."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3483
+#, no-wrap
+msgid "1103501"
+msgstr "1103501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3487
+#, no-wrap
+msgid "11-STABLE after fixing a potential OOB read security issue in libc++."
+msgstr "11-STABLE после исправления потенциальной проблемы безопасности OOB-чтения в libc++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3488
+#, no-wrap
+msgid "1103502"
+msgstr "1103502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3489
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354614[354614]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354614[354614]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3492
+#, no-wrap
+msgid "11-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr "11-STABLE после добавления функций создания/удаления sysfs, обрабатывающих несколько файлов за один вызов в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3493
+#, no-wrap
+msgid "1103503"
+msgstr "1103503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3494
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354615[354615]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354615[354615]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3497
+#, no-wrap
+msgid "11-STABLE after LinuxKPI sysfs improvements."
+msgstr "11-STABLE после улучшений LinuxKPI sysfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3498
+#, no-wrap
+msgid "1103504"
+msgstr "1103504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3499
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354616[354616]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/354616[354616]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3502
+#, no-wrap
+msgid "11-STABLE after enabling device class group attributes in the LinuxKPI."
+msgstr "11-STABLE после включения атрибутов группы классов устройств в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3503
+#, no-wrap
+msgid "1103505"
+msgstr "1103505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3507
+#, no-wrap
+msgid "11-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr "11-STABLE после добавления расширений `sigsetop`, которые часто встречаются в musl libc и glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3508
+#, no-wrap
+msgid "1103506"
+msgstr "1103506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3509
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356395[356395]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356395[356395]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3512
+#, no-wrap
+msgid "11-STABLE after making USB statistics be per-device instead of per bus."
+msgstr "11-STABLE после изменения статистики USB для каждого устройства вместо каждой шины."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3513
+#, no-wrap
+msgid "1103507"
+msgstr "1103507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3514
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356680[356680]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356680[356680]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3517
+#, no-wrap
+msgid "11-STABLE after adding own counter for cancelled USB transfers."
+msgstr "11-STABLE после добавления собственного счетчика для отмененных USB-передач."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3518
+#, no-wrap
+msgid "1103508"
+msgstr "1103508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3519
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357613[357613]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/357613[357613]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3522
+#, no-wrap
+msgid "11-STABLE after recent LinuxKPI changes."
+msgstr "11-STABLE после недавних изменений в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3523
+#, no-wrap
+msgid "1103509"
+msgstr "1103509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3524
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359958[359958]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/359958[359958]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3527
+#, no-wrap
+msgid "11-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI."
+msgstr "11-STABLE после перемещения `id_mapped` в конец структуры `bus_dma_impl` для сохранения KPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3528
+#, no-wrap
+msgid "1103510"
+msgstr "1103510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3529
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360658[360658]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360658[360658]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3530
+#, no-wrap
+msgid "May 5, 2020"
+msgstr "5 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3532
+#, 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 "11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до финального релиза 9.0.0 r372316."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3533
+#, no-wrap
+msgid "1103511"
+msgstr "1103511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3534
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360784[360784]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360784[360784]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3537
+#, no-wrap
+msgid "11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr "11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3538
+#, no-wrap
+msgid "1104000"
+msgstr "1104000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3539
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360804[360804]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360804[360804]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3540
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3545
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3550
+#, no-wrap
+msgid "May 8, 2020"
+msgstr "8 мая 2020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3542
+#, no-wrap
+msgid "`releng/11.4` branched from `stable/11`."
+msgstr "`releng/11.4` ответвился от `stable/11`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3543
+#, no-wrap
+msgid "1104001"
+msgstr "1104001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3544
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360822[360822]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360822[360822]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3547
+#, no-wrap
+msgid "11.4-BETA1 after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr "11.4-BETA1 после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3548
+#, no-wrap
+msgid "1104500"
+msgstr "1104500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3549
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360805[360805]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/360805[360805]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3552
+#, no-wrap
+msgid "11-STABLE after releng/11.4 branched."
+msgstr "11-STABLE после ветвления releng/11.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3553
+#, no-wrap
+msgid "1104501"
+msgstr "1104501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3554
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362320[362320]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362320[362320]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3557
+#, no-wrap
+msgid "11-STABLE after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr "11-STABLE после реализации макроса функции `__is_constexpr()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3558
+#, no-wrap
+msgid "1104502"
+msgstr "1104502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3559
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362919[362919]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/362919[362919]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3562
+#, no-wrap
+msgid "11-STABLE after making liblzma use libmd implementation of SHA256."
+msgstr "11-STABLE после перевода liblzma на использование реализации SHA256 из libmd."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3563
+#, no-wrap
+msgid "1104503"
+msgstr "1104503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3564
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363496[363496]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363496[363496]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3567
+#, no-wrap
+msgid "11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release."
+msgstr "11-STABLE после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии 10.0.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3568
+#, no-wrap
+msgid "1104504"
+msgstr "1104504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3569
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363792[363792]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/363792[363792]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3572
+#, no-wrap
+msgid "11-STABLE after implementing the `array_size()` function in the LinuxKPI."
+msgstr "11-STABLE после реализации функции `array_size()` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3573
+#, no-wrap
+msgid "1104505"
+msgstr "1104505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3574
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364391[364391]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/364391[364391]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3577
+#, no-wrap
+msgid "11-STABLE after change to clone the task struct fields related to RCU."
+msgstr "11-STABLE после изменения для клонирования полей структуры задачи, связанных с RCU."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3578
+#, no-wrap
+msgid "1104506"
+msgstr "1104506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3582
+#, no-wrap
+msgid "11-STABLE after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr "11-STABLE после добавления атомарных функций и функций `bswap` в libcompiler_rt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3583
+#, no-wrap
+msgid "1104507"
+msgstr "1104507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3587
+#, no-wrap
+msgid "11-STABLE after followup commits to libcompiler_rt."
+msgstr "11-STABLE после последующих коммитов в libcompiler_rt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3588
+#, no-wrap
+msgid "1104508"
+msgstr "1104508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3589
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366879[366879]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366879[366879]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3592
+#, no-wrap
+msgid "11-STABLE after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr "11-STABLE после заполнения поля контекста получения в `ww_mutex` в LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3593
+#, no-wrap
+msgid "1104509"
+msgstr "1104509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3594
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366889[366889]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/366889[366889]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3597
+#, no-wrap
+msgid "11-STABLE after additions to LinuxKPI's `RCU` list."
+msgstr "11-STABLE после добавлений в список `RCU` LinuxKPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3598
+#, no-wrap
+msgid "1104510"
+msgstr "1104510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3599
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367513[367513]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/367513[367513]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3601
+#, no-wrap
+msgid "11-STABLE after the addition of `ptsname_r`."
+msgstr "11-STABLE после добавления `ptsname_r`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3604
+#, no-wrap
+msgid "FreeBSD 10 Versions"
+msgstr "Версии FreeBSD 10"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3607
+#, no-wrap
+msgid "FreeBSD 10 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 10"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3616
+#, no-wrap
+msgid "1000000"
+msgstr "1000000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3617
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225757[225757]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/225757[225757]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3618
+#, no-wrap
+msgid "September 26, 2011"
+msgstr "26 сентября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3620
+#, no-wrap
+msgid "10.0-CURRENT."
+msgstr "10.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3621
+#, no-wrap
+msgid "1000001"
+msgstr "1000001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3622
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/227070[227070]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/227070[227070]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3623
+#, no-wrap
+msgid "November 4, 2011"
+msgstr "4 ноября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3625
+#, no-wrap
+msgid "10-CURRENT after addition of the man:posix_fadvise[2] system call."
+msgstr "10-CURRENT после добавления системного вызова man:posix_fadvise[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3626
+#, no-wrap
+msgid "1000002"
+msgstr "1000002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3627
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/228444[228444]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/228444[228444]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3628
+#, no-wrap
+msgid "December 12, 2011"
+msgstr "12 декабря 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3630
+#, 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 "10-CURRENT после определения булевых значений true/false в sys/types.h, размер sizeof(bool) мог измениться (ревизия link:https://svnweb.freebsd.org/changeset/base/228444[228444]). 10-CURRENT после введения xlocale.h (ревизия link:https://svnweb.freebsd.org/changeset/base/227753[227753])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3631
+#, no-wrap
+msgid "1000003"
+msgstr "1000003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3632
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/228571[228571]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/228571[228571]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3633
+#, no-wrap
+msgid "December 16, 2011"
+msgstr "16 декабря 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3635
+#, 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 "10-CURRENT после значительных изменений в man:carp[4], изменения размера структур `in_aliasreq`, `in6_aliasreq` (rev link:https://svnweb.freebsd.org/changeset/base/228571[228571]) и упрощения проверки аргументов SIOCAIFADDR (rev link:https://svnweb.freebsd.org/changeset/base/228574[228574])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3636
+#, no-wrap
+msgid "1000004"
+msgstr "1000004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3637
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229204[229204]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/229204[229204]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3638
+#, no-wrap
+msgid "January 1, 2012"
+msgstr "1 января 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3640
+#, 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 "10-CURRENT после удаления `skpc()` и добавления man:memcchr[9] (изменение:https://svnweb.freebsd.org/changeset/base/229200[229200])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3641
+#, no-wrap
+msgid "1000005"
+msgstr "1000005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3642
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230207[230207]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/230207[230207]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3643
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4546
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5429
+#, no-wrap
+msgid "January 16, 2012"
+msgstr "16 января 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3645
+#, no-wrap
+msgid "10-CURRENT after the removal of support for SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFDSTADDR ioctls."
+msgstr "10-CURRENT после удаления поддержки ioctls SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFDSTADDR."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3646
+#, no-wrap
+msgid "1000006"
+msgstr "1000006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3647
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230590[230590]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/230590[230590]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3648
+#, no-wrap
+msgid "January 26, 2012"
+msgstr "26 января 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3650
+#, no-wrap
+msgid "10-CURRENT after introduction of read capacity data asynchronous notification in the man:cam[4] layer."
+msgstr "10-CURRENT после внедрения асинхронного уведомления о данных пропускной способности чтения в слое man:cam[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3651
+#, no-wrap
+msgid "1000007"
+msgstr "1000007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3652
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231025[231025]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/231025[231025]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3653
+#, no-wrap
+msgid "February 5, 2012"
+msgstr "5 февраля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3655
+#, no-wrap
+msgid "10-CURRENT after introduction of new man:tcp[4] socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT."
+msgstr "10-CURRENT после введения новых параметров сокета man:tcp[4]: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3656
+#, no-wrap
+msgid "1000008"
+msgstr "1000008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3657
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231505[231505]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/231505[231505]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3658
+#, no-wrap
+msgid "February 11, 2012"
+msgstr "11 февраля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3660
+#, no-wrap
+msgid "10-CURRENT after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr "10-CURRENT после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3661
+#, no-wrap
+msgid "1000009"
+msgstr "1000009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3662
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232154[232154]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/232154[232154]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3663
+#, no-wrap
+msgid "February 25, 2012"
+msgstr "25 февраля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3665
+#, no-wrap
+msgid "10-CURRENT after import of libarchive 3.0.3 (rev link:https://svnweb.freebsd.org/changeset/base/232153[232153])."
+msgstr "10-CURRENT после импорта libarchive 3.0.3 (rev link:https://svnweb.freebsd.org/changeset/base/232153[232153])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3666
+#, no-wrap
+msgid "1000010"
+msgstr "1000010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3667
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/233757[233757]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/233757[233757]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3668
+#, no-wrap
+msgid "March 31, 2012"
+msgstr "31 марта 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3670
+#, no-wrap
+msgid "10-CURRENT after `xlocale` cleanup."
+msgstr "10-CURRENT после очистки `xlocale`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3671
+#, no-wrap
+msgid "1000011"
+msgstr "1000011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3672
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/234355[234355]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/234355[234355]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3673
+#, no-wrap
+msgid "April 16, 2012"
+msgstr "16 апреля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3675
+#, 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 "Импорт LLVM/Clang 3.1 из 10-CURRENT, ссылка на ревизию: link:https://svnweb.freebsd.org/changeset/base/154661[154661] (ревизия link:https://svnweb.freebsd.org/changeset/base/234353[234353])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3676
+#, no-wrap
+msgid "1000012"
+msgstr "1000012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3677
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/234924[234924]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/234924[234924]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3678
+#, no-wrap
+msgid "May 2, 2012"
+msgstr "2 мая 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3680
+#, no-wrap
+msgid "10-CURRENT jemalloc import."
+msgstr "10-CURRENT импорт jemalloc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3681
+#, no-wrap
+msgid "1000013"
+msgstr "1000013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3682
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/235788[235788]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/235788[235788]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3683
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4566
+#, no-wrap
+msgid "May 22, 2012"
+msgstr "22 мая 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3685
+#, no-wrap
+msgid "10-CURRENT after `byacc` import."
+msgstr "10-CURRENT после импорта `byacc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3686
+#, no-wrap
+msgid "1000014"
+msgstr "1000014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3687
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/237631[237631]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/237631[237631]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3688
+#, no-wrap
+msgid "June 27, 2012"
+msgstr "27 июня 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3690
+#, no-wrap
+msgid "10-CURRENT after BSD sort becoming the default sort (rev link:https://svnweb.freebsd.org/changeset/base/237629[237629])."
+msgstr "10-CURRENT после того, как BSD sort стал сортировкой по умолчанию (rev link:https://svnweb.freebsd.org/changeset/base/237629[237629])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3691
+#, no-wrap
+msgid "1000015"
+msgstr "1000015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3692
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/238405[238405]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/238405[238405]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3693
+#, no-wrap
+msgid "July 12, 2012"
+msgstr "12 июля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3695
+#, no-wrap
+msgid "10-CURRENT after import of OpenSSL 1.0.1c."
+msgstr "10-CURRENT после импорта OpenSSL 1.0.1c."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3697
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/238429[238429]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/238429[238429]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3698
+#, no-wrap
+msgid "July 13, 2012"
+msgstr "July 13, 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3700
+#, no-wrap
+msgid "10-CURRENT after the fix for LLVM/Clang 3.1 regression."
+msgstr "10-CURRENT после исправления регрессии в LLVM/Clang 3.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3701
+#, no-wrap
+msgid "1000016"
+msgstr "1000016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3702
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239179[239179]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/239179[239179]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3703
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3708
+#, no-wrap
+msgid "August 8, 2012"
+msgstr "8 августа 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3705
+#, no-wrap
+msgid "10-CURRENT after KBI change in man:ucom[4]."
+msgstr "10-CURRENT после изменения KBI в man:ucom[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3706
+#, no-wrap
+msgid "1000017"
+msgstr "1000017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3707
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239214[239214]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/239214[239214]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3710
+#, no-wrap
+msgid "10-CURRENT after adding streams feature to the USB stack."
+msgstr "10-CURRENT после добавления функции потоков в стек USB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3711
+#, no-wrap
+msgid "1000018"
+msgstr "1000018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3712
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/240233[240233]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/240233[240233]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3713
+#, no-wrap
+msgid "September 8, 2012"
+msgstr "8 сентября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3715
+#, no-wrap
+msgid "10-CURRENT after major rewrite of man:pf[4]."
+msgstr "10-CURRENT после значительной переработки man:pf[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3716
+#, no-wrap
+msgid "1000019"
+msgstr "1000019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3717
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241245[241245]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/241245[241245]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3718
+#, no-wrap
+msgid "October 6, 2012"
+msgstr "6 октября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3720
+#, 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 "10-CURRENT после изменения KBI/KPI в man:pfil[9] для передачи пакетов в порядке байтов сети к хукам фильтрации AF_INET."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3721
+#, no-wrap
+msgid "1000020"
+msgstr "1000020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3722
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241610[241610]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/241610[241610]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3723
+#, no-wrap
+msgid "October 16, 2012"
+msgstr "16 октября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3725
+#, no-wrap
+msgid "10-CURRENT after the network interface cloning KPI changed and struct `if_clone` becoming opaque."
+msgstr "10-CURRENT после изменения KPI клонирования сетевых интерфейсов и структура `if_clone` стала непрозрачной."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3726
+#, no-wrap
+msgid "1000021"
+msgstr "1000021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3727
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241897[241897]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/241897[241897]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3728
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3733
+#, no-wrap
+msgid "October 22, 2012"
+msgstr "22 октября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3730
+#, 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 "10-CURRENT после удаления поддержки не-MPSAFE файловых систем и добавления поддержки FUSEFS (rev link:https://svnweb.freebsd.org/changeset/base/241519[241519])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3731
+#, no-wrap
+msgid "1000022"
+msgstr "1000022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3732
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241913[241913]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/241913[241913]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3735
+#, no-wrap
+msgid "10-CURRENT after the entire IPv4 stack switched to network byte order for IP packet header storage."
+msgstr "10-CURRENT после перевода всего стека IPv4 на сетевой порядок байтов для хранения заголовков IP-пакетов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3736
+#, no-wrap
+msgid "1000023"
+msgstr "1000023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3737
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/242619[242619]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/242619[242619]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3738
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3743
+#, no-wrap
+msgid "November 5, 2012"
+msgstr "5 ноября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3740
+#, 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 "10-CURRENT после буфера джиттера в общем коде драйвера USB-последовательного порта, для временного хранения символов, если буфер TTY заполнен. Добавлены сигналы остановки и возобновления потока при возникновении такой ситуации."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3741
+#, no-wrap
+msgid "1000024"
+msgstr "1000024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3742
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/242624[242624]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/242624[242624]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3745
+#, no-wrap
+msgid "10-CURRENT after clang was made the default compiler on i386 and amd64."
+msgstr "10-CURRENT после того, как clang стал компилятором по умолчанию для i386 и amd64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3746
+#, no-wrap
+msgid "1000025"
+msgstr "1000025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3747
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/243443[243443]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/243443[243443]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3748
+#, no-wrap
+msgid "November 17, 2012"
+msgstr "17 ноября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3750
+#, 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 "10-CURRENT после того, как переменная-член sin6_scope_id в структуре sockaddr_in6 была изменена таким образом, что ядро заполняет её перед передачей структуры в пользовательское пространство через sysctl или сокет маршрутизации. Это означает, что специфичный для KAME встроенный идентификатор области в sin6_addr.s6_addr[2] всегда очищается в пользовательских приложениях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3751
+#, no-wrap
+msgid "1000026"
+msgstr "1000026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3752
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/245313[245313]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/245313[245313]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3753
+#, no-wrap
+msgid "January 11, 2013"
+msgstr "11 января 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3755
+#, no-wrap
+msgid "10-CURRENT after install gained the -N flag. May also be used to indicate the presence of nmtree."
+msgstr "10-CURRENT после установки получил флаг -N. Также может использоваться для указания наличия nmtree."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3756
+#, no-wrap
+msgid "1000027"
+msgstr "1000027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3757
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/246084[246084]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/246084[246084]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3758
+#, no-wrap
+msgid "January 29, 2013"
+msgstr "29 января 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3760
+#, no-wrap
+msgid "10-CURRENT after cat gained the -l flag (rev link:https://svnweb.freebsd.org/changeset/base/246083[246083])."
+msgstr "10-CURRENT после того, как команда `cat` получила флаг `-l` (rev link:https://svnweb.freebsd.org/changeset/base/246083[246083])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3761
+#, no-wrap
+msgid "1000028"
+msgstr "1000028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3762
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/246759[246759]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/246759[246759]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3763
+#, no-wrap
+msgid "February 13, 2013"
+msgstr "13 февраля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3765
+#, no-wrap
+msgid "10-CURRENT after USB moved to the driver structure requiring a rebuild of all USB modules."
+msgstr "10-CURRENT после перемещения USB в структуру драйверов, требующую пересборки всех модулей USB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3766
+#, no-wrap
+msgid "1000029"
+msgstr "1000029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3767
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247821[247821]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/247821[247821]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3768
+#, no-wrap
+msgid "March 4, 2013"
+msgstr "4 марта 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3770
+#, 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 "10-CURRENT после внедрения бестиковой системы отложенных вызовов, которая также изменила структуру struct callout (rev link:https://svnweb.freebsd.org/changeset/base/247777[247777])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3771
+#, no-wrap
+msgid "1000030"
+msgstr "1000030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3772
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248210[248210]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/248210[248210]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3773
+#, no-wrap
+msgid "March 12, 2013"
+msgstr "12 марта 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3775
+#, 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 "10-CURRENT после нарушения KPI, внесённого в подсистему VM для поддержки блокировок чтения/записи (rev link:https://svnweb.freebsd.org/changeset/base/248084[248084])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3776
+#, no-wrap
+msgid "1000031"
+msgstr "1000031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3777
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/249943[249943]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/249943[249943]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3778
+#, no-wrap
+msgid "April 26, 2013"
+msgstr "26 апреля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3780
+#, 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 "10-CURRENT после изменения параметра `dst` метода `if_output` в ifnet, чтобы он принимал квалификатор const (ревизия link:https://svnweb.freebsd.org/changeset/base/249925[249925])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3781
+#, no-wrap
+msgid "1000032"
+msgstr "1000032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3782
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/250163[250163]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/250163[250163]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3783
+#, no-wrap
+msgid "May 1, 2013"
+msgstr "1 мая 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3785
+#, 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 "10-CURRENT после введения системных вызовов man:accept4[2] (rev link:https://svnweb.freebsd.org/changeset/base/250154[250154]) и man:pipe2[2] (rev link:https://svnweb.freebsd.org/changeset/base/250159[250159])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3786
+#, no-wrap
+msgid "1000033"
+msgstr "1000033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3787
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/250881[250881]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/250881[250881]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3788
+#, no-wrap
+msgid "May 21, 2013"
+msgstr "21 мая 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3790
+#, no-wrap
+msgid "10-CURRENT after flex 2.5.37 import."
+msgstr "10-CURRENT после импорта flex 2.5.37."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3791
+#, no-wrap
+msgid "1000034"
+msgstr "1000034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3792
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251294[251294]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/251294[251294]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3793
+#, no-wrap
+msgid "June 3, 2013"
+msgstr "3 июня 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3795
+#, 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 "10-CURRENT после добавления следующих функций в 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]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3796
+#, no-wrap
+msgid "1000035"
+msgstr "1000035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3797
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251527[251527]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/251527[251527]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3798
+#, no-wrap
+msgid "June 8, 2013"
+msgstr "8 июня 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3800
+#, 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 "10-CURRENT после введения системного вызова man:aio_mlock[2] (изменение link:https://svnweb.freebsd.org/changeset/base/251526[251526])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3801
+#, no-wrap
+msgid "1000036"
+msgstr "1000036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3802
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253049[253049]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253049[253049]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3803
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3808
+#, no-wrap
+msgid "July 9, 2013"
+msgstr "9 июля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3805
+#, no-wrap
+msgid "10-CURRENT after the addition of a new function to the kernel GSSAPI module's function call interface."
+msgstr "10-CURRENT после добавления новой функции в интерфейс вызовов функций модуля ядра GSSAPI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3806
+#, no-wrap
+msgid "1000037"
+msgstr "1000037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3807
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253089[253089]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253089[253089]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3810
+#, 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 "10-CURRENT после миграции структур статистики на PCPU-счетчики. Измененные структуры включают: `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])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3811
+#, no-wrap
+msgid "1000038"
+msgstr "1000038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3812
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253396[253396]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253396[253396]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3813
+#, no-wrap
+msgid "July 16, 2013"
+msgstr "16 июля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3815
+#, no-wrap
+msgid "10-CURRENT after making `ARM EABI` the default ABI on arm, armeb, armv6, and armv6eb architectures."
+msgstr "10-CURRENT после установки `ARM EABI` в качестве ABI по умолчанию для архитектур arm, armeb, armv6 и armv6eb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3816
+#, no-wrap
+msgid "1000039"
+msgstr "1000039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3817
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253549[253549]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253549[253549]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3818
+#, no-wrap
+msgid "July 22, 2013"
+msgstr "22 июля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3820
+#, no-wrap
+msgid "10-CURRENT after `CAM` and man:mps[4] driver scanning changes."
+msgstr "10-CURRENT после изменений в сканировании драйверов `CAM` и man:mps[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3821
+#, no-wrap
+msgid "1000040"
+msgstr "1000040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3822
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253638[253638]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253638[253638]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3823
+#, no-wrap
+msgid "July 24, 2013"
+msgstr "24 июля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3825
+#, no-wrap
+msgid "10-CURRENT after addition of libusb `pkgconf` files."
+msgstr "10-CURRENT после добавления файлов `pkgconf` для libusb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3826
+#, no-wrap
+msgid "1000041"
+msgstr "1000041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3827
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253970[253970]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253970[253970]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3828
+#, no-wrap
+msgid "August 5, 2013"
+msgstr "5 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3830
+#, no-wrap
+msgid "10-CURRENT after change from `time_second` to `time_uptime` in `PF_INET6`."
+msgstr "10-CURRENT после изменения с `time_second` на `time_uptime` в `PF_INET6`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3831
+#, no-wrap
+msgid "1000042"
+msgstr "1000042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3832
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254138[254138]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254138[254138]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3833
+#, no-wrap
+msgid "August 9, 2013"
+msgstr "9 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3835
+#, no-wrap
+msgid "10-CURRENT after VM subsystem change to unify soft and hard busy mechanisms."
+msgstr "10-CURRENT после изменения подсистемы VM для объединения механизмов мягкой и жесткой занятости."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3836
+#, no-wrap
+msgid "1000043"
+msgstr "1000043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3837
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254273[254273]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254273[254273]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3838
+#, no-wrap
+msgid "August 13, 2013"
+msgstr "13 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3840
+#, 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 "10-CURRENT после того, как `WITH_ICONV` включён по умолчанию. Новая опция man:src.conf[5], `WITH_LIBICONV_COMPAT` (выключена по умолчанию), добавляет `libiconv_open` для обеспечения совместимости с портом package:converters/libiconv[]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3841
+#, no-wrap
+msgid "1000044"
+msgstr "1000044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3842
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254358[254358]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254358[254358]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3843
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3848
+#, no-wrap
+msgid "August 15, 2013"
+msgstr "15 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3845
+#, 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 "10-CURRENT после преобразования [.filename]#libc.so# в скрипт man:ld[1] (изменение rev link:https://svnweb.freebsd.org/changeset/base/251668[251668])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3846
+#, no-wrap
+msgid "1000045"
+msgstr "1000045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3847
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254389[254389]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254389[254389]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3850
+#, 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 "10-CURRENT после изменения программного интерфейса devfs путем замены флага `D_UNMAPPED_IO` в cdevsw на флаг `SI_UNMAPPED` в структуре cdev."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3851
+#, no-wrap
+msgid "1000046"
+msgstr "1000046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3852
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254537[254537]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254537[254537]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3853
+#, no-wrap
+msgid "August 19, 2013"
+msgstr "19 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3853
+#, no-wrap
+msgid "10-CURRENT after addition of `M_PROTO[9-12]` and removal of `M_FRAG\\"
+msgstr "10-CURRENT после добавления `M_PROTO[9-12]` и удаления `M_FRAG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3853
+#, no-wrap
+msgid "M_FIRSTFRAG\\"
+msgstr "M_FIRSTFRAG\\"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3855
+#, 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 "M_LASTFRAG` флаги mbuf (версии link:https://svnweb.freebsd.org/changeset/base/254524[254524], link:https://svnweb.freebsd.org/changeset/base/254526[254526])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3856
+#, no-wrap
+msgid "1000047"
+msgstr "1000047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3857
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254627[254627]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254627[254627]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3858
+#, no-wrap
+msgid "August 21, 2013"
+msgstr "21 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3860
+#, 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 "10-CURRENT после обновления man:stat[2], позволяющего сохранять некоторые атрибуты файлов Windows/DOS и CIFS в виде флагов man:stat[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3861
+#, no-wrap
+msgid "1000048"
+msgstr "1000048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3862
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254672[254672]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254672[254672]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3863
+#, no-wrap
+msgid "August 22, 2013"
+msgstr "August 22, 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3865
+#, no-wrap
+msgid "10-CURRENT after modification of structure `xsctp_inpcb`."
+msgstr "10-CURRENT после изменения структуры `xsctp_inpcb`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3866
+#, no-wrap
+msgid "1000049"
+msgstr "1000049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3867
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254760[254760]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254760[254760]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3868
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3873
+#, no-wrap
+msgid "August 24, 2013"
+msgstr "24 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3870
+#, 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 "10-CURRENT после поддержки man:physio[9] для устройств, которые работают некорректно с разделённым вводом-выводом, таких как man:sa[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3871
+#, no-wrap
+msgid "1000050"
+msgstr "1000050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3872
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254844[254844]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254844[254844]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3875
+#, 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 "10-CURRENT после изменений структуры `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])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3876
+#, no-wrap
+msgid "1000051"
+msgstr "1000051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3877
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254887[254887]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254887[254887]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3878
+#, no-wrap
+msgid "August 25, 2013"
+msgstr "25 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3880
+#, no-wrap
+msgid "10-CURRENT after Radeon KMS driver import (rev link:https://svnweb.freebsd.org/changeset/base/254885[254885])."
+msgstr "10-CURRENT после импорта драйвера Radeon KMS (ревизия link:https://svnweb.freebsd.org/changeset/base/254885[254885])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3881
+#, no-wrap
+msgid "1000052"
+msgstr "1000052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3882
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255180[255180]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/255180[255180]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3883
+#, no-wrap
+msgid "September 3, 2013"
+msgstr "3 сентября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3885
+#, no-wrap
+msgid "10-CURRENT after import of NetBSD `libexecinfo` is connected to the build."
+msgstr "10-CURRENT после импорта NetBSD `libexecinfo` подключен к сборке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3886
+#, no-wrap
+msgid "1000053"
+msgstr "1000053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3887
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255305[255305]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/255305[255305]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3888
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3893
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3898
+#, no-wrap
+msgid "September 6, 2013"
+msgstr "6 сентября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3890
+#, no-wrap
+msgid "10-CURRENT after API and ABI changes to the Capsicum framework."
+msgstr "10-CURRENT после изменений API и ABI в рамках Capsicum."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3891
+#, no-wrap
+msgid "1000054"
+msgstr "1000054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3892
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255321[255321]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/255321[255321]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3895
+#, no-wrap
+msgid "10-CURRENT after `gcc` and `libstdc++` are no longer built by default."
+msgstr "10-CURRENT после того, как `gcc` и `libstdc++` больше не собираются по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3896
+#, no-wrap
+msgid "1000055"
+msgstr "1000055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3897
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255449[255449]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/255449[255449]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3900
+#, 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 "10-CURRENT после добавления флага `MMAP_32BIT` в man:mmap[2] (rev link:https://svnweb.freebsd.org/changeset/base/255426[255426])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3901
+#, no-wrap
+msgid "1000100"
+msgstr "1000100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3902
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259065[259065]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259065[259065]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3903
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3923
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3928
+#, no-wrap
+msgid "December 7, 2013"
+msgstr "December 7, 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3905
+#, no-wrap
+msgid "`releng/10.0` branched from `stable/10`."
+msgstr "`releng/10.0` ответвился от `stable/10`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3906
+#, no-wrap
+msgid "1000500"
+msgstr "1000500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3907
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256283[256283]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/256283[256283]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3910
+#, no-wrap
+msgid "10-STABLE after branch from `head/`."
+msgstr "10-STABLE после ветвления от `head/`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3911
+#, no-wrap
+msgid "1000501"
+msgstr "1000501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3912
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256916[256916]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/256916[256916]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3913
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4626
+#, no-wrap
+msgid "October 22, 2013"
+msgstr "22 октября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3915
+#, no-wrap
+msgid "10-STABLE after addition of first-boot man:rc[8] support."
+msgstr "10-STABLE после добавления поддержки man:rc[8] при первой загрузке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3916
+#, no-wrap
+msgid "1000502"
+msgstr "1000502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3917
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/258398[258398]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/258398[258398]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3918
+#, no-wrap
+msgid "November 20, 2013"
+msgstr "20 ноября 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3920
+#, no-wrap
+msgid "10-STABLE after removal of iconv symbols from `libc.so.7`."
+msgstr "10-STABLE после удаления символов iconv из `libc.so.7`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3921
+#, no-wrap
+msgid "1000510"
+msgstr "1000510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3922
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259067[259067]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259067[259067]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3925
+#, no-wrap
+msgid "`releng/10.0` __FreeBSD_version update to prevent the value from going backwards."
+msgstr "`releng/10.0` __FreeBSD_version обновлён, чтобы предотвратить уменьшение значения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3926
+#, no-wrap
+msgid "1000700"
+msgstr "1000700"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3927
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259069[259069]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259069[259069]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3930
+#, no-wrap
+msgid "10-STABLE after `releng/10.0` branch."
+msgstr "10-STABLE после ветки `releng/10.0`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3931
+#, no-wrap
+msgid "1000701"
+msgstr "1000701"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3932
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259447[259447]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259447[259447]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3935
+#, no-wrap
+msgid "10.0-STABLE after Heimdal encoding fix."
+msgstr "10.0-STABLE после исправления кодирования Heimdal."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3936
+#, no-wrap
+msgid "1000702"
+msgstr "1000702"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3937
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260135[260135]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/260135[260135]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3938
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4636
+#, no-wrap
+msgid "December 31, 2013"
+msgstr "31 декабря 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3940
+#, no-wrap
+msgid "10-STABLE after MAP_STACK fixes."
+msgstr "10-STABLE после исправлений MAP_STACK."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3941
+#, no-wrap
+msgid "1000703"
+msgstr "1000703"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3942
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4640
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262801[262801]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/262801[262801]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3943
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4641
+#, no-wrap
+msgid "March 5, 2014"
+msgstr "5 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3945
+#, no-wrap
+msgid "10-STABLE after upgrade of libc++ to 3.4 release."
+msgstr "10-STABLE после обновления libc++ до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3946
+#, no-wrap
+msgid "1000704"
+msgstr "1000704"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3947
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262889[262889]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/262889[262889]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3948
+#, no-wrap
+msgid "March 7, 2014"
+msgstr "7 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3950
+#, no-wrap
+msgid "10-STABLE after MFC of the man:vt[4] driver (rev link:https://svnweb.freebsd.org/changeset/base/262861[262861])."
+msgstr "10-STABLE после слияния из ветки man:vt[4] драйвера (ревизия link:https://svnweb.freebsd.org/changeset/base/262861[262861])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3951
+#, no-wrap
+msgid "1000705"
+msgstr "1000705"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3952
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263508[263508]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263508[263508]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3953
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4651
+#, no-wrap
+msgid "March 21, 2014"
+msgstr "21 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3955
+#, no-wrap
+msgid "10-STABLE after upgrade of llvm/clang to 3.4 release."
+msgstr "10-STABLE после обновления llvm/clang до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3956
+#, no-wrap
+msgid "1000706"
+msgstr "1000706"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3957
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264214[264214]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/264214[264214]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3960
+#, no-wrap
+msgid "10-STABLE after GCC support for `__block` definition."
+msgstr "10-STABLE после удаления поддержки GCC для определения `__block`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3961
+#, no-wrap
+msgid "1000707"
+msgstr "1000707"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3965
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:06.openssl."
+msgstr "10-STABLE после FreeBSD-SA-14:06.openssl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3966
+#, no-wrap
+msgid "1000708"
+msgstr "1000708"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3967
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265122[265122]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/265122[265122]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3968
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4666
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5469
+#, no-wrap
+msgid "April 30, 2014"
+msgstr "30 апреля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3970
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:07.devfs, FreeBSD-SA-14:08.tcp, and FreeBSD-SA-14:09.openssl."
+msgstr "10-STABLE после FreeBSD-SA-14:07.devfs, FreeBSD-SA-14:08.tcp и FreeBSD-SA-14:09.openssl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3971
+#, no-wrap
+msgid "1000709"
+msgstr "1000709"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3972
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265946[265946]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/265946[265946]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3973
+#, no-wrap
+msgid "May 13, 2014"
+msgstr "13 мая 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3975
+#, no-wrap
+msgid "10-STABLE after support for UDP-Lite protocol (RFC 3828)."
+msgstr "10-STABLE после добавления поддержки протокола UDP-Lite (RFC 3828)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3976
+#, no-wrap
+msgid "1000710"
+msgstr "1000710"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3977
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267465[267465]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/267465[267465]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3980
+#, 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 "10-STABLE после изменений в man:strcasecmp[3], переноса man:strcasecmp_l[3] и man:strncasecmp_l[3] из [.filename]#<string.h># в [.filename]#<strings.h># для соответствия POSIX 2008."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3981
+#, no-wrap
+msgid "1000711"
+msgstr "1000711"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3982
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268442[268442]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268442[268442]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3985
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268432[268432])."
+msgstr "10-STABLE после FreeBSD-SA-14:17.kmem (ревизия:https://svnweb.freebsd.org/changeset/base/268432[268432])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3986
+#, no-wrap
+msgid "1000712"
+msgstr "1000712"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3987
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/269400[269400]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/269400[269400]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3988
+#, no-wrap
+msgid "August 1, 2014"
+msgstr "1 августа 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3990
+#, no-wrap
+msgid "10-STABLE after man:nfsd[8] 4.1 merge (rev link:https://svnweb.freebsd.org/changeset/base/269398[269398])."
+msgstr "10-STABLE после слияния man:nfsd[8] 4.1 (rev link:https://svnweb.freebsd.org/changeset/base/269398[269398])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3991
+#, no-wrap
+msgid "1000713"
+msgstr "1000713"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3992
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/269484[269484]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/269484[269484]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3995
+#, no-wrap
+msgid "10-STABLE after man:regex[3] library update to add \">\" and \"<\" delimiters."
+msgstr "10-STABLE после обновления библиотеки man:regex[3] для добавления разделителей \">\" и \"<\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3996
+#, no-wrap
+msgid "1000714"
+msgstr "1000714"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3997
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270174[270174]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/270174[270174]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4000
+#, no-wrap
+msgid "10-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269490[269490])."
+msgstr "10-STABLE после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269490[269490])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4001
+#, no-wrap
+msgid "1000715"
+msgstr "1000715"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4005
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+msgstr "10-STABLE после FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4006
+#, no-wrap
+msgid "1000716"
+msgstr "1000716"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4010
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271667[271667])."
+msgstr "10-STABLE после FreeBSD-SA-14:19 (ревизия link:https://svnweb.freebsd.org/changeset/base/271667[271667])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4011
+#, no-wrap
+msgid "1000717"
+msgstr "1000717"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4012
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271816[271816]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/271816[271816]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4013
+#, no-wrap
+msgid "September 18, 2014"
+msgstr "18 сентября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4015
+#, no-wrap
+msgid "10-STABLE after i915 HW context support."
+msgstr "10-STABLE после добавления поддержки аппаратного контекста i915."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4016
+#, no-wrap
+msgid "1001000"
+msgstr "1001000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4017
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272463[272463]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/272463[272463]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4018
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4023
+#, no-wrap
+msgid "October 2, 2014"
+msgstr "2 октября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4020
+#, no-wrap
+msgid "10.1-RC1 after releng/10.1 branch."
+msgstr "10.1-RC1 после ветки releng/10.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4021
+#, no-wrap
+msgid "1001500"
+msgstr "1001500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4022
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272464[272464]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/272464[272464]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4025
+#, no-wrap
+msgid "10-STABLE after releng/10.1 branch."
+msgstr "10-STABLE после ветки releng/10.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4026
+#, no-wrap
+msgid "1001501"
+msgstr "1001501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4030
+#, 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 "10-STABLE после исправлений уязвимостей FreeBSD-SA-14:20, FreeBSD-SA-14:22 и FreeBSD-SA-14:23 (ссылка на ревизию: https://svnweb.freebsd.org/changeset/base/273411[273411])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4031
+#, no-wrap
+msgid "1001502"
+msgstr "1001502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4035
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr "10-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4036
+#, no-wrap
+msgid "1001503"
+msgstr "1001503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4037
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275040[275040]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/275040[275040]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4038
+#, no-wrap
+msgid "November 25, 2014"
+msgstr "25 ноября 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4040
+#, 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 "10-STABLE после объединения новых библиотек/утилит (man:dpv[1], man:dpv[3] и man:figpar[3]) для визуализации пропускной способности данных."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4041
+#, no-wrap
+msgid "1001504"
+msgstr "1001504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4042
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4710
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275742[275742]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/275742[275742]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4043
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4711
+#, no-wrap
+msgid "December 13, 2014"
+msgstr "13 декабря 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4045
+#, no-wrap
+msgid "10-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases."
+msgstr "10-STABLE после объединения важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4046
+#, no-wrap
+msgid "1001505"
+msgstr "1001505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4047
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276633[276633]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/276633[276633]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4048
+#, no-wrap
+msgid "January 3, 2015"
+msgstr "3 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4050
+#, no-wrap
+msgid "10-STABLE after merging some arm constants in link:https://svnweb.freebsd.org/changeset/base/276312[276312]."
+msgstr "10-STABLE после объединения некоторых констант ARM в link:https://svnweb.freebsd.org/changeset/base/276312[276312]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4051
+#, no-wrap
+msgid "1001506"
+msgstr "1001506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4052
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277087[277087]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277087[277087]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4053
+#, no-wrap
+msgid "January 12, 2015"
+msgstr "12 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4055
+#, no-wrap
+msgid "10-STABLE after merging max table size update for yacc."
+msgstr "10-STABLE после объединения обновления максимального размера таблицы для yacc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4056
+#, no-wrap
+msgid "1001507"
+msgstr "1001507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4057
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277790[277790]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/277790[277790]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4058
+#, no-wrap
+msgid "January 27, 2015"
+msgstr "27 января 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4060
+#, no-wrap
+msgid "10-STABLE after changes to the UDP tunneling callback to provide a context pointer and the source `sockaddr`."
+msgstr "10-STABLE после изменений в обратном вызове туннелирования UDP для предоставления указателя контекста и исходного `sockaddr`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4061
+#, no-wrap
+msgid "1001508"
+msgstr "1001508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4062
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278974[278974]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/278974[278974]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4065
+#, no-wrap
+msgid "10-STABLE after addition of the `CDAI_TYPE_EXT_INQ` request type."
+msgstr "10-STABLE после добавления типа запроса `CDAI_TYPE_EXT_INQ`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4066
+#, no-wrap
+msgid "1001509"
+msgstr "1001509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4067
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4715
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5498
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279287[279287]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/279287[279287]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4068
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4716
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5499
+#, no-wrap
+msgid "February 25, 2015"
+msgstr "25 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4070
+#, 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."
+msgstr "10-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4071
+#, no-wrap
+msgid "1001510"
+msgstr "1001510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4072
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279329[279329]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/279329[279329]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4073
+#, no-wrap
+msgid "February 26, 2015"
+msgstr "26 февраля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4075
+#, no-wrap
+msgid "10-STABLE after MFC of rev link:https://svnweb.freebsd.org/changeset/base/278964[278964]."
+msgstr "10-STABLE после MFC ревизии link:https://svnweb.freebsd.org/changeset/base/278964[278964]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4076
+#, no-wrap
+msgid "1001511"
+msgstr "1001511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4077
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280246[280246]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/280246[280246]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4078
+#, no-wrap
+msgid "March 19, 2015"
+msgstr "19 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4080
+#, 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 "10-STABLE после переименования [.filename]#sys/capability.h# в [.filename]#sys/capsicum.h# (изменение:https://svnweb.freebsd.org/changeset/base/280224/[280224/])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4081
+#, no-wrap
+msgid "1001512"
+msgstr "1001512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4082
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280438[280438]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/280438[280438]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4083
+#, no-wrap
+msgid "March 24, 2015"
+msgstr "24 марта 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4085
+#, no-wrap
+msgid "10-STABLE after addition of new man:mtio[4], man:sa[4] ioctls."
+msgstr "10-STABLE после добавления новых ioctl в man:mtio[4] и man:sa[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4086
+#, no-wrap
+msgid "1001513"
+msgstr "1001513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4087
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281955[281955]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/281955[281955]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4088
+#, no-wrap
+msgid "April 24, 2015"
+msgstr "24 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4090
+#, no-wrap
+msgid "10-STABLE after starting the process of removing the use of the deprecated \"M_FLOWID\" flag from the network code."
+msgstr "10-STABLE после начала процесса удаления использования устаревшего флага \"M_FLOWID\" из сетевого кода."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4091
+#, no-wrap
+msgid "1001514"
+msgstr "1001514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4092
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282275[282275]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/282275[282275]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4093
+#, no-wrap
+msgid "April 30, 2015"
+msgstr "30 апреля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4095
+#, no-wrap
+msgid "10-STABLE after MFC of man:iconv[3] fixes."
+msgstr "10-STABLE после MFC исправлений man:iconv[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4096
+#, no-wrap
+msgid "1001515"
+msgstr "1001515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4097
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282781[282781]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/282781[282781]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4098
+#, no-wrap
+msgid "May 11, 2015"
+msgstr "11 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4100
+#, no-wrap
+msgid "10-STABLE after adding back `M_FLOWID`."
+msgstr "10-STABLE после возврата `M_FLOWID`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4101
+#, no-wrap
+msgid "1001516"
+msgstr "1001516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4102
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283341[283341]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/283341[283341]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4103
+#, no-wrap
+msgid "May 24, 2015"
+msgstr "24 мая 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4105
+#, no-wrap
+msgid "10-STABLE after MFC of many USB things."
+msgstr "10-STABLE после переноса (MFC) множества изменений, связанных с USB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4106
+#, no-wrap
+msgid "1001517"
+msgstr "1001517"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4107
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283950[283950]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/283950[283950]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4108
+#, no-wrap
+msgid "June 3, 2015"
+msgstr "3 июня 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4110
+#, no-wrap
+msgid "10-STABLE after MFC of sound related things."
+msgstr "10-STABLE после слияния изменений, связанных со звуком."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4111
+#, no-wrap
+msgid "1001518"
+msgstr "1001518"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4112
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284204[284204]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/284204[284204]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4115
+#, no-wrap
+msgid "10-STABLE after MFC of zfs vfs fixes (rev link:https://svnweb.freebsd.org/changeset/base/284203[284203])."
+msgstr "10-STABLE после MFC исправлений vfs для zfs (rev link:https://svnweb.freebsd.org/changeset/base/284203[284203])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4116
+#, no-wrap
+msgid "1001519"
+msgstr "1001519"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4117
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284720[284720]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/284720[284720]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4118
+#, no-wrap
+msgid "June 23, 2015"
+msgstr "23 июня 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4120
+#, no-wrap
+msgid "10-STABLE after reverting bumping `MAXCPU` on amd64."
+msgstr "10-STABLE после отмены увеличения `MAXCPU` на amd64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4121
+#, no-wrap
+msgid "1002000"
+msgstr "1002000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4122
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/285830[285830]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/285830[285830]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4123
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4128
+#, no-wrap
+msgid "July 24, 2015"
+msgstr "24 июля 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4125
+#, no-wrap
+msgid "`releng/10.2` branched from 10-STABLE."
+msgstr "`releng/10.2` отделился от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4126
+#, no-wrap
+msgid "1002500"
+msgstr "1002500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4127
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/285831[285831]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/285831[285831]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4130
+#, no-wrap
+msgid "10-STABLE after `releng/10.2` branched from 10-STABLE."
+msgstr "10-STABLE после того, как ветка `releng/10.2` отделилась от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4131
+#, no-wrap
+msgid "1002501"
+msgstr "1002501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4132
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289005[289005]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/289005[289005]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4133
+#, no-wrap
+msgid "October 8, 2015"
+msgstr "8 октября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4135
+#, 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 "10-STABLE после объединения изменений ZFS, затронувших внутренний интерфейс структуры `zfeature_info` (rev link:https://svnweb.freebsd.org/changeset/base/288572[288572])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4136
+#, no-wrap
+msgid "1002502"
+msgstr "1002502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4137
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/291243[291243]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/291243[291243]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4138
+#, no-wrap
+msgid "November 24, 2015"
+msgstr "24 ноября 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4140
+#, 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 "10-STABLE после объединения изменений устройств дампа, которые затронули аргументы `g_dev_setdumpdev()`(rev link:https://svnweb.freebsd.org/changeset/base/291215[291215])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4141
+#, no-wrap
+msgid "1002503"
+msgstr "1002503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4142
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292224[292224]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/292224[292224]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4143
+#, no-wrap
+msgid "December 14, 2015"
+msgstr "14 декабря 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4145
+#, 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 "10-STABLE после объединения изменений во внутренний интерфейс между модулями nfsd.ko и nfscommon.ko, что требует их совместного обновления (rev link:https://svnweb.freebsd.org/changeset/base/292223[292223])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4146
+#, no-wrap
+msgid "1002504"
+msgstr "1002504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4147
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292589[292589]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/292589[292589]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4148
+#, no-wrap
+msgid "December 22, 2015"
+msgstr "22 декабря 2015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4150
+#, 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 "10-STABLE после слияния xz 5.2.2 (поддержка многопоточности) (rev link:https://svnweb.freebsd.org/changeset/base/292588[292588])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4151
+#, no-wrap
+msgid "1002505"
+msgstr "1002505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4152
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292908[292908]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/292908[292908]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4155
+#, no-wrap
+msgid "10-STABLE after merge of changes to man:pci[4] (rev link:https://svnweb.freebsd.org/changeset/base/292907[292907])."
+msgstr "10-STABLE после объединения изменений в man:pci[4] (rev link:https://svnweb.freebsd.org/changeset/base/292907[292907])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4156
+#, no-wrap
+msgid "1002506"
+msgstr "1002506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4157
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293476[293476]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/293476[293476]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4158
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4163
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4168
+#, no-wrap
+msgid "January 9, 2016"
+msgstr "9 января 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4160
+#, no-wrap
+msgid "10-STABLE after merge of man:utimensat[2] (rev link:https://svnweb.freebsd.org/changeset/base/293473[293473])."
+msgstr "10-STABLE после объединения man:utimensat[2] (изменение link:https://svnweb.freebsd.org/changeset/base/293473[293473])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4161
+#, no-wrap
+msgid "1002507"
+msgstr "1002507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4162
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293610[293610]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/293610[293610]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4165
+#, 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 "10-STABLE после объединения изменений в man:linux[4] (rev link:https://svnweb.freebsd.org/changeset/base/293477[293477] через link:https://svnweb.freebsd.org/changeset/base/293609[293609])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4166
+#, no-wrap
+msgid "1002508"
+msgstr "1002508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4167
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293619[293619]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/293619[293619]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4170
+#, 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 "10-STABLE после объединения изменений в типы/макросы man:figpar[3] (rev link:https://svnweb.freebsd.org/changeset/base/290275[290275])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4171
+#, no-wrap
+msgid "1002509"
+msgstr "1002509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4172
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295107[295107]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/295107[295107]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4173
+#, no-wrap
+msgid "February 1, 2016"
+msgstr "1 февраля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4175
+#, no-wrap
+msgid "10-STABLE after merge of API change to man:dpv[3]."
+msgstr "10-STABLE после объединения изменения API в man:dpv[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4176
+#, no-wrap
+msgid "1003000"
+msgstr "1003000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4177
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296373[296373]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296373[296373]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4178
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4183
+#, no-wrap
+msgid "March 4, 2016"
+msgstr "4 марта 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4180
+#, no-wrap
+msgid "`releng/10.3` branched from 10-STABLE."
+msgstr "`releng/10.3` ответвился от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4181
+#, no-wrap
+msgid "1003500"
+msgstr "1003500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4182
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296374[296374]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296374[296374]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4185
+#, no-wrap
+msgid "10-STABLE after `releng/10.3` branched from 10-STABLE."
+msgstr "10-STABLE после того, как ветка `releng/10.3` отделилась от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4186
+#, no-wrap
+msgid "1003501"
+msgstr "1003501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4187
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/298299[298299]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/298299[298299]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4188
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4193
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4198
+#, no-wrap
+msgid "June 19, 2016"
+msgstr "19 июня 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4190
+#, no-wrap
+msgid "10-STABLE after adding -P option for `kdbcontrol` (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297])."
+msgstr "10-STABLE после добавления опции -P для `kdbcontrol` (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4191
+#, no-wrap
+msgid "1003502"
+msgstr "1003502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4192
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299966[299966]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/299966[299966]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4195
+#, no-wrap
+msgid "10-STABLE after libcrypto.so was made position independent."
+msgstr "10-STABLE после того, как libcrypto.so стала позиционно-независимой."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4196
+#, no-wrap
+msgid "1003503"
+msgstr "1003503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4197
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300235[300235]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300235[300235]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4200
+#, no-wrap
+msgid "10-STABLE after allowing `MK_` overrides (rev link:https://svnweb.freebsd.org/changeset/base/300233[300233])."
+msgstr "10-STABLE после разрешения переопределений `MK_` (изменение link:https://svnweb.freebsd.org/changeset/base/300233[300233])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4201
+#, no-wrap
+msgid "1003504"
+msgstr "1003504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4202
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302066[302066]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302066[302066]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4205
+#, no-wrap
+msgid "10-STABLE after MFC of `filemon` changes from 11-CURRENT."
+msgstr "10-STABLE после переноса изменений `filemon` из 11-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4206
+#, no-wrap
+msgid "1003505"
+msgstr "1003505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4207
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302228[302228]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/302228[302228]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4208
+#, no-wrap
+msgid "June 27, 2016"
+msgstr "27 июня 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4210
+#, no-wrap
+msgid "10-STABLE after converting sed to use REG_STARTEND, fixing a Mesa issue."
+msgstr "10-STABLE после замены в sed на использование REG_STARTEND, с исправлением проблемы в Mesa."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4211
+#, no-wrap
+msgid "1003506"
+msgstr "1003506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4212
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304611[304611]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304611[304611]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4215
+#, no-wrap
+msgid "10-STABLE after adding C++11 `thread_local` support."
+msgstr "10-STABLE после добавления поддержки `thread_local` в C++11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4216
+#, no-wrap
+msgid "1003507"
+msgstr "1003507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4217
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304864[304864]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/304864[304864]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4220
+#, no-wrap
+msgid "10-STABLE after `LC_*_MASK` fix."
+msgstr "10-STABLE после исправления `LC_*_MASK`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4221
+#, no-wrap
+msgid "1003508"
+msgstr "1003508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4222
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305734[305734]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305734[305734]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4225
+#, no-wrap
+msgid "10-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr "10-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4226
+#, no-wrap
+msgid "1003509"
+msgstr "1003509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4227
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307331[307331]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/307331[307331]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4230
+#, no-wrap
+msgid "10-STABLE after ZFS merges."
+msgstr "10-STABLE после слияния с ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4231
+#, no-wrap
+msgid "1003510"
+msgstr "1003510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4232
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308047[308047]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/308047[308047]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4235
+#, no-wrap
+msgid "10-STABLE after installing header files required development with libzfs_core."
+msgstr "10-STABLE после установки заголовочных файлов, необходимых для разработки с libzfs_core."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4236
+#, no-wrap
+msgid "1003511"
+msgstr "1003511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4237
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310121[310121]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/310121[310121]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4240
+#, no-wrap
+msgid "10-STABLE after exporting whole thread name in `kinfo_proc` (rev link:https://svnweb.freebsd.org/changeset/base/309676[309676])."
+msgstr "10-STABLE после экспорта полного имени потока в `kinfo_proc` (rev link:https://svnweb.freebsd.org/changeset/base/309676[309676])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4241
+#, no-wrap
+msgid "1003512"
+msgstr "1003512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4242
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315730[315730]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/315730[315730]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4243
+#, no-wrap
+msgid "March 22, 2017"
+msgstr "22 марта 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4245
+#, no-wrap
+msgid "10-STABLE after libmd changes (rev link:https://svnweb.freebsd.org/changeset/base/314143[314143])."
+msgstr "10-STABLE после изменений в libmd (rev link:https://svnweb.freebsd.org/changeset/base/314143[314143])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4246
+#, no-wrap
+msgid "1003513"
+msgstr "1003513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4247
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316499[316499]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/316499[316499]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4250
+#, 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 "10-STABLE после того, как блокировка CAM SIM стала опциональной (ревизии link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4251
+#, no-wrap
+msgid "1003514"
+msgstr "1003514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4252
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318198[318198]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/318198[318198]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4255
+#, no-wrap
+msgid "10-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr "10-STABLE после объединения добавления заголовочного файла [.filename]#<dev/mmc/mmc_ioctl.h>#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4256
+#, no-wrap
+msgid "1003515"
+msgstr "1003515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4257
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321222[321222]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/321222[321222]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4258
+#, no-wrap
+msgid "July 19, 2017"
+msgstr "19 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4260
+#, no-wrap
+msgid "10-STABLE after adding C++14 sized deallocation functions to libc++."
+msgstr "10-STABLE после добавления функций освобождения памяти с указанием размера из C++14 в libc++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4261
+#, no-wrap
+msgid "1003516"
+msgstr "1003516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4262
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321717[321717]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/321717[321717]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4263
+#, no-wrap
+msgid "July 30, 2017"
+msgstr "30 июля 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4265
+#, no-wrap
+msgid "10-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr "10-STABLE после объединения добавления флага `MAP_GUARD` в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4266
+#, no-wrap
+msgid "1004000"
+msgstr "1004000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4267
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323604[323604]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323604[323604]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4268
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4273
+#, no-wrap
+msgid "September 15, 2017"
+msgstr "15 сентября 2017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4270
+#, no-wrap
+msgid "`releng/10.4` branched from 10-STABLE."
+msgstr "`releng/10.4` ответвился от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4271
+#, no-wrap
+msgid "1004500"
+msgstr "1004500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4272
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323605[323605]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/323605[323605]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4275
+#, no-wrap
+msgid "10-STABLE after `releng/10.4` branched from 10-STABLE."
+msgstr "10-STABLE после того, как ветка `releng/10.4` отделилась от 10-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4276
+#, no-wrap
+msgid "1004501"
+msgstr "1004501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4280
+#, 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 "10-STABLE после слияния изменений link:https://svnweb.freebsd.org/changeset/base/325028[325028], исправляющего `ptrace()`, чтобы всегда очищать правильное событие потока при возобновлении."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4281
+#, no-wrap
+msgid "1004502"
+msgstr "1004502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4282
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356396[356396]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356396[356396]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4285
+#, no-wrap
+msgid "10-STABLE after making USB statistics be per-device instead of per bus."
+msgstr "10-STABLE после изменения статистики USB для каждого устройства вместо каждой шины."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4286
+#, no-wrap
+msgid "1004503"
+msgstr "1004503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4287
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356681[356681]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/356681[356681]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4289
+#, no-wrap
+msgid "10-STABLE after adding own counter for cancelled USB transfers."
+msgstr "10-STABLE после добавления собственного счетчика для отмененных USB-передач."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4292
+#, no-wrap
+msgid "FreeBSD 9 Versions"
+msgstr "Версии FreeBSD 9"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4295
+#, no-wrap
+msgid "FreeBSD 9 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 9"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4304
+#, no-wrap
+msgid "900000"
+msgstr "900000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4305
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196432[196432]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/196432[196432]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4306
+#, no-wrap
+msgid "August 22, 2009"
+msgstr "22 августа 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4308
+#, no-wrap
+msgid "9.0-CURRENT."
+msgstr "9.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4309
+#, no-wrap
+msgid "900001"
+msgstr "900001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4310
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197019[197019]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/197019[197019]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4311
+#, no-wrap
+msgid "September 8, 2009"
+msgstr "8 сентября 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4313
+#, no-wrap
+msgid "9.0-CURRENT after importing x86emu, a software emulator for real mode x86 CPU from OpenBSD."
+msgstr "9.0-CURRENT после импорта x86emu, программного эмулятора процессора x86 в реальном режиме из OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4314
+#, no-wrap
+msgid "900002"
+msgstr "900002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4315
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197430[197430]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/197430[197430]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4316
+#, no-wrap
+msgid "September 23, 2009"
+msgstr "23 сентября 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4318
+#, no-wrap
+msgid "9.0-CURRENT after implementing the EVFILT_USER `kevent` filter functionality."
+msgstr "9.0-CURRENT после реализации функциональности фильтра `kevent` `EVFILT_USER`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4319
+#, no-wrap
+msgid "900003"
+msgstr "900003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4320
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200039[200039]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/200039[200039]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4321
+#, no-wrap
+msgid "December 2, 2009"
+msgstr "2 декабря 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4323
+#, no-wrap
+msgid "9.0-CURRENT after addition of man:sigpause[2] and PIE support in `csu`."
+msgstr "9.0-CURRENT после добавления man:sigpause[2] и поддержки PIE в `csu`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4324
+#, no-wrap
+msgid "900004"
+msgstr "900004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4325
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200185[200185]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/200185[200185]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4326
+#, no-wrap
+msgid "December 6, 2009"
+msgstr "6 декабря 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4328
+#, no-wrap
+msgid "9.0-CURRENT after addition of libulog and its libutempter compatibility interface."
+msgstr "9.0-CURRENT после добавления libulog и его совместимого интерфейса libutempter."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4329
+#, no-wrap
+msgid "900005"
+msgstr "900005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4330
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200447[200447]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/200447[200447]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4331
+#, no-wrap
+msgid "December 12, 2009"
+msgstr "December 12, 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4333
+#, 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 "9.0-CURRENT после добавления man:sleepq_sleepcnt[9], который может использоваться для запроса количества ожидающих в конкретной очереди ожидания."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4334
+#, no-wrap
+msgid "900006"
+msgstr "900006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4335
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/201513[201513]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/201513[201513]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4336
+#, no-wrap
+msgid "January 4, 2010"
+msgstr "4 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4338
+#, no-wrap
+msgid "9.0-CURRENT after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4."
+msgstr "9.0-CURRENT после изменения прототипов man:scandir[3] и man:alphasort[3] для соответствия SUSv4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4339
+#, no-wrap
+msgid "900007"
+msgstr "900007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4340
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202219[202219]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/202219[202219]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4341
+#, no-wrap
+msgid "January 13, 2010"
+msgstr "13 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4343
+#, 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 "9.0-CURRENT после удаления man:utmp[5] и добавления `utmpx` (см. man:getutxent[3]) для улучшенного логирования входов пользователей и системных событий."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4344
+#, no-wrap
+msgid "900008"
+msgstr "900008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4345
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202722[202722]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/202722[202722]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4346
+#, no-wrap
+msgid "January 20, 2010"
+msgstr "20 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4348
+#, no-wrap
+msgid "9.0-CURRENT after the import of BSDL bc/dc and the deprecation of GNU bc/dc."
+msgstr "9.0-CURRENT после импорта BSDL bc/dc и устаревания GNU bc/dc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4349
+#, no-wrap
+msgid "900009"
+msgstr "900009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4350
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203052[203052]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/203052[203052]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4351
+#, no-wrap
+msgid "January 26, 2010"
+msgstr "26 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4353
+#, 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 "9.0-CURRENT после добавления ioctl SIOCGIFDESCR и SIOCSIFDESCR к сетевым интерфейсам. Эти ioctl могут использоваться для управления описанием интерфейса, по аналогии с OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4354
+#, no-wrap
+msgid "900010"
+msgstr "900010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4355
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/205471[205471]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/205471[205471]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4356
+#, no-wrap
+msgid "March 22, 2010"
+msgstr "22 марта 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4358
+#, no-wrap
+msgid "9.0-CURRENT after the import of zlib 1.2.4."
+msgstr "9.0-CURRENT после импорта zlib 1.2.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4359
+#, no-wrap
+msgid "900011"
+msgstr "900011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4360
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/207410[207410]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/207410[207410]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4361
+#, no-wrap
+msgid "April 24, 2010"
+msgstr "April 24, 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4363
+#, no-wrap
+msgid "9.0-CURRENT after adding soft-updates journaling."
+msgstr "9.0-CURRENT после добавления журналирования soft-updates."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4364
+#, no-wrap
+msgid "900012"
+msgstr "900012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4365
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/207842[207842]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/207842[207842]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4366
+#, no-wrap
+msgid "May 10, 2010"
+msgstr "10 мая 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4368
+#, no-wrap
+msgid "9.0-CURRENT after adding liblzma, xz, xzdec, and lzmainfo."
+msgstr "9.0-CURRENT после добавления liblzma, xz, xzdec и lzmainfo."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4369
+#, no-wrap
+msgid "900013"
+msgstr "900013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4370
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208486[208486]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/208486[208486]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4371
+#, no-wrap
+msgid "May 24, 2010"
+msgstr "24 мая 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4373
+#, no-wrap
+msgid "9.0-CURRENT after bringing in USB fixes for man:linux[4]."
+msgstr "9.0-CURRENT после внесения исправлений для USB в man:linux[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4374
+#, no-wrap
+msgid "900014"
+msgstr "900014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4375
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208973[208973]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/208973[208973]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4376
+#, no-wrap
+msgid "June 10, 2010"
+msgstr "10 июня 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4378
+#, no-wrap
+msgid "9.0-CURRENT after adding Clang."
+msgstr "9.0-CURRENT после добавления Clang."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4379
+#, no-wrap
+msgid "900015"
+msgstr "900015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4380
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/210390[210390]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/210390[210390]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4381
+#, no-wrap
+msgid "July 22, 2010"
+msgstr "22 июля 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4383
+#, no-wrap
+msgid "9.0-CURRENT after the import of BSD grep."
+msgstr "9.0-CURRENT после импорта BSD grep."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4384
+#, no-wrap
+msgid "900016"
+msgstr "900016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4385
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/210565[210565]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/210565[210565]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4386
+#, no-wrap
+msgid "July 28, 2010"
+msgstr "28 июля 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4388
+#, no-wrap
+msgid "9.0-CURRENT after adding `mti_zone` to struct `malloc_type_internal`."
+msgstr "9.0-CURRENT после добавления `mti_zone` в структуру `malloc_type_internal`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4389
+#, no-wrap
+msgid "900017"
+msgstr "900017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4390
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211701[211701]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/211701[211701]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4391
+#, no-wrap
+msgid "August 23, 2010"
+msgstr "23 августа 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4393
+#, no-wrap
+msgid "9.0-CURRENT after changing back default grep to GNU grep and adding WITH_BSD_GREP knob."
+msgstr "9.0-CURRENT после возврата к GNU grep по умолчанию и добавления параметра WITH_BSD_GREP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4394
+#, no-wrap
+msgid "900018"
+msgstr "900018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4395
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211735[211735]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/211735[211735]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4396
+#, no-wrap
+msgid "August 24, 2010"
+msgstr "24 августа 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4398
+#, 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 "9.0-CURRENT после того, как сигнал, сгенерированный через man:pthread_kill[3], идентифицируется как SI_LWP в `si_code`. Ранее `si_code` имел значение SI_USER."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4399
+#, no-wrap
+msgid "900019"
+msgstr "900019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4400
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211937[211937]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/211937[211937]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4401
+#, no-wrap
+msgid "August 28, 2010"
+msgstr "28 августа 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4403
+#, no-wrap
+msgid "9.0-CURRENT after addition of the MAP_PREFAULT_READ flag to man:mmap[2]."
+msgstr "9.0-CURRENT после добавления флага MAP_PREFAULT_READ в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4404
+#, no-wrap
+msgid "900020"
+msgstr "900020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4405
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/212381[212381]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/212381[212381]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4406
+#, no-wrap
+msgid "September 9, 2010"
+msgstr "9 сентября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4408
+#, no-wrap
+msgid "9.0-CURRENT after adding drain functionality to `sbufs`, which also changed the layout of struct `sbuf`."
+msgstr "9.0-CURRENT после добавления функциональности drain в `sbufs`, что также изменило структуру struct `sbuf`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4409
+#, no-wrap
+msgid "900021"
+msgstr "900021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4410
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/212568[212568]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/212568[212568]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4411
+#, no-wrap
+msgid "September 13, 2010"
+msgstr "13 сентября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4413
+#, no-wrap
+msgid "9.0-CURRENT after DTrace has grown support for userland tracing."
+msgstr "9.0-CURRENT после того, как DTrace обзавелся поддержкой трассировки в пользовательском пространстве."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4414
+#, no-wrap
+msgid "900022"
+msgstr "900022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4415
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/213395[213395]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/213395[213395]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4416
+#, no-wrap
+msgid "October 2, 2010"
+msgstr "2 октября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4418
+#, no-wrap
+msgid "9.0-CURRENT after addition of the BSDL man utilities and retirement of GNU/GPL man utilities."
+msgstr "9.0-CURRENT после добавления утилит man под лицензией BSDL и удаления утилит man под лицензией GNU/GPL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4419
+#, no-wrap
+msgid "900023"
+msgstr "900023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4420
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/213700[213700]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/213700[213700]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4421
+#, no-wrap
+msgid "October 11, 2010"
+msgstr "11 октября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4423
+#, no-wrap
+msgid "9.0-CURRENT after updating xz to git 20101010 snapshot."
+msgstr "9.0-CURRENT после обновления xz до снимка git 20101010."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4424
+#, no-wrap
+msgid "900024"
+msgstr "900024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4425
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/215127[215127]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/215127[215127]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4426
+#, no-wrap
+msgid "November 11, 2010"
+msgstr "11 ноября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4428
+#, no-wrap
+msgid "9.0-CURRENT after libgcc.a was replaced by libcompiler_rt.a."
+msgstr "9.0-CURRENT после замены libgcc.a на libcompiler_rt.a."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4429
+#, no-wrap
+msgid "900025"
+msgstr "900025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4430
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/215166[215166]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/215166[215166]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4431
+#, no-wrap
+msgid "November 12, 2010"
+msgstr "12 ноября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4433
+#, no-wrap
+msgid "9.0-CURRENT after the introduction of the modularised congestion control."
+msgstr "9.0-CURRENT после внедрения модульной системы управления перегрузкой."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4434
+#, no-wrap
+msgid "900026"
+msgstr "900026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4435
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216088[216088]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216088[216088]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4436
+#, no-wrap
+msgid "November 30, 2010"
+msgstr "30 ноября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4438
+#, 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 "9.0-CURRENT после введения сквозной передачи Serial Management Protocol (SMP) и CAM `CCBs` XPT_SMP_IO и XPT_GDEV_ADVINFO."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4439
+#, no-wrap
+msgid "900027"
+msgstr "900027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4440
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216212[216212]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216212[216212]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4441
+#, no-wrap
+msgid "December 5, 2010"
+msgstr "5 декабря 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4443
+#, no-wrap
+msgid "9.0-CURRENT after the addition of log2 to libm."
+msgstr "9.0-CURRENT после добавления log2 в libm."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4444
+#, no-wrap
+msgid "900028"
+msgstr "900028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4445
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216615[216615]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216615[216615]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4446
+#, no-wrap
+msgid "December 21, 2010"
+msgstr "21 декабря 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4448
+#, no-wrap
+msgid "9.0-CURRENT after the addition of the Hhook (Helper Hook), Khelp (Kernel Helpers) and Object Specific Data (OSD) KPIs."
+msgstr "9.0-CURRENT после добавления Hhook (Helper Hook), Khelp (Kernel Helpers) и KPI Object Specific Data (OSD)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4449
+#, no-wrap
+msgid "900029"
+msgstr "900029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4450
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216758[216758]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216758[216758]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4451
+#, no-wrap
+msgid "December 28, 2010"
+msgstr "28 декабря 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4453
+#, 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 "9.0-CURRENT после модификации стека TCP для разрешения модулям Khelp взаимодействовать с ним через точки подключения вспомогательных функций и хранить данные для каждого соединения в блоке управления TCP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4454
+#, no-wrap
+msgid "900030"
+msgstr "900030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4455
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/217309[217309]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/217309[217309]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4456
+#, no-wrap
+msgid "January 12, 2011"
+msgstr "12 января 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4458
+#, no-wrap
+msgid "9.0-CURRENT after the update of libdialog to version 20100428."
+msgstr "9.0-CURRENT после обновления libdialog до версии 20100428."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4459
+#, no-wrap
+msgid "900031"
+msgstr "900031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4460
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218414[218414]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/218414[218414]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4461
+#, no-wrap
+msgid "February 7, 2011"
+msgstr "7 февраля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4463
+#, no-wrap
+msgid "9.0-CURRENT after the addition of man:pthread_getthreadid_np[3]."
+msgstr "9.0-CURRENT после добавления man:pthread_getthreadid_np[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4464
+#, no-wrap
+msgid "900032"
+msgstr "900032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4465
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218425[218425]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/218425[218425]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4466
+#, no-wrap
+msgid "February 8, 2011"
+msgstr "8 февраля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4468
+#, no-wrap
+msgid "9.0-CURRENT after the removal of the `uio_yield` prototype and symbol."
+msgstr "9.0-CURRENT после удаления прототипа и символа `uio_yield`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4469
+#, no-wrap
+msgid "900033"
+msgstr "900033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4470
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218822[218822]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/218822[218822]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4471
+#, no-wrap
+msgid "February 18, 2011"
+msgstr "18 февраля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4473
+#, no-wrap
+msgid "9.0-CURRENT after the update of binutils to version 2.17.50."
+msgstr "9.0-CURRENT после обновления binutils до версии 2.17.50."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4474
+#, no-wrap
+msgid "900034"
+msgstr "900034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4475
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219406[219406]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/219406[219406]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4476
+#, no-wrap
+msgid "March 8, 2011"
+msgstr "8 марта 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4478
+#, no-wrap
+msgid "9.0-CURRENT after the struct `sysvec` (`sv_schedtail`) changes."
+msgstr "9.0-CURRENT после изменений в структуре `sysvec` (`sv_schedtail`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4479
+#, no-wrap
+msgid "900035"
+msgstr "900035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4480
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/220150[220150]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/220150[220150]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4481
+#, no-wrap
+msgid "March 29, 2011"
+msgstr "29 марта 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4483
+#, no-wrap
+msgid "9.0-CURRENT after the update of base gcc and libstdc++ to the last GPLv2 licensed revision."
+msgstr "9.0-CURRENT после обновления базового gcc и libstdc++ до последней ревизии, лицензированной под GPLv2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4484
+#, no-wrap
+msgid "900036"
+msgstr "900036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4485
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/220770[220770]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/220770[220770]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4486
+#, no-wrap
+msgid "April 18, 2011"
+msgstr "18 апреля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4488
+#, no-wrap
+msgid "9.0-CURRENT after the removal of libobjc and Objective-C support from the base system."
+msgstr "9.0-CURRENT после удаления libobjc и поддержки Objective-C из базовой системы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4489
+#, no-wrap
+msgid "900037"
+msgstr "900037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4490
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221862[221862]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/221862[221862]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4491
+#, no-wrap
+msgid "May 13, 2011"
+msgstr "13 мая 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4493
+#, no-wrap
+msgid "9.0-CURRENT after importing the man:libprocstat[3] library and man:fuser[1] utility to the base system."
+msgstr "9.0-CURRENT после импорта библиотеки man:libprocstat[3] и утилиты man:fuser[1] в базовую систему."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4494
+#, no-wrap
+msgid "900038"
+msgstr "900038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4495
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222167[222167]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222167[222167]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4496
+#, no-wrap
+msgid "May 22, 2011"
+msgstr "22 мая 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4498
+#, no-wrap
+msgid "9.0-CURRENT after adding a lock flag argument to man:VFS_FHTOVP[9]."
+msgstr "9.0-CURRENT после добавления аргумента флага блокировки к man:VFS_FHTOVP[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4499
+#, no-wrap
+msgid "900039"
+msgstr "900039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4500
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/223637[223637]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/223637[223637]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4501
+#, no-wrap
+msgid "June 28, 2011"
+msgstr "28 июня 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4503
+#, no-wrap
+msgid "9.0-CURRENT after importing pf from OpenBSD 4.5."
+msgstr "9.0-CURRENT после импорта pf из OpenBSD 4.5."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4504
+#, no-wrap
+msgid "900040"
+msgstr "900040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4505
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224217[224217]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/224217[224217]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4506
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5399
+#, no-wrap
+msgid "July 19, 2011"
+msgstr "19 июля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4508
+#, no-wrap
+msgid "Increase default MAXCPU for FreeBSD to 64 on amd64 and ia64 and to 128 for XLP (mips)."
+msgstr "Увеличить значение MAXCPU по умолчанию для FreeBSD до 64 на amd64 и ia64 и до 128 для XLP (mips)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4509
+#, no-wrap
+msgid "900041"
+msgstr "900041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4510
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224834[224834]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/224834[224834]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4511
+#, no-wrap
+msgid "August 13, 2011"
+msgstr "13 августа 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4513
+#, no-wrap
+msgid "9.0-CURRENT after the implementation of Capsicum capabilities; man:fget[9] gains a rights argument."
+msgstr "Версия 9.0-CURRENT после реализации возможностей Capsicum; man:fget[9] получает аргумент rights."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4514
+#, no-wrap
+msgid "900042"
+msgstr "900042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4515
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4520
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225350[225350]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/225350[225350]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4516
+#, no-wrap
+msgid "August 28, 2011"
+msgstr "28 августа 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4518
+#, no-wrap
+msgid "Bump shared libraries' version numbers for libraries whose ABI has changed in preparation for 9.0."
+msgstr "Увеличьте номера версий общих библиотек для библиотек, чей ABI изменился в рамках подготовки к 9.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4519
+#, no-wrap
+msgid "900043"
+msgstr "900043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4521
+#, no-wrap
+msgid "September 2, 2011"
+msgstr "2 сентября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4523
+#, no-wrap
+msgid "Add automatic detection of USB mass storage devices which do not support the no synchronize cache SCSI command."
+msgstr "Добавить автоматическое обнаружение USB-накопителей, которые не поддерживают команду SCSI \"no synchronize cache\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4524
+#, no-wrap
+msgid "900044"
+msgstr "900044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4525
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225469[225469]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/225469[225469]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4526
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5409
+#, no-wrap
+msgid "September 10, 2011"
+msgstr "10 сентября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4528
+#, no-wrap
+msgid "Re-factor auto-quirk. 9.0-RELEASE."
+msgstr "Переработка автоматического определения особенностей оборудования (auto-quirk). 9.0-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4529
+#, no-wrap
+msgid "900045"
+msgstr "900045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4530
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229285[229285]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/229285[229285]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4531
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4536
+#, no-wrap
+msgid "January 2, 2012"
+msgstr "2 января 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4533
+#, no-wrap
+msgid "9-STABLE after MFC of true/false from 1000002."
+msgstr "9-STABLE после MFC значения true/false из 1000002."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4534
+#, no-wrap
+msgid "900500"
+msgstr "900500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4535
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229318[229318]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/229318[229318]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4538
+#, no-wrap
+msgid "9.0-STABLE."
+msgstr "9.0-STABLE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4539
+#, no-wrap
+msgid "900501"
+msgstr "900501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4540
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229723[229723]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/229723[229723]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4541
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5424
+#, no-wrap
+msgid "January 6, 2012"
+msgstr "6 января 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4543
+#, no-wrap
+msgid "9.0-STABLE after merging of addition of the man:posix_fadvise[2] system call."
+msgstr "9.0-STABLE после объединения добавления системного вызова man:posix_fadvise[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4544
+#, no-wrap
+msgid "900502"
+msgstr "900502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4545
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230237[230237]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/230237[230237]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4548
+#, no-wrap
+msgid "9.0-STABLE after merging gperf 3.0.3"
+msgstr "9.0-STABLE после слияния gperf 3.0.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4549
+#, no-wrap
+msgid "900503"
+msgstr "900503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4550
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231768[231768]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/231768[231768]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4551
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5434
+#, no-wrap
+msgid "February 15, 2012"
+msgstr "15 февраля 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4553
+#, no-wrap
+msgid "9.0-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr "9.0-STABLE после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4554
+#, no-wrap
+msgid "900504"
+msgstr "900504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4555
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232728[232728]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/232728[232728]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4556
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5439
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5444
+#, no-wrap
+msgid "March 3, 2012"
+msgstr "3 марта 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4558
+#, no-wrap
+msgid "9.0-STABLE after changes related to mounting of filesystem inside a jail."
+msgstr "9.0-STABLE после изменений, связанных с монтированием файловой системы внутри клетки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4559
+#, no-wrap
+msgid "900505"
+msgstr "900505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4560
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232945[232945]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/232945[232945]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4561
+#, no-wrap
+msgid "March 13, 2012"
+msgstr "13 марта 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4563
+#, 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 "9.0-STABLE после введения новых параметров сокета man:tcp[4]: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4564
+#, no-wrap
+msgid "900506"
+msgstr "900506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4565
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/235786[235786]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/235786[235786]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4568
+#, no-wrap
+msgid "9.0-STABLE after introduction of the `quick_exit` function and related changes required for C++11."
+msgstr "9.0-STABLE после введения функции `quick_exit` и связанных изменений, необходимых для C++11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4569
+#, no-wrap
+msgid "901000"
+msgstr "901000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4570
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239082[239082]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/239082[239082]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4571
+#, no-wrap
+msgid "August 5, 2012"
+msgstr "5 августа 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4573
+#, no-wrap
+msgid "9.1-RELEASE."
+msgstr "9.1-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4574
+#, no-wrap
+msgid "901500"
+msgstr "901500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4575
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239081[239081]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/239081[239081]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4576
+#, no-wrap
+msgid "August 6, 2012"
+msgstr "6 августа 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4578
+#, no-wrap
+msgid "9.1-STABLE after branching releng/9.1 (RELENG_9_1)."
+msgstr "9.1-STABLE после ветвления releng/9.1 (RELENG_9_1)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4579
+#, no-wrap
+msgid "901501"
+msgstr "901501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4580
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/240659[240659]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/240659[240659]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4581
+#, no-wrap
+msgid "November 11, 2012"
+msgstr "11 ноября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4583
+#, 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 "9.1-STABLE после man:LIST_PREV[3] добавлен в queue.h (изменение rev link:https://svnweb.freebsd.org/changeset/base/242893[242893]) и изменения KBI в USB последовательных устройствах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4584
+#, no-wrap
+msgid "901502"
+msgstr "901502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4585
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/243656[243656]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/243656[243656]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4586
+#, no-wrap
+msgid "November 28, 2012"
+msgstr "28 ноября 2012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4588
+#, no-wrap
+msgid "9.1-STABLE after USB serial jitter buffer requires rebuild of USB serial device modules."
+msgstr "9.1-STABLE после того, как буфер дрожания USB serial требует пересборки модулей устройств USB serial."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4589
+#, no-wrap
+msgid "901503"
+msgstr "901503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4590
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247090[247090]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/247090[247090]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4591
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5449
+#, no-wrap
+msgid "February 21, 2013"
+msgstr "21 февраля 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4593
+#, 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 "9.1-STABLE после перемещения USB в структуру драйверов, что потребовало пересборки всех модулей USB. Также указывает на наличие nmtree."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4594
+#, no-wrap
+msgid "901504"
+msgstr "901504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4595
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248338[248338]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/248338[248338]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4596
+#, no-wrap
+msgid "March 15, 2013"
+msgstr "15 марта 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4598
+#, no-wrap
+msgid "9.1-STABLE after install gained -l, -M, -N and related flags and cat gained the -l option."
+msgstr "9.1-STABLE после установки получил флаги -l, -M, -N и связанные с ними, а cat получил опцию -l."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4599
+#, no-wrap
+msgid "901505"
+msgstr "901505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4600
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251687[251687]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/251687[251687]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4601
+#, no-wrap
+msgid "June 13, 2013"
+msgstr "13 июня 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4603
+#, no-wrap
+msgid "9.1-STABLE after fixes in `ctfmerge` bootstrapping (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243])."
+msgstr "9.1-STABLE после исправлений в начальной загрузке `ctfmerge` (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4604
+#, no-wrap
+msgid "902001"
+msgstr "902001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4605
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253912[253912]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253912[253912]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4606
+#, no-wrap
+msgid "August 3, 2013"
+msgstr "3 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4608
+#, no-wrap
+msgid "`releng/9.2` branched from `stable/9`."
+msgstr "`releng/9.2` ответвился от `stable/9`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4609
+#, no-wrap
+msgid "902501"
+msgstr "902501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4610
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253913[253913]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/253913[253913]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4611
+#, no-wrap
+msgid "August 2, 2013"
+msgstr "2 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4613
+#, no-wrap
+msgid "9.2-STABLE after creation of `releng/9.2` branch."
+msgstr "9.2-STABLE после создания ветки `releng/9.2`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4614
+#, no-wrap
+msgid "902502"
+msgstr "902502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4615
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254938[254938]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254938[254938]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4616
+#, no-wrap
+msgid "August 26, 2013"
+msgstr "26 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4618
+#, no-wrap
+msgid "9.2-STABLE after inclusion of the `PIM_RESCAN` CAM path inquiry flag."
+msgstr "9.2-STABLE после включения флага запроса пути CAM `PIM_RESCAN`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4619
+#, no-wrap
+msgid "902503"
+msgstr "902503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4620
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254979[254979]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/254979[254979]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4621
+#, no-wrap
+msgid "August 27, 2013"
+msgstr "27 августа 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4623
+#, no-wrap
+msgid "9.2-STABLE after inclusion of the `SI_UNMAPPED` cdev flag."
+msgstr "9.2-STABLE после включения флага `SI_UNMAPPED` для cdev."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4624
+#, no-wrap
+msgid "902504"
+msgstr "902504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4625
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256917[256917]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/256917[256917]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4628
+#, no-wrap
+msgid "9.2-STABLE after inclusion of support for \"first boot\" man:rc[8] scripts."
+msgstr "9.2-STABLE после добавления поддержки скриптов \"первой загрузки\" man:rc[8]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4629
+#, no-wrap
+msgid "902505"
+msgstr "902505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4630
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259448[259448]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259448[259448]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4631
+#, no-wrap
+msgid "December 12, 2013"
+msgstr "12 декабря 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4633
+#, no-wrap
+msgid "9.2-STABLE after Heimdal encoding fix."
+msgstr "9.2-STABLE после исправления кодировки Heimdal."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4634
+#, no-wrap
+msgid "902506"
+msgstr "902506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4635
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260136[260136]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/260136[260136]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4638
+#, no-wrap
+msgid "9-STABLE after MAP_STACK fixes (rev link:https://svnweb.freebsd.org/changeset/base/260082[260082])."
+msgstr "9-STABLE после исправлений MAP_STACK (rev link:https://svnweb.freebsd.org/changeset/base/260082[260082])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4639
+#, no-wrap
+msgid "902507"
+msgstr "902507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4643
+#, no-wrap
+msgid "9-STABLE after upgrade of libc++ to 3.4 release."
+msgstr "9-STABLE после обновления libc++ до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4644
+#, no-wrap
+msgid "902508"
+msgstr "902508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4645
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263171[263171]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263171[263171]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4648
+#, no-wrap
+msgid "9-STABLE after merge of the Radeon KMS driver (rev link:https://svnweb.freebsd.org/changeset/base/263170[263170])."
+msgstr "9-STABLE после объединения драйвера Radeon KMS (rev link:https://svnweb.freebsd.org/changeset/base/263170[263170])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4649
+#, no-wrap
+msgid "902509"
+msgstr "902509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4650
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263509[263509]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263509[263509]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4653
+#, no-wrap
+msgid "9-STABLE after upgrade of llvm/clang to 3.4 release."
+msgstr "9-STABLE после обновления llvm/clang до версии 3.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4654
+#, no-wrap
+msgid "902510"
+msgstr "902510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4655
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263818[263818]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/263818[263818]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4656
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4661
+#, no-wrap
+msgid "March 27, 2014"
+msgstr "27 марта 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4658
+#, no-wrap
+msgid "9-STABLE after merge of the man:vt[4] driver."
+msgstr "9-STABLE после слияния драйвера man:vt[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4659
+#, no-wrap
+msgid "902511"
+msgstr "902511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4663
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:06.openssl."
+msgstr "9-STABLE после FreeBSD-SA-14:06.openssl."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4664
+#, no-wrap
+msgid "902512"
+msgstr "902512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4665
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5468
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265123[265123]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/265123[265123]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4668
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:08.tcp."
+msgstr "9-STABLE после FreeBSD-SA-14:08.tcp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4669
+#, no-wrap
+msgid "903000"
+msgstr "903000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4670
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267656[267656]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/267656[267656]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4671
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4676
+#, no-wrap
+msgid "June 20, 2014"
+msgstr "20 июня 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4673
+#, no-wrap
+msgid "9-RC1 `releng/9.3` branch."
+msgstr "9-RC1 ветка `releng/9.3`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4674
+#, no-wrap
+msgid "903500"
+msgstr "903500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4675
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267657[267657]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/267657[267657]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4678
+#, no-wrap
+msgid "9.3-STABLE `releng/9.3` branch."
+msgstr "9.3-STABLE ветка `releng/9.3`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4679
+#, no-wrap
+msgid "903501"
+msgstr "903501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4680
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268443[268443]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268443[268443]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4683
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268433[268433])."
+msgstr "9-STABLE после FreeBSD-SA-14:17.kmem (изменение:https://svnweb.freebsd.org/changeset/base/268433[268433])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4684
+#, no-wrap
+msgid "903502"
+msgstr "903502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4685
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270175[270175]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/270175[270175]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4686
+#, no-wrap
+msgid "August 19, 2014"
+msgstr "19 августа 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4688
+#, no-wrap
+msgid "9-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269789[269789])."
+msgstr "9-STABLE после исправления ошибки `SOCK_DGRAM` (rev link:https://svnweb.freebsd.org/changeset/base/269789[269789])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4689
+#, no-wrap
+msgid "903503"
+msgstr "903503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4693
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269687[269687])."
+msgstr "9-STABLE после FreeBSD-SA-14:18 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/269687[269687])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4694
+#, no-wrap
+msgid "903504"
+msgstr "903504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4698
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+msgstr "9-STABLE после FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4699
+#, no-wrap
+msgid "903505"
+msgstr "903505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4703
+#, 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 "9-STABLE после исправлений FreeBSD-SA-14:20, FreeBSD-SA-14:21 и FreeBSD-SA-14:22 (rev link:https://svnweb.freebsd.org/changeset/base/273412[273412])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4704
+#, no-wrap
+msgid "903506"
+msgstr "903506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4708
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr "9-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4709
+#, no-wrap
+msgid "903507"
+msgstr "903507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4713
+#, no-wrap
+msgid "9-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases."
+msgstr "9-STABLE после объединения важного исправления в векторизатор LLVM, которое в некоторых случаях могло приводить к переполнению буфера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4714
+#, no-wrap
+msgid "903508"
+msgstr "903508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4718
+#, 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."
+msgstr "9-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4719
+#, no-wrap
+msgid "903509"
+msgstr "903509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4720
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296219[296219]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/296219[296219]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4721
+#, no-wrap
+msgid "February 29, 2016"
+msgstr "29 февраля 2016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4723
+#, 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 "9-STABLE после увеличения значения по умолчанию `compat.linux.osrelease` до `2.6.18` для поддержки портов linux-c6-* без дополнительной настройки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4724
+#, no-wrap
+msgid "903510"
+msgstr "903510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4725
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300236[300236]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/300236[300236]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4728
+#, 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 "9-STABLE после того, как страница System Binary Interface (SBI) была перемещена в последней версии Berkeley Boot Loader (BBL) из-за увеличения размера кода в link:https://svnweb.freebsd.org/changeset/base/300234[300234]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4729
+#, no-wrap
+msgid "903511"
+msgstr "903511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4730
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305735[305735]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305735[305735]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4732
+#, no-wrap
+msgid "9-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr "9-STABLE после разрешения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4735
+#, no-wrap
+msgid "FreeBSD 8 Versions"
+msgstr "Версии FreeBSD 8"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4738
+#, no-wrap
+msgid "FreeBSD 8 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 8"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4747
+#, no-wrap
+msgid "800000"
+msgstr "800000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4748
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172531[172531]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172531[172531]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4749
+#, no-wrap
+msgid "October 11, 2007"
+msgstr "11 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4751
+#, no-wrap
+msgid "8.0-CURRENT. Separating wide and single byte `ctype`."
+msgstr "8.0-CURRENT. Разделение `ctype` на широкие и однобайтовые символы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4752
+#, no-wrap
+msgid "800001"
+msgstr "800001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4753
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172688[172688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172688[172688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4754
+#, no-wrap
+msgid "October 16, 2007"
+msgstr "16 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4756
+#, no-wrap
+msgid "8.0-CURRENT after libpcap 0.9.8 and tcpdump 3.9.8 import."
+msgstr "8.0-CURRENT после импорта libpcap 0.9.8 и tcpdump 3.9.8."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4757
+#, no-wrap
+msgid "800002"
+msgstr "800002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4758
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172841[172841]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172841[172841]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4759
+#, no-wrap
+msgid "October 21, 2007"
+msgstr "21 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4761
+#, no-wrap
+msgid "8.0-CURRENT after renaming man:kthread_create[9] and friends to man:kproc_create[9] etc."
+msgstr "8.0-CURRENT после переименования man:kthread_create[9] и связанных функций в man:kproc_create[9] и т.д."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4762
+#, no-wrap
+msgid "800003"
+msgstr "800003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4763
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172932[172932]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172932[172932]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4764
+#, no-wrap
+msgid "October 24, 2007"
+msgstr "24 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4766
+#, 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 "8.0-CURRENT после того, как была добавлена обратная совместимость ABI с версиями FreeBSD 4/5/6 для IOCTL PCIOCGETCONF, PCIOCREAD и PCIOCWRITE, что потребовало снова нарушить ABI IOCTL PCIOCGETCONF"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4767
+#, no-wrap
+msgid "800004"
+msgstr "800004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4768
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173573[173573]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173573[173573]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4769
+#, no-wrap
+msgid "November 12, 2007"
+msgstr "12 ноября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4771
+#, no-wrap
+msgid "8.0-CURRENT after man:agp[4] driver moved from src/sys/pci to src/sys/dev/agp"
+msgstr "8.0-CURRENT после перемещения драйвера man:agp[4] из src/sys/pci в src/sys/dev/agp"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4772
+#, no-wrap
+msgid "800005"
+msgstr "800005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4773
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174261[174261]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174261[174261]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4774
+#, no-wrap
+msgid "December 4, 2007"
+msgstr "4 декабря 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4776
+#, no-wrap
+msgid "8.0-CURRENT after changes to the jumbo frame allocator (rev link:https://svnweb.freebsd.org/changeset/base/174247[174247])."
+msgstr "8.0-CURRENT после изменений в аллокаторе джамбо-фреймов (rev link:https://svnweb.freebsd.org/changeset/base/174247[174247])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4777
+#, no-wrap
+msgid "800006"
+msgstr "800006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4778
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174399[174399]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174399[174399]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4779
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6325
+#, no-wrap
+msgid "December 7, 2007"
+msgstr "7 декабря 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4781
+#, no-wrap
+msgid "8.0-CURRENT after the addition of `callgraph` capture functionality to man:hwpmc[4]."
+msgstr "8.0-CURRENT после добавления функциональности захвата `callgraph` в man:hwpmc[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4782
+#, no-wrap
+msgid "800007"
+msgstr "800007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4783
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174901[174901]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174901[174901]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4784
+#, no-wrap
+msgid "December 25, 2007"
+msgstr "25 декабря 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4786
+#, no-wrap
+msgid "8.0-CURRENT after `kdb_enter()` gains a \"why\" argument."
+msgstr "8.0-CURRENT после `kdb_enter()` получает аргумент \"why\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4787
+#, no-wrap
+msgid "800008"
+msgstr "800008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4788
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174951[174951]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174951[174951]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4789
+#, no-wrap
+msgid "December 28, 2007"
+msgstr "28 декабря 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4791
+#, no-wrap
+msgid "8.0-CURRENT after LK_EXCLUPGRADE option removal."
+msgstr "8.0-CURRENT после удаления опции LK_EXCLUPGRADE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4792
+#, no-wrap
+msgid "800009"
+msgstr "800009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4793
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175168[175168]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175168[175168]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4794
+#, no-wrap
+msgid "January 9, 2008"
+msgstr "9 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4796
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_disown[9]"
+msgstr "8.0-CURRENT после введения man:lockmgr_disown[9]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4797
+#, no-wrap
+msgid "800010"
+msgstr "800010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4798
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175204[175204]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175204[175204]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4799
+#, no-wrap
+msgid "January 10, 2008"
+msgstr "10 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4801
+#, no-wrap
+msgid "8.0-CURRENT after the man:vn_lock[9] prototype change."
+msgstr "8.0-CURRENT после изменения прототипа man:vn_lock[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4802
+#, no-wrap
+msgid "800011"
+msgstr "800011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4803
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175295[175295]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175295[175295]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4804
+#, no-wrap
+msgid "January 13, 2008"
+msgstr "13 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4806
+#, no-wrap
+msgid "8.0-CURRENT after the man:VOP_LOCK[9] and man:VOP_UNLOCK[9] prototype changes."
+msgstr "8.0-CURRENT после изменений прототипов man:VOP_LOCK[9] и man:VOP_UNLOCK[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4807
+#, no-wrap
+msgid "800012"
+msgstr "800012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4808
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175487[175487]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175487[175487]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4809
+#, no-wrap
+msgid "January 19, 2008"
+msgstr "19 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4811
+#, 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 "8.0-CURRENT после введения man:lockmgr_recursed[9], man:BUF_RECURSED[9] и man:BUF_ISLOCKED[9], а также удаления `BUF_REFCNT()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4812
+#, no-wrap
+msgid "800013"
+msgstr "800013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4813
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175581[175581]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175581[175581]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4814
+#, no-wrap
+msgid "January 23, 2008"
+msgstr "23 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4816
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the \"ASCII\" encoding."
+msgstr "8.0-CURRENT после введения кодировки \"ASCII\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4817
+#, no-wrap
+msgid "800014"
+msgstr "800014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4818
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175636[175636]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175636[175636]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4819
+#, no-wrap
+msgid "January 24, 2008"
+msgstr "24 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4821
+#, no-wrap
+msgid "8.0-CURRENT after changing the prototype of man:lockmgr[9] and removal of `lockcount()` and `LOCKMGR_ASSERT()`."
+msgstr "8.0-CURRENT после изменения прототипа man:lockmgr[9] и удаления `lockcount()` и `LOCKMGR_ASSERT()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4822
+#, no-wrap
+msgid "800015"
+msgstr "800015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4823
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175688[175688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175688[175688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4824
+#, no-wrap
+msgid "January 26, 2008"
+msgstr "26 января 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4826
+#, no-wrap
+msgid "8.0-CURRENT after extending the types of the man:fts[3] structures."
+msgstr "8.0-CURRENT после расширения типов структур man:fts[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4827
+#, no-wrap
+msgid "800016"
+msgstr "800016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4828
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175872[175872]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/175872[175872]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4829
+#, no-wrap
+msgid "February 1, 2008"
+msgstr "1 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4831
+#, no-wrap
+msgid "8.0-CURRENT after adding an argument to man:MEXTADD[9]"
+msgstr "8.0-CURRENT после добавления аргумента в man:MEXTADD[9]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4832
+#, no-wrap
+msgid "800017"
+msgstr "800017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4833
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176015[176015]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176015[176015]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4834
+#, no-wrap
+msgid "February 6, 2008"
+msgstr "6 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4836
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of LK_NODUP and LK_NOWITNESS options in the man:lockmgr[9] space."
+msgstr "8.0-CURRENT после введения опций LK_NODUP и LK_NOWITNESS в пространстве man:lockmgr[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4837
+#, no-wrap
+msgid "800018"
+msgstr "800018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4838
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176112[176112]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176112[176112]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4839
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5812
+#, no-wrap
+msgid "February 8, 2008"
+msgstr "8 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4841
+#, no-wrap
+msgid "8.0-CURRENT after the addition of `m_collapse`."
+msgstr "8.0-CURRENT после добавления `m_collapse`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4842
+#, no-wrap
+msgid "800019"
+msgstr "800019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4843
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176124[176124]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176124[176124]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4844
+#, no-wrap
+msgid "February 9, 2008"
+msgstr "9 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4846
+#, 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 "8.0-CURRENT после добавления поддержки текущего рабочего каталога, корневого каталога и каталога клетки в sysctl kern.proc.filedesc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4847
+#, no-wrap
+msgid "800020"
+msgstr "800020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4848
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176251[176251]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176251[176251]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4849
+#, no-wrap
+msgid "February 13, 2008"
+msgstr "13 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4851
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_assert[9] and `BUF_ASSERT` functions."
+msgstr "8.0-CURRENT после добавления man:lockmgr_assert[9] и функций `BUF_ASSERT`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4852
+#, no-wrap
+msgid "800021"
+msgstr "800021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4853
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176321[176321]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176321[176321]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4854
+#, no-wrap
+msgid "February 15, 2008"
+msgstr "15 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4856
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_args[9] and LK_INTERNAL flag removal."
+msgstr "8.0-CURRENT после введения man:lockmgr_args[9] и удаления флага LK_INTERNAL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4857
+#, no-wrap
+msgid "800022"
+msgstr "800022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4858
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176556[176556]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176556[176556]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4859
+#, no-wrap
+msgid "(backed out)"
+msgstr "(отменено)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4861
+#, no-wrap
+msgid "8.0-CURRENT after changing the default system ar to BSD man:ar[1]."
+msgstr "8.0-CURRENT после изменения стандартной системной ar на BSD man:ar[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4862
+#, no-wrap
+msgid "800023"
+msgstr "800023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4863
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176560[176560]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176560[176560]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4864
+#, no-wrap
+msgid "February 25, 2008"
+msgstr "25 февраля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4866
+#, 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 "8.0-CURRENT после изменения прототипов man:lockstatus[9] и man:VOP_ISLOCKED[9];, а именно удаления аргумента `struct thread`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4867
+#, no-wrap
+msgid "800024"
+msgstr "800024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4868
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176709[176709]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176709[176709]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4869
+#, no-wrap
+msgid "March 1, 2008"
+msgstr "1 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4871
+#, 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 "8.0-CURRENT после удаления функций `lockwaiters` и `BUF_LOCKWAITERS`, изменения возвращаемого значения `brelvp` с void на int и добавления новых флагов для man:lockinit[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4872
+#, no-wrap
+msgid "800025"
+msgstr "800025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4873
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176958[176958]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176958[176958]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4874
+#, no-wrap
+msgid "March 8, 2008"
+msgstr "8 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4876
+#, no-wrap
+msgid "8.0-CURRENT after adding F_DUP2FD command to man:fcntl[2]."
+msgstr "8.0-CURRENT после добавления команды F_DUP2FD в man:fcntl[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4877
+#, no-wrap
+msgid "800026"
+msgstr "800026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4878
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177086[177086]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177086[177086]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4879
+#, no-wrap
+msgid "March 12, 2008"
+msgstr "12 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4881
+#, no-wrap
+msgid "8.0-CURRENT after changing the priority parameter to `cv_broadcastpri` such that 0 means no priority."
+msgstr "8.0-CURRENT после изменения параметра приоритета на `cv_broadcastpri`, где 0 означает отсутствие приоритета."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4882
+#, no-wrap
+msgid "800027"
+msgstr "800027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4883
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177551[177551]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177551[177551]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4884
+#, no-wrap
+msgid "March 24, 2008"
+msgstr "24 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4886
+#, no-wrap
+msgid "8.0-CURRENT after changing the bpf monitoring ABI when `zerocopy` bpf buffers were added."
+msgstr "8.0-CURRENT после изменения ABI мониторинга bpf при добавлении буферов bpf с `zerocopy`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4887
+#, no-wrap
+msgid "800028"
+msgstr "800028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4888
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177637[177637]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177637[177637]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4889
+#, no-wrap
+msgid "March 26, 2008"
+msgstr "26 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4891
+#, no-wrap
+msgid "8.0-CURRENT after adding `l_sysid` to struct flock."
+msgstr "8.0-CURRENT после добавления `l_sysid` в структуру flock."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4892
+#, no-wrap
+msgid "800029"
+msgstr "800029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4893
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177688[177688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177688[177688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4894
+#, no-wrap
+msgid "March 28, 2008"
+msgstr "March 28, 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4896
+#, no-wrap
+msgid "8.0-CURRENT after reintegration of the `BUF_LOCKWAITERS` function and the addition of man:lockmgr_waiters[9]."
+msgstr "8.0-CURRENT после повторного включения функции `BUF_LOCKWAITERS` и добавления man:lockmgr_waiters[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4897
+#, no-wrap
+msgid "800030"
+msgstr "800030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4898
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177844[177844]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177844[177844]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4899
+#, no-wrap
+msgid "April 1, 2008"
+msgstr "1 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4901
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the man:rw_try_rlock[9] and man:rw_try_wlock[9] functions."
+msgstr "8.0-CURRENT после введения функций man:rw_try_rlock[9] и man:rw_try_wlock[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4902
+#, no-wrap
+msgid "800031"
+msgstr "800031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4903
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177958[177958]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177958[177958]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4904
+#, no-wrap
+msgid "April 6, 2008"
+msgstr "6 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4906
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the `lockmgr_rw` and `lockmgr_args_rw` functions."
+msgstr "8.0-CURRENT после введения функций `lockmgr_rw` и `lockmgr_args_rw`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4907
+#, no-wrap
+msgid "800032"
+msgstr "800032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4908
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178006[178006]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178006[178006]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4909
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4914
+#, no-wrap
+msgid "April 8, 2008"
+msgstr "8 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4911
+#, 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 "8.0-CURRENT после реализации системных вызовов `openat` и связанных с ними, введения флага O_EXEC для man:open[2] и предоставления соответствующих системных вызовов совместимости с Linux."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4912
+#, no-wrap
+msgid "800033"
+msgstr "800033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4913
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178017[178017]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178017[178017]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4916
+#, 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 "8.0-CURRENT после добавления поддержки man:write[2] для man:psm[4] на уровне нативной работы. Теперь произвольные команды можно записывать в [.filename]#/dev/psm%d#, а статус — считывать из него."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4917
+#, no-wrap
+msgid "800034"
+msgstr "800034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4918
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178051[178051]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178051[178051]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4919
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5822
+#, no-wrap
+msgid "April 10, 2008"
+msgstr "10 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4921
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the `memrchr` function."
+msgstr "8.0-CURRENT после введения функции `memrchr`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4922
+#, no-wrap
+msgid "800035"
+msgstr "800035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4923
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178256[178256]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178256[178256]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4924
+#, no-wrap
+msgid "April 16, 2008"
+msgstr "16 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4926
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the `fdopendir` function."
+msgstr "8.0-CURRENT после введения функции `fdopendir`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4927
+#, no-wrap
+msgid "800036"
+msgstr "800036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4928
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178362[178362]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178362[178362]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4929
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5842
+#, no-wrap
+msgid "April 20, 2008"
+msgstr "20 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4931
+#, no-wrap
+msgid "8.0-CURRENT after switchover of 802.11 wireless to multi-bss support (aka `vaps`)."
+msgstr "8.0-CURRENT после перехода на поддержку multi-bss в беспроводных сетях 802.11 (также известную как `vaps`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4932
+#, no-wrap
+msgid "800037"
+msgstr "800037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4933
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178892[178892]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178892[178892]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4934
+#, no-wrap
+msgid "May 9, 2008"
+msgstr "9 мая 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4936
+#, no-wrap
+msgid "8.0-CURRENT after addition of multi routing table support (aka man:setfib[1], man:setfib[2])."
+msgstr "8.0-CURRENT после добавления поддержки нескольких таблиц маршрутизации (также известных как man:setfib[1], man:setfib[2])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4937
+#, no-wrap
+msgid "800038"
+msgstr "800038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4938
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179316[179316]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/179316[179316]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4939
+#, no-wrap
+msgid "May 26, 2008"
+msgstr "26 мая 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4941
+#, no-wrap
+msgid "8.0-CURRENT after removal of `netatm` and ISDN4BSD. Also, the addition of the Compact C Type (CTF) tools."
+msgstr "8.0-CURRENT после удаления `netatm` и ISDN4BSD. Также добавлены инструменты Compact C Type (CTF)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4942
+#, no-wrap
+msgid "800039"
+msgstr "800039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4943
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179784[179784]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/179784[179784]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4944
+#, no-wrap
+msgid "June 14, 2008"
+msgstr "14 июня 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4946
+#, no-wrap
+msgid "8.0-CURRENT after removal of `sgtty`."
+msgstr "8.0-CURRENT после удаления `sgtty`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4947
+#, no-wrap
+msgid "800040"
+msgstr "800040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4948
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/180025[180025]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/180025[180025]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4949
+#, no-wrap
+msgid "June 26, 2008"
+msgstr "26 июня 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4951
+#, no-wrap
+msgid "8.0-CURRENT with kernel NFS `lockd` client."
+msgstr "8.0-CURRENT с клиентом `lockd` для NFS в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4952
+#, no-wrap
+msgid "800041"
+msgstr "800041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4953
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/180691[180691]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/180691[180691]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4954
+#, no-wrap
+msgid "July 22, 2008"
+msgstr "22 июля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4956
+#, no-wrap
+msgid "8.0-CURRENT after addition of man:arc4random_buf[3] and man:arc4random_uniform[3]."
+msgstr "8.0-CURRENT после добавления man:arc4random_buf[3] и man:arc4random_uniform[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4957
+#, no-wrap
+msgid "800042"
+msgstr "800042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4958
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181439[181439]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181439[181439]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4959
+#, no-wrap
+msgid "August 8, 2008"
+msgstr "8 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4961
+#, no-wrap
+msgid "8.0-CURRENT after addition of man:cpuctl[4]."
+msgstr "8.0-CURRENT после добавления man:cpuctl[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4962
+#, no-wrap
+msgid "800043"
+msgstr "800043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4963
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181694[181694]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181694[181694]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4964
+#, no-wrap
+msgid "August 13, 2008"
+msgstr "13 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4966
+#, no-wrap
+msgid "8.0-CURRENT after changing man:bpf[4] to use a single device node, instead of device cloning."
+msgstr "8.0-CURRENT после изменения man:bpf[4] для использования единого узла устройства вместо клонирования устройств."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4967
+#, no-wrap
+msgid "800044"
+msgstr "800044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4968
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181803[181803]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181803[181803]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4969
+#, no-wrap
+msgid "August 17, 2008"
+msgstr "17 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4971
+#, 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 "8.0-CURRENT после внесения изменений, связанных с первым этапом проекта VIMAGE, переименованы глобальные переменные, подлежащие виртуализации, с добавлением префикса `V_` и макросов для их обратного отображения на глобальные имена."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4972
+#, no-wrap
+msgid "800045"
+msgstr "800045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4973
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181905[181905]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181905[181905]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4974
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5862
+#, no-wrap
+msgid "August 20, 2008"
+msgstr "20 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4976
+#, 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 "8.0-CURRENT после интеграции MPSAFE TTY слоя, включая изменения в различных драйверах и утилитах, взаимодействующих с ним."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4977
+#, no-wrap
+msgid "800046"
+msgstr "800046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4978
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182869[182869]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/182869[182869]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4979
+#, no-wrap
+msgid "September 8, 2008"
+msgstr "8 сентября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4981
+#, no-wrap
+msgid "8.0-CURRENT after the separation of the GDT per CPU on amd64 architecture."
+msgstr "8.0-CURRENT после разделения GDT для каждого процессора на архитектуре amd64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4982
+#, no-wrap
+msgid "800047"
+msgstr "800047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4983
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182905[182905]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/182905[182905]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4984
+#, no-wrap
+msgid "September 10, 2008"
+msgstr "10 сентября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4986
+#, no-wrap
+msgid "8.0-CURRENT after removal of VSVTX, VSGID and VSUID."
+msgstr "8.0-CURRENT после удаления VSVTX, VSGID и VSUID."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4987
+#, no-wrap
+msgid "800048"
+msgstr "800048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4988
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183091[183091]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/183091[183091]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4989
+#, no-wrap
+msgid "September 16, 2008"
+msgstr "16 сентября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4991
+#, 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 "8.0-CURRENT после преобразования кода монтирования ядра NFS для поддержки отдельных опций монтирования в `iovec` man:nmount[2], а не только одной большой структуры nfs_args."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4992
+#, no-wrap
+msgid "800049"
+msgstr "800049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4993
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183114[183114]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/183114[183114]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4994
+#, no-wrap
+msgid "September 17, 2008"
+msgstr "17 сентября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4996
+#, no-wrap
+msgid "8.0-CURRENT after the removal of man:suser[9] and man:suser_cred[9]."
+msgstr "8.0-CURRENT после удаления man:suser[9] и man:suser_cred[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4997
+#, no-wrap
+msgid "800050"
+msgstr "800050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4998
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184099[184099]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/184099[184099]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4999
+#, no-wrap
+msgid "October 20, 2008"
+msgstr "20 октября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5001
+#, no-wrap
+msgid "8.0-CURRENT after buffer cache API change."
+msgstr "8.0-CURRENT после изменения API кэша буфера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5002
+#, no-wrap
+msgid "800051"
+msgstr "800051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5003
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184205[184205]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/184205[184205]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5004
+#, no-wrap
+msgid "October 23, 2008"
+msgstr "23 октября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5006
+#, no-wrap
+msgid "8.0-CURRENT after the removal of the man:MALLOC[9] and man:FREE[9] macros."
+msgstr "8.0-CURRENT после удаления макросов man:MALLOC[9] и man:FREE[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5007
+#, no-wrap
+msgid "800052"
+msgstr "800052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5008
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184419[184419]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/184419[184419]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5009
+#, no-wrap
+msgid "October 28, 2008"
+msgstr "28 октября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5011
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of `accmode_t` and renaming of VOP_ACCESS `a_mode` argument to `a_accmode`."
+msgstr "8.0-CURRENT после введения `accmode_t` и переименования аргумента `a_mode` в `a_accmode` в VOP_ACCESS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5012
+#, no-wrap
+msgid "800053"
+msgstr "800053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5013
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184555[184555]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/184555[184555]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5014
+#, no-wrap
+msgid "November 2, 2008"
+msgstr "2 ноября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5016
+#, 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 "8.0-CURRENT после изменения прототипа man:vfs_busy[9] и введения флагов MBF_NOWAIT и MBF_MNTLSTLOCK."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5017
+#, no-wrap
+msgid "800054"
+msgstr "800054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5018
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185162[185162]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185162[185162]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5019
+#, no-wrap
+msgid "November 22, 2008"
+msgstr "22 ноября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5021
+#, 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 "8.0-CURRENT после добавления `buf_ring`, барьеров памяти и функций ifnet для поддержки нескольких аппаратных очередей передачи для карт, которые их поддерживают, а также реализации кольцевого буфера без блокировок, чтобы позволить драйверам более эффективно управлять очередями пакетов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5022
+#, no-wrap
+msgid "800055"
+msgstr "800055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5023
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185363[185363]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185363[185363]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5024
+#, no-wrap
+msgid "November 27, 2008"
+msgstr "27 ноября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5026
+#, no-wrap
+msgid "8.0-CURRENT after the addition of Intel(TM) Core, Core2, and Atom support to man:hwpmc[4]."
+msgstr "8.0-CURRENT после добавления поддержки Intel(TM) Core, Core2 и Atom в man:hwpmc[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5027
+#, no-wrap
+msgid "800056"
+msgstr "800056"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5028
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185435[185435]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185435[185435]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5029
+#, no-wrap
+msgid "November 29, 2008"
+msgstr "29 ноября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5031
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of multi-/no-IPv4/v6 jails."
+msgstr "8.0-CURRENT после введения многопользовательских/без IPv4/v6 клеток."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5032
+#, no-wrap
+msgid "800057"
+msgstr "800057"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5033
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185522[185522]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185522[185522]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5034
+#, no-wrap
+msgid "December 1, 2008"
+msgstr "1 декабря 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5036
+#, no-wrap
+msgid "8.0-CURRENT after the switch to the ath `hal` source code."
+msgstr "8.0-CURRENT после перехода на исходный код `hal` для ath."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5037
+#, no-wrap
+msgid "800058"
+msgstr "800058"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5038
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185968[185968]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185968[185968]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5039
+#, no-wrap
+msgid "December 12, 2008"
+msgstr "12 декабря 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5041
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the VOP_VPTOCNP operation."
+msgstr "8.0-CURRENT после введения операции VOP_VPTOCNP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5042
+#, no-wrap
+msgid "800059"
+msgstr "800059"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5043
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/186119[186119]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/186119[186119]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5044
+#, no-wrap
+msgid "December 15, 2008"
+msgstr "15 декабря 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5046
+#, no-wrap
+msgid "8.0-CURRENT incorporates the new arp-v2 rewrite."
+msgstr "8.0-CURRENT включает новую переработанную версию arp-v2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5047
+#, no-wrap
+msgid "800060"
+msgstr "800060"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5048
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/186344[186344]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/186344[186344]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5049
+#, no-wrap
+msgid "December 19, 2008"
+msgstr "19 декабря 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5051
+#, no-wrap
+msgid "8.0-CURRENT after the addition of makefs."
+msgstr "8.0-CURRENT после добавления makefs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5052
+#, no-wrap
+msgid "800061"
+msgstr "800061"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5053
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187289[187289]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/187289[187289]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5054
+#, no-wrap
+msgid "January 15, 2009"
+msgstr "15 января 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5056
+#, no-wrap
+msgid "8.0-CURRENT after TCP Appropriate Byte Counting."
+msgstr "8.0-CURRENT после TCP Appropriate Byte Counting."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5057
+#, no-wrap
+msgid "800062"
+msgstr "800062"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5058
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187830[187830]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/187830[187830]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5059
+#, no-wrap
+msgid "January 28, 2009"
+msgstr "28 января 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5061
+#, no-wrap
+msgid "8.0-CURRENT after removal of `minor()`, `minor2unit()`, `unit2minor()`, etc."
+msgstr "8.0-CURRENT после удаления `minor()`, `minor2unit()`, `unit2minor()` и т.д."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5062
+#, no-wrap
+msgid "800063"
+msgstr "800063"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5063
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188745[188745]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/188745[188745]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5064
+#, no-wrap
+msgid "February 18, 2009"
+msgstr "18 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5066
+#, no-wrap
+msgid "8.0-CURRENT after GENERIC config change to use the USB2 stack, but also the addition of man:fdevname[3]."
+msgstr "8.0-CURRENT после изменения конфигурации GENERIC для использования стека USB2, а также добавления man:fdevname[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5067
+#, no-wrap
+msgid "800064"
+msgstr "800064"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5068
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188946[188946]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/188946[188946]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5069
+#, no-wrap
+msgid "February 23, 2009"
+msgstr "23 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5071
+#, no-wrap
+msgid "8.0-CURRENT after the USB2 stack is moved to and replaces dev/usb."
+msgstr "8.0-CURRENT после переноса стека USB2 и замены dev/usb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5072
+#, no-wrap
+msgid "800065"
+msgstr "800065"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5073
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189092[189092]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189092[189092]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5074
+#, no-wrap
+msgid "February 26, 2009"
+msgstr "26 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5076
+#, no-wrap
+msgid "8.0-CURRENT after the renaming of all functions in man:libmp[3]."
+msgstr "8.0-CURRENT после переименования всех функций в man:libmp[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5077
+#, no-wrap
+msgid "800066"
+msgstr "800066"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5078
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189110[189110]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189110[189110]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5079
+#, no-wrap
+msgid "February 27, 2009"
+msgstr "27 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5081
+#, no-wrap
+msgid "8.0-CURRENT after changing USB devfs handling and layout."
+msgstr "8.0-CURRENT после изменения обработки и структуры USB devfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5082
+#, no-wrap
+msgid "800067"
+msgstr "800067"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5083
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189136[189136]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189136[189136]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5084
+#, no-wrap
+msgid "February 28, 2009"
+msgstr "28 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5086
+#, no-wrap
+msgid "8.0-CURRENT after adding `getdelim()`, `getline()`, `stpncpy()`, `strnlen()`, `wcsnlen()`, `wcscasecmp()`, and `wcsncasecmp()`."
+msgstr "8.0-CURRENT после добавления `getdelim()`, `getline()`, `stpncpy()`, `strnlen()`, `wcsnlen()`, `wcscasecmp()`, and `wcsncasecmp()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5087
+#, no-wrap
+msgid "800068"
+msgstr "800068"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5088
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189276[189276]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189276[189276]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5089
+#, no-wrap
+msgid "March 2, 2009"
+msgstr "2 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5091
+#, no-wrap
+msgid "8.0-CURRENT after renaming the `ushub` devclass to `uhub`."
+msgstr "8.0-CURRENT после переименования класса устройств `ushub` в `uhub`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5092
+#, no-wrap
+msgid "800069"
+msgstr "800069"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5093
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189585[189585]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189585[189585]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5094
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5099
+#, no-wrap
+msgid "March 9, 2009"
+msgstr "9 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5096
+#, no-wrap
+msgid "8.0-CURRENT after libusb20.so.1 was renamed to libusb.so.1."
+msgstr "8.0-CURRENT после переименования libusb20.so.1 в libusb.so.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5097
+#, no-wrap
+msgid "800070"
+msgstr "800070"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5098
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189592[189592]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189592[189592]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5101
+#, no-wrap
+msgid "8.0-CURRENT after merging IGMPv3 and Source-Specific Multicast (SSM) to the IPv4 stack."
+msgstr "8.0-CURRENT после объединения IGMPv3 и Source-Specific Multicast (SSM) в стек IPv4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5102
+#, no-wrap
+msgid "800071"
+msgstr "800071"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5103
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189825[189825]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189825[189825]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5104
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5907
+#, no-wrap
+msgid "March 14, 2009"
+msgstr "14 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5106
+#, no-wrap
+msgid "8.0-CURRENT after gcc was patched to use C99 inline semantics in c99 and gnu99 mode."
+msgstr "8.0-CURRENT после того, как gcc был исправлен для использования семантики встраивания C99 в режимах c99 и gnu99."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5107
+#, no-wrap
+msgid "800072"
+msgstr "800072"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5108
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189853[189853]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189853[189853]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5109
+#, no-wrap
+msgid "March 15, 2009"
+msgstr "March 15, 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5111
+#, no-wrap
+msgid "8.0-CURRENT after the IFF_NEEDSGIANT flag has been removed; non-MPSAFE network device drivers are no longer supported."
+msgstr "8.0-CURRENT после удаления флага IFF_NEEDSGIANT; неподдерживаемые MPSAFE драйверы сетевых устройств больше не поддерживаются."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5112
+#, no-wrap
+msgid "800073"
+msgstr "800073"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5113
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190265[190265]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/190265[190265]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5114
+#, no-wrap
+msgid "March 18, 2009"
+msgstr "18 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5116
+#, no-wrap
+msgid "8.0-CURRENT after the dynamic string token substitution has been implemented for rpath and needed paths."
+msgstr "8.0-CURRENT после реализации подстановки динамических строковых токенов для rpath и необходимых путей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5117
+#, no-wrap
+msgid "800074"
+msgstr "800074"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5118
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190373[190373]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/190373[190373]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5119
+#, no-wrap
+msgid "March 24, 2009"
+msgstr "24 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5121
+#, no-wrap
+msgid "8.0-CURRENT after tcpdump 4.0.0 and libpcap 1.0.0 import."
+msgstr "8.0-CURRENT после импорта tcpdump 4.0.0 и libpcap 1.0.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5122
+#, no-wrap
+msgid "800075"
+msgstr "800075"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5123
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190787[190787]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/190787[190787]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5124
+#, no-wrap
+msgid "April 6, 2009"
+msgstr "6 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5126
+#, no-wrap
+msgid "8.0-CURRENT after layout of structs vnet_net, vnet_inet and vnet_ipfw has been changed."
+msgstr "8.0-CURRENT после изменения структуры структур vnet_net, vnet_inet и vnet_ipfw."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5127
+#, no-wrap
+msgid "800076"
+msgstr "800076"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5128
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190866[190866]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/190866[190866]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5129
+#, no-wrap
+msgid "April 9, 2009"
+msgstr "9 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5131
+#, no-wrap
+msgid "8.0-CURRENT after adding delay profiles in dummynet."
+msgstr "8.0-CURRENT после добавления профилей задержки в dummynet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5132
+#, no-wrap
+msgid "800077"
+msgstr "800077"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5133
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190914[190914]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/190914[190914]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5134
+#, no-wrap
+msgid "April 14, 2009"
+msgstr "14 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5136
+#, no-wrap
+msgid "8.0-CURRENT after removing `VOP_LEASE()` and vop_vector.vop_lease."
+msgstr "8.0-CURRENT после удаления `VOP_LEASE()` и vop_vector.vop_lease."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5137
+#, no-wrap
+msgid "800078"
+msgstr "800078"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5138
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191080[191080]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191080[191080]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5139
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5144
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5149
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5912
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5917
+#, no-wrap
+msgid "April 15, 2009"
+msgstr "15 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5141
+#, 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 "8.0-CURRENT после добавления полей `rt_weight` в структуры `rt_metrics` и `rt_metrics_lite`, что изменило расположение полей в структуре `rt_metrics_lite`. Версия RTM_VERSION была увеличена, но затем отменена."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5142
+#, no-wrap
+msgid "800079"
+msgstr "800079"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5143
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191117[191117]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191117[191117]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5146
+#, no-wrap
+msgid "8.0-CURRENT after struct `llentry` pointers are added to struct route and struct route_in6."
+msgstr "8.0-CURRENT после добавления указателей на структуру `llentry` в структуры `route` и `route_in6`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5147
+#, no-wrap
+msgid "800080"
+msgstr "800080"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5148
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191126[191126]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191126[191126]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5151
+#, no-wrap
+msgid "8.0-CURRENT after layout of struct inpcb has been changed."
+msgstr "8.0-CURRENT после изменения структуры inpcb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5152
+#, no-wrap
+msgid "800081"
+msgstr "800081"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5153
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191267[191267]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191267[191267]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5154
+#, no-wrap
+msgid "April 19, 2009"
+msgstr "19 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5156
+#, no-wrap
+msgid "8.0-CURRENT after the layout of struct `malloc_type` has been changed."
+msgstr "8.0-CURRENT после изменения структуры `malloc_type`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5157
+#, no-wrap
+msgid "800082"
+msgstr "800082"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5158
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191368[191368]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191368[191368]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5159
+#, no-wrap
+msgid "April 21, 2009"
+msgstr "21 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5161
+#, no-wrap
+msgid "8.0-CURRENT after the layout of struct ifnet has changed, and with `if_ref()` and `if_rele()` ifnet `refcounting`."
+msgstr "8.0-CURRENT после изменения структуры struct ifnet и с `if_ref()` и `if_rele()` для подсчета ссылок (`refcounting`) ifnet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5162
+#, no-wrap
+msgid "800083"
+msgstr "800083"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5163
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191389[191389]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191389[191389]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5164
+#, no-wrap
+msgid "April 22, 2009"
+msgstr "22 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5166
+#, no-wrap
+msgid "8.0-CURRENT after the implementation of a low-level Bluetooth HCI API."
+msgstr "8.0-CURRENT после реализации низкоуровневого API HCI Bluetooth."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5167
+#, no-wrap
+msgid "800084"
+msgstr "800084"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5168
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191672[191672]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191672[191672]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5169
+#, no-wrap
+msgid "April 29, 2009"
+msgstr "29 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5171
+#, no-wrap
+msgid "8.0-CURRENT after IPv6 SSM and MLDv2 changes."
+msgstr "8.0-CURRENT после изменений в IPv6 SSM и MLDv2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5172
+#, no-wrap
+msgid "800085"
+msgstr "800085"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5173
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191688[191688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191688[191688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5174
+#, no-wrap
+msgid "April 30, 2009"
+msgstr "30 апреля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5176
+#, no-wrap
+msgid "8.0-CURRENT after enabling support for VIMAGE kernel builds with one active image."
+msgstr "8.0-CURRENT после включения поддержки сборки ядра с VIMAGE с одним активным образом."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5177
+#, no-wrap
+msgid "800086"
+msgstr "800086"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5178
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191910[191910]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191910[191910]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5179
+#, no-wrap
+msgid "May 8, 2009"
+msgstr "8 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5181
+#, no-wrap
+msgid "8.0-CURRENT after adding support for input lines of arbitrarily length in man:patch[1]."
+msgstr "8.0-CURRENT после добавления поддержки строк ввода произвольной длины в man:patch[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5182
+#, no-wrap
+msgid "800087"
+msgstr "800087"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5183
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191990[191990]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191990[191990]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5184
+#, no-wrap
+msgid "May 11, 2009"
+msgstr "11 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5186
+#, 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 "8.0-CURRENT после некоторых изменений в VFS KPI. Аргумент потока был удален из частей FSD в VFS. Функциям `VFS_*` больше не нужен контекст, так как он всегда относится к `curthread`. В некоторых особых случаях старое поведение сохранено."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5187
+#, no-wrap
+msgid "800088"
+msgstr "800088"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5188
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192470[192470]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/192470[192470]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5189
+#, no-wrap
+msgid "May 20, 2009"
+msgstr "20 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5191
+#, no-wrap
+msgid "8.0-CURRENT after net80211 monitor mode changes."
+msgstr "8.0-CURRENT после изменений режима монитора в net80211."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5192
+#, no-wrap
+msgid "800089"
+msgstr "800089"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5193
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192649[192649]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/192649[192649]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5194
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5199
+#, no-wrap
+msgid "May 23, 2009"
+msgstr "23 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5196
+#, no-wrap
+msgid "8.0-CURRENT after adding UDP control block support."
+msgstr "8.0-CURRENT после добавления поддержки блока управления UDP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5197
+#, no-wrap
+msgid "800090"
+msgstr "800090"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5198
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192669[192669]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/192669[192669]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5201
+#, no-wrap
+msgid "8.0-CURRENT after virtualizing interface cloning."
+msgstr "8.0-CURRENT после виртуализации клонирования интерфейсов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5202
+#, no-wrap
+msgid "800091"
+msgstr "800091"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5203
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192895[192895]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/192895[192895]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5204
+#, no-wrap
+msgid "May 27, 2009"
+msgstr "27 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5206
+#, no-wrap
+msgid "8.0-CURRENT after adding hierarchical jails and removing global securelevel."
+msgstr "8.0-CURRENT после добавления иерархических клеток и удаления глобального securelevel."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5207
+#, no-wrap
+msgid "800092"
+msgstr "800092"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5208
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193011[193011]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193011[193011]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5209
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5214
+#, no-wrap
+msgid "May 29, 2009"
+msgstr "29 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5211
+#, 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 "8.0-CURRENT после изменения KPI `sx_init_flags()`. `SX_ADAPTIVESPIN` упразднён, и введён новый флаг `SX_NOADAPTIVE` для обработки обратной логики."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5212
+#, no-wrap
+msgid "800093"
+msgstr "800093"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5213
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193047[193047]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193047[193047]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5216
+#, no-wrap
+msgid "8.0-CURRENT after adding `mnt_xflag` to struct mount."
+msgstr "8.0-CURRENT после добавления `mnt_xflag` в структуру mount."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5217
+#, no-wrap
+msgid "800094"
+msgstr "800094"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5218
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193093[193093]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193093[193093]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5219
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5224
+#, no-wrap
+msgid "May 30, 2009"
+msgstr "30 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5221
+#, no-wrap
+msgid "8.0-CURRENT after adding man:VOP_ACCESSX[9]."
+msgstr "8.0-CURRENT после добавления man:VOP_ACCESSX[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5222
+#, no-wrap
+msgid "800095"
+msgstr "800095"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5223
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193096[193096]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193096[193096]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5226
+#, 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 "8.0-CURRENT после изменения KPI для polling. Обработчики polling теперь возвращают количество обработанных пакетов. Также введена новая возможность `IFCAP_POLLING_NOCOUNT`, которая указывает, что возвращаемое значение не является значимым и подсчёт следует пропустить."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5227
+#, no-wrap
+msgid "800096"
+msgstr "800096"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5228
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193219[193219]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193219[193219]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5229
+#, no-wrap
+msgid "June 1, 2009"
+msgstr "1 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5231
+#, no-wrap
+msgid "8.0-CURRENT after updating to the new netisr implementation and after changing the way of storing and accessing FIBs."
+msgstr "8.0-CURRENT после обновления до новой реализации netisr и после изменения способа хранения и доступа к FIB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5232
+#, no-wrap
+msgid "800097"
+msgstr "800097"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5233
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193731[193731]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193731[193731]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5234
+#, no-wrap
+msgid "June 8, 2009"
+msgstr "8 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5236
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of vnet destructor hooks and infrastructure."
+msgstr "8.0-CURRENT после введения хуков и инфраструктуры деструктора vnet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5238
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194012[194012]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/194012[194012]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5239
+#, no-wrap
+msgid "June 11, 2009"
+msgstr "11 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5241
+#, 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 "8.0-CURRENT после введения в netgraph обнаружения вызовов пути из исходящего во входящий и организации очередей, что также изменило структуру struct thread."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5242
+#, no-wrap
+msgid "800098"
+msgstr "800098"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5243
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194210[194210]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/194210[194210]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5244
+#, no-wrap
+msgid "June 14, 2009"
+msgstr "14 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5246
+#, no-wrap
+msgid "8.0-CURRENT after OpenSSL 0.9.8k import."
+msgstr "8.0-CURRENT после импорта OpenSSL 0.9.8k."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5247
+#, no-wrap
+msgid "800099"
+msgstr "800099"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5248
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194675[194675]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/194675[194675]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5249
+#, no-wrap
+msgid "June 22, 2009"
+msgstr "22 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5251
+#, no-wrap
+msgid "8.0-CURRENT after NGROUPS update and moving route virtualization into its own VImage module."
+msgstr "8.0-CURRENT после обновления NGROUPS и переноса виртуализации маршрутов в собственный модуль VImage."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5252
+#, no-wrap
+msgid "800100"
+msgstr "800100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5253
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194920[194920]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/194920[194920]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5254
+#, no-wrap
+msgid "June 24, 2009"
+msgstr "24 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5256
+#, no-wrap
+msgid "8.0-CURRENT after SYSVIPC ABI change."
+msgstr "8.0-CURRENT после изменения ABI SYSVIPC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5257
+#, no-wrap
+msgid "800101"
+msgstr "800101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5258
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195175[195175]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195175[195175]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5259
+#, no-wrap
+msgid "June 29, 2009"
+msgstr "29 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5261
+#, no-wrap
+msgid "8.0-CURRENT after the removal of the /dev/net/* per-interface character devices."
+msgstr "8.0-CURRENT после удаления символьных устройств /dev/net/* для каждого интерфейса."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5262
+#, no-wrap
+msgid "800102"
+msgstr "800102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5263
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195634[195634]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195634[195634]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5264
+#, no-wrap
+msgid "July 12, 2009"
+msgstr "12 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5266
+#, no-wrap
+msgid "8.0-CURRENT after padding was added to struct `sackhint`, struct tcpcb, and struct `tcpstat`."
+msgstr "8.0-CURRENT после добавления заполнения к структурам `sackhint`, `tcpcb` и `tcpstat`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5267
+#, no-wrap
+msgid "800103"
+msgstr "800103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5268
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195654[195654]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195654[195654]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5269
+#, no-wrap
+msgid "July 13, 2009"
+msgstr "13 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5271
+#, no-wrap
+msgid "8.0-CURRENT after replacing struct `tcpopt` with struct `toeopt` in the TOE driver interface to the TCP `syncache`."
+msgstr "8.0-CURRENT после замены структуры `tcpopt` на структуру `toeopt` в интерфейсе драйвера TOE к `syncache` TCP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5272
+#, no-wrap
+msgid "800104"
+msgstr "800104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5273
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195699[195699]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195699[195699]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5274
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5937
+#, no-wrap
+msgid "July 14, 2009"
+msgstr "14 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5276
+#, no-wrap
+msgid "8.0-CURRENT after the addition of the linker-set based per-vnet allocator."
+msgstr "8.0-CURRENT после добавления распределителя на основе наборов компоновщика для каждого vnet."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5277
+#, no-wrap
+msgid "800105"
+msgstr "800105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5278
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195767[195767]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195767[195767]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5279
+#, no-wrap
+msgid "July 19, 2009"
+msgstr "19 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5281
+#, no-wrap
+msgid "8.0-CURRENT after version bump for all shared libraries that do not have symbol versioning turned on."
+msgstr "8.0-CURRENT после увеличения версии для всех разделяемых библиотек, у которых не включено управление версиями символов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5282
+#, no-wrap
+msgid "800106"
+msgstr "800106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5283
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195852[195852]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195852[195852]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5284
+#, no-wrap
+msgid "July 24, 2009"
+msgstr "24 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5286
+#, no-wrap
+msgid "8.0-CURRENT after introduction of OBJT_SG VM object type."
+msgstr "8.0-CURRENT после введения типа объекта VM OBJT_SG."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5287
+#, no-wrap
+msgid "800107"
+msgstr "800107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5288
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196037[196037]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/196037[196037]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5289
+#, no-wrap
+msgid "August 2, 2009"
+msgstr "2 августа 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5291
+#, no-wrap
+msgid "8.0-CURRENT after making the newbus subsystem Giant free by adding the newbus `sxlock` and 8.0-RELEASE."
+msgstr "8.0-CURRENT после освобождения подсистемы newbus от Giant путем добавления `sxlock` в newbus и 8.0-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5292
+#, no-wrap
+msgid "800108"
+msgstr "800108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5293
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/199627[199627]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/199627[199627]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5294
+#, no-wrap
+msgid "November 21, 2009"
+msgstr "21 ноября 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5296
+#, no-wrap
+msgid "8.0-STABLE after implementing EVFILT_USER `kevent` filter."
+msgstr "8.0-STABLE после реализации фильтра `kevent` `EVFILT_USER`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5297
+#, no-wrap
+msgid "800500"
+msgstr "800500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5298
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/201749[201749]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/201749[201749]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5299
+#, no-wrap
+msgid "January 7, 2010"
+msgstr "7 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5301
+#, no-wrap
+msgid "8.0-STABLE after `__FreeBSD_version` bump to make `pkg_add -r` use packages-8-stable."
+msgstr "8.0-STABLE после увеличения `__FreeBSD_version`, чтобы `pkg_add -r` использовал пакеты-8-stable."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5302
+#, no-wrap
+msgid "800501"
+msgstr "800501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5303
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202922[202922]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/202922[202922]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5304
+#, no-wrap
+msgid "January 24, 2010"
+msgstr "24 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5306
+#, no-wrap
+msgid "8.0-STABLE after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4."
+msgstr "8.0-STABLE после изменения прототипов man:scandir[3] и man:alphasort[3] для соответствия SUSv4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5307
+#, no-wrap
+msgid "800502"
+msgstr "800502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5308
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203299[203299]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/203299[203299]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5309
+#, no-wrap
+msgid "January 31, 2010"
+msgstr "31 января 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5311
+#, no-wrap
+msgid "8.0-STABLE after addition of man:sigpause[2]."
+msgstr "8.0-STABLE после добавления man:sigpause[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5312
+#, no-wrap
+msgid "800503"
+msgstr "800503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5313
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/204344[204344]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/204344[204344]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5314
+#, no-wrap
+msgid "February 25, 2010"
+msgstr "25 февраля 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5316
+#, 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 "8.0-STABLE после добавления ioctl SIOCGIFDESCR и SIOCSIFDESCR к сетевым интерфейсам. Эти ioctl могут использоваться для управления описанием интерфейса, по аналогии с OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5317
+#, no-wrap
+msgid "800504"
+msgstr "800504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5318
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/204546[204546]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/204546[204546]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5319
+#, no-wrap
+msgid "March 1, 2010"
+msgstr "1 марта 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5321
+#, no-wrap
+msgid "8.0-STABLE after MFC of importing x86emu, a software emulator for real mode x86 CPU from OpenBSD."
+msgstr "8.0-STABLE после MFC импорта x86emu, программного эмулятора реального режима x86 CPU из OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5322
+#, no-wrap
+msgid "800505"
+msgstr "800505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5323
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208259[208259]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/208259[208259]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5324
+#, no-wrap
+msgid "May 18, 2010"
+msgstr "18 мая 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5326
+#, no-wrap
+msgid "8.0-STABLE after MFC of adding liblzma, xz, xzdec, and lzmainfo."
+msgstr "8.0-STABLE после MFC добавления liblzma, xz, xzdec и lzmainfo."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5327
+#, no-wrap
+msgid "801000"
+msgstr "801000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5328
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/209150[209150]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/209150[209150]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5329
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5334
+#, no-wrap
+msgid "June 14, 2010"
+msgstr "14 июня 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5331
+#, no-wrap
+msgid "8.1-RELEASE"
+msgstr "8.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5332
+#, no-wrap
+msgid "801500"
+msgstr "801500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5333
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/209146[209146]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/209146[209146]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5336
+#, no-wrap
+msgid "8.1-STABLE after 8.1-RELEASE."
+msgstr "8.1-STABLE после 8.1-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5337
+#, no-wrap
+msgid "801501"
+msgstr "801501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5338
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/214762[214762]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/214762[214762]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5339
+#, no-wrap
+msgid "November 3, 2010"
+msgstr "3 ноября 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5341
+#, 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 "8.1-STABLE после изменения KBI в структуре `sysentvec`, а также реализации PL_FLAG_SCE/SCX/EXEC/SI и `pl_siginfo` для ptrace(PT_LWPINFO)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5342
+#, no-wrap
+msgid "802000"
+msgstr "802000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5343
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216639[216639]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216639[216639]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5344
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5349
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5962
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5967
+#, no-wrap
+msgid "December 22, 2010"
+msgstr "22 декабря 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5346
+#, no-wrap
+msgid "8.2-RELEASE"
+msgstr "8.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5347
+#, no-wrap
+msgid "802500"
+msgstr "802500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5348
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216654[216654]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216654[216654]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5351
+#, no-wrap
+msgid "8.2-STABLE after 8.2-RELEASE."
+msgstr "8.2-STABLE после 8.2-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5352
+#, no-wrap
+msgid "802501"
+msgstr "802501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5353
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219107[219107]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/219107[219107]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5354
+#, no-wrap
+msgid "February 28, 2011"
+msgstr "28 февраля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5356
+#, no-wrap
+msgid "8.2-STABLE after merging DTrace changes, including support for userland tracing."
+msgstr "8.2-STABLE после объединения изменений DTrace, включая поддержку трассировки пользовательского пространства."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5357
+#, no-wrap
+msgid "802502"
+msgstr "802502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5358
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219324[219324]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/219324[219324]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5359
+#, no-wrap
+msgid "March 6, 2011"
+msgstr "6 марта 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5361
+#, no-wrap
+msgid "8.2-STABLE after merging log2 and log2f into libm."
+msgstr "8.2-STABLE после объединения log2 и log2f в libm."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5362
+#, no-wrap
+msgid "802503"
+msgstr "802503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5363
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221275[221275]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/221275[221275]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5364
+#, no-wrap
+msgid "May 1, 2011"
+msgstr "1 мая 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5366
+#, no-wrap
+msgid "8.2-STABLE after upgrade of the gcc to the last GPLv2 version from the FSF gcc-4_2-branch."
+msgstr "8.2-STABLE после обновления gcc до последней версии GPLv2 из ветки FSF gcc-4_2-branch."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5367
+#, no-wrap
+msgid "802504"
+msgstr "802504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5368
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222401[222401]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222401[222401]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5369
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5374
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5379
+#, no-wrap
+msgid "May 28, 2011"
+msgstr "28 мая 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5371
+#, no-wrap
+msgid "8.2-STABLE after introduction of the KPI and supporting infrastructure for modular congestion control."
+msgstr "8.2-STABLE после введения KPI и поддерживающей инфраструктуры для модульного управления перегрузкой."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5372
+#, no-wrap
+msgid "802505"
+msgstr "802505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5373
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222406[222406]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222406[222406]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5376
+#, no-wrap
+msgid "8.2-STABLE after introduction of Hhook and Khelp KPIs."
+msgstr "8.2-STABLE после введения KPIs Hhook и Khelp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5377
+#, no-wrap
+msgid "802506"
+msgstr "802506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5378
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222408[222408]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222408[222408]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5381
+#, no-wrap
+msgid "8.2-STABLE after addition of OSD to struct tcpcb."
+msgstr "8.2-STABLE после добавления OSD в структуру tcpcb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5382
+#, no-wrap
+msgid "802507"
+msgstr "802507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5383
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222741[222741]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222741[222741]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5384
+#, no-wrap
+msgid "June 6, 2011"
+msgstr "6 июня 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5386
+#, no-wrap
+msgid "8.2-STABLE after ZFS v28 import."
+msgstr "8.2-STABLE после импорта ZFS v28."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5387
+#, no-wrap
+msgid "802508"
+msgstr "802508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5388
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222846[222846]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/222846[222846]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5389
+#, no-wrap
+msgid "June 8, 2011"
+msgstr "8 июня 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5391
+#, no-wrap
+msgid "8.2-STABLE after removal of the `schedtail` event handler and addition of the `sv_schedtail` method to struct `sysvec`."
+msgstr "8.2-STABLE после удаления обработчика событий `schedtail` и добавления метода `sv_schedtail` в структуру `sysvec`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5392
+#, no-wrap
+msgid "802509"
+msgstr "802509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5393
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224017[224017]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/224017[224017]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5394
+#, no-wrap
+msgid "July 14, 2011"
+msgstr "14 июля 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5396
+#, no-wrap
+msgid "8.2-STABLE after merging the SSSE3 support into binutils."
+msgstr "8.2-STABLE после объединения поддержки SSSE3 в binutils."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5397
+#, no-wrap
+msgid "802510"
+msgstr "802510"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5398
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224214[224214]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/224214[224214]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5401
+#, no-wrap
+msgid "8.2-STABLE after addition of RFTSIGZMB flag for man:rfork[2]."
+msgstr "8.2-STABLE после добавления флага RFTSIGZMB для man:rfork[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5402
+#, no-wrap
+msgid "802511"
+msgstr "802511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5403
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225458[225458]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/225458[225458]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5404
+#, no-wrap
+msgid "September 9, 2011"
+msgstr "9 сентября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5406
+#, 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 "8.2-STABLE после добавления автоматического обнаружения USB-накопителей, которые не поддерживают команду SCSI \"no synchronize cache\"."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5407
+#, no-wrap
+msgid "802512"
+msgstr "802512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5408
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225470[225470]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/225470[225470]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5411
+#, no-wrap
+msgid "8.2-STABLE after merging of re-factoring of auto-quirk."
+msgstr "8.2-STABLE после объединения рефакторинга auto-quirk."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5412
+#, no-wrap
+msgid "802513"
+msgstr "802513"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5413
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/226763[226763]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/226763[226763]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5414
+#, no-wrap
+msgid "October 25, 2011"
+msgstr "25 октября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5416
+#, no-wrap
+msgid "8.2-STABLE after merging of the MAP_PREFAULT_READ flag to man:mmap[2]."
+msgstr "8.2-STABLE после объединения флага MAP_PREFAULT_READ в man:mmap[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5417
+#, no-wrap
+msgid "802514"
+msgstr "802514"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5418
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/227573[227573]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/227573[227573]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5419
+#, no-wrap
+msgid "November 16, 2011"
+msgstr "16 ноября 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5421
+#, no-wrap
+msgid "8.2-STABLE after merging of addition of man:posix_fallocate[2] syscall."
+msgstr "8.2-STABLE после объединения добавления системного вызова man:posix_fallocate[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5422
+#, no-wrap
+msgid "802515"
+msgstr "802515"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5423
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229725[229725]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/229725[229725]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5426
+#, no-wrap
+msgid "8.2-STABLE after merging of addition of the man:posix_fadvise[2] system call."
+msgstr "8.2-STABLE после объединения добавления системного вызова man:posix_fadvise[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5427
+#, no-wrap
+msgid "802516"
+msgstr "802516"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5428
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230239[230239]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/230239[230239]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5431
+#, no-wrap
+msgid "8.2-STABLE after merging gperf 3.0.3"
+msgstr "8.2-STABLE после объединения gperf 3.0.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5432
+#, no-wrap
+msgid "802517"
+msgstr "802517"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5433
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231769[231769]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/231769[231769]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5436
+#, no-wrap
+msgid "8.2-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr "8.2-STABLE после введения нового расширяемого интерфейса man:sysctl[3] NET_RT_IFLISTL для запроса списков адресов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5437
+#, no-wrap
+msgid "803000"
+msgstr "803000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5438
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232446[232446]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/232446[232446]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5441
+#, no-wrap
+msgid "8.3-RELEASE."
+msgstr "8.3-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5442
+#, no-wrap
+msgid "803500"
+msgstr "803500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5443
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232439[232439]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/232439[232439]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5446
+#, no-wrap
+msgid "8.3-STABLE after branching releng/8.3 (RELENG_8_3)."
+msgstr "8.3-STABLE после ветвления releng/8.3 (RELENG_8_3)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5447
+#, no-wrap
+msgid "803501"
+msgstr "803501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5448
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247091[247091]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/247091[247091]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5451
+#, 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 "8.3-STABLE после слияния двух исправлений для USB (ссылки на ревизии: link:https://svnweb.freebsd.org/changeset/base/246616[246616] и link:https://svnweb.freebsd.org/changeset/base/246759[246759])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5452
+#, no-wrap
+msgid "804000"
+msgstr "804000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5453
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248850[248850]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/248850[248850]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5454
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5459
+#, no-wrap
+msgid "March 28, 2013"
+msgstr "28 марта 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5456
+#, no-wrap
+msgid "8.4-RELEASE."
+msgstr "8.4-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5457
+#, no-wrap
+msgid "804500"
+msgstr "804500"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5458
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248819[248819]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/248819[248819]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5461
+#, no-wrap
+msgid "8.4-STABLE after 8.4-RELEASE."
+msgstr "8.4-STABLE после 8.4-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5462
+#, no-wrap
+msgid "804501"
+msgstr "804501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5463
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259449[259449]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/259449[259449]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5464
+#, no-wrap
+msgid "December 16, 2013"
+msgstr "16 декабря 2013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5466
+#, no-wrap
+msgid "8.4-STABLE after MFC of upstream Heimdal encoding fix."
+msgstr "8.4-STABLE после MFC исправления кодировки из вышестоящего Heimdal."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5467
+#, no-wrap
+msgid "804502"
+msgstr "804502"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5471
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:08.tcp."
+msgstr "8.4-STABLE после FreeBSD-SA-14:08.tcp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5472
+#, no-wrap
+msgid "804503"
+msgstr "804503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5473
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268444[268444]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/268444[268444]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5474
+#, no-wrap
+msgid "July 9, 2014"
+msgstr "9 июля 2014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5476
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:17.kmem."
+msgstr "8.4-STABLE после FreeBSD-SA-14:17.kmem."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5477
+#, no-wrap
+msgid "804504"
+msgstr "804504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5481
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/271305[271305])."
+msgstr "8.4-STABLE после FreeBSD-SA-14:18 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/271305[271305])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5482
+#, no-wrap
+msgid "804505"
+msgstr "804505"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5486
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+msgstr "8.4-STABLE после FreeBSD-SA-14:19 (ревизия link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5487
+#, no-wrap
+msgid "804506"
+msgstr "804506"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5491
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:21 (rev link:https://svnweb.freebsd.org/changeset/base/273413[273413])."
+msgstr "8.4-STABLE после FreeBSD-SA-14:21 (ссылка на ревизию:https://svnweb.freebsd.org/changeset/base/273413[273413])."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5492
+#, no-wrap
+msgid "804507"
+msgstr "804507"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5496
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr "8.4-STABLE после FreeBSD-SA-14:23, FreeBSD-SA-14:24 и FreeBSD-SA-14:25."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5497
+#, no-wrap
+msgid "804508"
+msgstr "804508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5501
+#, 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."
+msgstr "8-STABLE после FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp и FreeBSD-SA-15:05.bind."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5502
+#, no-wrap
+msgid "804509"
+msgstr "804509"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5503
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305736[305736]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/305736[305736]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5505
+#, no-wrap
+msgid "8-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr "8-STABLE после устранения взаимоблокировки между `device_detach()` и man:usbd_do_request_flags[9]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5508
+#, no-wrap
+msgid "FreeBSD 7 Versions"
+msgstr "Версии FreeBSD 7"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5511
+#, no-wrap
+msgid "FreeBSD 7 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` для FreeBSD 7"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5520
+#, no-wrap
+msgid "700000"
+msgstr "700000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147925[147925]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/147925[147925]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5522
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6150
+#, no-wrap
+msgid "July 11, 2005"
+msgstr "11 июля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5524
+#, no-wrap
+msgid "7.0-CURRENT."
+msgstr "7.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5525
+#, no-wrap
+msgid "700001"
+msgstr "700001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/148341[148341]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/148341[148341]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5527
+#, no-wrap
+msgid "July 23, 2005"
+msgstr "23 июля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5529
+#, no-wrap
+msgid "7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_5."
+msgstr "7.0-CURRENT после увеличения версий всех общих библиотек, которые не изменялись с RELENG_5."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5530
+#, no-wrap
+msgid "700002"
+msgstr "700002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149039[149039]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/149039[149039]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5532
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6160
+#, no-wrap
+msgid "August 13, 2005"
+msgstr "13 августа 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5534
+#, no-wrap
+msgid "7.0-CURRENT after credential argument is added to `dev_clone` event handler."
+msgstr "7.0-CURRENT после добавления аргумента учетных данных в обработчик события `dev_clone`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5535
+#, no-wrap
+msgid "700003"
+msgstr "700003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5536
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149470[149470]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/149470[149470]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5537
+#, no-wrap
+msgid "August 25, 2005"
+msgstr "25 августа 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5539
+#, no-wrap
+msgid "7.0-CURRENT after man:memmem[3] is added to libc."
+msgstr "7.0-CURRENT после добавления man:memmem[3] в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5540
+#, no-wrap
+msgid "700004"
+msgstr "700004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5541
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/151888[151888]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/151888[151888]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5542
+#, no-wrap
+msgid "October 30, 2005"
+msgstr "30 октября 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5544
+#, no-wrap
+msgid "7.0-CURRENT after man:solisten[9] kernel arguments are modified to accept a backlog parameter."
+msgstr "7.0-CURRENT после изменения аргументов ядра man:solisten[9] для принятия параметра backlog."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5545
+#, no-wrap
+msgid "700005"
+msgstr "700005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5546
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152296[152296]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/152296[152296]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5547
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5552
+#, no-wrap
+msgid "November 11, 2005"
+msgstr "11 ноября 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5549
+#, no-wrap
+msgid "7.0-CURRENT after `IFP2ENADDR()` was changed to return a pointer to `IF_LLADDR()`."
+msgstr "7.0-CURRENT после изменения `IFP2ENADDR()` для возврата указателя на `IF_LLADDR()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5550
+#, no-wrap
+msgid "700006"
+msgstr "700006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5551
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152315[152315]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/152315[152315]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5554
+#, no-wrap
+msgid "7.0-CURRENT after addition of `if_addr` member to `struct ifnet` and `IFP2ENADDR()` removal."
+msgstr "7.0-CURRENT после добавления члена `if_addr` в `struct ifnet` и удаления `IFP2ENADDR()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5555
+#, no-wrap
+msgid "700007"
+msgstr "700007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5556
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153027[153027]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153027[153027]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5557
+#, no-wrap
+msgid "December 2, 2005"
+msgstr "2 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5559
+#, no-wrap
+msgid "7.0-CURRENT after incorporating scripts from the `local_startup` directories into the base man:rcorder[8]."
+msgstr "7.0-CURRENT после включения скриптов из каталогов `local_startup` в базовый man:rcorder[8]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5560
+#, no-wrap
+msgid "700008"
+msgstr "700008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5561
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153107[153107]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153107[153107]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5562
+#, no-wrap
+msgid "December 5, 2005"
+msgstr "5 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5564
+#, no-wrap
+msgid "7.0-CURRENT after removal of MNT_NODEV mount option."
+msgstr "7.0-CURRENT после удаления опции монтирования MNT_NODEV."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5565
+#, no-wrap
+msgid "700009"
+msgstr "700009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5566
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153519[153519]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153519[153519]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5567
+#, no-wrap
+msgid "December 19, 2005"
+msgstr "19 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5569
+#, no-wrap
+msgid "7.0-CURRENT after ELF-64 type changes and symbol versioning."
+msgstr "7.0-CURRENT после изменений типа ELF-64 и версионирования символов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5570
+#, no-wrap
+msgid "700010"
+msgstr "700010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5571
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153579[153579]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153579[153579]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5572
+#, no-wrap
+msgid "December 20, 2005"
+msgstr "20 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5574
+#, 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 "7.0-CURRENT после добавления драйверов `hostb` и `vgapci`, добавления `pci_find_extcap()` и изменения драйверов AGP, чтобы они больше не отображали апертуру."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5575
+#, no-wrap
+msgid "700011"
+msgstr "700011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5576
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153936[153936]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153936[153936]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5577
+#, no-wrap
+msgid "December 31, 2005"
+msgstr "31 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5579
+#, no-wrap
+msgid "7.0-CURRENT after `tv_sec` was made `time_t` on all platforms but Alpha."
+msgstr "7.0-CURRENT после того, как `tv_sec` был изменён на `time_t` на всех платформах, кроме Alpha."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5580
+#, no-wrap
+msgid "700012"
+msgstr "700012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5581
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154114[154114]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154114[154114]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5582
+#, no-wrap
+msgid "January 8, 2006"
+msgstr "8 января 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5584
+#, no-wrap
+msgid "7.0-CURRENT after ldconfig_local_dirs change."
+msgstr "7.0-CURRENT после изменения ldconfig_local_dirs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5585
+#, no-wrap
+msgid "700013"
+msgstr "700013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5586
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154269[154269]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154269[154269]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5587
+#, no-wrap
+msgid "January 12, 2006"
+msgstr "12 января 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5589
+#, 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 "7.0-CURRENT после изменений в [.filename]#/etc/rc.d/abi# для поддержки [.filename]#/compat/linux/etc/ld.so.cache# в виде символьной ссылки в файловой системе только для чтения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5590
+#, no-wrap
+msgid "700014"
+msgstr "700014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5591
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154863[154863]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154863[154863]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5592
+#, no-wrap
+msgid "January 26, 2006"
+msgstr "26 января 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5594
+#, no-wrap
+msgid "7.0-CURRENT after pts import."
+msgstr "7.0-CURRENT после импорта pts."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5595
+#, no-wrap
+msgid "700015"
+msgstr "700015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5596
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157144[157144]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/157144[157144]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5597
+#, no-wrap
+msgid "March 26, 2006"
+msgstr "26 марта 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5599
+#, no-wrap
+msgid "7.0-CURRENT after the introduction of version 2 of man:hwpmc[4]'s ABI."
+msgstr "7.0-CURRENT после введения версии 2 ABI man:hwpmc[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5600
+#, no-wrap
+msgid "700016"
+msgstr "700016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5601
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157962[157962]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/157962[157962]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5602
+#, no-wrap
+msgid "April 22, 2006"
+msgstr "22 апреля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5604
+#, no-wrap
+msgid "7.0-CURRENT after addition of man:fcloseall[3] to libc."
+msgstr "7.0-CURRENT после добавления man:fcloseall[3] в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5605
+#, no-wrap
+msgid "700017"
+msgstr "700017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5606
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158513[158513]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/158513[158513]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5607
+#, no-wrap
+msgid "May 13, 2006"
+msgstr "13 мая 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5609
+#, no-wrap
+msgid "7.0-CURRENT after removal of ip6fw."
+msgstr "7.0-CURRENT после удаления ip6fw."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5610
+#, no-wrap
+msgid "700018"
+msgstr "700018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5611
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160386[160386]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/160386[160386]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5612
+#, no-wrap
+msgid "July 15, 2006"
+msgstr "15 июля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5614
+#, no-wrap
+msgid "7.0-CURRENT after import of snd_emu10kx."
+msgstr "7.0-CURRENT после импорта snd_emu10kx."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5615
+#, no-wrap
+msgid "700019"
+msgstr "700019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5616
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160821[160821]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/160821[160821]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5617
+#, no-wrap
+msgid "July 29, 2006"
+msgstr "29 июля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5619
+#, no-wrap
+msgid "7.0-CURRENT after import of OpenSSL 0.9.8b."
+msgstr "7.0-CURRENT после импорта OpenSSL 0.9.8b."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5620
+#, no-wrap
+msgid "700020"
+msgstr "700020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5621
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161931[161931]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/161931[161931]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5622
+#, no-wrap
+msgid "September 3, 2006"
+msgstr "3 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5624
+#, no-wrap
+msgid "7.0-CURRENT after addition of `bus_dma_get_tag` function"
+msgstr "7.0-CURRENT после добавления функции `bus_dma_get_tag`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5625
+#, no-wrap
+msgid "700021"
+msgstr "700021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5626
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162023[162023]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/162023[162023]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5627
+#, no-wrap
+msgid "September 4, 2006"
+msgstr "4 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5629
+#, no-wrap
+msgid "7.0-CURRENT after libpcap 0.9.4 and tcpdump 3.9.4 import."
+msgstr "7.0-CURRENT после импорта libpcap 0.9.4 и tcpdump 3.9.4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5630
+#, no-wrap
+msgid "700022"
+msgstr "700022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5631
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162170[162170]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/162170[162170]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5632
+#, no-wrap
+msgid "September 9, 2006"
+msgstr "9 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5634
+#, no-wrap
+msgid "7.0-CURRENT after `dlsym` change to look for a requested symbol both in specified DSO and its implicit dependencies."
+msgstr "7.0-CURRENT после изменения `dlsym`, чтобы искать запрошенный символ как в указанном DSO, так и в его неявных зависимостях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5635
+#, no-wrap
+msgid "700023"
+msgstr "700023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5636
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162588[162588]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/162588[162588]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5637
+#, no-wrap
+msgid "September 23, 2006"
+msgstr "23 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5639
+#, no-wrap
+msgid "7.0-CURRENT after adding new sound IOCTLs for the OSSv4 mixer API."
+msgstr "7.0-CURRENT после добавления новых звуковых IOCTL для API микшера OSSv4."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5640
+#, no-wrap
+msgid "700024"
+msgstr "700024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5641
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162919[162919]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/162919[162919]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5642
+#, no-wrap
+msgid "September 28, 2006"
+msgstr "28 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5644
+#, no-wrap
+msgid "7.0-CURRENT after import of OpenSSL 0.9.8d."
+msgstr "7.0-CURRENT после импорта OpenSSL 0.9.8d."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5645
+#, no-wrap
+msgid "700025"
+msgstr "700025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5646
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164190[164190]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/164190[164190]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5647
+#, no-wrap
+msgid "November 11, 2006"
+msgstr "11 ноября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5649
+#, no-wrap
+msgid "7.0-CURRENT after the addition of libelf."
+msgstr "7.0-CURRENT после добавления libelf."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5650
+#, no-wrap
+msgid "700026"
+msgstr "700026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5651
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164614[164614]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/164614[164614]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5652
+#, no-wrap
+msgid "November 26, 2006"
+msgstr "26 ноября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5654
+#, no-wrap
+msgid "7.0-CURRENT after major changes on sound sysctls."
+msgstr "7.0-CURRENT после значительных изменений в звуковых sysctls."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5655
+#, no-wrap
+msgid "700027"
+msgstr "700027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5656
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164770[164770]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/164770[164770]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5657
+#, no-wrap
+msgid "November 30, 2006"
+msgstr "30 ноября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5659
+#, no-wrap
+msgid "7.0-CURRENT after the addition of Wi-Spy quirk."
+msgstr "7.0-CURRENT после добавления особенности Wi-Spy."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5660
+#, no-wrap
+msgid "700028"
+msgstr "700028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5661
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165242[165242]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/165242[165242]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5662
+#, no-wrap
+msgid "December 15, 2006"
+msgstr "15 декабря 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5664
+#, no-wrap
+msgid "7.0-CURRENT after the addition of `sctp` calls to libc"
+msgstr "7.0-CURRENT после добавления вызовов `sctp` в libc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5665
+#, no-wrap
+msgid "700029"
+msgstr "700029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5666
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166259[166259]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166259[166259]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5667
+#, no-wrap
+msgid "January 26, 2007"
+msgstr "26 января 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5669
+#, no-wrap
+msgid "7.0-CURRENT after the GNU man:gzip[1] implementation was replaced with a BSD licensed version ported from NetBSD."
+msgstr "7.0-CURRENT после того, как реализация GNU man:gzip[1] была заменена на версию с лицензией BSD, портированную из NetBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5670
+#, no-wrap
+msgid "700030"
+msgstr "700030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5671
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166549[166549]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166549[166549]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5672
+#, no-wrap
+msgid "February 7, 2007"
+msgstr "7 февраля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5674
+#, no-wrap
+msgid "7.0-CURRENT after the removal of IPIP tunnel encapsulation (VIFF_TUNNEL) from the IPv4 multicast forwarding code."
+msgstr "7.0-CURRENT после удаления инкапсуляции туннеля IPIP (VIFF_TUNNEL) из кода переадресации IPv4 multicast."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5675
+#, no-wrap
+msgid "700031"
+msgstr "700031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5676
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166907[166907]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166907[166907]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5677
+#, no-wrap
+msgid "February 23, 2007"
+msgstr "23 февраля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5679
+#, no-wrap
+msgid "7.0-CURRENT after the modification of `bus_setup_intr()` (newbus)."
+msgstr "7.0-CURRENT после изменения `bus_setup_intr()` (newbus)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5680
+#, no-wrap
+msgid "700032"
+msgstr "700032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5681
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167165[167165]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/167165[167165]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5682
+#, no-wrap
+msgid "March 2, 2007"
+msgstr "2 марта 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5684
+#, no-wrap
+msgid "7.0-CURRENT after the inclusion of man:ipw[4] and man:iwi[4] firmware."
+msgstr "7.0-CURRENT после включения firmware для man:ipw[4] и man:iwi[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5685
+#, no-wrap
+msgid "700033"
+msgstr "700033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5686
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167360[167360]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/167360[167360]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5687
+#, no-wrap
+msgid "March 9, 2007"
+msgstr "9 марта 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5689
+#, no-wrap
+msgid "7.0-CURRENT after the inclusion of ncurses wide character support."
+msgstr "7.0-CURRENT после включения поддержки широких символов ncurses."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5690
+#, no-wrap
+msgid "700034"
+msgstr "700034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5691
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167684[167684]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/167684[167684]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5692
+#, no-wrap
+msgid "March 19, 2007"
+msgstr "19 марта 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5694
+#, no-wrap
+msgid "7.0-CURRENT after changes to how `insmntque()`, `getnewvnode()`, and `vfs_hash_insert()` work."
+msgstr "7.0-CURRENT после изменений в работе `insmntque()`, `getnewvnode()` и `vfs_hash_insert()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5695
+#, no-wrap
+msgid "700035"
+msgstr "700035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5696
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167906[167906]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/167906[167906]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5697
+#, no-wrap
+msgid "March 26, 2007"
+msgstr "26 марта 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5699
+#, no-wrap
+msgid "7.0-CURRENT after addition of a notify mechanism for CPU frequency changes."
+msgstr "7.0-CURRENT после добавления механизма уведомлений об изменениях частоты CPU."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5700
+#, no-wrap
+msgid "700036"
+msgstr "700036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5701
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168413[168413]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168413[168413]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5702
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6270
+#, no-wrap
+msgid "April 6, 2007"
+msgstr "6 апреля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5704
+#, no-wrap
+msgid "7.0-CURRENT after import of the ZFS filesystem."
+msgstr "7.0-CURRENT после импорта файловой системы ZFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5705
+#, no-wrap
+msgid "700037"
+msgstr "700037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5706
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168504[168504]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168504[168504]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5707
+#, no-wrap
+msgid "April 8, 2007"
+msgstr "8 апреля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5709
+#, 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 "7.0-CURRENT после добавления периферийного устройства CAM 'SG', реализующего подмножество API сквозного устройства SCSI SG в Linux."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5710
+#, no-wrap
+msgid "700038"
+msgstr "700038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5711
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169151[169151]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169151[169151]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5712
+#, no-wrap
+msgid "April 30, 2007"
+msgstr "30 апреля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5714
+#, 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 "7.0-CURRENT после изменения man:getenv[3], man:putenv[3], man:setenv[3] и man:unsetenv[3] для соответствия стандарту POSIX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5715
+#, no-wrap
+msgid "700039"
+msgstr "700039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5716
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169190[169190]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169190[169190]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5717
+#, no-wrap
+msgid "May 1, 2007"
+msgstr "1 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5719
+#, no-wrap
+msgid "7.0-CURRENT after the changes in 700038 were backed out."
+msgstr "7.0-CURRENT после отмены изменений в 700038."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5720
+#, no-wrap
+msgid "700040"
+msgstr "700040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5721
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169453[169453]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169453[169453]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5722
+#, no-wrap
+msgid "May 10, 2007"
+msgstr "10 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5724
+#, no-wrap
+msgid "7.0-CURRENT after the addition of man:flopen[3] to libutil."
+msgstr "7.0-CURRENT после добавления man:flopen[3] в libutil."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5725
+#, no-wrap
+msgid "700041"
+msgstr "700041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5726
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169526[169526]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169526[169526]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5727
+#, no-wrap
+msgid "May 13, 2007"
+msgstr "13 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5729
+#, no-wrap
+msgid "7.0-CURRENT after enabling symbol versioning, and changing the default thread library to libthr."
+msgstr "7.0-CURRENT после включения версионирования символов и изменения библиотеки потоков по умолчанию на libthr."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5730
+#, no-wrap
+msgid "700042"
+msgstr "700042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5731
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169758[169758]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169758[169758]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5732
+#, no-wrap
+msgid "May 19, 2007"
+msgstr "19 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5734
+#, no-wrap
+msgid "7.0-CURRENT after the import of gcc 4.2.0."
+msgstr "7.0-CURRENT после импорта gcc 4.2.0."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5735
+#, no-wrap
+msgid "700043"
+msgstr "700043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5736
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169830[169830]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169830[169830]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5737
+#, no-wrap
+msgid "May 21, 2007"
+msgstr "21 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5739
+#, no-wrap
+msgid "7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_6."
+msgstr "7.0-CURRENT после увеличения версий всех общих библиотек, которые не изменялись с RELENG_6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5740
+#, no-wrap
+msgid "700044"
+msgstr "700044"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5741
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170395[170395]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170395[170395]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5742
+#, no-wrap
+msgid "June 7, 2007"
+msgstr "7 июня 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5744
+#, no-wrap
+msgid "7.0-CURRENT after changing the argument for `vn_open()`/`VOP_OPEN()` from file descriptor index to the struct file *."
+msgstr "7.0-CURRENT после изменения аргумента для `vn_open()`/`VOP_OPEN()` с индекса файлового дескриптора на указатель на структуру file *."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5745
+#, no-wrap
+msgid "700045"
+msgstr "700045"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5746
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170510[170510]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170510[170510]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5747
+#, no-wrap
+msgid "June 10, 2007"
+msgstr "10 июня 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5749
+#, 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 "7.0-CURRENT после изменения man:pam_nologin[8] для предоставления функции управления учетными записями вместо функции аутентификации в рамках PAM."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5750
+#, no-wrap
+msgid "700046"
+msgstr "700046"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5751
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170530[170530]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170530[170530]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5752
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5757
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6290
+#, no-wrap
+msgid "June 11, 2007"
+msgstr "11 июня 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5754
+#, no-wrap
+msgid "7.0-CURRENT after updated 802.11 wireless support."
+msgstr "7.0-CURRENT после обновления поддержки беспроводных сетей 802.11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5755
+#, no-wrap
+msgid "700047"
+msgstr "700047"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5756
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170579[170579]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170579[170579]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5759
+#, no-wrap
+msgid "7.0-CURRENT after adding TCP LRO interface capabilities."
+msgstr "7.0-CURRENT после добавления возможностей интерфейса TCP LRO."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5760
+#, no-wrap
+msgid "700048"
+msgstr "700048"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5761
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170613[170613]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170613[170613]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5762
+#, no-wrap
+msgid "June 12, 2007"
+msgstr "12 июня 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5764
+#, 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 "7.0-CURRENT после добавления поддержки API RFC 3678 в стек IPv4. Устаревшее поведение RFC 1724 для ioctl IP_MULTICAST_IF теперь удалено; 0.0.0.0/8 больше нельзя использовать для указания индекса интерфейса. Вместо этого используйте структуру `ipmreqn`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5765
+#, no-wrap
+msgid "700049"
+msgstr "700049"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5766
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171175[171175]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/171175[171175]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5767
+#, no-wrap
+msgid "July 3, 2007"
+msgstr "3 июля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5769
+#, no-wrap
+msgid "7.0-CURRENT after importing pf from OpenBSD 4.1"
+msgstr "7.0-CURRENT после импорта pf из OpenBSD 4.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5771
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171167[171167]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/171167[171167]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5774
+#, no-wrap
+msgid "7.0-CURRENT after adding IPv6 support for FAST_IPSEC, deleting KAME IPSEC, and renaming FAST_IPSEC to IPSEC."
+msgstr "7.0-CURRENT после добавления поддержки IPv6 для FAST_IPSEC, удаления KAME IPSEC и переименования FAST_IPSEC в IPSEC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5775
+#, no-wrap
+msgid "700050"
+msgstr "700050"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5776
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171195[171195]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/171195[171195]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5777
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5782
+#, no-wrap
+msgid "July 4, 2007"
+msgstr "4 июля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5779
+#, no-wrap
+msgid "7.0-CURRENT after converting setenv/putenv/etc. calls from traditional BSD to POSIX."
+msgstr "7.0-CURRENT после преобразования вызовов setenv/putenv/etc. из традиционного BSD в POSIX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5780
+#, no-wrap
+msgid "700051"
+msgstr "700051"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5781
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171211[171211]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/171211[171211]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5784
+#, no-wrap
+msgid "7.0-CURRENT after adding new mmap/lseek/etc syscalls."
+msgstr "7.0-CURRENT после добавления новых системных вызовов mmap/lseek и др."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5785
+#, no-wrap
+msgid "700052"
+msgstr "700052"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5786
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171275[171275]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/171275[171275]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5787
+#, no-wrap
+msgid "July 6, 2007"
+msgstr "6 июля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5789
+#, no-wrap
+msgid "7.0-CURRENT after moving I4B headers to include/i4b."
+msgstr "7.0-CURRENT после перемещения заголовков I4B в include/i4b."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5790
+#, no-wrap
+msgid "700053"
+msgstr "700053"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5791
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172394[172394]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172394[172394]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5792
+#, no-wrap
+msgid "September 30, 2007"
+msgstr "30 сентября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5794
+#, no-wrap
+msgid "7.0-CURRENT after the addition of support for PCI domains"
+msgstr "7.0-CURRENT после добавления поддержки доменов PCI"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5795
+#, no-wrap
+msgid "700054"
+msgstr "700054"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5796
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172988[172988]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172988[172988]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5797
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6300
+#, no-wrap
+msgid "October 25, 2007"
+msgstr "25 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5799
+#, no-wrap
+msgid "7.0-STABLE after MFC of wide and single byte ctype separation."
+msgstr "7.0-STABLE после переноса изменений (MFC) разделения широких и однобайтовых ctype."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5800
+#, no-wrap
+msgid "700055"
+msgstr "700055"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5801
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173104[173104]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173104[173104]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5802
+#, no-wrap
+msgid "October 28, 2007"
+msgstr "28 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5804
+#, 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 "7.0-RELEASE и 7.0-CURRENT после того, как обратная совместимость ABI с версиями FreeBSD 4/5/6 для IOCTL PCIOCGETCONF, PCIOCREAD и PCIOCWRITE была перенесена в стабильную ветку (MFC), что потребовало снова нарушить ABI IOCTL PCIOCGETCONF"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5805
+#, no-wrap
+msgid "700100"
+msgstr "700100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5806
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174864[174864]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174864[174864]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5807
+#, no-wrap
+msgid "December 22, 2007"
+msgstr "22 декабря 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5809
+#, no-wrap
+msgid "7.0-STABLE after 7.0-RELEASE"
+msgstr "7.0-STABLE после 7.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5810
+#, no-wrap
+msgid "700101"
+msgstr "700101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5811
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176111[176111]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/176111[176111]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5814
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `m_collapse()`."
+msgstr "7.0-STABLE после MFC `m_collapse()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5815
+#, no-wrap
+msgid "700102"
+msgstr "700102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5816
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177735[177735]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/177735[177735]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5817
+#, no-wrap
+msgid "March 30, 2008"
+msgstr "30 марта 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5819
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `kdb_enter_why()`."
+msgstr "7.0-STABLE после MFC `kdb_enter_why()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5820
+#, no-wrap
+msgid "700103"
+msgstr "700103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5821
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178061[178061]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178061[178061]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5824
+#, no-wrap
+msgid "7.0-STABLE after adding `l_sysid` to struct flock."
+msgstr "7.0-STABLE после добавления `l_sysid` в структуру flock."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5825
+#, no-wrap
+msgid "700104"
+msgstr "700104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5826
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178108[178108]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178108[178108]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5827
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5832
+#, no-wrap
+msgid "April 11, 2008"
+msgstr "11 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5829
+#, no-wrap
+msgid "7.0-STABLE after the MFC of man:procstat[1]."
+msgstr "7.0-STABLE после MFC man:procstat[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5830
+#, no-wrap
+msgid "700105"
+msgstr "700105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5831
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178120[178120]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178120[178120]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5834
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `umtx` features."
+msgstr "7.0-STABLE после MFC функций `umtx`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5835
+#, no-wrap
+msgid "700106"
+msgstr "700106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5836
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178225[178225]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178225[178225]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5837
+#, no-wrap
+msgid "April 15, 2008"
+msgstr "15 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5839
+#, no-wrap
+msgid "7.0-STABLE after the MFC of man:write[2] support to man:psm[4]."
+msgstr "7.0-STABLE после MFC поддержки man:write[2] в man:psm[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5840
+#, no-wrap
+msgid "700107"
+msgstr "700107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5841
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178353[178353]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178353[178353]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5844
+#, no-wrap
+msgid "7.0-STABLE after the MFC of F_DUP2FD command to man:fcntl[2]."
+msgstr "7.0-STABLE после MFC команды F_DUP2FD в man:fcntl[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5845
+#, no-wrap
+msgid "700108"
+msgstr "700108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5846
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178783[178783]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178783[178783]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5847
+#, no-wrap
+msgid "May 5, 2008"
+msgstr "5 мая 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5849
+#, 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 "7.0-STABLE после некоторых изменений в man:lockmgr[9], что делает необходимым включение [.filename]#sys/lock.h# для использования man:lockmgr[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5850
+#, no-wrap
+msgid "700109"
+msgstr "700109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5851
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6334
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179367[179367]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/179367[179367]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5852
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6335
+#, no-wrap
+msgid "May 27, 2008"
+msgstr "27 мая 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5854
+#, no-wrap
+msgid "7.0-STABLE after MFC of the man:memrchr[3] function."
+msgstr "7.0-STABLE после MFC функции man:memrchr[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5855
+#, no-wrap
+msgid "700110"
+msgstr "700110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5856
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181328[181328]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181328[181328]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5857
+#, no-wrap
+msgid "August 5, 2008"
+msgstr "5 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5859
+#, no-wrap
+msgid "7.0-STABLE after MFC of kernel NFS `lockd` client."
+msgstr "7.0-STABLE после MFC клиента `lockd` ядра NFS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5860
+#, no-wrap
+msgid "700111"
+msgstr "700111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5861
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181940[181940]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/181940[181940]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5864
+#, no-wrap
+msgid "7.0-STABLE after addition of physically contiguous jumbo frame support."
+msgstr "7.0-STABLE после добавления поддержки физически непрерывных больших кадров (jumbo frame)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5865
+#, no-wrap
+msgid "700112"
+msgstr "700112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5866
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182294[182294]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/182294[182294]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5867
+#, no-wrap
+msgid "August 27, 2008"
+msgstr "27 августа 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5869
+#, no-wrap
+msgid "7.0-STABLE after MFC of kernel DTrace support."
+msgstr "7.0-STABLE после переноса изменений (MFC) поддержки DTrace в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5870
+#, no-wrap
+msgid "701000"
+msgstr "701000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5871
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185315[185315]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185315[185315]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5872
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5877
+#, no-wrap
+msgid "November 25, 2008"
+msgstr "25 ноября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5874
+#, no-wrap
+msgid "7.1-RELEASE"
+msgstr "7.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5875
+#, no-wrap
+msgid "701100"
+msgstr "701100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5876
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185302[185302]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/185302[185302]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5879
+#, no-wrap
+msgid "7.1-STABLE after 7.1-RELEASE."
+msgstr "7.1-STABLE после 7.1-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5880
+#, no-wrap
+msgid "701101"
+msgstr "701101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5881
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187023[187023]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/187023[187023]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5882
+#, no-wrap
+msgid "January 10, 2009"
+msgstr "10 января 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5884
+#, no-wrap
+msgid "7.1-STABLE after man:strndup[3] merge."
+msgstr "7.1-STABLE после слияния man:strndup[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5885
+#, no-wrap
+msgid "701102"
+msgstr "701102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5886
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187370[187370]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/187370[187370]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5887
+#, no-wrap
+msgid "January 17, 2009"
+msgstr "17 января 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5889
+#, no-wrap
+msgid "7.1-STABLE after man:cpuctl[4] support added."
+msgstr "7.1-STABLE после добавления поддержки man:cpuctl[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5890
+#, no-wrap
+msgid "701103"
+msgstr "701103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5891
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188281[188281]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/188281[188281]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5892
+#, no-wrap
+msgid "February 7, 2009"
+msgstr "7 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5894
+#, no-wrap
+msgid "7.1-STABLE after the merge of multi-/no-IPv4/v6 jails."
+msgstr "7.1-STABLE после объединения клеток с поддержкой multi-/no-IPv4/v6."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5895
+#, no-wrap
+msgid "701104"
+msgstr "701104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5896
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188625[188625]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/188625[188625]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5897
+#, no-wrap
+msgid "February 14, 2009"
+msgstr "14 февраля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5899
+#, 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 "7.1-STABLE после сохранения владельца приостановки в структуре mount и добавления метода vfs_susp_clean в структуру vfsops."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5900
+#, no-wrap
+msgid "701105"
+msgstr "701105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5901
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189740[189740]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189740[189740]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5902
+#, no-wrap
+msgid "March 12, 2009"
+msgstr "12 марта 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5904
+#, 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 "7.1-STABLE после несовместимого изменения sysctl kern.ipc.shmsegs для выделения больших сегментов разделяемой памяти SysV на 64-битных архитектурах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5905
+#, no-wrap
+msgid "701106"
+msgstr "701106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5906
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189786[189786]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/189786[189786]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5909
+#, no-wrap
+msgid "7.1-STABLE after the merge of a fix for POSIX semaphore wait operations."
+msgstr "7.1-STABLE после объединения исправления для операций ожидания семафоров POSIX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5910
+#, no-wrap
+msgid "702000"
+msgstr "702000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5911
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191099[191099]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191099[191099]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5914
+#, no-wrap
+msgid "7.2-RELEASE"
+msgstr "7.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5915
+#, no-wrap
+msgid "702100"
+msgstr "702100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5916
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191091[191091]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/191091[191091]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5919
+#, no-wrap
+msgid "7.2-STABLE after 7.2-RELEASE."
+msgstr "7.2-STABLE после 7.2-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5920
+#, no-wrap
+msgid "702101"
+msgstr "702101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5921
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192149[192149]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/192149[192149]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5922
+#, no-wrap
+msgid "May 15, 2009"
+msgstr "15 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5924
+#, 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 "7.2-STABLE после изменения man:ichsmb[4] для использования выравнивания по левому краю вторичной адресации, чтобы соответствовать другим драйверам контроллеров SMBus."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5925
+#, no-wrap
+msgid "702102"
+msgstr "702102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5926
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193020[193020]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193020[193020]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5927
+#, no-wrap
+msgid "May 28, 2009"
+msgstr "28 мая 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5929
+#, no-wrap
+msgid "7.2-STABLE after MFC of the man:fdopendir[3] function."
+msgstr "7.2-STABLE после слияния из ветки man функции fdopendir[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5930
+#, no-wrap
+msgid "702103"
+msgstr "702103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5931
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193638[193638]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/193638[193638]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5932
+#, no-wrap
+msgid "June 6, 2009"
+msgstr "6 июня 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5934
+#, no-wrap
+msgid "7.2-STABLE after MFC of PmcTools."
+msgstr "7.2-STABLE после MFC PmcTools."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5935
+#, no-wrap
+msgid "702104"
+msgstr "702104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5936
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195694[195694]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/195694[195694]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5939
+#, no-wrap
+msgid "7.2-STABLE after MFC of the man:closefrom[2] system call."
+msgstr "7.2-STABLE после MFC системного вызова man:closefrom[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5940
+#, no-wrap
+msgid "702105"
+msgstr "702105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5941
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196006[196006]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/196006[196006]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5942
+#, no-wrap
+msgid "July 31, 2009"
+msgstr "31 июля 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5944
+#, no-wrap
+msgid "7.2-STABLE after MFC of the SYSVIPC ABI change."
+msgstr "7.2-STABLE после слияния изменения ABI SYSVIPC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5945
+#, no-wrap
+msgid "702106"
+msgstr "702106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5946
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197198[197198]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/197198[197198]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5947
+#, no-wrap
+msgid "September 14, 2009"
+msgstr "14 сентября 2009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5949
+#, 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 "7.2-STABLE после слияния изменений (MFC) улучшений PAT для x86 и добавления `d_mmap_single()` и типа объекта VM со списком scatter/gather."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5950
+#, no-wrap
+msgid "703000"
+msgstr "703000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5951
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203740[203740]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/203740[203740]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5952
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5957
+#, no-wrap
+msgid "February 9, 2010"
+msgstr "9 февраля 2010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5954
+#, no-wrap
+msgid "7.3-RELEASE"
+msgstr "7.3-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5955
+#, no-wrap
+msgid "703100"
+msgstr "703100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5956
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203742[203742]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/203742[203742]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5959
+#, no-wrap
+msgid "7.3-STABLE after 7.3-RELEASE."
+msgstr "7.3-STABLE после 7.3-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5960
+#, no-wrap
+msgid "704000"
+msgstr "704000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5961
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216647[216647]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216647[216647]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5964
+#, no-wrap
+msgid "7.4-RELEASE"
+msgstr "7.4-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5965
+#, no-wrap
+msgid "704100"
+msgstr "704100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5966
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216658[216658]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/216658[216658]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5969
+#, no-wrap
+msgid "7.4-STABLE after 7.4-RELEASE."
+msgstr "7.4-STABLE после 7.4-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5970
+#, no-wrap
+msgid "704101"
+msgstr "704101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5971
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221318[221318]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/221318[221318]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5972
+#, no-wrap
+msgid "May 2, 2011"
+msgstr "2 мая 2011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5973
+#, no-wrap
+msgid "7.4-STABLE after the gcc MFC in rev link:https://svnweb.freebsd.org/changeset/base/221317[221317]."
+msgstr "7.4-STABLE после MFC gcc в ревизии link:https://svnweb.freebsd.org/changeset/base/221317[221317]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5976
+#, no-wrap
+msgid "FreeBSD 6 Versions"
+msgstr "Версии FreeBSD 6"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5979
+#, no-wrap
+msgid "FreeBSD 6 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5988
+#, no-wrap
+msgid "600000"
+msgstr "600000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5989
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133921[133921]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/133921[133921]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5990
+#, no-wrap
+msgid "August 18, 2004"
+msgstr "18 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5992
+#, no-wrap
+msgid "6.0-CURRENT"
+msgstr "6.0-CURRENT"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5993
+#, no-wrap
+msgid "600001"
+msgstr "600001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5994
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134396[134396]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/134396[134396]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5995
+#, no-wrap
+msgid "August 27, 2004"
+msgstr "27 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5997
+#, no-wrap
+msgid "6.0-CURRENT after permanently enabling PFIL_HOOKS in the kernel."
+msgstr "6.0-CURRENT после постоянного включения PFIL_HOOKS в ядре."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5998
+#, no-wrap
+msgid "600002"
+msgstr "600002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5999
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134514[134514]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/134514[134514]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6000
+#, no-wrap
+msgid "August 30, 2004"
+msgstr "30 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6002
+#, 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 "6.0-CURRENT после первоначального добавления `ifi_epoch` в структуру `if_data`. Отменено через несколько дней. Не используйте это значение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6003
+#, no-wrap
+msgid "600003"
+msgstr "600003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6004
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134933[134933]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/134933[134933]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6005
+#, no-wrap
+msgid "September 8, 2004"
+msgstr "8 сентября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6007
+#, no-wrap
+msgid "6.0-CURRENT after the re-addition of the `ifi_epoch` member of struct `if_data`."
+msgstr "6.0-CURRENT после повторного добавления члена `ifi_epoch` в структуру `if_data`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6008
+#, no-wrap
+msgid "600004"
+msgstr "600004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6009
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/135920[135920]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/135920[135920]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6010
+#, no-wrap
+msgid "September 29, 2004"
+msgstr "29 сентября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6012
+#, no-wrap
+msgid "6.0-CURRENT after addition of the struct inpcb argument to the pfil API."
+msgstr "6.0-CURRENT после добавления аргумента struct inpcb в API pfil."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6013
+#, no-wrap
+msgid "600005"
+msgstr "600005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6014
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/136172[136172]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/136172[136172]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6015
+#, no-wrap
+msgid "October 5, 2004"
+msgstr "5 октября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6017
+#, no-wrap
+msgid "6.0-CURRENT after addition of the \"-d DESTDIR\" argument to newsyslog."
+msgstr "6.0-CURRENT после добавления аргумента \"-d DESTDIR\" в newsyslog."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6018
+#, no-wrap
+msgid "600006"
+msgstr "600006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6019
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/137192[137192]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/137192[137192]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6020
+#, no-wrap
+msgid "November 4, 2004"
+msgstr "4 ноября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6022
+#, no-wrap
+msgid "6.0-CURRENT after addition of glibc style man:strftime[3] padding options."
+msgstr "6.0-CURRENT после добавления опций заполнения в стиле glibc для man:strftime[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6023
+#, no-wrap
+msgid "600007"
+msgstr "600007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6024
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138760[138760]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/138760[138760]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6025
+#, no-wrap
+msgid "December 12, 2004"
+msgstr "12 декабря 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6027
+#, no-wrap
+msgid "6.0-CURRENT after addition of 802.11 framework updates."
+msgstr "6.0-CURRENT после добавления обновлений для фреймворка 802.11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6028
+#, no-wrap
+msgid "600008"
+msgstr "600008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6029
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/140809[140809]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/140809[140809]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6030
+#, no-wrap
+msgid "January 25, 2005"
+msgstr "25 января 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6032
+#, no-wrap
+msgid "6.0-CURRENT after changes to `VOP_*VOBJECT()` functions and introduction of `MNTK_MPSAFE` flag for Giant-free filesystems."
+msgstr "6.0-CURRENT после изменений в функциях `VOP_*VOBJECT()` и введения флага `MNTK_MPSAFE` для файловых систем, работающих без Giant."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6033
+#, no-wrap
+msgid "600009"
+msgstr "600009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6034
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141250[141250]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/141250[141250]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6035
+#, no-wrap
+msgid "February 4, 2005"
+msgstr "4 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6037
+#, no-wrap
+msgid "6.0-CURRENT after addition of the cpufreq framework and drivers."
+msgstr "6.0-CURRENT после добавления фреймворка cpufreq и драйверов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6038
+#, no-wrap
+msgid "600010"
+msgstr "600010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6039
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141394[141394]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/141394[141394]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6040
+#, no-wrap
+msgid "February 6, 2005"
+msgstr "6 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6042
+#, no-wrap
+msgid "6.0-CURRENT after importing OpenBSD's man:nc[1]."
+msgstr "6.0-CURRENT после импорта man:nc[1] из OpenBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6043
+#, no-wrap
+msgid "600011"
+msgstr "600011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6044
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141727[141727]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/141727[141727]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6045
+#, no-wrap
+msgid "February 12, 2005"
+msgstr "12 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6047
+#, no-wrap
+msgid "6.0-CURRENT after removing semblance of SVID2 `matherr()` support."
+msgstr "6.0-CURRENT после удаления подобия поддержки `matherr()` из SVID2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6048
+#, no-wrap
+msgid "600012"
+msgstr "600012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6049
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141940[141940]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/141940[141940]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6050
+#, no-wrap
+msgid "February 15, 2005"
+msgstr "15 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6052
+#, no-wrap
+msgid "6.0-CURRENT after increase of default thread stacks' size."
+msgstr "6.0-CURRENT после увеличения размера стеков потоков по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6053
+#, no-wrap
+msgid "600013"
+msgstr "600013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6054
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142089[142089]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142089[142089]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6055
+#, no-wrap
+msgid "February 19, 2005"
+msgstr "19 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6057
+#, 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 "6.0-CURRENT после исправлений в [.filename]#<src/include/stdbool.h># и [.filename]#<src/sys/i386/include/_types.h># для обеспечения совместимости с GCC компилятора Intel C/C++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6058
+#, no-wrap
+msgid "600014"
+msgstr "600014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6059
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142184[142184]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142184[142184]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6060
+#, no-wrap
+msgid "February 21, 2005"
+msgstr "21 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6062
+#, no-wrap
+msgid "6.0-CURRENT after EOVERFLOW checks in man:vswprintf[3] fixed."
+msgstr "6.0-CURRENT после исправления проверок EOVERFLOW в man:vswprintf[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6063
+#, no-wrap
+msgid "600015"
+msgstr "600015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6064
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142501[142501]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142501[142501]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6065
+#, no-wrap
+msgid "February 25, 2005"
+msgstr "25 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6067
+#, no-wrap
+msgid "6.0-CURRENT after changing the struct `if_data` member, `ifi_epoch`, from wall clock time to uptime."
+msgstr "6.0-CURRENT после изменения члена структуры `if_data`, `ifi_epoch`, с времени настенных часов на время работы системы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6068
+#, no-wrap
+msgid "600016"
+msgstr "600016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6069
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142582[142582]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142582[142582]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6070
+#, no-wrap
+msgid "February 26, 2005"
+msgstr "26 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6072
+#, no-wrap
+msgid "6.0-CURRENT after LC_CTYPE disk format changed."
+msgstr "6.0-CURRENT после изменения формата диска LC_CTYPE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6073
+#, no-wrap
+msgid "600017"
+msgstr "600017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6074
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142683[142683]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142683[142683]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6075
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6080
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6923
+#, no-wrap
+msgid "February 27, 2005"
+msgstr "27 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6077
+#, no-wrap
+msgid "6.0-CURRENT after NLS catalogs disk format changed."
+msgstr "6.0-CURRENT после изменения формата диска каталогов NLS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6078
+#, no-wrap
+msgid "600018"
+msgstr "600018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6079
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142686[142686]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142686[142686]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6082
+#, no-wrap
+msgid "6.0-CURRENT after LC_COLLATE disk format changed."
+msgstr "6.0-CURRENT после изменения формата диска LC_COLLATE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6083
+#, no-wrap
+msgid "600019"
+msgstr "600019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6084
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142752[142752]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142752[142752]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6085
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6928
+#, no-wrap
+msgid "February 28, 2005"
+msgstr "28 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6087
+#, no-wrap
+msgid "Installation of `acpica` includes into /usr/include."
+msgstr "Установка `acpica` включает файлы в /usr/include."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6088
+#, no-wrap
+msgid "600020"
+msgstr "600020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6089
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143308[143308]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/143308[143308]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6090
+#, no-wrap
+msgid "March 9, 2005"
+msgstr "9 марта 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6092
+#, no-wrap
+msgid "Addition of MSG_NOSIGNAL flag to man:send[2] API."
+msgstr "Добавление флага MSG_NOSIGNAL в API man:send[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6093
+#, no-wrap
+msgid "600021"
+msgstr "600021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6094
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143746[143746]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/143746[143746]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6095
+#, no-wrap
+msgid "March 17, 2005"
+msgstr "17 марта 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6097
+#, no-wrap
+msgid "Addition of fields to cdevsw"
+msgstr "Добавление полей в cdevsw"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6098
+#, no-wrap
+msgid "600022"
+msgstr "600022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6099
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143901[143901]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/143901[143901]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6100
+#, no-wrap
+msgid "March 21, 2005"
+msgstr "21 марта 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6102
+#, no-wrap
+msgid "Removed gtar from base system."
+msgstr "Удален gtar из базовой системы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6103
+#, no-wrap
+msgid "600023"
+msgstr "600023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6104
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144980[144980]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/144980[144980]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6105
+#, no-wrap
+msgid "April 13, 2005"
+msgstr "13 апреля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6107
+#, no-wrap
+msgid "LOCAL_CREDS, LOCAL_CONNWAIT socket options added to man:unix[4]."
+msgstr "Добавлены параметры сокета LOCAL_CREDS, LOCAL_CONNWAIT в man:unix[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6108
+#, no-wrap
+msgid "600024"
+msgstr "600024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6109
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6114
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145565[145565]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/145565[145565]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6110
+#, no-wrap
+msgid "April 19, 2005"
+msgstr "19 апреля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6112
+#, no-wrap
+msgid "man:hwpmc[4] and related tools added to 6.0-CURRENT."
+msgstr "man:hwpmc[4] и связанные инструменты добавлены в 6.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6113
+#, no-wrap
+msgid "600025"
+msgstr "600025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6115
+#, no-wrap
+msgid "April 26, 2005"
+msgstr "26 апреля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6117
+#, no-wrap
+msgid "struct `icmphdr` added to 6.0-CURRENT."
+msgstr "Структура `icmphdr` добавлена в 6.0-CURRENT."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6118
+#, no-wrap
+msgid "600026"
+msgstr "600026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6119
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145843[145843]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/145843[145843]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6120
+#, no-wrap
+msgid "May 3, 2005"
+msgstr "3 мая 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6122
+#, no-wrap
+msgid "pf updated to 3.7."
+msgstr "pf обновлен до версии 3.7."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6123
+#, no-wrap
+msgid "600027"
+msgstr "600027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6124
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145966[145966]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/145966[145966]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6125
+#, no-wrap
+msgid "May 6, 2005"
+msgstr "6 мая 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6127
+#, no-wrap
+msgid "Kernel libalias and `ng_nat` introduced."
+msgstr "Добавлены libalias в ядре и `ng_nat`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6128
+#, no-wrap
+msgid "600028"
+msgstr "600028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6129
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146191[146191]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/146191[146191]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6130
+#, no-wrap
+msgid "May 13, 2005"
+msgstr "13 мая 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6132
+#, no-wrap
+msgid "POSIX man:ttyname_r[3] made available through unistd.h and libc."
+msgstr "POSIX man:ttyname_r[3], доступный через unistd.h и libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6133
+#, no-wrap
+msgid "600029"
+msgstr "600029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6134
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146780[146780]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/146780[146780]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6135
+#, no-wrap
+msgid "May 29, 2005"
+msgstr "29 мая 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6137
+#, no-wrap
+msgid "6.0-CURRENT after libpcap updated to v0.9.1 alpha 096."
+msgstr "6.0-CURRENT после обновления libpcap до v0.9.1 alpha 096."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6138
+#, no-wrap
+msgid "600030"
+msgstr "600030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6139
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146988[146988]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/146988[146988]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6140
+#, no-wrap
+msgid "June 5, 2005"
+msgstr "5 июня 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6142
+#, no-wrap
+msgid "6.0-CURRENT after importing NetBSD's man:if_bridge[4]."
+msgstr "6.0-CURRENT после импорта man:if_bridge[4] из NetBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6143
+#, no-wrap
+msgid "600031"
+msgstr "600031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6144
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147256[147256]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/147256[147256]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6145
+#, no-wrap
+msgid "June 10, 2005"
+msgstr "10 июня 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6147
+#, no-wrap
+msgid "6.0-CURRENT after struct ifnet was broken out of the driver `softcs`."
+msgstr "6.0-CURRENT после того, как структура ifnet была вынесена из `softcs` драйвера."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6148
+#, no-wrap
+msgid "600032"
+msgstr "600032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6149
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147898[147898]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/147898[147898]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6152
+#, no-wrap
+msgid "6.0-CURRENT after the import of libpcap v0.9.1."
+msgstr "6.0-CURRENT после импорта libpcap v0.9.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6153
+#, no-wrap
+msgid "600033"
+msgstr "600033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6154
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/148388[148388]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/148388[148388]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6155
+#, no-wrap
+msgid "July 25, 2005"
+msgstr "25 июля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6157
+#, no-wrap
+msgid "6.0-STABLE after bump of all shared library versions that had not been changed since RELENG_5."
+msgstr "6.0-STABLE после увеличения версий всех общих библиотек, которые не изменялись с RELENG_5."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6158
+#, no-wrap
+msgid "600034"
+msgstr "600034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6159
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149040[149040]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/149040[149040]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6162
+#, no-wrap
+msgid "6.0-STABLE after credential argument is added to `dev_clone` event handler. 6.0-RELEASE."
+msgstr "6.0-STABLE после добавления аргумента credential в обработчик события `dev_clone`. 6.0-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6163
+#, no-wrap
+msgid "600100"
+msgstr "600100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6164
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/151958[151958]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/151958[151958]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6165
+#, no-wrap
+msgid "November 1, 2005"
+msgstr "1 ноября 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6167
+#, no-wrap
+msgid "6.0-STABLE after 6.0-RELEASE"
+msgstr "6.0-STABLE после 6.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6168
+#, no-wrap
+msgid "600101"
+msgstr "600101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6169
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153601[153601]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153601[153601]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6170
+#, no-wrap
+msgid "December 21, 2005"
+msgstr "21 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6172
+#, no-wrap
+msgid "6.0-STABLE after incorporating scripts from the `local_startup` directories into the base man:rcorder[8]."
+msgstr "6.0-STABLE после включения скриптов из каталогов `local_startup` в базовый man:rcorder[8]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6173
+#, no-wrap
+msgid "600102"
+msgstr "600102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6174
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153912[153912]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/153912[153912]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6175
+#, no-wrap
+msgid "December 30, 2005"
+msgstr "30 декабря 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6177
+#, no-wrap
+msgid "6.0-STABLE after updating the ELF types and constants."
+msgstr "6.0-STABLE после обновления типов и констант ELF."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6178
+#, no-wrap
+msgid "600103"
+msgstr "600103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6179
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154396[154396]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154396[154396]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6180
+#, no-wrap
+msgid "January 15, 2006"
+msgstr "15 января 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6182
+#, no-wrap
+msgid "6.0-STABLE after MFC of man:pidfile[3] API."
+msgstr "6.0-STABLE после переноса изменений (MFC) API man:pidfile[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6183
+#, no-wrap
+msgid "600104"
+msgstr "600104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6184
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154453[154453]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154453[154453]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6185
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6968
+#, no-wrap
+msgid "January 17, 2006"
+msgstr "17 января 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6187
+#, no-wrap
+msgid "6.0-STABLE after MFC of ldconfig_local_dirs change."
+msgstr "6.0-STABLE после MFC изменений ldconfig_local_dirs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6188
+#, no-wrap
+msgid "600105"
+msgstr "600105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6189
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/156019[156019]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/156019[156019]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6190
+#, no-wrap
+msgid "February 26, 2006"
+msgstr "26 февраля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6192
+#, no-wrap
+msgid "6.0-STABLE after NLS catalog support of man:csh[1]."
+msgstr "6.0-STABLE после поддержки каталога NLS в man:csh[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6193
+#, no-wrap
+msgid "601000"
+msgstr "601000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6194
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158330[158330]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/158330[158330]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6195
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6200
+#, no-wrap
+msgid "May 6, 2006"
+msgstr "6 мая 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6197
+#, no-wrap
+msgid "6.1-RELEASE"
+msgstr "6.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6198
+#, no-wrap
+msgid "601100"
+msgstr "601100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6199
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158331[158331]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/158331[158331]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6202
+#, no-wrap
+msgid "6.1-STABLE after 6.1-RELEASE."
+msgstr "6.1-STABLE после 6.1-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6203
+#, no-wrap
+msgid "601101"
+msgstr "601101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6204
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/159861[159861]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/159861[159861]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6205
+#, no-wrap
+msgid "June 22, 2006"
+msgstr "22 июня 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6207
+#, no-wrap
+msgid "6.1-STABLE after the import of `csup`."
+msgstr "6.1-STABLE после импорта `csup`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6208
+#, no-wrap
+msgid "601102"
+msgstr "601102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6209
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160253[160253]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/160253[160253]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6210
+#, no-wrap
+msgid "July 11, 2006"
+msgstr "11 июля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6212
+#, no-wrap
+msgid "6.1-STABLE after the man:iwi[4] update."
+msgstr "6.1-STABLE после обновления man:iwi[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6213
+#, no-wrap
+msgid "601103"
+msgstr "601103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6214
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160429[160429]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/160429[160429]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6215
+#, no-wrap
+msgid "July 17, 2006"
+msgstr "17 июля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6217
+#, no-wrap
+msgid "6.1-STABLE after the resolver update to BIND9, and exposure of reentrant version of `netdb` functions."
+msgstr "6.1-STABLE после обновления резолвера до BIND9 и добавления реентерабельной версии функций `netdb`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6218
+#, no-wrap
+msgid "601104"
+msgstr "601104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6219
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161098[161098]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/161098[161098]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6220
+#, no-wrap
+msgid "August 8, 2006"
+msgstr "8 августа 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6222
+#, no-wrap
+msgid "6.1-STABLE after DSO (dynamic shared objects) support has been enabled in OpenSSL."
+msgstr "6.1-STABLE после включения поддержки DSO (динамически разделяемых объектов) в OpenSSL."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6223
+#, no-wrap
+msgid "601105"
+msgstr "601105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6224
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161900[161900]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/161900[161900]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6225
+#, no-wrap
+msgid "September 2, 2006"
+msgstr "2 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6227
+#, no-wrap
+msgid "6.1-STABLE after 802.11 fix-ups changed the API for the IEEE80211_IOC_STA_INFO ioctl."
+msgstr "6.1-STABLE после исправлений 802.11 изменил API для ioctl IEEE80211_IOC_STA_INFO."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6228
+#, no-wrap
+msgid "602000"
+msgstr "602000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6229
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164312[164312]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/164312[164312]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6230
+#, no-wrap
+msgid "November 15, 2006"
+msgstr "15 ноября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6232
+#, no-wrap
+msgid "6.2-RELEASE"
+msgstr "6.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6233
+#, no-wrap
+msgid "602100"
+msgstr "602100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6234
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162329[162329]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/162329[162329]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6235
+#, no-wrap
+msgid "September 15, 2006"
+msgstr "15 сентября 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6237
+#, no-wrap
+msgid "6.2-STABLE after 6.2-RELEASE."
+msgstr "6.2-STABLE после 6.2-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6238
+#, no-wrap
+msgid "602101"
+msgstr "602101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6239
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165122[165122]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/165122[165122]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6240
+#, no-wrap
+msgid "December 12, 2006"
+msgstr "12 декабря 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6242
+#, no-wrap
+msgid "6.2-STABLE after the addition of Wi-Spy quirk."
+msgstr "6.2-STABLE после добавления особенности Wi-Spy."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6243
+#, no-wrap
+msgid "602102"
+msgstr "602102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6244
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165596[165596]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/165596[165596]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6245
+#, no-wrap
+msgid "December 28, 2006"
+msgstr "28 декабря 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6247
+#, no-wrap
+msgid "6.2-STABLE after `pci_find_extcap()` addition."
+msgstr "6.2-STABLE после добавления `pci_find_extcap()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6248
+#, no-wrap
+msgid "602103"
+msgstr "602103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6249
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166039[166039]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166039[166039]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6250
+#, no-wrap
+msgid "January 16, 2007"
+msgstr "16 января 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6252
+#, 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 "6.2-STABLE после MFC изменения `dlsym` для поиска запрошенного символа как в указанном DSO, так и в его неявных зависимостях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6253
+#, no-wrap
+msgid "602104"
+msgstr "602104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6254
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166314[166314]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166314[166314]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6255
+#, no-wrap
+msgid "January 28, 2007"
+msgstr "28 января 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6257
+#, 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 "6.2-STABLE после слияния изменений (MFC) узлов netgraph man:ng_deflate[4] и man:ng_pred1[4], а также новых режимов сжатия и шифрования для узла man:ng_ppp[4]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6258
+#, no-wrap
+msgid "602105"
+msgstr "602105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6259
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166840[166840]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/166840[166840]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6260
+#, no-wrap
+msgid "February 20, 2007"
+msgstr "20 февраля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6262
+#, no-wrap
+msgid "6.2-STABLE after MFC of BSD licensed version of man:gzip[1] ported from NetBSD."
+msgstr "6.2-STABLE после переноса (MFC) версии man:gzip[1] под лицензией BSD из NetBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6263
+#, no-wrap
+msgid "602106"
+msgstr "602106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6264
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168133[168133]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168133[168133]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6265
+#, no-wrap
+msgid "March 31, 2007"
+msgstr "31 марта 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6267
+#, no-wrap
+msgid "6.2-STABLE after MFC of PCI MSI and MSI-X support."
+msgstr "6.2-STABLE после слияния изменений (MFC) поддержки PCI MSI и MSI-X."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6268
+#, no-wrap
+msgid "602107"
+msgstr "602107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6269
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168438[168438]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168438[168438]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6272
+#, no-wrap
+msgid "6.2-STABLE after MFC of ncurses 5.6 and wide character support."
+msgstr "6.2-STABLE после слияния изменений (MFC) ncurses 5.6 с поддержкой широких символов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6273
+#, no-wrap
+msgid "602108"
+msgstr "602108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6274
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168611[168611]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168611[168611]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6275
+#, no-wrap
+msgid "April 11, 2007"
+msgstr "11 апреля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6277
+#, 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 "6.2-STABLE после слияния изменений (MFC) для периферийного устройства CAM 'SG', реализующего подмножество API сквозного устройства SCSI SG в Linux."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6278
+#, no-wrap
+msgid "602109"
+msgstr "602109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6279
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168805[168805]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/168805[168805]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6280
+#, no-wrap
+msgid "April 17, 2007"
+msgstr "17 апреля 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6282
+#, no-wrap
+msgid "6.2-STABLE after MFC of readline 5.2 patch-set 002."
+msgstr "6.2-STABLE после MFC набора исправлений readline 5.2 patch-set 002."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6283
+#, no-wrap
+msgid "602110"
+msgstr "602110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6284
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169222[169222]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/169222[169222]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6285
+#, no-wrap
+msgid "May 2, 2007"
+msgstr "2 мая 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6287
+#, 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 "6.2-STABLE после слияния изменений (MFC) функций `pmap_invalidate_cache()`, `pmap_change_attr()`, `pmap_mapbios()`, `pmap_mapdev_attr()` и `pmap_unmapbios()` для архитектур amd64 и i386."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6288
+#, no-wrap
+msgid "602111"
+msgstr "602111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6289
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170556[170556]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/170556[170556]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6292
+#, no-wrap
+msgid "6.2-STABLE after MFC of BOP_BDFLUSH and caused breakage of the filesystem modules KBI."
+msgstr "6.2-STABLE после слияния изменений BOP_BDFLUSH, что привело к нарушению KBI модулей файловой системы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6293
+#, no-wrap
+msgid "602112"
+msgstr "602112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6294
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172284[172284]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172284[172284]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6295
+#, no-wrap
+msgid "September 21, 2007"
+msgstr "21 сентября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6297
+#, no-wrap
+msgid "6.2-STABLE after man:libutil[3] MFC's."
+msgstr "6.2-STABLE после man:libutil[3] MFC's."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6298
+#, no-wrap
+msgid "602113"
+msgstr "602113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6299
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172986[172986]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/172986[172986]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6302
+#, 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 "6.2-STABLE после слияния изменений (MFC) разделения широких и однобайтовых символов ctype. Вновь скомпилированные двоичные файлы, ссылающиеся на ctype.h, могут требовать новый символ `__mb_sb_limit`, который недоступен в старых системах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6303
+#, no-wrap
+msgid "602114"
+msgstr "602114"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6304
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173170[173170]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173170[173170]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6305
+#, no-wrap
+msgid "October 30, 2007"
+msgstr "30 октября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6307
+#, no-wrap
+msgid "6.2-STABLE after ctype ABI forward compatibility restored."
+msgstr "6.2-STABLE после восстановления прямой совместимости ABI ctype."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6308
+#, no-wrap
+msgid "602115"
+msgstr "602115"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6309
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173794[173794]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173794[173794]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6310
+#, no-wrap
+msgid "November 21, 2007"
+msgstr "21 ноября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6312
+#, no-wrap
+msgid "6.2-STABLE after back out of wide and single byte ctype separation."
+msgstr "6.2-STABLE после отмены разделения широких и однобайтовых символов ctype."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6313
+#, no-wrap
+msgid "603000"
+msgstr "603000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6314
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173897[173897]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173897[173897]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6315
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6320
+#, no-wrap
+msgid "November 25, 2007"
+msgstr "25 ноября 2007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6317
+#, no-wrap
+msgid "6.3-RELEASE"
+msgstr "6.3-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6318
+#, no-wrap
+msgid "603100"
+msgstr "603100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6319
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173891[173891]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/173891[173891]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6322
+#, no-wrap
+msgid "6.3-STABLE after 6.3-RELEASE."
+msgstr "6.3-STABLE после 6.3-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6324
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174434[174434]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/174434[174434]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6327
+#, no-wrap
+msgid "6.3-STABLE after fixing multibyte type support in bit macro."
+msgstr "6.3-STABLE после исправления поддержки многобайтовых типов в макросе bit."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6328
+#, no-wrap
+msgid "603102"
+msgstr "603102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6329
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178459[178459]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/178459[178459]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6330
+#, no-wrap
+msgid "April 24, 2008"
+msgstr "24 апреля 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6332
+#, no-wrap
+msgid "6.3-STABLE after adding `l_sysid` to struct flock."
+msgstr "6.3-STABLE после добавления `l_sysid` в структуру flock."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6333
+#, no-wrap
+msgid "603103"
+msgstr "603103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6337
+#, no-wrap
+msgid "6.3-STABLE after MFC of the man:memrchr[3] function."
+msgstr "6.3-STABLE после MFC функции man:memrchr[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6338
+#, no-wrap
+msgid "603104"
+msgstr "603104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6339
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179810[179810]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/179810[179810]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6340
+#, no-wrap
+msgid "June 15, 2008"
+msgstr "15 июня 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6342
+#, no-wrap
+msgid "6.3-STABLE after MFC of support for `:u` variable modifier in man:make[1]."
+msgstr "6.3-STABLE после MFC поддержки модификатора переменной `:u` в man:make[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6343
+#, no-wrap
+msgid "604000"
+msgstr "604000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6344
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183583[183583]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/183583[183583]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6345
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6350
+#, no-wrap
+msgid "October 4, 2008"
+msgstr "4 октября 2008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6347
+#, no-wrap
+msgid "6.4-RELEASE"
+msgstr "6.4-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6348
+#, no-wrap
+msgid "604100"
+msgstr "604100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6349
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183584[183584]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/183584[183584]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6351
+#, no-wrap
+msgid "6.4-STABLE after 6.4-RELEASE."
+msgstr "6.4-STABLE после 6.4-RELEASE."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6354
+#, no-wrap
+msgid "FreeBSD 5 Versions"
+msgstr "Версии FreeBSD 5"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6357
+#, no-wrap
+msgid "FreeBSD 5 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6366
+#, no-wrap
+msgid "500000"
+msgstr "500000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6367
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58009[58009]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/58009[58009]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6368
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7081
+#, no-wrap
+msgid "March 13, 2000"
+msgstr "13 марта 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6370
+#, no-wrap
+msgid "5.0-CURRENT"
+msgstr "5.0-CURRENT"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6371
+#, no-wrap
+msgid "500001"
+msgstr "500001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6372
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/59348[59348]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/59348[59348]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6373
+#, no-wrap
+msgid "April 18, 2000"
+msgstr "18 апреля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6375
+#, no-wrap
+msgid "5.0-CURRENT after adding addition ELF header fields, and changing ELF binary branding method."
+msgstr "5.0-CURRENT после добавления дополнительных полей заголовка ELF и изменения метода маркировки ELF-бинарников."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6376
+#, no-wrap
+msgid "500002"
+msgstr "500002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6377
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/59906[59906]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/59906[59906]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6378
+#, no-wrap
+msgid "May 2, 2000"
+msgstr "2 мая 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6380
+#, no-wrap
+msgid "5.0-CURRENT after kld metadata changes."
+msgstr "5.0-CURRENT после изменений метаданных kld."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6381
+#, no-wrap
+msgid "500003"
+msgstr "500003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6382
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60688[60688]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/60688[60688]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6383
+#, no-wrap
+msgid "May 18, 2000"
+msgstr "18 мая 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6385
+#, no-wrap
+msgid "5.0-CURRENT after buf/bio changes."
+msgstr "5.0-CURRENT после изменений в buf/bio."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6386
+#, no-wrap
+msgid "500004"
+msgstr "500004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6387
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60936[60936]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/60936[60936]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6388
+#, no-wrap
+msgid "May 26, 2000"
+msgstr "26 мая 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6390
+#, no-wrap
+msgid "5.0-CURRENT after binutils upgrade."
+msgstr "5.0-CURRENT после обновления binutils."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6391
+#, no-wrap
+msgid "500005"
+msgstr "500005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6392
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61221[61221]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/61221[61221]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6393
+#, no-wrap
+msgid "June 3, 2000"
+msgstr "3 июня 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6395
+#, no-wrap
+msgid "5.0-CURRENT after merging libxpg4 code into libc and after TASKQ interface introduction."
+msgstr "5.0-CURRENT после объединения кода libxpg4 с libc и после введения интерфейса TASKQ."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6396
+#, no-wrap
+msgid "500006"
+msgstr "500006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6397
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61500[61500]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/61500[61500]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6398
+#, no-wrap
+msgid "June 10, 2000"
+msgstr "10 июня 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6400
+#, no-wrap
+msgid "5.0-CURRENT after the addition of AGP interfaces."
+msgstr "5.0-CURRENT после добавления интерфейсов AGP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6401
+#, no-wrap
+msgid "500007"
+msgstr "500007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6402
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62235[62235]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/62235[62235]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6403
+#, no-wrap
+msgid "June 29, 2000"
+msgstr "29 июня 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6405
+#, no-wrap
+msgid "5.0-CURRENT after Perl upgrade to 5.6.0"
+msgstr "5.0-CURRENT после обновления Perl до версии 5.6.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6406
+#, no-wrap
+msgid "500008"
+msgstr "500008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6407
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62764[62764]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/62764[62764]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6408
+#, no-wrap
+msgid "July 7, 2000"
+msgstr "7 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6410
+#, no-wrap
+msgid "5.0-CURRENT after the update of KAME code to 2000/07 sources."
+msgstr "5.0-CURRENT после обновления кода KAME до исходников от 2000/07."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6411
+#, no-wrap
+msgid "500009"
+msgstr "500009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6412
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63154[63154]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/63154[63154]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6413
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7106
+#, no-wrap
+msgid "July 14, 2000"
+msgstr "14 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6415
+#, no-wrap
+msgid "5.0-CURRENT after `ether_ifattach()` and `ether_ifdetach()` changes."
+msgstr "5.0-CURRENT после изменений в `ether_ifattach()` и `ether_ifdetach()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6416
+#, no-wrap
+msgid "500010"
+msgstr "500010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6417
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63265[63265]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/63265[63265]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6418
+#, no-wrap
+msgid "July 16, 2000"
+msgstr "16 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6420
+#, no-wrap
+msgid "5.0-CURRENT after changing mtree defaults back to original variant, adding -L to follow symlinks."
+msgstr "5.0-CURRENT после изменения настроек mtree обратно на исходный вариант, с добавлением -L для следования по символьным ссылкам."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6421
+#, no-wrap
+msgid "500011"
+msgstr "500011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6422
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63459[63459]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/63459[63459]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6423
+#, no-wrap
+msgid "July 18, 2000"
+msgstr "18 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6425
+#, no-wrap
+msgid "5.0-CURRENT after kqueue API changed."
+msgstr "5.0-CURRENT после изменения API kqueue."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6426
+#, no-wrap
+msgid "500012"
+msgstr "500012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6427
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65353[65353]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/65353[65353]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6428
+#, no-wrap
+msgid "September 2, 2000"
+msgstr "2 сентября 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6430
+#, no-wrap
+msgid "5.0-CURRENT after man:setproctitle[3] moved from libutil to libc."
+msgstr "5.0-CURRENT после переноса man:setproctitle[3] из libutil в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6431
+#, no-wrap
+msgid "500013"
+msgstr "500013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6432
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65671[65671]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/65671[65671]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6433
+#, no-wrap
+msgid "September 10, 2000"
+msgstr "10 сентября 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6435
+#, no-wrap
+msgid "5.0-CURRENT after the first SMPng commit."
+msgstr "5.0-CURRENT после первого коммита SMPng."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6436
+#, no-wrap
+msgid "500014"
+msgstr "500014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6437
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70650[70650]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/70650[70650]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6438
+#, no-wrap
+msgid "January 4, 2001"
+msgstr "4 января 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6440
+#, no-wrap
+msgid "5.0-CURRENT after <sys/select.h> moved to <sys/selinfo.h>."
+msgstr "5.0-CURRENT после перемещения <sys/select.h> в <sys/selinfo.h>."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6441
+#, no-wrap
+msgid "500015"
+msgstr "500015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6442
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70894[70894]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/70894[70894]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6443
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7136
+#, no-wrap
+msgid "January 10, 2001"
+msgstr "10 января 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6445
+#, no-wrap
+msgid "5.0-CURRENT after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes."
+msgstr "5.0-CURRENT после объединения libgcc.a и libgcc_r.a, а также связанных изменений в компоновке GCC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6446
+#, no-wrap
+msgid "500016"
+msgstr "500016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6447
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/71583[71583]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/71583[71583]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6448
+#, no-wrap
+msgid "January 24, 2001"
+msgstr "24 января 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6450
+#, no-wrap
+msgid "5.0-CURRENT after change allowing libc and libc_r to be linked together, deprecating -pthread option."
+msgstr "5.0-CURRENT после изменения, разрешающего совместную линковку libc и libc_r, с объявлением устаревшим параметра -pthread."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6451
+#, no-wrap
+msgid "500017"
+msgstr "500017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6452
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/72650[72650]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/72650[72650]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6453
+#, no-wrap
+msgid "February 18, 2001"
+msgstr "18 февраля 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6455
+#, no-wrap
+msgid "5.0-CURRENT after switch from struct `ucred` to struct `xucred` to stabilize kernel-exported API for mountd et al."
+msgstr "5.0-CURRENT после перехода со структуры `ucred` на структуру `xucred` для стабилизации API, экспортируемого ядром, для mountd и других."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6456
+#, no-wrap
+msgid "500018"
+msgstr "500018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6457
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/72975[72975]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/72975[72975]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6458
+#, no-wrap
+msgid "February 24, 2001"
+msgstr "24 февраля 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6460
+#, no-wrap
+msgid "5.0-CURRENT after addition of CPUTYPE make variable for controlling CPU-specific optimizations."
+msgstr "5.0-CURRENT после добавления переменной сборки CPUTYPE для управления оптимизациями под конкретный процессор."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6461
+#, no-wrap
+msgid "500019"
+msgstr "500019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6462
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/77937[77937]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/77937[77937]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6463
+#, no-wrap
+msgid "June 9, 2001"
+msgstr "9 июня 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6465
+#, no-wrap
+msgid "5.0-CURRENT after moving machine/ioctl_fd.h to sys/fdcio.h"
+msgstr "5.0-CURRENT после перемещения machine/ioctl_fd.h в sys/fdcio.h"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6466
+#, no-wrap
+msgid "500020"
+msgstr "500020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6467
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/78304[78304]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/78304[78304]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6468
+#, no-wrap
+msgid "June 15, 2001"
+msgstr "15 июня 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6470
+#, no-wrap
+msgid "5.0-CURRENT after locale names renaming."
+msgstr "5.0-CURRENT после переименования названий локалей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6471
+#, no-wrap
+msgid "500021"
+msgstr "500021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6472
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/78632[78632]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/78632[78632]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6473
+#, no-wrap
+msgid "June 22, 2001"
+msgstr "22 июня 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6475
+#, no-wrap
+msgid "5.0-CURRENT after Bzip2 import. Also signifies removal of S/Key."
+msgstr "5.0-CURRENT после импорта Bzip2. Также означает удаление S/Key."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6476
+#, no-wrap
+msgid "500022"
+msgstr "500022"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6477
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6482
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/83435[83435]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/83435[83435]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6478
+#, no-wrap
+msgid "July 12, 2001"
+msgstr "12 июля 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6480
+#, no-wrap
+msgid "5.0-CURRENT after SSE support."
+msgstr "5.0-CURRENT после поддержки SSE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6481
+#, no-wrap
+msgid "500023"
+msgstr "500023"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6483
+#, no-wrap
+msgid "September 14, 2001"
+msgstr "14 сентября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6485
+#, no-wrap
+msgid "5.0-CURRENT after KSE Milestone 2."
+msgstr "5.0-CURRENT после второго этапа KSE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6486
+#, no-wrap
+msgid "500024"
+msgstr "500024"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6487
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84324[84324]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/84324[84324]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6488
+#, no-wrap
+msgid "October 1, 2001"
+msgstr "1 октября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6490
+#, no-wrap
+msgid "5.0-CURRENT after `d_thread_t`, and moving UUCP to ports."
+msgstr "5.0-CURRENT после `d_thread_t` и перемещение UUCP в порты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6491
+#, no-wrap
+msgid "500025"
+msgstr "500025"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6492
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84481[84481]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/84481[84481]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6493
+#, no-wrap
+msgid "October 4, 2001"
+msgstr "4 октября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6495
+#, no-wrap
+msgid "5.0-CURRENT after ABI change for descriptor and `creds` passing on 64 bit platforms."
+msgstr "5.0-CURRENT после изменения ABI для передачи дескрипторов и `creds` на 64-битных платформах."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6496
+#, no-wrap
+msgid "500026"
+msgstr "500026"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6497
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84710[84710]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/84710[84710]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6498
+#, no-wrap
+msgid "October 9, 2001"
+msgstr "9 октября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6500
+#, 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 "5.0-CURRENT после перехода на XFree86 4 по умолчанию для сборки пакетов и после добавления новой функции `strnstr()` в библиотеку libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6501
+#, no-wrap
+msgid "500027"
+msgstr "500027"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6502
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84743[84743]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/84743[84743]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6503
+#, no-wrap
+msgid "October 10, 2001"
+msgstr "10 октября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6505
+#, no-wrap
+msgid "5.0-CURRENT after the new libc `strcasestr()` function was added."
+msgstr "5.0-CURRENT после добавления новой функции `strcasestr()` в библиотеку libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6506
+#, no-wrap
+msgid "500028"
+msgstr "500028"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6507
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/87879[87879]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/87879[87879]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6508
+#, no-wrap
+msgid "December 14, 2001"
+msgstr "14 декабря 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6510
+#, no-wrap
+msgid "5.0-CURRENT after the userland components of smbfs were imported."
+msgstr "5.0-CURRENT после импорта компонентов пользовательского пространства smbfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6515
+#, no-wrap
+msgid "5.0-CURRENT after the new C99 specific-width integer types were added."
+msgstr "5.0-CURRENT после добавления новых целочисленных типов фиксированной ширины C99."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6516
+#, no-wrap
+msgid "500029"
+msgstr "500029"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6517
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/89938[89938]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/89938[89938]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6518
+#, no-wrap
+msgid "January 29, 2002"
+msgstr "29 января 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6520
+#, no-wrap
+msgid "5.0-CURRENT after a change was made in the return value of man:sendfile[2]."
+msgstr "5.0-CURRENT после изменения возвращаемого значения man:sendfile[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6521
+#, no-wrap
+msgid "500030"
+msgstr "500030"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6522
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/90711[90711]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/90711[90711]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6523
+#, no-wrap
+msgid "February 15, 2002"
+msgstr "15 февраля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6525
+#, no-wrap
+msgid "5.0-CURRENT after the introduction of the type `fflags_t`, which is the appropriate size for file flags."
+msgstr "5.0-CURRENT после введения типа `fflags_t`, который имеет подходящий размер для флагов файлов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6526
+#, no-wrap
+msgid "500031"
+msgstr "500031"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6527
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7180
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/91203[91203]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/91203[91203]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6528
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7181
+#, no-wrap
+msgid "February 24, 2002"
+msgstr "24 февраля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6530
+#, no-wrap
+msgid "5.0-CURRENT after the usb structure element rename."
+msgstr "5.0-CURRENT после переименования элемента структуры usb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6531
+#, no-wrap
+msgid "500032"
+msgstr "500032"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6532
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/92453[92453]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/92453[92453]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6533
+#, no-wrap
+msgid "March 16, 2002"
+msgstr "16 марта 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6535
+#, no-wrap
+msgid "5.0-CURRENT after the introduction of Perl 5.6.1."
+msgstr "5.0-CURRENT после внедрения Perl 5.6.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6536
+#, no-wrap
+msgid "500033"
+msgstr "500033"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6537
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/93722[93722]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/93722[93722]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6538
+#, no-wrap
+msgid "April 3, 2002"
+msgstr "3 апреля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6540
+#, no-wrap
+msgid "5.0-CURRENT after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`."
+msgstr "5.0-CURRENT после того, как переменная `sendmail_enable` из man:rc.conf[5] стала принимать значение `NONE`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6541
+#, no-wrap
+msgid "500034"
+msgstr "500034"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6542
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95831[95831]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/95831[95831]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6543
+#, no-wrap
+msgid "April 30, 2002"
+msgstr "30 апреля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6545
+#, no-wrap
+msgid "5.0-CURRENT after `mtx_init()` grew a third argument."
+msgstr "5.0-CURRENT после того, как `mtx_init()` получил третий аргумент."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6546
+#, no-wrap
+msgid "500035"
+msgstr "500035"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6547
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/96498[96498]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/96498[96498]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6548
+#, no-wrap
+msgid "May 13, 2002"
+msgstr "13 мая 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6550
+#, no-wrap
+msgid "5.0-CURRENT with Gcc 3.1."
+msgstr "5.0-CURRENT с Gcc 3.1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6551
+#, no-wrap
+msgid "500036"
+msgstr "500036"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6552
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/96781[96781]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/96781[96781]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6553
+#, no-wrap
+msgid "May 17, 2002"
+msgstr "17 мая 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6555
+#, no-wrap
+msgid "5.0-CURRENT without Perl in /usr/src"
+msgstr "5.0-CURRENT без Perl в /usr/src"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6556
+#, no-wrap
+msgid "500037"
+msgstr "500037"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6557
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/97516[97516]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/97516[97516]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6558
+#, no-wrap
+msgid "May 29, 2002"
+msgstr "29 мая 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6560
+#, no-wrap
+msgid "5.0-CURRENT after the addition of man:dlfunc[3]"
+msgstr "5.0-CURRENT после добавления man:dlfunc[3]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6561
+#, no-wrap
+msgid "500038"
+msgstr "500038"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6562
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/100591[100591]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/100591[100591]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6563
+#, no-wrap
+msgid "July 24, 2002"
+msgstr "24 июля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6565
+#, no-wrap
+msgid "5.0-CURRENT after the types of some struct `sockbuf` members were changed and the structure was reordered."
+msgstr "5.0-CURRENT после изменения типов некоторых членов структуры `sockbuf` и её переупорядочивания."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6566
+#, no-wrap
+msgid "500039"
+msgstr "500039"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6567
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/102757[102757]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/102757[102757]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6568
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7236
+#, no-wrap
+msgid "September 1, 2002"
+msgstr "1 сентября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6570
+#, 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 "5.0-CURRENT после импорта GCC 3.2.1. Также после того, как заголовки перестали использовать _BSD_FOO_T_ и начали использовать _FOO_T_DECLARED. Это значение также можно использовать как консервативную оценку начала поддержки пакета man:bzip2[1]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6571
+#, no-wrap
+msgid "500040"
+msgstr "500040"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6572
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/103675[103675]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/103675[103675]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6573
+#, no-wrap
+msgid "September 20, 2002"
+msgstr "20 сентября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6575
+#, 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 "5.0-CURRENT после внесения различных изменений в функции работы с дисками, направленных на устранение зависимости от внутренней структуры disklabel."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6576
+#, no-wrap
+msgid "500041"
+msgstr "500041"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6577
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104250[104250]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/104250[104250]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6578
+#, no-wrap
+msgid "October 1, 2002"
+msgstr "1 октября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6580
+#, no-wrap
+msgid "5.0-CURRENT after the addition of man:getopt_long[3] to libc."
+msgstr "5.0-CURRENT после добавления man:getopt_long[3] в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6581
+#, no-wrap
+msgid "500042"
+msgstr "500042"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6582
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/105178[105178]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/105178[105178]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6583
+#, no-wrap
+msgid "October 15, 2002"
+msgstr "15 октября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6585
+#, no-wrap
+msgid "5.0-CURRENT after Binutils 2.13 upgrade, which included new FreeBSD emulation, `vec`, and output format."
+msgstr "5.0-CURRENT после обновления Binutils 2.13, которое включило новую эмуляцию FreeBSD, `vec` и формат вывода."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6586
+#, no-wrap
+msgid "500043"
+msgstr "500043"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6587
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/106289[106289]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/106289[106289]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6588
+#, no-wrap
+msgid "November 1, 2002"
+msgstr "1 ноября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6590
+#, no-wrap
+msgid "5.0-CURRENT after adding weak pthread_XXX stubs to libc, obsoleting libXThrStub.so. 5.0-RELEASE."
+msgstr "5.0-CURRENT после добавления слабых заглушек pthread_XXX в libc, что сделало устаревшей libXThrStub.so. 5.0-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6591
+#, no-wrap
+msgid "500100"
+msgstr "500100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6592
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/109405[109405]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/109405[109405]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6593
+#, no-wrap
+msgid "January 17, 2003"
+msgstr "17 января 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6595
+#, no-wrap
+msgid "5.0-CURRENT after branching for RELENG_5_0"
+msgstr "5.0-CURRENT после ветвления для RELENG_5_0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6596
+#, no-wrap
+msgid "500101"
+msgstr "500101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6597
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111120[111120]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/111120[111120]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6598
+#, no-wrap
+msgid "February 19, 2003"
+msgstr "19 февраля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6600
+#, no-wrap
+msgid "<sys/dkstat.h> is empty. Do not include it."
+msgstr "<sys/dkstat.h> пустой. Не включайте его."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6601
+#, no-wrap
+msgid "500102"
+msgstr "500102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6602
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111482[111482]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/111482[111482]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6603
+#, no-wrap
+msgid "February 25, 2003"
+msgstr "25 февраля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6605
+#, no-wrap
+msgid "5.0-CURRENT after the d_mmap_t interface change."
+msgstr "5.0-CURRENT после изменения интерфейса d_mmap_t."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6606
+#, no-wrap
+msgid "500103"
+msgstr "500103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6607
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111540[111540]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/111540[111540]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6608
+#, no-wrap
+msgid "February 26, 2003"
+msgstr "26 февраля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6610
+#, no-wrap
+msgid "5.0-CURRENT after `taskqueue_swi` changed to run without Giant, and `taskqueue_swi_giant` added to run with Giant."
+msgstr "5.0-CURRENT после изменения `taskqueue_swi` для работы без Giant и добавления `taskqueue_swi_giant` для работы с Giant."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6611
+#, no-wrap
+msgid "500104"
+msgstr "500104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6612
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111600[111600]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/111600[111600]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6613
+#, no-wrap
+msgid "February 27, 2003"
+msgstr "27 февраля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6615
+#, no-wrap
+msgid "`cdevsw_add()` and `cdevsw_remove()` no longer exists. Appearance of `MAJOR_AUTO` allocation facility."
+msgstr "`cdevsw_add()` и `cdevsw_remove()` больше не существуют. Появление средства выделения `MAJOR_AUTO`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6616
+#, no-wrap
+msgid "500105"
+msgstr "500105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6617
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111864[111864]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/111864[111864]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6618
+#, no-wrap
+msgid "March 4, 2003"
+msgstr "4 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6620
+#, no-wrap
+msgid "5.0-CURRENT after new cdevsw initialization method."
+msgstr "5.0-CURRENT после новой инициализации метода cdevsw."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6621
+#, no-wrap
+msgid "500106"
+msgstr "500106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6622
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112007[112007]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112007[112007]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6623
+#, no-wrap
+msgid "March 8, 2003"
+msgstr "8 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6625
+#, no-wrap
+msgid "`devstat_add_entry()` has been replaced by `devstat_new_entry()`"
+msgstr "`devstat_add_entry()` был заменён на `devstat_new_entry()`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6626
+#, no-wrap
+msgid "500107"
+msgstr "500107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6627
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112288[112288]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112288[112288]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6628
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6633
+#, no-wrap
+msgid "March 15, 2003"
+msgstr "15 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6630
+#, no-wrap
+msgid "`devstat` interface change; see sys/sys/param.h 1.149"
+msgstr "Изменение интерфейса `devstat`; см. sys/sys/param.h 1.149"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6631
+#, no-wrap
+msgid "500108"
+msgstr "500108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6632
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112300[112300]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112300[112300]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6635
+#, no-wrap
+msgid "Token-Ring interface changes."
+msgstr "Изменения в интерфейсе Token-Ring."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6636
+#, no-wrap
+msgid "500109"
+msgstr "500109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6637
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112571[112571]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112571[112571]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6638
+#, no-wrap
+msgid "March 25, 2003"
+msgstr "25 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6640
+#, no-wrap
+msgid "Addition of `vm_paddr_t`."
+msgstr "Добавление `vm_paddr_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6641
+#, no-wrap
+msgid "500110"
+msgstr "500110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6642
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112741[112741]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112741[112741]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6643
+#, no-wrap
+msgid "March 28, 2003"
+msgstr "28 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6645
+#, no-wrap
+msgid "5.0-CURRENT after man:realpath[3] has been made thread-safe"
+msgstr "5.0-CURRENT после того, как man:realpath[3] стал потокобезопасным"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6646
+#, no-wrap
+msgid "500111"
+msgstr "500111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6647
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113273[113273]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/113273[113273]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6648
+#, no-wrap
+msgid "April 9, 2003"
+msgstr "9 апреля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6650
+#, no-wrap
+msgid "5.0-CURRENT after man:usbhid[3] has been synced with NetBSD"
+msgstr "5.0-CURRENT после синхронизации man:usbhid[3] с NetBSD"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6651
+#, no-wrap
+msgid "500112"
+msgstr "500112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6652
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113597[113597]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/113597[113597]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6653
+#, no-wrap
+msgid "April 17, 2003"
+msgstr "17 апреля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6655
+#, no-wrap
+msgid "5.0-CURRENT after new NSS implementation and addition of POSIX.1 getpw*_r, getgr*_r functions"
+msgstr "5.0-CURRENT после новой реализации NSS и добавления функций POSIX.1 getpw*_r, getgr*_r"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6656
+#, no-wrap
+msgid "500113"
+msgstr "500113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6657
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/114492[114492]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/114492[114492]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6658
+#, no-wrap
+msgid "May 2, 2003"
+msgstr "2 мая 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6660
+#, no-wrap
+msgid "5.0-CURRENT after removal of the old rc system."
+msgstr "5.0-CURRENT после удаления старой системы rc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6661
+#, no-wrap
+msgid "501000"
+msgstr "501000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6662
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115816[115816]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/115816[115816]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6663
+#, no-wrap
+msgid "June 4, 2003"
+msgstr "4 июня 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6665
+#, no-wrap
+msgid "5.1-RELEASE."
+msgstr "5.1-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6666
+#, no-wrap
+msgid "501100"
+msgstr "501100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6667
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115710[115710]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/115710[115710]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6668
+#, no-wrap
+msgid "June 2, 2003"
+msgstr "2 июня 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6670
+#, no-wrap
+msgid "5.1-CURRENT after branching for RELENG_5_1."
+msgstr "5.1-CURRENT после ветвления для RELENG_5_1."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6671
+#, no-wrap
+msgid "501101"
+msgstr "501101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6672
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/117025[117025]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/117025[117025]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6673
+#, no-wrap
+msgid "June 29, 2003"
+msgstr "29 июня 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6675
+#, no-wrap
+msgid "5.1-CURRENT after correcting the semantics of man:sigtimedwait[2] and man:sigwaitinfo[2]."
+msgstr "5.1-CURRENT после исправления семантики man:sigtimedwait[2] и man:sigwaitinfo[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6676
+#, no-wrap
+msgid "501102"
+msgstr "501102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6677
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/117191[117191]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/117191[117191]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6678
+#, no-wrap
+msgid "July 3, 2003"
+msgstr "3 июля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6680
+#, no-wrap
+msgid "5.1-CURRENT after adding the `lockfunc` and `lockfuncarg` fields to man:bus_dma_tag_create[9]."
+msgstr "5.1-CURRENT после добавления полей `lockfunc` и `lockfuncarg` в man:bus_dma_tag_create[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6681
+#, no-wrap
+msgid "501103"
+msgstr "501103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6682
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118241[118241]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/118241[118241]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6683
+#, no-wrap
+msgid "July 31, 2003"
+msgstr "31 июля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6685
+#, no-wrap
+msgid "5.1-CURRENT after GCC 3.3.1-pre 20030711 snapshot integration."
+msgstr "5.1-CURRENT после интеграции снимка GCC 3.3.1-pre 20030711."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6686
+#, no-wrap
+msgid "501104"
+msgstr "501104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6687
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118511[118511]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/118511[118511]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6688
+#, no-wrap
+msgid "August 5, 2003"
+msgstr "5 августа 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6690
+#, no-wrap
+msgid "5.1-CURRENT 3ware API changes to twe."
+msgstr "5.1-CURRENT Изменения API 3ware в twe."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6691
+#, no-wrap
+msgid "501105"
+msgstr "501105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6692
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/119021[119021]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/119021[119021]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6693
+#, no-wrap
+msgid "August 17, 2003"
+msgstr "17 августа 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6695
+#, no-wrap
+msgid "5.1-CURRENT dynamically linked /bin and /sbin support and movement of libraries to /lib."
+msgstr "5.1-CURRENT динамически связанные /bin и /sbin поддержка и перемещение библиотек в /lib."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6696
+#, no-wrap
+msgid "501106"
+msgstr "501106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6697
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/119881[119881]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/119881[119881]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6698
+#, no-wrap
+msgid "September 8, 2003"
+msgstr "8 сентября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6700
+#, no-wrap
+msgid "5.1-CURRENT after adding kernel support for Coda 6.x."
+msgstr "5.1-CURRENT после добавления поддержки ядра для Coda 6.x."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6701
+#, no-wrap
+msgid "501107"
+msgstr "501107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6702
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120180[120180]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/120180[120180]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6703
+#, no-wrap
+msgid "September 17, 2003"
+msgstr "17 сентября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6705
+#, 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 "5.1-CURRENT после того, как константы UART 16550 были перемещены из [.filename]#<dev/sio/sioreg.h># в [.filename]#<dev/ic/ns16550.h>#. Также когда функциональность libmap стала безусловно поддерживаться rtld."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6706
+#, no-wrap
+msgid "501108"
+msgstr "501108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6707
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120386[120386]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/120386[120386]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6708
+#, no-wrap
+msgid "September 23, 2003"
+msgstr "23 сентября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6710
+#, no-wrap
+msgid "5.1-CURRENT after PFIL_HOOKS API update"
+msgstr "5.1-CURRENT после обновления API PFIL_HOOKS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6711
+#, no-wrap
+msgid "501109"
+msgstr "501109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6712
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120503[120503]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/120503[120503]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6713
+#, no-wrap
+msgid "September 27, 2003"
+msgstr "27 сентября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6715
+#, no-wrap
+msgid "5.1-CURRENT after adding man:kiconv[3]"
+msgstr "5.1-CURRENT после добавления man:kiconv[3]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6716
+#, no-wrap
+msgid "501110"
+msgstr "501110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6717
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120556[120556]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/120556[120556]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6718
+#, no-wrap
+msgid "September 28, 2003"
+msgstr "28 сентября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6720
+#, no-wrap
+msgid "5.1-CURRENT after changing default operations for open and close in cdevsw"
+msgstr "5.1-CURRENT после изменения операций по умолчанию для open и close в cdevsw"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6721
+#, no-wrap
+msgid "501111"
+msgstr "501111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6722
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121125[121125]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/121125[121125]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6723
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6728
+#, no-wrap
+msgid "October 16, 2003"
+msgstr "16 октября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6725
+#, no-wrap
+msgid "5.1-CURRENT after changed layout of cdevsw"
+msgstr "5.1-CURRENT после изменения структуры cdevsw"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6726
+#, no-wrap
+msgid "501112"
+msgstr "501112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6727
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121129[121129]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/121129[121129]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6730
+#, no-wrap
+msgid "5.1-CURRENT after adding kobj multiple inheritance"
+msgstr "5.1-CURRENT после добавления множественного наследования kobj"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6731
+#, no-wrap
+msgid "501113"
+msgstr "501113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6732
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121816[121816]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/121816[121816]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6733
+#, no-wrap
+msgid "October 31, 2003"
+msgstr "31 октября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6735
+#, no-wrap
+msgid "5.1-CURRENT after the `if_xname` change in struct ifnet"
+msgstr "5.1-CURRENT после изменения `if_xname` в структуре ifnet"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6736
+#, no-wrap
+msgid "501114"
+msgstr "501114"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6737
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/122779[122779]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/122779[122779]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6738
+#, no-wrap
+msgid "November 16, 2003"
+msgstr "16 ноября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6740
+#, no-wrap
+msgid "5.1-CURRENT after changing /bin and /sbin to be dynamically linked"
+msgstr "5.1-CURRENT после изменения /bin и /sbin на динамически линкуемые"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6741
+#, no-wrap
+msgid "502000"
+msgstr "502000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6742
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123198[123198]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/123198[123198]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6743
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6753
+#, no-wrap
+msgid "December 7, 2003"
+msgstr "7 декабря 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6745
+#, no-wrap
+msgid "5.2-RELEASE"
+msgstr "5.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6746
+#, no-wrap
+msgid "502010"
+msgstr "502010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6747
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126150[126150]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126150[126150]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6748
+#, no-wrap
+msgid "February 23, 2004"
+msgstr "23 февраля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6750
+#, no-wrap
+msgid "5.2.1-RELEASE"
+msgstr "5.2.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6751
+#, no-wrap
+msgid "502100"
+msgstr "502100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6752
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123196[123196]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/123196[123196]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6755
+#, no-wrap
+msgid "5.2-CURRENT after branching for RELENG_5_2"
+msgstr "5.2-CURRENT после ветвления для RELENG_5_2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6756
+#, no-wrap
+msgid "502101"
+msgstr "502101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6757
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123677[123677]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/123677[123677]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6758
+#, no-wrap
+msgid "December 19, 2003"
+msgstr "19 декабря 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6760
+#, no-wrap
+msgid "5.2-CURRENT after `__cxa_atexit`/`__cxa_finalize` functions were added to libc."
+msgstr "5.2-CURRENT после добавления функций `__cxa_atexit`/`__cxa_finalize` в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6761
+#, no-wrap
+msgid "502102"
+msgstr "502102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6762
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/125236[125236]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/125236[125236]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6763
+#, no-wrap
+msgid "January 30, 2004"
+msgstr "30 января 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6765
+#, no-wrap
+msgid "5.2-CURRENT after change of default thread library from libc_r to libpthread."
+msgstr "5.2-CURRENT после изменения стандартной библиотеки потоков с libc_r на libpthread."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6766
+#, no-wrap
+msgid "502103"
+msgstr "502103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6767
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126083[126083]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126083[126083]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6768
+#, no-wrap
+msgid "February 21, 2004"
+msgstr "21 февраля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6770
+#, no-wrap
+msgid "5.2-CURRENT after device driver API mega patch."
+msgstr "5.2-CURRENT после масштабного патча API драйверов устройств."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6771
+#, no-wrap
+msgid "502104"
+msgstr "502104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6772
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126208[126208]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126208[126208]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6773
+#, no-wrap
+msgid "February 25, 2004"
+msgstr "25 февраля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6775
+#, no-wrap
+msgid "5.2-CURRENT after `getopt_long_only()` addition."
+msgstr "5.2-CURRENT после добавления `getopt_long_only()`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6776
+#, no-wrap
+msgid "502105"
+msgstr "502105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6777
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126644[126644]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126644[126644]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6778
+#, no-wrap
+msgid "March 5, 2004"
+msgstr "5 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6780
+#, no-wrap
+msgid "5.2-CURRENT after NULL is made into ((void *)0) for C, creating more warnings."
+msgstr "5.2-CURRENT после того, как NULL заменён на ((void *)0) для C, что вызывает больше предупреждений."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6781
+#, no-wrap
+msgid "502106"
+msgstr "502106"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6782
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126757[126757]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126757[126757]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6783
+#, no-wrap
+msgid "March 8, 2004"
+msgstr "8 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6785
+#, no-wrap
+msgid "5.2-CURRENT after pf is linked to the build and install."
+msgstr "5.2-CURRENT после подключения pf к сборке и установке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6786
+#, no-wrap
+msgid "502107"
+msgstr "502107"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6787
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126819[126819]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126819[126819]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6788
+#, no-wrap
+msgid "March 10, 2004"
+msgstr "10 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6790
+#, no-wrap
+msgid "5.2-CURRENT after `time_t` is changed to a 64-bit value on sparc64."
+msgstr "5.2-CURRENT после изменения `time_t` на 64-битное значение на sparc64."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6791
+#, no-wrap
+msgid "502108"
+msgstr "502108"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6792
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126891[126891]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/126891[126891]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6793
+#, no-wrap
+msgid "March 12, 2004"
+msgstr "12 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6795
+#, 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 "5.2-CURRENT после поддержки компилятора Intel C/C++ в некоторых заголовочных файлах и изменений в man:execve[2] для более строгого соответствия POSIX."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6796
+#, no-wrap
+msgid "502109"
+msgstr "502109"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6797
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/127312[127312]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/127312[127312]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6798
+#, no-wrap
+msgid "March 22, 2004"
+msgstr "22 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6800
+#, no-wrap
+msgid "5.2-CURRENT after the introduction of the `bus_alloc_resource_any` API"
+msgstr "5.2-CURRENT после введения API `bus_alloc_resource_any`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6801
+#, no-wrap
+msgid "502110"
+msgstr "502110"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6802
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/127475[127475]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/127475[127475]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6803
+#, no-wrap
+msgid "March 27, 2004"
+msgstr "27 марта 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6805
+#, no-wrap
+msgid "5.2-CURRENT after the addition of UTF-8 locales"
+msgstr "5.2-CURRENT после добавления локалей UTF-8"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6806
+#, no-wrap
+msgid "502111"
+msgstr "502111"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6807
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/128144[128144]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/128144[128144]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6808
+#, no-wrap
+msgid "April 11, 2004"
+msgstr "11 апреля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6810
+#, no-wrap
+msgid "5.2-CURRENT after the removal of the man:getvfsent[3] API"
+msgstr "5.2-CURRENT после удаления API man:getvfsent[3]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6811
+#, no-wrap
+msgid "502112"
+msgstr "502112"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6812
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/128182[128182]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/128182[128182]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6813
+#, no-wrap
+msgid "April 13, 2004"
+msgstr "13 апреля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6815
+#, no-wrap
+msgid "5.2-CURRENT after the addition of the .warning directive for make."
+msgstr "5.2-CURRENT после добавления директивы .warning для make."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6816
+#, no-wrap
+msgid "502113"
+msgstr "502113"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6817
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130057[130057]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130057[130057]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6818
+#, no-wrap
+msgid "June 4, 2004"
+msgstr "4 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6820
+#, no-wrap
+msgid "5.2-CURRENT after `ttyioctl()` was made mandatory for serial drivers."
+msgstr "5.2-CURRENT после того, как `ttyioctl()` стал обязательным для драйверов последовательных портов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6821
+#, no-wrap
+msgid "502114"
+msgstr "502114"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6822
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130418[130418]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130418[130418]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6823
+#, no-wrap
+msgid "June 13, 2004"
+msgstr "13 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6825
+#, no-wrap
+msgid "5.2-CURRENT after import of the ALTQ framework."
+msgstr "5.2-CURRENT после импорта инфраструктуры ALTQ."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6826
+#, no-wrap
+msgid "502115"
+msgstr "502115"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6827
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130481[130481]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130481[130481]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6828
+#, no-wrap
+msgid "June 14, 2004"
+msgstr "14 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6830
+#, 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 "5.2-CURRENT после изменения man:sema_timedwait[9] для возврата 0 при успехе и ненулевого кода ошибки при сбое."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6831
+#, no-wrap
+msgid "502116"
+msgstr "502116"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6832
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130585[130585]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130585[130585]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6833
+#, no-wrap
+msgid "June 16, 2004"
+msgstr "16 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6835
+#, no-wrap
+msgid "5.2-CURRENT after changing kernel `dev_t` to be pointer to struct cdev *."
+msgstr "5.2-CURRENT после изменения типа `dev_t` в ядре на указатель на структуру cdev *."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6836
+#, no-wrap
+msgid "502117"
+msgstr "502117"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6837
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130640[130640]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130640[130640]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6838
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6843
+#, no-wrap
+msgid "June 17, 2004"
+msgstr "17 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6840
+#, no-wrap
+msgid "5.2-CURRENT after changing kernel `udev_t` to `dev_t`."
+msgstr "5.2-CURRENT после изменения ядра `udev_t` на `dev_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6841
+#, no-wrap
+msgid "502118"
+msgstr "502118"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6842
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130656[130656]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130656[130656]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6845
+#, 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 "5.2-CURRENT после добавления поддержки CLOCK_VIRTUAL и CLOCK_PROF в man:clock_gettime[2] и man:clock_getres[2]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6846
+#, no-wrap
+msgid "502119"
+msgstr "502119"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6847
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130934[130934]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/130934[130934]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6848
+#, no-wrap
+msgid "June 22, 2004"
+msgstr "22 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6850
+#, no-wrap
+msgid "5.2-CURRENT after changing network interface cloning overhaul."
+msgstr "5.2-CURRENT после изменения переработки клонирования сетевых интерфейсов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6851
+#, no-wrap
+msgid "502120"
+msgstr "502120"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6852
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131429[131429]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/131429[131429]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6853
+#, no-wrap
+msgid "July 2, 2004"
+msgstr "2 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6855
+#, no-wrap
+msgid "5.2-CURRENT after the update of the package tools to revision 20040629."
+msgstr "5.2-CURRENT после обновления инструментов пакетов до ревизии 20040629."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6856
+#, no-wrap
+msgid "502121"
+msgstr "502121"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6857
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131883[131883]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/131883[131883]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6858
+#, no-wrap
+msgid "July 9, 2004"
+msgstr "9 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6860
+#, no-wrap
+msgid "5.2-CURRENT after marking Bluetooth code as non-i386 specific."
+msgstr "5.2-CURRENT после пометки кода Bluetooth как не специфичного для i386."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6861
+#, no-wrap
+msgid "502122"
+msgstr "502122"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6862
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131971[131971]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/131971[131971]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6863
+#, no-wrap
+msgid "July 11, 2004"
+msgstr "11 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6865
+#, 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 "5.2-CURRENT после внедрения фреймворка отладчика KDB, преобразования DDB в бэкенд и добавления бэкенда GDB."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6866
+#, no-wrap
+msgid "502123"
+msgstr "502123"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6867
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132025[132025]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/132025[132025]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6868
+#, no-wrap
+msgid "July 12, 2004"
+msgstr "12 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6870
+#, 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 "5.2-CURRENT после изменения, чтобы VFS_ROOT принимал аргумент struct thread, как и vflush. Структура `kinfo_proc` теперь содержит указатель на пользовательские данные. Переключение реализации X по умолчанию на `xorg` также произошло в это время."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6871
+#, no-wrap
+msgid "502124"
+msgstr "502124"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6872
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132597[132597]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/132597[132597]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6873
+#, no-wrap
+msgid "July 24, 2004"
+msgstr "24 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6875
+#, no-wrap
+msgid "5.2-CURRENT after the change to separate the way ports rc.d and legacy scripts are started."
+msgstr "5.2-CURRENT после изменения, разделяющего способ запуска rc.d портов и устаревших скриптов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6876
+#, no-wrap
+msgid "502125"
+msgstr "502125"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6877
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132726[132726]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/132726[132726]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6878
+#, no-wrap
+msgid "July 28, 2004"
+msgstr "28 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6880
+#, no-wrap
+msgid "5.2-CURRENT after the backout of the previous change."
+msgstr "5.2-CURRENT после отмены предыдущего изменения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6881
+#, no-wrap
+msgid "502126"
+msgstr "502126"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6882
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132914[132914]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/132914[132914]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6883
+#, no-wrap
+msgid "July 31, 2004"
+msgstr "31 июля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6885
+#, no-wrap
+msgid "5.2-CURRENT after the removal of `kmem_alloc_pageable()` and the import of gcc 3.4.2."
+msgstr "5.2-CURRENT после удаления `kmem_alloc_pageable()` и импорта gcc 3.4.2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6886
+#, no-wrap
+msgid "502127"
+msgstr "502127"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6887
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132991[132991]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/132991[132991]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6888
+#, no-wrap
+msgid "August 2, 2004"
+msgstr "2 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6890
+#, no-wrap
+msgid "5.2-CURRENT after changing the UMA kernel API to allow ctors/inits to fail."
+msgstr "5.2-CURRENT после изменения UMA API ядра для разрешения ошибок в ctors/inits."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6891
+#, no-wrap
+msgid "502128"
+msgstr "502128"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6892
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133306[133306]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/133306[133306]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6893
+#, no-wrap
+msgid "August 8, 2004"
+msgstr "8 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6895
+#, 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 "5.2-CURRENT после изменения сигнатуры vfs_mount, а также глобальной замены PRISON_ROOT на SUSER_ALLOWJAIL для API man:suser[9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6896
+#, no-wrap
+msgid "503000"
+msgstr "503000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6897
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134189[134189]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/134189[134189]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6898
+#, no-wrap
+msgid "August 23, 2004"
+msgstr "23 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6900
+#, no-wrap
+msgid "5.3-BETA/RC before the pfil API change"
+msgstr "5.3-BETA/RC до изменения API pfil"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6901
+#, no-wrap
+msgid "503001"
+msgstr "503001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6902
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/135580[135580]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/135580[135580]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6903
+#, no-wrap
+msgid "September 22, 2004"
+msgstr "22 сентября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6905
+#, no-wrap
+msgid "5.3-RELEASE"
+msgstr "5.3-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6906
+#, no-wrap
+msgid "503100"
+msgstr "503100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6907
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/136595[136595]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/136595[136595]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6908
+#, no-wrap
+msgid "October 16, 2004"
+msgstr "16 октября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6910
+#, no-wrap
+msgid "5.3-STABLE after branching for RELENG_5_3"
+msgstr "5.3-STABLE после ветвления для RELENG_5_3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6911
+#, no-wrap
+msgid "503101"
+msgstr "503101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6912
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138459[138459]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/138459[138459]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6913
+#, no-wrap
+msgid "December 3, 2004"
+msgstr "3 декабря 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6915
+#, no-wrap
+msgid "5.3-STABLE after addition of glibc style man:strftime[3] padding options."
+msgstr "5.3-STABLE после добавления опций заполнения man:strftime[3] в стиле glibc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6916
+#, no-wrap
+msgid "503102"
+msgstr "503102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6917
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141788[141788]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/141788[141788]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6918
+#, no-wrap
+msgid "February 13, 2005"
+msgstr "13 февраля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6920
+#, no-wrap
+msgid "5.3-STABLE after OpenBSD's man:nc[1] import MFC."
+msgstr "5.3-STABLE после импорта man:nc[1] из OpenBSD MFC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6921
+#, no-wrap
+msgid "503103"
+msgstr "503103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6922
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142639[142639]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142639[142639]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6925
+#, 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 "5.4-PRERELEASE после MFC исправлений в [.filename]#<src/include/stdbool.h># и [.filename]#<src/sys/i386/include/_types.h># для обеспечения совместимости с GCC компилятора Intel C/C++."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6926
+#, no-wrap
+msgid "503104"
+msgstr "503104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6927
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142835[142835]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/142835[142835]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6930
+#, no-wrap
+msgid "5.4-PRERELEASE after the MFC of the change of `ifi_epoch` from wall clock time to uptime."
+msgstr "5.4-PRERELEASE после MFC изменения `ifi_epoch` с времени реального мира на время работы системы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6931
+#, no-wrap
+msgid "503105"
+msgstr "503105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6932
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143029[143029]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/143029[143029]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6933
+#, no-wrap
+msgid "March 2, 2005"
+msgstr "2 марта 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6935
+#, no-wrap
+msgid "5.4-PRERELEASE after the MFC of the fix of EOVERFLOW check in man:vswprintf[3]."
+msgstr "5.4-PRERELEASE после переноса исправления проверки EOVERFLOW в man:vswprintf[3]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6936
+#, no-wrap
+msgid "504000"
+msgstr "504000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6937
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144575[144575]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/144575[144575]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6938
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6943
+#, no-wrap
+msgid "April 3, 2005"
+msgstr "3 апреля 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6940
+#, no-wrap
+msgid "5.4-RELEASE."
+msgstr "5.4-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6941
+#, no-wrap
+msgid "504100"
+msgstr "504100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6942
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144581[144581]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/144581[144581]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6945
+#, no-wrap
+msgid "5.4-STABLE after branching for RELENG_5_4"
+msgstr "5.4-STABLE после ветвления для RELENG_5_4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6946
+#, no-wrap
+msgid "504101"
+msgstr "504101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6947
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146105[146105]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/146105[146105]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6948
+#, no-wrap
+msgid "May 11, 2005"
+msgstr "11 мая 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6950
+#, no-wrap
+msgid "5.4-STABLE after increasing the default thread stacksizes"
+msgstr "5.4-STABLE после увеличения размеров стеков потоков по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6951
+#, no-wrap
+msgid "504102"
+msgstr "504102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6952
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/504101[504101]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/504101[504101]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6953
+#, no-wrap
+msgid "June 24, 2005"
+msgstr "24 июня 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6955
+#, no-wrap
+msgid "5.4-STABLE after the addition of sha256"
+msgstr "5.4-STABLE после добавления sha256"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6956
+#, no-wrap
+msgid "504103"
+msgstr "504103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6957
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/150892[150892]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/150892[150892]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6958
+#, no-wrap
+msgid "October 3, 2005"
+msgstr "3 октября 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6960
+#, no-wrap
+msgid "5.4-STABLE after the MFC of if_bridge"
+msgstr "5.4-STABLE после слияния изменений (MFC) if_bridge"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6961
+#, no-wrap
+msgid "504104"
+msgstr "504104"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6962
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152370[152370]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/152370[152370]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6963
+#, no-wrap
+msgid "November 13, 2005"
+msgstr "13 ноября 2005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6965
+#, no-wrap
+msgid "5.4-STABLE after the MFC of bsdiff and portsnap"
+msgstr "5.4-STABLE после слияния изменений (MFC) bsdiff и portsnap"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6966
+#, no-wrap
+msgid "504105"
+msgstr "504105"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6967
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154464[154464]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/154464[154464]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6970
+#, no-wrap
+msgid "5.4-STABLE after MFC of ldconfig_local_dirs change."
+msgstr "5.4-STABLE после MFC изменений ldconfig_local_dirs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6971
+#, no-wrap
+msgid "505000"
+msgstr "505000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6972
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158481[158481]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/158481[158481]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6973
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6978
+#, no-wrap
+msgid "May 12, 2006"
+msgstr "12 мая 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6975
+#, no-wrap
+msgid "5.5-RELEASE."
+msgstr "5.5-RELEASE."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6976
+#, no-wrap
+msgid "505100"
+msgstr "505100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6977
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158482[158482]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/158482[158482]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6979
+#, no-wrap
+msgid "5.5-STABLE after branching for RELENG_5_5"
+msgstr "5.5-STABLE после ветвления для RELENG_5_5"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6982
+#, no-wrap
+msgid "FreeBSD 4 Versions"
+msgstr "Версии FreeBSD 4"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6985
+#, no-wrap
+msgid "FreeBSD 4 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6994
+#, no-wrap
+msgid "400000"
+msgstr "400000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6995
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43041[43041]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/43041[43041]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6996
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7389
+#, no-wrap
+msgid "January 22, 1999"
+msgstr "22 января 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6998
+#, no-wrap
+msgid "4.0-CURRENT after 3.4 branch"
+msgstr "4.0-CURRENT после ветки 3.4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6999
+#, no-wrap
+msgid "400001"
+msgstr "400001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7000
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/44177[44177]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/44177[44177]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7001
+#, no-wrap
+msgid "February 20, 1999"
+msgstr "20 февраля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7003
+#, no-wrap
+msgid "4.0-CURRENT after change in dynamic linker handling"
+msgstr "4.0-CURRENT после изменения в обработке динамического компоновщика"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7004
+#, no-wrap
+msgid "400002"
+msgstr "400002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7005
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/44699[44699]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/44699[44699]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7006
+#, no-wrap
+msgid "March 13, 1999"
+msgstr "13 марта 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7008
+#, no-wrap
+msgid "4.0-CURRENT after C++ constructor/destructor order change"
+msgstr "4.0-CURRENT после изменения порядка конструкторов/деструкторов C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7009
+#, no-wrap
+msgid "400003"
+msgstr "400003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7010
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45059[45059]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/45059[45059]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7011
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7399
+#, no-wrap
+msgid "March 27, 1999"
+msgstr "27 марта 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7013
+#, no-wrap
+msgid "4.0-CURRENT after functioning man:dladdr[3]"
+msgstr "4.0-CURRENT после функционирования man:dladdr[3]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7014
+#, no-wrap
+msgid "400004"
+msgstr "400004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7015
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45321[45321]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/45321[45321]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7016
+#, no-wrap
+msgid "April 5, 1999"
+msgstr "5 апреля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7018
+#, 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 "4.0-CURRENT после исправления ошибки динамического компоновщика `__deregister_frame_info` (также 4.0-CURRENT после интеграции EGCS 1.1.2)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7019
+#, no-wrap
+msgid "400005"
+msgstr "400005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7020
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/46113[46113]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/46113[46113]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7021
+#, no-wrap
+msgid "April 27, 1999"
+msgstr "27 апреля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7023
+#, no-wrap
+msgid "4.0-CURRENT after man:suser[9] API change (also 4.0-CURRENT after newbus)"
+msgstr "4.0-CURRENT после изменения API man:suser[9] (также 4.0-CURRENT после newbus)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7024
+#, no-wrap
+msgid "400006"
+msgstr "400006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7025
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/47640[47640]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/47640[47640]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7026
+#, no-wrap
+msgid "May 31, 1999"
+msgstr "31 мая 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7028
+#, no-wrap
+msgid "4.0-CURRENT after cdevsw registration change"
+msgstr "4.0-CURRENT после изменения регистрации cdevsw"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7029
+#, no-wrap
+msgid "400007"
+msgstr "400007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7030
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/47992[47992]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/47992[47992]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7031
+#, no-wrap
+msgid "June 17, 1999"
+msgstr "17 июня 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7033
+#, no-wrap
+msgid "4.0-CURRENT after the addition of `so_cred` for socket level credentials"
+msgstr "4.0-CURRENT после добавления `so_cred` для учётных данных на уровне сокета"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7034
+#, no-wrap
+msgid "400008"
+msgstr "400008"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7035
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/48048[48048]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/48048[48048]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7036
+#, no-wrap
+msgid "June 20, 1999"
+msgstr "20 июня 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7038
+#, no-wrap
+msgid "4.0-CURRENT after the addition of a poll syscall wrapper to libc_r"
+msgstr "4.0-CURRENT после добавления обёртки системного вызова poll в libc_r"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7039
+#, no-wrap
+msgid "400009"
+msgstr "400009"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7040
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/48936[48936]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/48936[48936]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7041
+#, no-wrap
+msgid "July 20, 1999"
+msgstr "20 июля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7043
+#, no-wrap
+msgid "4.0-CURRENT after the change of the kernel's `dev_t` type to `struct specinfo` pointer"
+msgstr "4.0-CURRENT после изменения типа `dev_t` ядра на указатель `struct specinfo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7044
+#, no-wrap
+msgid "400010"
+msgstr "400010"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7045
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51649[51649]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/51649[51649]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7046
+#, no-wrap
+msgid "September 25, 1999"
+msgstr "25 сентября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7048
+#, no-wrap
+msgid "4.0-CURRENT after fixing a hole in man:jail[2]"
+msgstr "4.0-CURRENT после исправления уязвимости в man:jail[2]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7049
+#, no-wrap
+msgid "400011"
+msgstr "400011"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7050
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51791[51791]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/51791[51791]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7051
+#, no-wrap
+msgid "September 29, 1999"
+msgstr "29 сентября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7053
+#, no-wrap
+msgid "4.0-CURRENT after the `sigset_t` datatype change"
+msgstr "4.0-CURRENT после изменения типа данных `sigset_t`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7054
+#, no-wrap
+msgid "400012"
+msgstr "400012"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7055
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/53164[53164]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/53164[53164]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7056
+#, no-wrap
+msgid "November 15, 1999"
+msgstr "15 ноября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7058
+#, no-wrap
+msgid "4.0-CURRENT after the cutover to the GCC 2.95.2 compiler"
+msgstr "4.0-CURRENT после перехода на компилятор GCC 2.95.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7059
+#, no-wrap
+msgid "400013"
+msgstr "400013"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7060
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54123[54123]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/54123[54123]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7061
+#, no-wrap
+msgid "December 4, 1999"
+msgstr "4 декабря 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7063
+#, no-wrap
+msgid "4.0-CURRENT after adding pluggable linux-mode ioctl handlers"
+msgstr "4.0-CURRENT после добавления подключаемых обработчиков ioctl в режиме linux"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7064
+#, no-wrap
+msgid "400014"
+msgstr "400014"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7065
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/56216[56216]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/56216[56216]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7066
+#, no-wrap
+msgid "January 18, 2000"
+msgstr "18 января 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7068
+#, no-wrap
+msgid "4.0-CURRENT after importing OpenSSL"
+msgstr "4.0-CURRENT после импорта OpenSSL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7069
+#, no-wrap
+msgid "400015"
+msgstr "400015"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7070
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/56700[56700]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/56700[56700]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7071
+#, no-wrap
+msgid "January 27, 2000"
+msgstr "27 января 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7073
+#, 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 "4.0-CURRENT после изменения ABI C++ в GCC 2.95.2 с -fvtable-thunks на -fno-vtable-thunks по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7074
+#, no-wrap
+msgid "400016"
+msgstr "400016"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7075
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/57529[57529]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/57529[57529]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7076
+#, no-wrap
+msgid "February 27, 2000"
+msgstr "27 февраля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7078
+#, no-wrap
+msgid "4.0-CURRENT after importing OpenSSH"
+msgstr "4.0-CURRENT после импорта OpenSSH"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7079
+#, no-wrap
+msgid "400017"
+msgstr "400017"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7080
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58005[58005]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/58005[58005]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7083
+#, no-wrap
+msgid "4.0-RELEASE"
+msgstr "4.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7084
+#, no-wrap
+msgid "400018"
+msgstr "400018"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7085
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58170[58170]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/58170[58170]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7086
+#, no-wrap
+msgid "March 17, 2000"
+msgstr "17 марта 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7088
+#, no-wrap
+msgid "4.0-STABLE after 4.0-RELEASE"
+msgstr "4.0-STABLE после 4.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7089
+#, no-wrap
+msgid "400019"
+msgstr "400019"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7090
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60047[60047]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/60047[60047]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7091
+#, no-wrap
+msgid "May 5, 2000"
+msgstr "5 мая 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7093
+#, no-wrap
+msgid "4.0-STABLE after the introduction of delayed checksums."
+msgstr "4.0-STABLE после введения отложенных контрольных сумм."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7094
+#, no-wrap
+msgid "400020"
+msgstr "400020"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7095
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61262[61262]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/61262[61262]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7096
+#, no-wrap
+msgid "June 4, 2000"
+msgstr "4 июня 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7098
+#, no-wrap
+msgid "4.0-STABLE after merging libxpg4 code into libc."
+msgstr "4.0-STABLE после объединения кода libxpg4 в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7099
+#, no-wrap
+msgid "400021"
+msgstr "400021"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7100
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62820[62820]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/62820[62820]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7101
+#, no-wrap
+msgid "July 8, 2000"
+msgstr "8 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7103
+#, no-wrap
+msgid "4.0-STABLE after upgrading Binutils to 2.10.0, ELF branding changes, and tcsh in the base system."
+msgstr "4.0-STABLE после обновления Binutils до 2.10.0, изменения маркировки ELF и tcsh в базовой системе."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7104
+#, no-wrap
+msgid "410000"
+msgstr "410000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7105
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63095[63095]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/63095[63095]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7108
+#, no-wrap
+msgid "4.1-RELEASE"
+msgstr "4.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7109
+#, no-wrap
+msgid "410001"
+msgstr "410001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7110
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/64012[64012]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/64012[64012]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7111
+#, no-wrap
+msgid "July 29, 2000"
+msgstr "29 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7113
+#, no-wrap
+msgid "4.1-STABLE after 4.1-RELEASE"
+msgstr "4.1-STABLE после 4.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7114
+#, no-wrap
+msgid "410002"
+msgstr "410002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7115
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65962[65962]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/65962[65962]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7116
+#, no-wrap
+msgid "September 16, 2000"
+msgstr "16 сентября 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7118
+#, no-wrap
+msgid "4.1-STABLE after man:setproctitle[3] moved from libutil to libc."
+msgstr "4.1-STABLE после перемещения man:setproctitle[3] из libutil в libc."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7119
+#, no-wrap
+msgid "411000"
+msgstr "411000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7120
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/66336[66336]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/66336[66336]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7121
+#, no-wrap
+msgid "September 25, 2000"
+msgstr "25 сентября 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7123
+#, no-wrap
+msgid "4.1.1-RELEASE"
+msgstr "4.1.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7124
+#, no-wrap
+msgid "411001"
+msgstr "411001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7128
+#, no-wrap
+msgid "4.1.1-STABLE after 4.1.1-RELEASE"
+msgstr "4.1.1-STABLE после 4.1.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7129
+#, no-wrap
+msgid "420000"
+msgstr "420000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7130
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/68066[68066]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/68066[68066]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7131
+#, no-wrap
+msgid "October 31, 2000"
+msgstr "31 октября 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7133
+#, no-wrap
+msgid "4.2-RELEASE"
+msgstr "4.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7134
+#, no-wrap
+msgid "420001"
+msgstr "420001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7135
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70895[70895]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/70895[70895]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7138
+#, no-wrap
+msgid "4.2-STABLE after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes."
+msgstr "4.2-STABLE после объединения libgcc.a и libgcc_r.a, а также связанных изменений в компоновке GCC."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7139
+#, no-wrap
+msgid "430000"
+msgstr "430000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7140
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/73800[73800]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/73800[73800]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7141
+#, no-wrap
+msgid "March 6, 2001"
+msgstr "6 марта 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7143
+#, no-wrap
+msgid "4.3-RELEASE"
+msgstr "4.3-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7144
+#, no-wrap
+msgid "430001"
+msgstr "430001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7145
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/76779[76779]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/76779[76779]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7146
+#, no-wrap
+msgid "May 18, 2001"
+msgstr "18 мая 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7148
+#, no-wrap
+msgid "4.3-STABLE after `wint_t` introduction."
+msgstr "4.3-STABLE после введения `wint_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7149
+#, no-wrap
+msgid "430002"
+msgstr "430002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7150
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/80157[80157]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/80157[80157]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7151
+#, no-wrap
+msgid "July 22, 2001"
+msgstr "22 июля 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7153
+#, no-wrap
+msgid "4.3-STABLE after PCI powerstate API merge."
+msgstr "4.3-STABLE после объединения API управления состоянием питания PCI."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7154
+#, no-wrap
+msgid "440000"
+msgstr "440000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7155
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/80923[80923]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/80923[80923]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7156
+#, no-wrap
+msgid "August 1, 2001"
+msgstr "1 августа 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7158
+#, no-wrap
+msgid "4.4-RELEASE"
+msgstr "4.4-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7159
+#, no-wrap
+msgid "440001"
+msgstr "440001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7160
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/85341[85341]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/85341[85341]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7161
+#, no-wrap
+msgid "October 23, 2001"
+msgstr "23 октября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7163
+#, no-wrap
+msgid "4.4-STABLE after `d_thread_t` introduction."
+msgstr "4.4-STABLE после введения `d_thread_t`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7164
+#, no-wrap
+msgid "440002"
+msgstr "440002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7165
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/86038[86038]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/86038[86038]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7166
+#, no-wrap
+msgid "November 4, 2001"
+msgstr "4 ноября 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7168
+#, no-wrap
+msgid "4.4-STABLE after mount structure changes (affects filesystem klds)."
+msgstr "4.4-STABLE после изменений в структуре монтирования (затрагивает модули файловых систем klds)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7169
+#, no-wrap
+msgid "440003"
+msgstr "440003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7170
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/88130[88130]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/88130[88130]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7171
+#, no-wrap
+msgid "December 18, 2001"
+msgstr "18 декабря 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7173
+#, no-wrap
+msgid "4.4-STABLE after the userland components of smbfs were imported."
+msgstr "4.4-STABLE после импорта компонентов пользовательского пространства smbfs."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7174
+#, no-wrap
+msgid "450000"
+msgstr "450000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7175
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/88271[88271]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/88271[88271]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7176
+#, no-wrap
+msgid "December 20, 2001"
+msgstr "20 декабря 2001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7178
+#, no-wrap
+msgid "4.5-RELEASE"
+msgstr "4.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7179
+#, no-wrap
+msgid "450001"
+msgstr "450001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7183
+#, no-wrap
+msgid "4.5-STABLE after the usb structure element rename."
+msgstr "4.5-STABLE после переименования элемента структуры usb."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7184
+#, no-wrap
+msgid "450002"
+msgstr "450002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7185
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/92151[92151]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/92151[92151]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7186
+#, no-wrap
+msgid "March 12, 2002"
+msgstr "12 марта 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7188
+#, no-wrap
+msgid "4.5-STABLE after locale changes."
+msgstr "4.5-STABLE после изменений локали."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7189
+#, no-wrap
+msgid "450003"
+msgstr "450003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7193
+#, no-wrap
+msgid "(Never created)"
+msgstr "(Никогда не создавался)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7194
+#, no-wrap
+msgid "450004"
+msgstr "450004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7195
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/94840[94840]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/94840[94840]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7196
+#, no-wrap
+msgid "April 16, 2002"
+msgstr "16 апреля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7198
+#, no-wrap
+msgid "4.5-STABLE after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`."
+msgstr "4.5-STABLE после того, как переменная `sendmail_enable` из man:rc.conf[5] стала принимать значение `NONE`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7199
+#, no-wrap
+msgid "450005"
+msgstr "450005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7200
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95555[95555]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/95555[95555]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7201
+#, no-wrap
+msgid "April 27, 2002"
+msgstr "27 апреля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7203
+#, no-wrap
+msgid "4.5-STABLE after moving to XFree86 4 by default for package builds."
+msgstr "4.5-STABLE после перехода на XFree86 4 по умолчанию для сборки пакетов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7204
+#, no-wrap
+msgid "450006"
+msgstr "450006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7205
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95846[95846]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/95846[95846]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7206
+#, no-wrap
+msgid "May 1, 2002"
+msgstr "1 мая 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7208
+#, no-wrap
+msgid "4.5-STABLE after accept filtering was fixed so that is no longer susceptible to an easy DoS."
+msgstr "4.5-STABLE после исправления фильтрации accept, чтобы он больше не был подвержен простой DoS-атаке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7209
+#, no-wrap
+msgid "460000"
+msgstr "460000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7210
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/97923[97923]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/97923[97923]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7211
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7216
+#, no-wrap
+msgid "June 21, 2002"
+msgstr "21 июня 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7213
+#, no-wrap
+msgid "4.6-RELEASE"
+msgstr "4.6-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7214
+#, no-wrap
+msgid "460001"
+msgstr "460001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7215
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98730[98730]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/98730[98730]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7218
+#, 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 "4.6-STABLE man:sendfile[2] исправлен для соответствия документации, чтобы не учитывать отправленные заголовки в объеме данных, отправляемых из файла."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7219
+#, no-wrap
+msgid "460002"
+msgstr "460002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7220
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/100366[100366]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/100366[100366]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7221
+#, no-wrap
+msgid "July 19, 2002"
+msgstr "19 июля 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7223
+#, no-wrap
+msgid "4.6.2-RELEASE"
+msgstr "4.6.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7224
+#, no-wrap
+msgid "460100"
+msgstr "460100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7225
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98857[98857]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/98857[98857]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7226
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7231
+#, no-wrap
+msgid "June 26, 2002"
+msgstr "26 июня 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7228
+#, no-wrap
+msgid "4.6-STABLE"
+msgstr "4.6-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7229
+#, no-wrap
+msgid "460101"
+msgstr "460101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7230
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98880[98880]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/98880[98880]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7233
+#, no-wrap
+msgid "4.6-STABLE after MFC of `sed -i`."
+msgstr "4.6-STABLE после MFC `sed -i`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7234
+#, no-wrap
+msgid "460102"
+msgstr "460102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7235
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/102759[102759]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/102759[102759]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7238
+#, no-wrap
+msgid "4.6-STABLE after MFC of many new pkg_install features from the HEAD."
+msgstr "4.6-STABLE после MFC множества новых функций pkg_install из HEAD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7239
+#, no-wrap
+msgid "470000"
+msgstr "470000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7240
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104655[104655]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/104655[104655]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7241
+#, no-wrap
+msgid "October 8, 2002"
+msgstr "8 октября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7243
+#, no-wrap
+msgid "4.7-RELEASE"
+msgstr "4.7-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7244
+#, no-wrap
+msgid "470100"
+msgstr "470100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7245
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104717[104717]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/104717[104717]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7246
+#, no-wrap
+msgid "October 9, 2002"
+msgstr "9 октября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7248
+#, no-wrap
+msgid "4.7-STABLE"
+msgstr "4.7-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7249
+#, no-wrap
+msgid "470101"
+msgstr "470101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7250
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/106732[106732]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/106732[106732]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7251
+#, no-wrap
+msgid "November 10, 2002"
+msgstr "10 ноября 2002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7253
+#, 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 "Начинать генерировать ссылки `__std{in,out,err}p` вместо `__sF`. Это изменяет `std{in,out,err}` с выражения времени компиляции на выражение времени выполнения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7254
+#, no-wrap
+msgid "470102"
+msgstr "470102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7255
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/109753[109753]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/109753[109753]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7256
+#, no-wrap
+msgid "January 23, 2003"
+msgstr "23 января 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7258
+#, no-wrap
+msgid "4.7-STABLE after MFC of mbuf changes to replace `m_aux` mbufs by `m_tag`'s"
+msgstr "4.7-STABLE после MFC изменений mbuf для замены `m_aux` mbuf на `m_tag`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7259
+#, no-wrap
+msgid "470103"
+msgstr "470103"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7260
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/110887[110887]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/110887[110887]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7261
+#, no-wrap
+msgid "February 14, 2003"
+msgstr "14 февраля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7263
+#, no-wrap
+msgid "4.7-STABLE gets OpenSSL 0.9.7"
+msgstr "4.7-STABLE получает OpenSSL 0.9.7"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7264
+#, no-wrap
+msgid "480000"
+msgstr "480000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7265
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112852[112852]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/112852[112852]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7266
+#, no-wrap
+msgid "March 30, 2003"
+msgstr "30 марта 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7268
+#, no-wrap
+msgid "4.8-RELEASE"
+msgstr "4.8-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7269
+#, no-wrap
+msgid "480100"
+msgstr "480100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7270
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113107[113107]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/113107[113107]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7271
+#, no-wrap
+msgid "April 5, 2003"
+msgstr "5 апреля 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7273
+#, no-wrap
+msgid "4.8-STABLE"
+msgstr "4.8-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7274
+#, no-wrap
+msgid "480101"
+msgstr "480101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7275
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115232[115232]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/115232[115232]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7276
+#, no-wrap
+msgid "May 22, 2003"
+msgstr "22 мая 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7278
+#, no-wrap
+msgid "4.8-STABLE after man:realpath[3] has been made thread-safe"
+msgstr "4.8-STABLE после того, как man:realpath[3] стал потокобезопасным"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7279
+#, no-wrap
+msgid "480102"
+msgstr "480102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7280
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118737[118737]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/118737[118737]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7281
+#, no-wrap
+msgid "August 10, 2003"
+msgstr "10 августа 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7283
+#, no-wrap
+msgid "4.8-STABLE 3ware API changes to twe."
+msgstr "4.8-STABLE Изменения API 3ware в twe."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7284
+#, no-wrap
+msgid "490000"
+msgstr "490000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7285
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121592[121592]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/121592[121592]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7286
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7291
+#, no-wrap
+msgid "October 27, 2003"
+msgstr "27 октября 2003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7288
+#, no-wrap
+msgid "4.9-RELEASE"
+msgstr "4.9-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7289
+#, no-wrap
+msgid "490100"
+msgstr "490100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7290
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121593[121593]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/121593[121593]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7293
+#, no-wrap
+msgid "4.9-STABLE"
+msgstr "4.9-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7294
+#, no-wrap
+msgid "490101"
+msgstr "490101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7295
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/124264[124264]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/124264[124264]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7296
+#, no-wrap
+msgid "January 8, 2004"
+msgstr "8 января 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7298
+#, no-wrap
+msgid "4.9-STABLE after `e_sid` was added to struct `kinfo_eproc`."
+msgstr "4.9-STABLE после добавления `e_sid` в структуру `kinfo_eproc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7299
+#, no-wrap
+msgid "490102"
+msgstr "490102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7300
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/125417[125417]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/125417[125417]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7301
+#, no-wrap
+msgid "February 4, 2004"
+msgstr "4 февраля 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7303
+#, no-wrap
+msgid "4.9-STABLE after MFC of libmap functionality for rtld."
+msgstr "4.9-STABLE после MFC функциональности libmap для rtld."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7304
+#, no-wrap
+msgid "491000"
+msgstr "491000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7305
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/129700[129700]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/129700[129700]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7306
+#, no-wrap
+msgid "May 25, 2004"
+msgstr "25 мая 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7308
+#, no-wrap
+msgid "4.10-RELEASE"
+msgstr "4.10-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7309
+#, no-wrap
+msgid "491100"
+msgstr "491100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7310
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/129918[129918]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/129918[129918]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7311
+#, no-wrap
+msgid "June 1, 2004"
+msgstr "1 июня 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7313
+#, no-wrap
+msgid "4.10-STABLE"
+msgstr "4.10-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7314
+#, no-wrap
+msgid "491101"
+msgstr "491101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7315
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133506[133506]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/133506[133506]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7316
+#, no-wrap
+msgid "August 11, 2004"
+msgstr "11 августа 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7318
+#, no-wrap
+msgid "4.10-STABLE after MFC of revision 20040629 of the package tools"
+msgstr "4.10-STABLE после слияния изменения из ревизии 20040629 пакета tools"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7319
+#, no-wrap
+msgid "491102"
+msgstr "491102"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7320
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/137786[137786]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/137786[137786]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7321
+#, no-wrap
+msgid "November 16, 2004"
+msgstr "16 ноября 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7323
+#, no-wrap
+msgid "4.10-STABLE after VM fix dealing with unwiring of fictitious pages"
+msgstr "4.10-STABLE после исправления VM, связанного с обработкой размонтирования фиктивных страниц"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7324
+#, no-wrap
+msgid "492000"
+msgstr "492000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7325
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138960[138960]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/138960[138960]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7326
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7331
+#, no-wrap
+msgid "December 17, 2004"
+msgstr "17 декабря 2004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7328
+#, no-wrap
+msgid "4.11-RELEASE"
+msgstr "4.11-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7329
+#, no-wrap
+msgid "492100"
+msgstr "492100"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7330
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138959[138959]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/138959[138959]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7333
+#, no-wrap
+msgid "4.11-STABLE"
+msgstr "4.11-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7334
+#, no-wrap
+msgid "492101"
+msgstr "492101"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7335
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157843[157843]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/157843[157843]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7336
+#, no-wrap
+msgid "April 18, 2006"
+msgstr "18 апреля 2006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7337
+#, no-wrap
+msgid "4.11-STABLE after adding libdata/ldconfig directories to mtree files."
+msgstr "4.11-STABLE после добавления каталогов libdata/ldconfig в файлы mtree."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7340
+#, no-wrap
+msgid "FreeBSD 3 Versions"
+msgstr "Версии FreeBSD 3"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7343
+#, no-wrap
+msgid "FreeBSD 3 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` для FreeBSD 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7352
+#, no-wrap
+msgid "300000"
+msgstr "300000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7353
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/22917[22917]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/22917[22917]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7354
+#, no-wrap
+msgid "February 19, 1996"
+msgstr "19 февраля 1996"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7356
+#, no-wrap
+msgid "3.0-CURRENT before man:mount[2] change"
+msgstr "3.0-CURRENT до изменения man:mount[2]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7357
+#, no-wrap
+msgid "300001"
+msgstr "300001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7358
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36283[36283]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/36283[36283]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7359
+#, no-wrap
+msgid "September 24, 1997"
+msgstr "24 сентября 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7361
+#, no-wrap
+msgid "3.0-CURRENT after man:mount[2] change"
+msgstr "3.0-CURRENT после изменения man:mount[2]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7362
+#, no-wrap
+msgid "300002"
+msgstr "300002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7363
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36592[36592]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/36592[36592]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7364
+#, no-wrap
+msgid "June 2, 1998"
+msgstr "2 июня 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7366
+#, no-wrap
+msgid "3.0-CURRENT after man:semctl[2] change"
+msgstr "3.0-CURRENT после изменения man:semctl[2]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7367
+#, no-wrap
+msgid "300003"
+msgstr "300003"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7368
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36735[36735]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/36735[36735]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7369
+#, no-wrap
+msgid "June 7, 1998"
+msgstr "7 июня 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7371
+#, no-wrap
+msgid "3.0-CURRENT after ioctl arg changes"
+msgstr "3.0-CURRENT после изменений аргументов ioctl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7372
+#, no-wrap
+msgid "300004"
+msgstr "300004"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7373
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/38768[38768]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/38768[38768]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7374
+#, no-wrap
+msgid "September 3, 1998"
+msgstr "3 сентября 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7376
+#, no-wrap
+msgid "3.0-CURRENT after ELF conversion"
+msgstr "3.0-CURRENT после преобразования в ELF"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7377
+#, no-wrap
+msgid "300005"
+msgstr "300005"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7378
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/40438[40438]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/40438[40438]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7379
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7384
+#, no-wrap
+msgid "October 16, 1998"
+msgstr "16 октября 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7381
+#, no-wrap
+msgid "3.0-RELEASE"
+msgstr "3.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7382
+#, no-wrap
+msgid "300006"
+msgstr "300006"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7383
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/40445[40445]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/40445[40445]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7386
+#, no-wrap
+msgid "3.0-CURRENT after 3.0-RELEASE"
+msgstr "3.0-CURRENT после 3.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7387
+#, no-wrap
+msgid "300007"
+msgstr "300007"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7388
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43042[43042]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/43042[43042]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7391
+#, no-wrap
+msgid "3.0-STABLE after 3/4 branch"
+msgstr "3.0-STABLE после ветвления 3/4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7392
+#, no-wrap
+msgid "310000"
+msgstr "310000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7393
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43807[43807]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/43807[43807]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7394
+#, no-wrap
+msgid "February 9, 1999"
+msgstr "9 февраля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7396
+#, no-wrap
+msgid "3.1-RELEASE"
+msgstr "3.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7397
+#, no-wrap
+msgid "310001"
+msgstr "310001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7398
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45060[45060]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/45060[45060]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7401
+#, no-wrap
+msgid "3.1-STABLE after 3.1-RELEASE"
+msgstr "3.1-STABLE после 3.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7402
+#, no-wrap
+msgid "310002"
+msgstr "310002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7403
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45689[45689]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/45689[45689]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7404
+#, no-wrap
+msgid "April 14, 1999"
+msgstr "14 апреля 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7406
+#, no-wrap
+msgid "3.1-STABLE after C++ constructor/destructor order change"
+msgstr "3.1-STABLE после изменения порядка конструкторов/деструкторов C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7407
+#, no-wrap
+msgid "320000"
+msgstr "320000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7411
+#, no-wrap
+msgid "3.2-RELEASE"
+msgstr "3.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7412
+#, no-wrap
+msgid "320001"
+msgstr "320001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7413
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/46742[46742]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/46742[46742]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7414
+#, no-wrap
+msgid "May 8, 1999"
+msgstr "8 мая 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7416
+#, no-wrap
+msgid "3.2-STABLE"
+msgstr "3.2-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7417
+#, no-wrap
+msgid "320002"
+msgstr "320002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7418
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/50563[50563]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/50563[50563]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7419
+#, no-wrap
+msgid "August 29, 1999"
+msgstr "29 августа 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7421
+#, no-wrap
+msgid "3.2-STABLE after binary-incompatible IPFW and socket changes"
+msgstr "3.2-STABLE после бинарно-несовместимых изменений в IPFW и сокетах"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7422
+#, no-wrap
+msgid "330000"
+msgstr "330000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7423
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/50813[50813]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/50813[50813]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7424
+#, no-wrap
+msgid "September 2, 1999"
+msgstr "2 сентября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7426
+#, no-wrap
+msgid "3.3-RELEASE"
+msgstr "3.3-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7427
+#, no-wrap
+msgid "330001"
+msgstr "330001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7428
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51328[51328]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/51328[51328]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7429
+#, no-wrap
+msgid "September 16, 1999"
+msgstr "16 сентября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7431
+#, no-wrap
+msgid "3.3-STABLE"
+msgstr "3.3-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7432
+#, no-wrap
+msgid "330002"
+msgstr "330002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7433
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/53671[53671]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/53671[53671]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7434
+#, no-wrap
+msgid "November 24, 1999"
+msgstr "24 ноября 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7436
+#, no-wrap
+msgid "3.3-STABLE after adding man:mkstemp[3] to libc"
+msgstr "3.3-STABLE после добавления man:mkstemp[3] в libc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7437
+#, no-wrap
+msgid "340000"
+msgstr "340000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7438
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54166[54166]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/54166[54166]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7439
+#, no-wrap
+msgid "December 5, 1999"
+msgstr "5 декабря 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7441
+#, no-wrap
+msgid "3.4-RELEASE"
+msgstr "3.4-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7442
+#, no-wrap
+msgid "340001"
+msgstr "340001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7443
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54730[54730]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/54730[54730]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7444
+#, no-wrap
+msgid "December 17, 1999"
+msgstr "17 декабря 1999"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7446
+#, no-wrap
+msgid "3.4-STABLE"
+msgstr "3.4-STABLE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7447
+#, no-wrap
+msgid "350000"
+msgstr "350000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7448
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61876[61876]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/61876[61876]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7449
+#, no-wrap
+msgid "June 20, 2000"
+msgstr "20 июня 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7451
+#, no-wrap
+msgid "3.5-RELEASE"
+msgstr "3.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7452
+#, no-wrap
+msgid "350001"
+msgstr "350001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7453
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63043[63043]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/63043[63043]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7454
+#, no-wrap
+msgid "July 12, 2000"
+msgstr "12 июля 2000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7455
+#, no-wrap
+msgid "3.5-STABLE"
+msgstr "3.5-STABLE"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7458
+#, no-wrap
+msgid "FreeBSD 2.2 Versions"
+msgstr "Версии FreeBSD 2.2"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7461
+#, no-wrap
+msgid "FreeBSD 2.2 `__FreeBSD_version` Values"
+msgstr "Значения `__FreeBSD_version` в FreeBSD 2.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7470
+#, no-wrap
+msgid "220000"
+msgstr "220000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7471
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/22918[22918]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/22918[22918]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7472
+#, no-wrap
+msgid "February 19, 1997"
+msgstr "19 февраля 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7474
+#, no-wrap
+msgid "2.2-RELEASE"
+msgstr "2.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7479
+#, no-wrap
+msgid "2.2.1-RELEASE"
+msgstr "2.2.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7484
+#, no-wrap
+msgid "2.2-STABLE after 2.2.1-RELEASE"
+msgstr "2.2-STABLE после 2.2.1-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7485
+#, no-wrap
+msgid "221001"
+msgstr "221001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7486
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/24941[24941]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/24941[24941]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7487
+#, no-wrap
+msgid "April 15, 1997"
+msgstr "15 апреля 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7489
+#, no-wrap
+msgid "2.2-STABLE after texinfo-3.9"
+msgstr "2.2-STABLE после texinfo-3.9"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7490
+#, no-wrap
+msgid "221002"
+msgstr "221002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7491
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25325[25325]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/25325[25325]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7492
+#, no-wrap
+msgid "April 30, 1997"
+msgstr "30 апреля 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7494
+#, no-wrap
+msgid "2.2-STABLE after top"
+msgstr "2.2-STABLE после обновления"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7495
+#, no-wrap
+msgid "222000"
+msgstr "222000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7496
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25851[25851]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/25851[25851]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7497
+#, no-wrap
+msgid "May 16, 1997"
+msgstr "16 мая 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7499
+#, no-wrap
+msgid "2.2.2-RELEASE"
+msgstr "2.2.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7500
+#, no-wrap
+msgid "222001"
+msgstr "222001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7501
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25921[25921]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/25921[25921]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7502
+#, no-wrap
+msgid "May 19, 1997"
+msgstr "19 мая 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7504
+#, no-wrap
+msgid "2.2-STABLE after 2.2.2-RELEASE"
+msgstr "2.2-STABLE после 2.2.2-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7505
+#, no-wrap
+msgid "225000"
+msgstr "225000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7506
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/30053[30053]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/30053[30053]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7507
+#, no-wrap
+msgid "October 2, 1997"
+msgstr "2 октября 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7509
+#, no-wrap
+msgid "2.2.5-RELEASE"
+msgstr "2.2.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7510
+#, no-wrap
+msgid "225001"
+msgstr "225001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7511
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/31300[31300]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/31300[31300]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7512
+#, no-wrap
+msgid "November 20, 1997"
+msgstr "20 ноября 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7514
+#, no-wrap
+msgid "2.2-STABLE after 2.2.5-RELEASE"
+msgstr "2.2-STABLE после 2.2.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7515
+#, no-wrap
+msgid "225002"
+msgstr "225002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7516
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/32019[32019]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/32019[32019]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7517
+#, no-wrap
+msgid "December 27, 1997"
+msgstr "27 декабря 1997"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7519
+#, no-wrap
+msgid "2.2-STABLE after ldconfig -R merge"
+msgstr "2.2-STABLE после слияния ldconfig -R"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7520
+#, no-wrap
+msgid "226000"
+msgstr "226000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/34445[34445]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/34445[34445]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7522
+#, no-wrap
+msgid "March 24, 1998"
+msgstr "24 марта 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7524
+#, no-wrap
+msgid "2.2.6-RELEASE"
+msgstr "2.2.6-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7525
+#, no-wrap
+msgid "227000"
+msgstr "227000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/37803[37803]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/37803[37803]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7527
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7532
+#, no-wrap
+msgid "July 21, 1998"
+msgstr "21 июля 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7529
+#, no-wrap
+msgid "2.2.7-RELEASE"
+msgstr "2.2.7-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7530
+#, no-wrap
+msgid "227001"
+msgstr "227001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/37809[37809]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/37809[37809]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7534
+#, no-wrap
+msgid "2.2-STABLE after 2.2.7-RELEASE"
+msgstr "2.2-STABLE после 2.2.7-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7535
+#, no-wrap
+msgid "227002"
+msgstr "227002"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7536
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/39489[39489]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/39489[39489]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7537
+#, no-wrap
+msgid "September 19, 1998"
+msgstr "19 сентября 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7539
+#, no-wrap
+msgid "2.2-STABLE after man:semctl[2] change"
+msgstr "2.2-STABLE после изменения man:semctl[2]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7540
+#, no-wrap
+msgid "228000"
+msgstr "228000"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7541
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/41403[41403]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/41403[41403]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7542
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7547
+#, no-wrap
+msgid "November 29, 1998"
+msgstr "29 ноября 1998"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7544
+#, no-wrap
+msgid "2.2.8-RELEASE"
+msgstr "2.2.8-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7545
+#, no-wrap
+msgid "228001"
+msgstr "228001"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7546
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/41418[41418]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/41418[41418]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7548
+#, no-wrap
+msgid "2.2-STABLE after 2.2.8-RELEASE"
+msgstr "2.2-STABLE после 2.2.8-RELEASE"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7553
+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 ""
+"Обратите внимание, что 2.2-STABLE иногда идентифицирует себя как \"2.2.5-"
+"STABLE\" после выпуска 2.2.5-RELEASE. Ранее использовался шаблон \"год-"
+"месяц\", но сообщество решило изменить его на более простую систему "
+"\"основной/второстепенный\", начиная с версии 2.2. Это связано с тем, что "
+"параллельная разработка нескольких веток сделала невозможным "
+"классифицировать выпуски только по датам их фактического выхода. Не "
+"беспокойтесь о старых версиях -CURRENT; они приведены здесь только для "
+"справки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7556
+#, no-wrap
+msgid "FreeBSD 2 Before 2.2-RELEASE Versions"
+msgstr "FreeBSD 2 Версии до 2.2-RELEASE"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7559
+#, no-wrap
+msgid "FreeBSD 2 Before 2.2-RELEASE `__FreeBSD_version` Values"
+msgstr "FreeBSD 2 До версии 2.2-RELEASE Значения `__FreeBSD_version`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7568
+#, no-wrap
+msgid "119411"
+msgstr "119411"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7572
+#, no-wrap
+msgid "2.0-RELEASE"
+msgstr "2.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7573
+#, no-wrap
+msgid "199501"
+msgstr "199501"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7574
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7153[7153]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/7153[7153]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7575
+#, no-wrap
+msgid "March 19, 1995"
+msgstr "19 марта 1995"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7577
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7582
+#, no-wrap
+msgid "2.1-CURRENT"
+msgstr "2.1-CURRENT"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7578
+#, no-wrap
+msgid "199503"
+msgstr "199503"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7579
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7310[7310]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/7310[7310]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7580
+#, no-wrap
+msgid "March 24, 1995"
+msgstr "24 марта 1995"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7583
+#, no-wrap
+msgid "199504"
+msgstr "199504"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7584
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7704[7704]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/7704[7704]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7585
+#, no-wrap
+msgid "April 9, 1995"
+msgstr "9 апреля 1995"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7587
+#, no-wrap
+msgid "2.0.5-RELEASE"
+msgstr "2.0.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7588
+#, no-wrap
+msgid "199508"
+msgstr "199508"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7589
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/10297[10297]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/10297[10297]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7590
+#, no-wrap
+msgid "August 26, 1995"
+msgstr "26 августа 1995"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7592
+#, no-wrap
+msgid "2.2-CURRENT before 2.1"
+msgstr "2.2-CURRENT до 2.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7593
+#, no-wrap
+msgid "199511"
+msgstr "199511"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7594
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/12189[12189]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/12189[12189]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7595
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7600
+#, no-wrap
+msgid "November 10, 1995"
+msgstr "10 ноября 1995"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7597
+#, no-wrap
+msgid "2.1.0-RELEASE"
+msgstr "2.1.0-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7598
+#, no-wrap
+msgid "199512"
+msgstr "199512"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7599
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/12196[12196]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/12196[12196]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7602
+#, no-wrap
+msgid "2.2-CURRENT before 2.1.5"
+msgstr "2.2-CURRENT до 2.1.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7603
+#, no-wrap
+msgid "199607"
+msgstr "199607"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7604
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/17067[17067]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/17067[17067]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7605
+#, no-wrap
+msgid "July 10, 1996"
+msgstr "10 июля 1996"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7607
+#, no-wrap
+msgid "2.1.5-RELEASE"
+msgstr "2.1.5-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7608
+#, no-wrap
+msgid "199608"
+msgstr "199608"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7609
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/17127[17127]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/17127[17127]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7610
+#, no-wrap
+msgid "July 12, 1996"
+msgstr "12 июля 1996"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7612
+#, no-wrap
+msgid "2.2-CURRENT before 2.1.6"
+msgstr "2.2-CURRENT до 2.1.6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7613
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7618
+#, no-wrap
+msgid "199612"
+msgstr "199612"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7614
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/19358[19358]"
+msgstr "link:https://svnweb.freebsd.org/changeset/base/19358[19358]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7615
+#, no-wrap
+msgid "November 15, 1996"
+msgstr "15 ноября 1996"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7617
+#, no-wrap
+msgid "2.1.6-RELEASE"
+msgstr "2.1.6-RELEASE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7621
+#, no-wrap
+msgid "2.1.7-RELEASE"
+msgstr "2.1.7-RELEASE"
+
+#, no-wrap
+#~ msgid ""
+#~ "February 25, 2015\n"
+#~ "pass:[<!-- vale Vale.Terms = NO -->]"
+#~ msgstr ""
+#~ "25 февраля 2015 года\n"
+#~ "pass:[<!-- vale Vale.Terms = NO -->]"
diff --git a/documentation/static/pgpkeys/adamw.key b/documentation/static/pgpkeys/adamw.key
index 8d409c2391..c0f4a1846d 100644
--- a/documentation/static/pgpkeys/adamw.key
+++ b/documentation/static/pgpkeys/adamw.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa4096/19A77C98A0E497E9 2020-09-25 [SC] [expires: 2025-09-24]
+pub rsa4096/19A77C98A0E497E9 2020-09-25 [SC] [expires: 2030-01-01]
Key fingerprint = CBEB 2760 3DA3 3D18 52D7 B662 19A7 7C98 A0E4 97E9
uid Adam Weinberger <adamw@FreeBSD.org>
uid Adam Weinberger <adamw@adamw.org>
-sub rsa4096/723BD32C244BC85E 2020-09-25 [E] [expires: 2025-09-24]
+sub rsa4096/723BD32C244BC85E 2020-09-25 [E] [expires: 2030-01-01]
....
@@ -25,33 +25,33 @@ B6X/TnfzhBxScew2aqlFcW9NDgz9WmdontxHhDm+XgqmloJM6JXen+gUZ20HbilR
VALWiEclYY4l2pKTVVcwXxzhlz/6MeXFO2a9tcI6L9MnoEF47nX4dgWIiNrncXlE
qobd5elF0D+mTgZKdemY0Gkvv9rG7NXKxZGkLWQwZm8IuEPav4zRVnrg2565RR66
EmjUjTKH4BW9puVCAixkmvyMvLd49eOFbCgfQDYOhk8y7cUG4ogApG+wSQARAQAB
-tCFBZGFtIFdlaW5iZXJnZXIgPGFkYW13QGFkYW13Lm9yZz6JAlQEEwEKAD4WIQTL
-6ydgPaM9GFLXtmIZp3yYoOSX6QUCX23jCAIbAwUJCWYBgAULCQgHAwUVCgkICwUW
-AwIBAAIeAQIXgAAKCRAZp3yYoOSX6RBED/9eKRdHP1XriSE8CX9Z8r22gaZb+BUE
-VgV+tYiwS6neGBPizNiWLJgnTfi4dM4JqufITznA7akqTGbirspDoCsVSj+NbJGA
-G5jrpe/xLkG10f+TYKb0hXayBJmRxL/o8vBrA9v3SjC9Ysvp5X3vhRcSP4sW1daJ
-6DdRkk4hjbcUJ4fRbWRa5vLFLfE17Yab/ltugBAPnFCjiVygP2Y0pDD02pM/xO1M
-jKWDHajB6IQA0H7pIyemSq9zArUDJ1G0U1xKq5MYGCRCuiHHqVxMKVl0y0httEdZ
-RXDeWOfCo9OUDaBtYDkD+u0AzBDEPJP7x1GMD/13YUwxSqiebxsNZ6se2kVCaYwE
-06TktLp/7vAx5ftfVT6DRSIS93uSEV+brPbMT7ixN/rh9L+vHRjFdKMm6fZpceVu
-G3/NY/AzqBpwGrxKflddlSijaj+PzeT9izWNLb25RQO3egJUwlI5mi7q+mTUBmNd
-64GgmekTOWLr1EOheZEOOYM4pCUnCX9mFOsi5ZLqc7kfqRxpWsNE9KvG56IsADFQ
-XPJn4dByBmKJH4L5ybj4DgyfokjhpfEi+/STjNwbdbG+kpGYt2q00l5mvXhTK93q
-TTzSWzBF0+NbDicy/o8xqAgWnO/ztS29eWWEMvtip2H+jLHXdJCt2MDpskbVEhlc
-qXfYIkU2ahLZ+LQjQWRhbSBXZWluYmVyZ2VyIDxhZGFtd0BGcmVlQlNELm9yZz6J
-AlQEEwEKAD4WIQTL6ydgPaM9GFLXtmIZp3yYoOSX6QUCX23jLQIbAwUJCWYBgAUL
-CQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRAZp3yYoOSX6TRCD/9ZdBCCfc+TIFpt
-5MGEkOyU/WtdBGLeANCQXmcQ7spZtBHDajZ5vkEe1ANgJyeVwO7Vj+CC8UWrSAsF
-zLZ9Y3Vck3FVp+I70I0oX+d0VOVPNNruyMZ/mRuCQFGOOI6wqVtnBvbgTa/Acjv5
-jtM3LOAGxSoPqrtUeAT2bXFnQT/gEQacfty12GIUu2jxtTcs9LEv/13ivoV4RvNA
-RqXSV3Iw/6k1EKoFih9wsN0IiNg8OE/dMOez54yV8Mld7t7R7FuA+8RqR1H3xUV3
-w3iz633FKbbk8OmTqN/k9uKE+gDP/TiA63Uw/NuV8c/5h9aPpXmB4aFxRt6J7oGC
-zaOrHiOnpCOVZHhmmx2Rv2wHKugYfnsrErY4JijFZJdC5wqUb5Z4lB+azSILPtz3
-zLbTFf+RMaYP1CqMjlwZDJqMJ1zJ+nUN7x6fXVCeV6H8NhxMoYHqdsEAlFRhc0jI
-5kWdfUb6dWJLlqrfbxqA1HV5JOnCYLGPrlbnDxbdE+m60CYi9tx4lVORkeMzw708
-oK5ft6NYzmcsDESMyok34ilnAKzmrv9kpPkJRHNNMBOfpFWJFL4WlNiUXb+CWSM3
-Oae6/T0o2MiAnodRJErHNsSyTnGYRmSdk5yL+iDiJ68N6XNddIZJcQpxyu5qaGac
-L71Ll8ipBRxmIN1IAhvVZDjKcyGHF7kCDQRfbeMIARAA+2a3oXz+qU80HBdVCQOY
+tCFBZGFtIFdlaW5iZXJnZXIgPGFkYW13QGFkYW13Lm9yZz6JAlQEEwEKAD4CGwMF
+CwkIBwMFFQoJCAsFFgMCAQACHgECF4AWIQTL6ydgPaM9GFLXtmIZp3yYoOSX6QUC
+aMr3+wUJEW7zcwAKCRAZp3yYoOSX6RBgEACDeiHaV8a9nHfrVOWkdsw57lSTcacc
+Uln1a0if0VQpA9HrPibX7BfYYJrajvsAuCyhR5E2dpw18+u1G+IaJkoyv63vmwTO
+aAqqXWcuPp1JeD0J7br3krxtt5gbSCwMtrO3R8I3ksHJ4tBAPKzD1IR39Tr3g3TK
+VogL8iDHVhEQZIHZADi6d8MS6DmnaygqFn4CPdrTZEgw0R1sN8/Tjl8w9HCXOUTk
+CWlcvRssJPAJtj+fyXsEs0P9kzOYTzF30Q4dRZRtW+NX1Ltf8hBcSDa8IgFQKjpx
+untC6KOJupiX1YGI1mmak1qHwkGSxkbRwcqb9LyyEevTVwv8pko8uYVWq8B+kBuY
+DbsCdvTLARletdbQESjpwgubJVbAIiXpxtoPTbs/CPVqyGnBKYIqC/fCCn82OsH7
+CAPZlpiSl/1iGqzPPVjmsY/41uG6eMgMna7xEvT/SoUPaNT6DMcul+zNhUoNlhMQ
+YPa9kIqzGDQr18msmG7f2n1XmdaiLFUrOkg+wV63CjklowWykBC/mpnWJGq4YlYG
+WwodFVWdc+rDo2dvHyZwPMZcZtw4mM4wUmgehWsID7tXQleRhlmOYEsex/JKn3PI
+2Xh8MnqaRpLSqKrEz9r+vk2oPhYGUOGs1LHuplRiWDlgxuiEzxda+l5C9tm9kH8h
+mMgd/McW8wqZSrQjQWRhbSBXZWluYmVyZ2VyIDxhZGFtd0BGcmVlQlNELm9yZz6J
+AlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AWIQTL6ydgPaM9GFLX
+tmIZp3yYoOSX6QUCaMr4AgUJEW7zcwAKCRAZp3yYoOSX6emqD/4+MZPuQOxI5ON6
+odHiga+DQ7vbDq3UPujOOczdrCg8IUIkFwZaGtbZBGw9rX1LMP603KnUu0D4pHbh
+eDdTpVov2g7of7xsI5bkYstabrbnkOLolXKXt5vDxFCX+YHjmLUzqdkAPFV5b4Ft
+1bZNEaNNEYvjWxAoOnWuy8rG721BdEvHxwH9JXPzOlEcVZwPjlbM8Yb6ii/yfOfM
+FgE99mReRp0wmzQAdBqyUUvPnwSqVg9VOqn4Bav+fKYx6AF5kZlUtq2ly7Sh9PoC
+HTesJ8rsjHu45fpasXnCUnzr2W0v2odEeTWFIHHx25wAiOXJCpdO+V70hwvg4IDV
+g3zfGxVICBJLIzTkknCDrWDp5raxmhODtkLL0oBiWii42084nFoh46EZykXNaDVk
+29IoD+fGHnJRjzOHladfA1xMCEna2otB8XgtVLGeJJyNjq52qCwQYSwdxBIBli9I
+52H+OGu3loUybs/iUlR7cCXMjtl0WaTpoxFK7TVDpNIZVvMUpYkWx3O2qJ3ZJGOx
+UAWFHJFDqRXS6YQHLptStMSBCiQn61qaabF7LxeadsP6+Kx3kPBV64ROGVTsG1Om
+/XUoNbOecpQmaNLA58Uk/wV7kZ5DWymdrQzmvsg2IT4PJES/kTOX3UFCEfUdENM8
+DBJTo4MKnaHSruhW9e1qoBmWn7Y3UbkCDQRfbeMIARAA+2a3oXz+qU80HBdVCQOY
YJ8/K6Uhc+DPB6G0tIM30eANZ3cnynOtjt91uxmOXOL6fVymfLMsc6bhMLohLxv5
4xgQO9VRHQDBCpokmrXq85y/ShJQAnpc/t/mTRJ5ih39bWOFL/J7Eho0KGRJN8Bx
rE4o9jxI1NNTdgA2IQ6/HwT1/Kdvy7GT/eBGPCNn/lUWGvRmx1GkPt7XhsJ0onDn
@@ -62,20 +62,19 @@ nwzWqpp15Iy+ZESIW4FGJYRJSDP02ekEOqxcOou9YtItKJSWLC73tZUij9k3cCQg
sn/55+r0K141mwGo5EsxuGjl1ZIw/HEr9BEZl64oUIN+5d08wyNIbC1FaJS23cwV
GzIDnS3OPBJEpIMwvVcAb2vwoYaSMlwUZGsIXl3gNIRo4Sx7T0YgnnR6nQsGdZiJ
/yZ/VLvzJ6mhMOA9Q/nt4NGAqE286nRk3UnTMU+ET8adBORoy4ou2BOZelvU45XN
-4ZH4xvRg4S6Z7Ooyf63hmrcAEQEAAYkCPAQYAQoAJhYhBMvrJ2A9oz0YUte2Yhmn
-fJig5JfpBQJfbeMIAhsMBQkJZgGAAAoJEBmnfJig5JfpqpMP/0xYDlSObB9UvwJK
-Sn4GGriQbov05hw+cJGHXwmv3Xe/VObUxgbzJe92rewU44aV7FrYTzU4gLVDDYEO
-O+mE7AtnYfBfMEYqxHVrswCNRH2RNTZmdV3+zFNTo9jw6zMdrzpokaR9M2R9+5E3
-6BdHue+pVK7g2H6nqI4fSrwyUt5bFt0ASSZTy4EZK5KTpULT8BjSsReM1bNjLxlh
-FYUSwaCzjQnvNlrf5R3Sjzs1aoLBywNh2VtWOf4LYDQos57bfn5OWntVn4QPRADL
-nw+5DwJ3iLHI+//9s7kDx81EZd0JqfwiMlqnBYvjhGYPi6619/hv6sscWPzF0Hsu
-EpVbnI2pktWLC6k4mUndRfvQ2+oj6yffXa8x5a60mkQQDkZWsAthwGPtBZ4g4t91
-zbPJIiVHoR4sfQIbumYBjT5xS/rc3B6q9aCVfZ74jTXlpiT1zfey90+pjhvEH9lU
-kuC1HkZEA/AGQUu0T3zBfULPZhoRQhaO/c9q2n8L6z9ELn+5/rvMQWi2NpnFq4Pa
-jtdP6UU6UIAkWC+jz5dF83CKSJV8C4470bxt5OtgWr698Qr9P6IrSd0UFF7Xr6wa
-NZlpo7yP3p9onhpK+Z/pPrGCtGJD/Iy0wAoykoPakO3x0gqa0UIoHu9oxfBFk8fv
-ze8y0llEOZyLqSbagQBZwxvWkXI4
-=ANeF
+4ZH4xvRg4S6Z7Ooyf63hmrcAEQEAAYkCPAQYAQoAJgIbDBYhBMvrJ2A9oz0YUte2
+YhmnfJig5JfpBQJoyvgQBQkRbvOIAAoJEBmnfJig5Jfp1e8P/RGFGNTEInf3vbRZ
+k8UBJplebndi57qKovPNodAr9XbQsXkvKH6BflY/Q2f0Mpy/FslQ+XvXlW51J7xV
+q7UiRb1eA5AeqHugn7EsLLx8uMdP6ImjmRARNfvRZNnF2vuW6hZgNskil8JDCIsl
+gulIPzSV0UC4psjfgA162jNweYk8GM4M0t21Yj88HQ247mTa2ZHQe/vEHmCTyx94
+H8670HcZHZMJdRBaL8Ca8yItVJGTkvU4N44626sTxwoeRNAB0hC+/ilDmd3EXqEJ
+QqVz3vkeZYlTrnIJkSN6lb1E9AhxsP6BQIEKzCj78Ywbacrz6OsqDg+/gze3c3LK
+e1bpNFvpt4Kolueof5kyKf1DxQzt3nBzA8NgzxwPshIxTv+qWwbuUpDgCom1uCbl
+wL48DLZyldGF5uDwp8zOVGAk2Hcbo3C2SfHCAn0v9w+6Fp/pjNw4oxrZD/pA303F
+cb0X0DQ3szJ8V+Rcml3RaSVUu7SLK2oh9iKCHIrHLavQzOadzPZ2f7Cov0Mo5V43
+34RYjzOGXMVEqK8hkrDYykEg9FJlUz46LV02awF+J+XyV0wGJaxuaIwtRR16Oj77
+701uf9sbgVL+XbCT31+KbWYfiA/QMS5VznJ1M7CsqxoRE/7uz5Gd+qXxzvUiPD19
+8c2Up7onBB0VMrwFBULEaTj0Y9mD
+=yWw7
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/andy.key b/documentation/static/pgpkeys/andy.key
new file mode 100644
index 0000000000..1353648821
--- /dev/null
+++ b/documentation/static/pgpkeys/andy.key
@@ -0,0 +1,54 @@
+// sh addkey.sh andy 9652C5730B0AD27F ;
+
+[.literal-block-margin]
+....
+pub rsa2048/9652C5730B0AD27F 2025-08-19 [SC] [expires: 2028-08-18]
+ Key fingerprint = 8F8A C6BD C89D B5B4 3BFB A944 9652 C573 0B0A D27F
+uid Andrei Zakhvatov <andrey.zakhvatov@gmail.com>
+sub rsa2048/B357C7174CB0CDA9 2025-08-19 [E] [expires: 2028-08-18]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBGikwDIBCAC+/hePvepPsZU+Gm9euSyCIBzhnAlHTXuuHmF0QO35LnSyWW17
+BESRjjV2anL8ibsgIcGEiatZ1pxS/16u4gYBMn3OOzaAJNYc+gKCRv2tdlMWZ5QR
+ZWQPDVOWsz40qxSLyUSIb0oyqHDS3wjyHW1P8DbVEuzEJIjwx/ec1F5uqzTZH6kH
+bqURHpnZWYbofopy2coOx0Y8+RWsP6oNMW0X+lE6nDvQuMbWwoQYMlRUpSbqRUI+
+09sbWOK/hs6lP930m/wxGbkRRFb2cpXgNJB7TtInZYwCgR3S4ysqBIKPZQ8OI5TC
+kB7QtnZgyzHyd3kl0mfVt0aMJW3KOjxip4kJABEBAAG0LUFuZHJlaSBaYWtodmF0
+b3YgPGFuZHJleS56YWtodmF0b3ZAZ21haWwuY29tPokBVAQTAQoAPhYhBI+Kxr3I
+nbW0O/upRJZSxXMLCtJ/BQJopMAyAhsDBQkFo5qABQsJCAcDBRUKCQgLBRYDAgEA
+Ah4FAheAAAoJEJZSxXMLCtJ/CcAH/2DwxtgtK6EeS7oFq/WX5jQwUxjHmNgk8zTo
+gDoAEPIany2/p/uoCWfwsSdoZ2pyn7Xr3z8Hs7bOLAdSu7V82LKDzfslXrxif9qw
+s1Hj7OBwlGCSV8OXZgGXzTEK4rGGIKD5ieYDIzpNmoH8c/XhrGQQocZZAv6PTyte
+OugJLUehqRH/+qPRLsIj42ZxU6npwsgUCu8BkRvYDpEUM/OlmMUiMXd7jTjg9Gyl
+T9DIkEP0/4NZSRJsFfF+rDYOkBqcxqvdWmEYmF1P2VIl4g0t3p+q9YuxBBWjhthX
+7pFwyAFx8o101poJsDJlRtYkwxbhTKurqWr7YK4pZu+aB2lShxqJAbMEEAEIAB0W
+IQSE8Pf2Ksf1iiGUy4myhh6D2lDh0wUCaMWZkQAKCRCyhh6D2lDh0439DACHEp4F
+7X8R7lZtdS497Xj5ZcrQZmYEyb2BGEK8kzTqr367d8ckd/0ag0CMH4mHpsY4hLzb
+uR9I3ExUnfYb2cN/Qj6dhprOvtGC86+QSFIjZqjSEJAuS1LOaKmmJdmc1oOIMr8s
+SUMOyL+R0H4U9QN4cG6s16urxZ0hOTRh2RaCshb5wUuXxfggnDN5LuNfQsP+ah8A
+iQHLAga6y+ozb4qrBVdr8HHytp2fZy05tRGXldfS2nnY55XE+RAK+b77se6tVxcA
+f9/J0HFIyNkqS/GmtVYmXt/5Cx6Sh9YW4j1fdEdV7QQKT78TkYJk1jsaWsVafe3P
+zWRzT5A2+0wFWMniKrFLMZfx4Vp3tNLRoZwHCeOSIQBicBl3fG3s3b81Jd6/P43/
+Nc3GB1NgBnXyJo6o/vdo2s5Dq84wuxqo4wYs2awIepK71xJ1SIMkR/duxUYNCu0H
+hTwrB7rC2BjjHtgfpfkrKofVMVHyVA3m8mOQo5rgm4OB4QDcRUaKwWR5+v65AQ0E
+aKTAMgEIALENfs2VEE0CjHnHLvBK69jB91n81vf9LfpcNwJ6rj0SF2aW318dbGaH
+lxHQIViOJiCil28SfkPAg2LAfPjItS/mCymbMaPGGYL6mpqEVpyTa7z+VrD07huc
+NBZud8Avjl5l+b6xr8BPPApzNyVtklRsO9/BZCFZkXhpqnjN1lU9iidBEtSHZ1Sl
+Bt/fnVCbOaRKOMJbljQGF4ZZBkr3fMggLzc1C8wuK6i/GahmLXf80HgwqLWzBit3
+p1W43B/rKMYdQYkKem8pL4rTktc3ICfKx8ie9jgzIJ0KF6eenzL6WhCgCl84On7W
+U+VGd0h8vOxP+RyeNQqFUtxeNwYZEEkAEQEAAYkBPAQYAQoAJhYhBI+Kxr3InbW0
+O/upRJZSxXMLCtJ/BQJopMAyAhsMBQkFo5qAAAoJEJZSxXMLCtJ/ZnkH/3tFMgqM
+ZAQOkdYqri/03Bl37WDL1qUVz/W2dkSLIgQfYJPu6XF/N1AMKa2U9jrWjRSMMiYx
+REWo/aS5n1MTCcIezDrSdG5YvhuYPX2n7Y4oim9Utf9shw24VYQgHo3hh18TYKzl
+iWlS1KqXW/lRf8T4sSLDWBCKzx57MdoHiIoa3SbrkXdaWgwWFySOaEzg05b13dmI
+mr596ZxUpwHogqphm8l63BkPW7vcXcipuQqIZFj4vThJA9JgF6uV5iSWVOSrm+BM
+DieWcPW8EK0GYBPT5JkDH1c0sl0JYiMPn/VSMxAZxA8Bx5l+cFWrezy4A+OlZQd2
+B8frfhN7BR8M4/8=
+=g/XK
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/imp.key b/documentation/static/pgpkeys/imp.key
index 0f83721ace..53e6f4ac87 100644
--- a/documentation/static/pgpkeys/imp.key
+++ b/documentation/static/pgpkeys/imp.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/6C1CD1287DB01100 2014-04-28 [SC] [expires: 2035-07-16]
+pub rsa4096/6C1CD1287DB01100 2014-04-28 [SC] [expires: 2036-09-22]
Key fingerprint = 2035 F894 B00A A3CF 7CCD E1B7 6C1C D128 7DB0 1100
uid Warner Losh <wlosh@netflix.com>
uid Warner Losh <wlosh@bsdimp.com>
uid Warner Losh <imp@village.org>
uid Warner Losh <imp@freebsd.org>
uid Warner Losh <imp@bsdimp.com>
-sub rsa4096/D17B99703EC6E9C0 2014-04-28 [E] [expires: 2035-07-16]
+sub rsa4096/D17B99703EC6E9C0 2014-04-28 [E] [expires: 2036-09-22]
....
@@ -31,18 +31,18 @@ UPf4bJZMmZEOG8r9DGzaPinByb3OXqzSuEftfMel9JEuy0iiwhuEMidALugctnVQ
CN//Qvu5zS3UrcTw7A4P29Q84SNv+7DJDjY8De4J0inRXA7Zc4EUK9Tu7QARAQAB
tB9XYXJuZXIgTG9zaCA8d2xvc2hAbmV0ZmxpeC5jb20+iQJXBBMBCgBBAhsDBQsJ
CAcDBRUKCQgLBRYCAwEAAh4BAheAAhkBFiEEIDX4lLAKo898zeG3bBzRKH2wEQAF
-Amh6lOkFCSfnzPoACgkQbBzRKH2wEQBkNQ/7B7gKUO0ul8dZsGRKVmuW7iEAmxrp
-NmiL7jlRRhH0/ziiX2jzYbJP7m2HQkTFxpPNMH+JAlyf2FFwATeHQsQAIu+zSWfL
-iSoqMF2FK61QHagF5tKkoma4H8sRpLhqdgY+5WNIqXNkmYeeTNxTugtMKkh4DYkH
-lYoSp6iBdsufGUCDbrhyJ7a7nr891iWCL36+IQzUFH9D6J3lG/ON2jbQ8xinnVR7
-wXL2ahtgHdTtk+qxR1LEfJhw/TTfLm4nQMU7oy3XFO9+15o6f5qGRLOrx4N29nDI
-Xo2u6c7Raeo9y0Xw0T65R1+vAQYD7LhumCWKnu/NV6aLNnLUQUSoub1u0ppPk+N7
-hVUtUJmvsONGJ/tf6gAqLLExcpzQKSCB1gVC/uMeqx1aBiu+BQ0pCKn7vYSZkq7Z
-rniFxj8o5hW3bsohtWKuZXICU1jpHkwGzqHDWMf8a2jh+ltj7rYpXLZU/5JBvvS+
-SAmZI1JQvF8VIaPcXqzEbiPUBkBTlUAlk0gOYGqWMKvsbZnXtxdiU+zT8lZPxHqs
-u/8TNj4htyqR3WxkltjnfYdjCqm3uTPODGbvcW2rmus7ulRTRsgynZsSVTZ6TYwP
-D4jpH5QHpO734SWPQM99bHMToSQEri848YuWaHfkfJd5Nnm8E8uOiRYA9RNB6hPo
-pEvSQsB1C2aGsvOJAhwEEAECAAYFAlN3m4EACgkQkshDRW2mpm4Yog//cowY3apF
+AmjVhQAFCSoj8JEACgkQbBzRKH2wEQBo5BAA7Wz8vem6V08oiSvnZRlXXfNlMDnT
+V0w88eX8qy7eyu3AJseEzWMNlEIqBhWzLFRVCKod2nqK4MkPG00YcoVopRQGjU6y
+jP6MA7r7l5wKn4t2D5Wpuge14Q3DXJvJaA18Auee3A82063b+VYfR0MUKJ2PBbG1
+piS3gjIFv5rltwRiBTvtOeKUvzQdPIL8BZCXiD7jhWw7pudNClizpUhttsDXuHtZ
+eKco2Y9FY0JYgRQhnvW3v3CwepvWu6VmOO+fo+C+628mRUgoXH+wLCPo4zz6B1Eu
+c4L3h3pcuI5Z9UgNiZXt26QPDMHWIKORvBUEOOPec7xwnps3A4A4cZnDiDVcpE8K
+jYivFV05PvmqEwQIgNh49z+BKgSFUCzfiiYow6PXISWR1hmSzNgaFMRRKzbS1kZO
+CGUvpnQMV8wP5BB8s2q4DbWjdeC6b03gzTJ4chQucoikvv+N8+mTQRM6zWrTxGUl
+b5hB1/f0Nbct2Zt0sC6a/6UXOTWHj/Cdk+GrhsrHd7h2QalVJLdB6G02v+hANWkd
+sIo3t1eMDp9E+eqVPOf+UWpqWnuFtQM0tylRdM/x3tYAM0VB5waJswvpKREYjjj2
+m77q8K9sVAh7BHvrY/zSKSRTJh8+eNlSR6cLxsRlgUU4n48ooDpN+AGC+yCQMVmu
+ewBojgEtGEcs286JAhwEEAECAAYFAlN3m4EACgkQkshDRW2mpm4Yog//cowY3apF
+Zsof1s7oEkI9wr9Ks4edXWk1q60rSvt8GNQbSs38NuaXnwfeg14+A3uSOm4hQjY
gvfzg8eQX39oH8evXWt8l1qmCxi4HwtbkLXtuf21uIF1BX1dLgYNONvN39QO6bQZ
k7oSpGCpZqQSwueOQuNGsZpHZjOnOsNwxyvjY/QtYV/tSU358avRNdmneQ4PQ0vY
@@ -78,32 +78,32 @@ QM3B2oa7fr1P8zLBxdVdAHMngyDqZi9iFyaz2k3R0f4jS08KHWZ3MLZIXCzZp4PH
wxjlLSzNpdFP0AQ/mapUAiAIZ7JKV+IDbK3wEW+Twew54NHgfis6UOxVl54PD7iw
Lu4oVu24oQYCr6793SGkbQkeW2dzXy6Y0u3+miw31w3VcLwhBnp7woO0Hldhcm5l
ciBMb3NoIDx3bG9zaEBic2RpbXAuY29tPokCVAQTAQoAPgIbAwULCQgHAwUVCgkI
-CwUWAgMBAAIeAQIXgBYhBCA1+JSwCqPPfM3ht2wc0Sh9sBEABQJoepTpBQkn58z6
-AAoJEGwc0Sh9sBEAJyEP/35O9XyRAW9etcNNClLACZI3LHvdaUX2OekdDYTqWaFg
-wfNi41/1bAVIyNncPbaozWnV+kqkUNzMlks43pAsnmVxkHPCDPGCcgvq02A7rj5y
-YGZvD5HlVX+xo3Ojxl4klRDxfl9CSOkOG9IXCFBJgGCkoxh6ps3sz9F2WWRVimKT
-MD2u6f7ptkpHMOK4uCfsgIbWR2EEeBfi7kh2HnFt9Pun9OLu5ErgzCDm3ksKNug+
-CskH0foPKhUy7OpaZuDex8twy0QjQLFJ39EnB82WuwThoBt7qgZt3tjLeAFpRG4g
-1pARBvWPJlfRz6wpNpS+k59eGk6iORxs1G48ZKr1wZxnDkvUJYJxMr4PoUqqH9mb
-sMBhYMuKwEEEPpa8jcmOVwUGD48Tyqs3qRk5IR1GH/tLt/3EnZeb3pnWEpY1htyq
-mNGxgmiJe/8eZvgSc8/Vi2RKrZpfIIbiBDfkZfFFANpZaNAThygB4GGdhLIqLwDl
-c9qijB2t6kGTKwtaEz8WYOyvwh5ia9DIJ9JQJhfHhqcX4AekquhgwR+OTxu4RnWr
-uX5rz2aYbTbOucW9b+qregZ/wmxjVx4kUdkZ7tyT6D8ksJF+U8OjpbcPg6iwLejk
-YCF98AXL2OW7wTUtAGoxLk541yjO/YQA8+UJIuPFFWyJOBKKDuxZwjYigDupmmrY
+CwUWAgMBAAIeAQIXgBYhBCA1+JSwCqPPfM3ht2wc0Sh9sBEABQJo1YUBBQkqI/CR
+AAoJEGwc0Sh9sBEA8SMQAOqKi86FdBjiB5m5IpU5JOfThX+qqqa8/1dnxxsmTPXr
+TRNT7b1+Nhba07w1fJFQBBQb3qvvjRPD+ksLteB4HUr7ddeZqiN2o4TM6E8NWW6g
+lpb2vxjz2TDoQ6dtBxDuUSM5+4BMm+ifFrcnXFX5tYTPi2nLusdMuIuYoO3EfVm0
+oDZW3M+ARmd1gH//2+4abOeTYml+vEow+ANg0xkpoE9FWwWqjCqUyv/dk07qOyuA
+vVVa4a77qbSAd+axZAMVLgXWUUP660NcWhZ9qFFPl+TySe7aArM6QXPa4KQciI0A
+bW3v0qwen9frwehgTA+ehksTJu+ZjCwEbGlHZXWDUUOXy0zANnf76xD0QkRdWUib
+VgPFiDC345U0H4FZr/T6J7tmM6TIUKOzyKu/tVx34O0OWTa1Sg0vg+0l5T9oCq81
+MBlJrETHVFmiYcDPes2kl65BJ9poTnxi7cHB+lBdWWEHZcZSGyuYWnHYjcIFtXHy
+S1WkGNf0KYtdptSYsfSbmkwANPZ8EhcDMtFfK7MCfRhxTFo73bkqNHth0swaX0Xh
+DdC6qoqbhrQmdY2gPhwUSdldC+V5r+eT4QO5AUeLafCt/Jvic5/ARTButGdvRYi4
+JnAfMZxukwKOabJRdMgZ+6pU/7hvJsonz0apFEMQuOYFRMwr5fRfI1QqjDUtJRFN
tB1XYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokCVAQTAQoAPgIbAwULCQgH
-AwUVCgkICwUWAgMBAAIeAQIXgBYhBCA1+JSwCqPPfM3ht2wc0Sh9sBEABQJoepTp
-BQkn58z6AAoJEGwc0Sh9sBEAYu8P/jyLw3nZ1TImTAnGN2xfWgQlZTSuULq3ugzs
-QB8Ozhan2jImTz2g464IZ45c04JsGIbAAExiIYHahS1BN1/2T8IyU3DP8/O8kGQz
-Sdo4SgFOX5ybe5f4yfnAxbVGzY5XoTxXRKYF0TfbhgAP1H00W8Pt8qEUH/hKVcQM
-XEKmg3I3kLYMPcs0mOQjrwweI80mSENn+f50JY/lfuqkC2P1Khjv151NJBmpYfLR
-aiqEOWQfzvtFZQxunE/JK/RUeCnM9nSILBoLG8sPfdes0ePw3eYcr1MQ0NqJVD+R
-tAGT1jjFjIBZ2lDDgpaAUme/13CF+5Iz10VyqxqWHxJizcaohGRtOJn2GbDt9bFn
-0ahGUrxoOBu6AVUF8/kLF1hB0XPkDrANMLUUBWAYOnbx9H6B9pR+vqxNvLAi1CP2
-tgisA/Sf6QGk57nLLgYd+2bfPw7osVd+4XXegaA5JGgGaKsqUZB3kdIFx68pt0Vi
-OZGmNzr8q6RiJF2mYHjF72WqqXYjm01Avu745H4nqtpLKy8b+8Ow9z/nRc4IAhC5
-M+mpx0zTbVZ74mPJ99nfCrXmX3Zza4/9ZxmV8YhWgcqyc0Gc251TCey1qg+8FXke
-mnJird7II6LJbLIWfJhuFIFYg8ctkMWvG4JlmIB04B4MNcub3QnKcHDnkaL39GkT
-ZVqOBQ4riQJFBBABCgAvBQJTd5cIKBpodHRwczovL3BhZXBzLmN4L3BncC9zaWdu
+AwUVCgkICwUWAgMBAAIeAQIXgBYhBCA1+JSwCqPPfM3ht2wc0Sh9sBEABQJo1YUB
+BQkqI/CRAAoJEGwc0Sh9sBEA7wAP/3R/Lti9N4DZ4CkfvlaW+d66ZAnAcVDS+dyH
+TCpF+pxflYUcxXh7oKm35pGwCYtlJ8a0R0gXRQ3+4HLYAp2QAH+3ULcQoCGBSJwq
+crAw55mxjk0A+/BCwPQeS8mJfmmtkRbpIwvBtia4cJLu/XK2+yuxsk3BYYxwoTkX
+hJ2Pio86WDQ3SQarhpJ8ABs4mr2q1XNEntujRusRNoS1rxmBKiG3M4fZYLjHsGAM
+Y9Z1KeV4ymNzXp0jSjlpvVZ8Sr1ZR6NUy+4KN496+/huR5TbLZFn37nkp5zyHcJ2
+n86eAwQp2HJVQxqAPXygo61pd0ggbGPIFHaZ+M864U6j9ZM1wb+BQhg1fsJ5D0yF
+Q+V3koSdAP38BbgM/CCINjdpKMeT4c7YBlNlpySpWDCExlpbvZj19trg2kn8xdSc
+YJNQZJKoVMK6x8KfUrWlh06tIl+XLbRQ/6tlN+HwR7skCOutlm8tDSVZ3X4rRGWc
+uJ54dO1cZ7LzdpUVDEwWsCufaJBybw9SnZIi6+5uwrDix2zRanUyUHguh17SJ9kA
+swrdNxv1WsUObzmxgUkUTnFO6jo+E06PQSV6Fd0pc93MpPDq+zRju8iWAl0yFH/M
+4LMrVk6qRZxc2pRwRt0c8DzGjKpIRLS1ufIIkZpd3ETNuWJUAKhwfK2dIbPVOMAP
+Hft9tARGiQJFBBABCgAvBQJTd5cIKBpodHRwczovL3BhZXBzLmN4L3BncC9zaWdu
aW5nLXBvbGljeS5hc2MACgkQu14sRioPqLDqJQ//RkHwUbfr8tRCjSO9AcuJ8Q7j
bM2ok2KpifpNRotLzX2sL+5cQDfAHRsT2DmQLUlvprJkDqcMG4QXSQpWxY9L9bdP
psqTYQyGoL/U/EQWOIf9grtVILhsKn9Az+KMQarDy4zR7hvihjbTrYAVeuH5eHl/
@@ -139,19 +139,19 @@ vAx/NudQ0hiFhvRBFihHKyxOC9fuNIyTx0+g1W00JaPvHlIEyh9ZlVCC3aqYJhzR
3pdZwz7JQNRlbi2bwinbNJ+sob6CypApw/4OfpVoXnm/akLKLnxfpxue8TFLBmL4
kw6gRe1lMFuwgO2K03+1i5ludRZahQg+HWegpNEEvSrvm5NQhW1Ft4a2sdW0HVdh
cm5lciBMb3NoIDxpbXBAZnJlZWJzZC5vcmc+iQJUBBMBCgA+AhsDBQsJCAcDBRUK
-CQgLBRYCAwEAAh4BAheAFiEEIDX4lLAKo898zeG3bBzRKH2wEQAFAmh6lOkFCSfn
-zPoACgkQbBzRKH2wEQBSbg/9HzDtXpjBCXSIEzAmlH5jVehK3Omjv4RknwYArKEj
-1scWiVFRFgSVlKQ0hWXLdqrFJYR/19poPRik97XcT9XGioh1Tt5q6UfxGihKDthX
-Fsw6F54+rpz+8y9QoI2wtCwWOcmWQ2jHG/MFIfZWfF1fFTU77cA65/lBW36KhY/O
-btinl7NK1hf5ynUQfA5RwhC2hYi+XcKmYRscfS5ewFL2XbNGmU+g1onTf7y/7anL
-41QZmdX+DmRoFwl3bCHWmi4SushY4BX3FanjMmzmq3lVB9hisfEfEtGuu5xhMEGK
-H+aBOfa3xGDU5mevdc84vM18TOlT84v1Psx5KICwqg1QJZ8uoamVnY30ziu90fL6
-uwGRl+pVBHNrh/3a6/gNyHxEVP7caRMzjVpj+tNvrC2rb/Cn1s/c1ZWsO+psb1en
-Cn6H7H2H8XjnCVJsKjkc3c2K+QOncQhY0K94DJlohWA2V5g26gH+LBf5dskds+Zj
-O1vP/B7+nSJQSeem1O8zLunJ0tr3vYiuzFtOi33Z3LWGPictjD9/OzuA9PM8xsGz
-nrrcWeNyxZ9pJ+32yA72Ch3zvvsrSzilydfl89j+p3xURx14Kup+yjerIKpWi/IS
-yTDr++MrwfgBEYDBYFN82bA2VPAEA3ylGTIjBYCkbPleeYYeR+jdXQFenpVa+DA9
-z2uJAhwEEAECAAYFAlN3m4EACgkQkshDRW2mpm5jBQ/9GZKDG4HlbXCZ4hlQuVRK
+CQgLBRYCAwEAAh4BAheAFiEEIDX4lLAKo898zeG3bBzRKH2wEQAFAmjVhQEFCSoj
+8JEACgkQbBzRKH2wEQA0BhAAlNPOfPHMiTH7rZuVBRvl06cIloJ2pEfa1Wc3s7Qg
+52NA4bBu8HAW2e+5aqGDjuEkZblF0MnFVIagvZCEeJtWssIOVLpw7iGsVYzN34Pw
+ANcbK+Sgd90AQTcZJ55Y/26smaIVUgwwvMO7z6l7bJUpLTXK8i2uqnjWUPEHSiI/
+LVOVJ15Pk1/VsiXYvc2PwWb/P7iaUKMvpO7+zoRS3oXqDY0R2lnoRbjfpCWyzjWs
+w8JWzObW2IC9r15etTK6PMXAW9e6qt6qQUUknBWQ9xfs7+RN4r/5Ad5WuxWiPf4p
+z/fBCseBveyaz2w+4c7sB/yaXk/1A0dPXTMiRhvOcqC3lR2jWnoTppItiLKpU0jY
+8fBfOzuPxNxMvy+E7JZIEV3QqNTCupY6UOCE0YTB7DDIuxysOya73F7u34FviOeE
+1rqAxKbC8gmW6Hnr9zHmng666eI4CC3ICV6R5VI8YKZ+zogVsZqVqh70dRi/tjHI
+NKxqDHhQOx0tPk2Jn0eY9mvVnHcmCE7TSxDV6u7DwPZ14PZGuwu5HzSBdPNxNE6l
+2yG0BBE91YM/LQ0Z3YQxtcveizk6+THLHllhPtwVYvsSw72AGZFk6Sd+RR8T3Xup
+9j70LG0EmSKhf7oA7zKf9X87SvaFT0obJ/T+dng8rY7Q73ZVzg/iIZHkf8+sucwW
+XWiJAhwEEAECAAYFAlN3m4EACgkQkshDRW2mpm5jBQ/9GZKDG4HlbXCZ4hlQuVRK
B3y6FRfubUUgnYoeSrtggRe2q6wRSR2EYWSLG6aCeBZVfbHRhe+W+UHHx+YN5E0+
O3/OUcsJthBF6d3i5hHrXu4nl/pN+yULAL9KT8Iw7esyD725J4L2Comsc+ee2zf/
QLJj8n+IQyyUENcH/0+Yer7KO8oW2J/HBRQIHe71krZKTH2kNQobNvXYG/kMbhp7
@@ -175,18 +175,18 @@ PbMpHJD46j6d/GwK1FCZ5FhU+4cn6PPhLLWRLY4gR2zFZdHgx7aohOm5FVKWgx1+
ZGSboIlSCERawWXwFDzgMwJgg7mjJZN7rADIncg5eJkvxg2SQVnDQKWF4WIFWAhN
4z3Xg2xx/Aq8NSPazqF3JUG1ZEq8VIHcMVdnYsDT6Xu0HFdhcm5lciBMb3NoIDxp
bXBAYnNkaW1wLmNvbT6JAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsFFgIDAQACHgEC
-F4AWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaHqU6QUJJ+fM+gAKCRBsHNEofbAR
-ANHUD/9oOjJyYVVadoj+Qgt+plucEX+z1s/DDVa+jVtP3bZGIp2+XxUODYKfeO+6
-+MTTTgfNKEvLY2ysXqScesrqDfaJUEC/umqLuziUqKOwv0ltzlWSomPPxdgpa7Gn
-JnIMjEiI5oiIx1JQ0AZFhyc9RiDpJoG954FuE1Bixz7z5HVR+5q+pIr3302iIJKW
-MO2ZfxfFvbw2MFmPhZ1KUuXEVA/8gJzvwInJHpV5jOzQjoO6ljKWwBsgOX4p77tJ
-y2itUl5CwidJwu912JR/0nBgLHrTIwEWnQ5bDaUjoQLb5RryWA2Prcbi3EQTaq5t
-LRB7mDcZCgtUH9Vbu06DLqoHyouUksqcGOFzD+uS/xQ4P6fThoJAhvZ+2+gZpRkO
-5LjaMGSU63yeP2KBdvVIW0dBRHfUHog+RdHMISUMd/s3JapSOsO9SePlW3AQQcq/
-+9I6umPl/f6Pa1tqKEBmq6k7X1n69aBnNLjYfKkGkZRkxoO4QZyvDWOdRO2YZwQN
-hMy28dXxe8ok1gXVRgqojY+6E7pDPRMj3HsjSHHF9ASg6kN+j21SQSDowXJ5xIjA
-QnPVhD26cdIa4kpV89s69S8HJoO0xRWtWOn7SbJTYjF3v8KedjclXe6a1zDzQn/K
-7NCjav/puRA0lnLTU7+PK+pLDNnStDEeFVXoEsJ2sAHQkUJsZokCRQQQAQoALwUC
+F4AWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaNWFAQUJKiPwkQAKCRBsHNEofbAR
+AOeJEAC0I6xxLRGqJX6zH2WwD/xO1XSeP2pS3jaYc1jVvBiXGMOGMBUzIr1nLF3r
+2pwijfmcaYzueBgWQwOVUsUZ4z+oqpbu1HYc6qzoWkPzVGEZuRrOz9sAT8MECaFK
+HmgBPHGi5Fq3KXchlCQlnU0S2qAqbTe/T4cmDv0D0LDRZ/2btG5r2RNl40vzfYsM
+9BIZeGTzgq86YPW7iRMD1c6zNKkpVbbXyy4jkdwhL0yFGRW+6QQDOeXxSV4DYafZ
+ibXV04pdunuYhsxKP4HXr9fagRkMDnoLA2tF4TmaBP+jrXu6DaCDL4lbBBcq7OQo
+J7ISWM40kLJbxbBH/AK3K9w4PEu3D4KQEa2Bp0HI5NFjPkdDwJj9PUJ89a9jm5eO
+C8hHVWV+870G7E7Hm+8oTnAuiYFAN2b/DGcNN89JVAhhYrAzePYGog/jM1cMQkDa
+I3AtxiGqXNFqgcI7NfY1ShgEBzl/RfmzhYjt0lc8oh2zyGuwDBDFCfaoWwXJWOiT
+nDMtqs6uuKpAsM7/ZSlJvtPJp5YvO3dUHcj8/mBGnikSJj9jeDAmngM8Lifu4Pn8
+pWeCGaZLKmatCZv52EmpCk3oMMGEDnv15POsejBbH+VEccgMxo3ZFHpPNd/7b2ZS
+xtarERg1o0W5L8lLAcbEeQdonHlEEWbOZ/fAN2nxDX8kskPvd4kCRQQQAQoALwUC
U3eXCCgaaHR0cHM6Ly9wYWVwcy5jeC9wZ3Avc2lnbmluZy1wb2xpY3kuYXNjAAoJ
ELteLEYqD6iwDvkP+wSNpmkqynr5FeI8LmO/d65J4Ka61otK54VYrtjlgU2v43bc
0sU6tDuoZ7fWUrXd6Bp19n2dbBRMGNLSw2XE7JpxNSRVrL66agFyPMsUexlF/Zxu
@@ -233,18 +233,18 @@ KTMOd0u6pZnFRp03D7RNDP08crtRvSjgEfIYbdoFuAb7cLYJw8SzmynE2MEAwXU3
kSrWzn4/sjBVdJgw3oZFufba80zkpy7TsG24mNMvuR7loKmd4cKB6VhhUQsGCcM3
1lAd5UjhlT2as9KyS2oZU2kxh8e1TPHTYB21edimK1afu3JxMpqoufFmxISaaonY
cGNircT/NY9gmlsO3WSx4vtegNa6twARAQABiQI8BBgBCgAmAhsMFiEEIDX4lLAK
-o898zeG3bBzRKH2wEQAFAmh6lPMFCSfnzQQACgkQbBzRKH2wEQBOHw/+JYhEpg+G
-bNwYN4J9UQQqmHgqe5qRIh4FRFyk3c9elnfO0i7X/FiooG36rNkdRki5OHwYarPN
-SttsP8YUTDxh1AAVorJUZVnqNvaNI+Aq3JhA+p4SBBFkPI/+WX2SF7kk+dtS9CRq
-ecVjn2TNlD0guHFoJB9baZBqARv0I/im99Ksu5oqkO3OKui+0jEpSD3pA/oJoy7I
-82kIWcLbgNKYoYPvlLlud64dwFArAKuHKI3sTAe5v9w/kKamWgmNpfy8C6YKOKSf
-Dl7OD7wAPamOMBB0VmR2BUmVoUBJQyyefwr9kWSKAENCeonAY5bvbkdsVbiTnIwK
-He6+8A1LwcmhpnKevA/9M3+1vT8mSf5OWjSv++AFRL9CyvZJokj1G4XtTpJLV7P6
-AHZs0wVDGWsp2pKSfwTzTPenZHBQ9aGWJrlPAlqie51ak01Ku18HryPszY1u/RDT
-niRdWgdOp921Kj23FYfOVmsFJw3yvjJKmPnPpAuJMFyENB5diTf06SPXGL81mLPC
-fqw0M4yVFRXonmQ4d44tL9YgK/A4IEeM5KSRlOD4HEI+3ENEHLXRwkUTG9BZ5wtm
-fIH0zMOIm8ndAuwI2zDs+MTGvlKt6oGcqBLI2HRdbpN0MUgqqlud41gG1pgq9XJr
-j8l3IsiareWqAfH9XRJkWQ8R/U9gZx6k9AQ=
-=c7Mn
+o898zeG3bBzRKH2wEQAFAmjVhYcFCSoj8RgACgkQbBzRKH2wEQAVtQ/+ObB2nnSp
+Ks32xs28Y6jjCLUdBQBvxE60CDMj3Z6RdNo813FmAuBu822CucG+BGxlcZ2NrpxV
+xxfO7zT9MbZ4XjS+EinYZPiO0CAR5rQhc4rXV7dWytSEGd9IB2Ukc+x4DVzz9Cr6
+TlQX7YKyIXiKqwqz2hiFl8TlG5w6VjaaX1rStot89Yf5/jKzosYaazmmdBsywbj3
+8McI+fbeuDf4OR2kQwMPIm8deScHpSfACmG8uXbkCtdEpqNeGY5ANUZou8RrrcHo
+zSTE1v/T1ifynVEWHIh9wyzAAUumPdnI6/6ghxVh5xith2O2yiBnRmYHR48R0QB1
++D0HqIVix9PA3L8vYOCosXVmlBOnnWJFsk5v2/mDDyUS0UcDObahBAd87O9RiHvl
+5NZUsCSVwkUkNJrOy2KLYaSdsD7wPm38oCVFCz6Krg7UPSVx1wbCCvAUJlZh2OOw
+2j+DxZ8xlTkDT9J3bxhlS93Fcn7zLOh15haQMG21dZXOwXGV+RbeWMnu006jhNL6
+niwGg4FIB2ABOvvyFAu3sggwOez2x6sGEG3+qgink3nV8yk3xC2sTY7ahHATzgxc
+K9E1DuLmeeWJEKfnzPZKlYIShhf//1Unj640qYa5vZXylzj4Frdyb+YQYfuz1b0t
+r1dxrrawn0NnAZbGC7inU9kQ5ya8lqYefV4=
+=BiIW
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/jaeyoon.key b/documentation/static/pgpkeys/jaeyoon.key
new file mode 100644
index 0000000000..12fbb22da2
--- /dev/null
+++ b/documentation/static/pgpkeys/jaeyoon.key
@@ -0,0 +1,44 @@
+// sh addkey.sh jaeyoon D82DDC7745B0B7DF ;
+
+[.literal-block-margin]
+....
+pub rsa2048/D82DDC7745B0B7DF 2025-09-12 [SC] [expires: 2028-09-11]
+ Key fingerprint = 8093 4E1C DF25 E200 3474 1F0B D82D DC77 45B0 B7DF
+uid Jaeyoon Choi <jaeyoon@FreeBSD.org>
+sub rsa2048/C4A65E2D6E48C385 2025-09-12 [E] [expires: 2028-09-11]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBGjEQNMBCAC0BZ7hfzmSa5mbiq4VQDt6TRCfHpI/zivWebzLecNqNFbAzDYA
+Q7cg9l951irhFkZ61oEUp13NFhdcbn/AxleNiNiGDcX4sXWoTHblZfDlZJxLMvye
+Qf9MOthXDjE4v5lF3kS8hLl/LRQdUzgKZrOB0wbE/nsqLoje8H8cwhAY2BSwAVaP
+xDn0NP8DLTEjbBQK+V1tcKAWPyueKodqmudAtQH5giYswRrM2cUd2eqa/PP/Oe1K
+8JYx9SGL8xsN0bfJqedWlpqdL5WkgN/NdIjR8HlcFhRwg/QGXU68QmGuj6RJ32LY
+QbW2CIXw5scVOPy5I0ya2i9+3B7z2wDAPawpABEBAAG0IkphZXlvb24gQ2hvaSA8
+amFleW9vbkBGcmVlQlNELm9yZz6JAVcEEwEIAEEWIQSAk04c3yXiADR0HwvYLdx3
+RbC33wUCaMRA0wIbAwUJBaOagAgLCQ0IDAcLAwUVCgkICwUWAwIBAAIeBQIXgAAK
+CRDYLdx3RbC33xk8CACbhY4M7bogTtmb9cyiyV57/eFMaAP4KJjD3KeCymrfwqgQ
+g0NlHnBENFoWSDgbyaFE5lP7NqqTpmiXRn7qcXBuYwkxNwRc68m70FEeObklr1b9
+Iztna0e4Tc/1RXE1RF2sIL0I4KeIhH2wvnzYGBEtNtEXZ5ZZBoVkCXhbscTk8SSN
+qvAPtEHMzKEMJK/pNJYVHuXWiGqqw+2Lad2XFJ+Cnzx+/EuBYqOMr8ehMsLz/yz+
+88C0WjD26JnTMyWW+5KrOpLykn9uN1btWXE3E6bsIOBrWtwUxesgbUQaYg/r3P0O
+jBrUqI4nCoA9x4ZffbQwaJJmATbL5PVSs9c6DpR2uQENBGjEQNMBCAC9T2l6dqXw
+IL48/omMfNoWsEqg8LNiz2M3XhzlQeimsr+nA9mFHJR6QJHQPjaK8i05y/hj8dF2
+f+L7KfCQWGFnQHVEMgscj+QnQu7dBjrJN3A0SRdLbSWjkfntAakFCA75fIdUih+y
+XaOdm9M9pNG78fAizr+pKJqmDr/x0pQntLdVstObzhPNLpaZ9yw68TtJRJqU+mfM
+hPxwi0mtr53bck+NTeFjvRRU2M87JYbHGk9QJ7LaqjUEXYW9eMXCIf9xLMAfqWvp
+Q5a+4WiVCkOMLnImO3rlWcjuaHtTpbYiLu9Em+Lz6iMIiPIW1f3WVtp50g0p1NuC
+vSib5x138NmjABEBAAGJATwEGAEIACYWIQSAk04c3yXiADR0HwvYLdx3RbC33wUC
+aMRA0wIbDAUJBaOagAAKCRDYLdx3RbC33zlOB/9/wCENZSI6nZOHNtfT/JJbVBrG
+5xTr0JJ0E97SUXcxIyxuHKwBQeJqTTmiuGXUFob2cFd5+tq3LRx1Y3OwiL3mkSAG
+ScISo1fLQh6PmdyG7mCMhtQXC/Yyp86QDy2S8h42F0I632yHkpAKMsAuGRtqLScc
+lyFohw+M5AX2EHY/CxODjTAKv8dK36wOfZjBSI/l6ZiPvoHmNzj2X4efsuBkUc9y
+8z2cm5+YoD9dDsL3yvGEHR0I9mnXSUJg5A/B9bLfin7TwWEs4NjqH4aMwuiy6jQq
+xUU3AvsChumW/7Evw2aRm38aHo3GYiwf2g2Euyo9oSCg8ht+4FfNCpVYY//l
+=xaq5
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/tiga.key b/documentation/static/pgpkeys/tiga.key
new file mode 100644
index 0000000000..362db95e61
--- /dev/null
+++ b/documentation/static/pgpkeys/tiga.key
@@ -0,0 +1,94 @@
+// sh addkey.sh tiga BEFC7B81C447AC4D ;
+
+[.literal-block-margin]
+....
+pub rsa4096/BEFC7B81C447AC4D 2020-10-03 [SC]
+ Key fingerprint = 7B1E D8FD DE54 9A96 4C58 7EDA BEFC 7B81 C447 AC4D
+uid Tiago Gasiba <tiga@freebsd.org>
+uid Tiago Gasiba <tiago.gasiba@gmx.de>
+uid Tiago Gasiba <tiago.gasiba@gmail.com>
+sub rsa4096/B1A87F9859B1DE95 2020-10-03 [E]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBF940xYBEAC2qTxRh5R/BtmoXJrwWbu44XJQr/BO0BWR7PjGh3M1tfca2pDH
+q+XtjSYQ1wJYJquNkO/o2PWGxhGOyVnLIcoYFZhF7Y8Qc+OmE4i5Mezvr14MI7Vu
+Ezr4jXJDqfWyI624zAI3Gx0yzC1Z1XXKS0UlCBom6Bw7IIEmT7LZzCIIIpClIniJ
+vEMBbfSLC7HOUuAa1kHeBljg88GCBpYC9yfz+Ss6RFWIITK7ThV1eIhOBL4+KjZw
+gUyWz0+7vPf3704Hw7DJMSMC6KPmlgjdDZhKU/x9cSqGeM1CdKz21yyIBqEPUNyG
+1fkOOJPQvgD25OgHwDkdJ9iPBt/PTV0hG6fROdn36BfVISEeJI45VRUJiKi7AB3G
+N4nhIAu9TI1okr84ttMzEV7X2A4tDBAMtxGIbPxuzR9pTQof2Sy4tStNKXY9hef7
+1bid3rOCw4HMJ/MHzLlJHTqEk6JcUCleVjefnD+1T/txnCF+NqVGgISMN23uDpYi
+w83XNV0YDvbxE3bGeC2pu6IhUsYXUGqsymES6sYggtuit/SQOOJTgXtGGtKlsJBx
+xNy3z39T+fy19NCEIha3G2j60j03IP9LRRkIGuEVkIndVmjboEdWVB0Zsov6SOf/
+sZ+E6j/kNK0iIBAx9t1ZQ2T5IC0tDzJnFIZsNUfUVLQHskCR+sxTwBXtbwARAQAB
+tCJUaWFnbyBHYXNpYmEgPHRpYWdvLmdhc2liYUBnbXguZGU+iQJRBBMBCAA7FiEE
+ex7Y/d5UmpZMWH7avvx7gcRHrE0FAmjYF0ACGwMFCwkIBwICIgIGFQoJCAsCBBYC
+AwECHgcCF4AACgkQvvx7gcRHrE1gShAAsxbw1G0/CWXTgavFsknk8seY2R1w6ZnY
+pidNAFbjCCzKFrjiyJsCP/qfoEMqMCbxyxLPkMl2e2JAMGYTOrFE8CM+0nZuUpIX
+inN6bUb9IFmT+fCE2DsUxvAOJBo/sSaqyv/RwossLEg8gCJNE+A/+Y50UVs2jwvW
+zHw9PUU31uYJMPakc1ajoi43ioxkBWDVaeuER1b0+rz6yu/6rD/7CVfqriPRXfVz
+N+3FPhAKYXbDRs0G3+EXeKujoiWOtctr/pQ+Q5aKrcduy6FylQ4WgegjwnDlSmY+
+30vmQFbNDnRx5U8Luk2ZqMIFQxDlohNUsa3Us+EIMwRqIZMfuwKTjwkj/3YbjH3s
+d3rQLNwdPKfPbMSbjvUB4bT2jK0CvIJGMNvRb+8n5gWQIyOsewhqomq5qRO0/6Kt
+DEJN/qWDp5g/rv9gTio0SZbGZpR1aHQSJRT/fXwDvs7NSCrHy3hnMgfNupRNsxny
+ftlE3WNh8cfFZA+5Hx1u3M2qVk20FXnB8eKrFdhEW5djnUUY5WG4q64E/4qGH9s8
+jBX52gYCU/zAH1MhQmncyiLbGo7x1W0upg5e1Ys4GUWYz7czrVKkdefrzgqCB/PY
+gbyQ+dgzcKVAFPIQ+ZO6G49mAzgtP1XeLWFIeAqrzMNxQ+IdkJoNHzWa9Mrj4vsQ
+GqtWvmHw3he0JVRpYWdvIEdhc2liYSA8dGlhZ28uZ2FzaWJhQGdtYWlsLmNvbT6J
+Ak4EEwEKADgWIQR7Htj93lSalkxYftq+/HuBxEesTQUCX3jTFgIbAwULCQgHAgYV
+CgkICwIEFgIDAQIeAQIXgAAKCRC+/HuBxEesTR7CD/4nK1fAuMBHm8CUY/47prnn
+u1tcc0NduythX+VWi4tzsAcS4s++YCmopF4LOVUf6I1De5gnMVvBSxLLlIUkOwz5
+/vC6h7be4IwxxqzrdXoKdu5GNsGJpSRoqtbXjFm6h7w/wOz0umXdohYUkVwYFZ5O
+2y/lpdjhPse6ztBvrqdSljXY3CE3TI3P7O/LAHPtPsNcK3+coO5N6mt/sTbkfWaj
+5p+s0G+3XWWXfa9RYdl4DC56MAxxDwIyEoTa+WBPvpj5FQ9M8HrvprJjh6RtP1in
+L2O4PSsdahDUJ5Kr0ISpiVv3OcyLacGvMKcORut6YsLHOR4tVHvNm78TImqBvdu/
+8HkiThUmTm2k7AhxMcP22uYDZP6ZfGO0EBJhZMpSy165pEJMIs057SmRO6Qaprzd
+ZOS2yCTtBf9S3RLlRQMY3XKtNf5HEOk8dbO3MkokXEKNQa7mcPqWzzwhQuKTcGkN
+q3W5GS70XiI27muEndJXnB70kM4XqnuJ24pFYv1AKA8IYGePnZgf8MUnKZPxGgQ6
+P9FTP0BYiKfESGUPjPipLkcb5UuhnmH6zMgiQrzuVvt1P85aLTdiYhgUgmCzMTTz
+8gkYrujYttxhtuBw/O4V4nuUDOYsXMbvxvTFIOMePgWAM/XQwOTEBiYaFdne8ZO1
+JNhXebMf5j9xCXtJSh41KLQfVGlhZ28gR2FzaWJhIDx0aWdhQGZyZWVic2Qub3Jn
+PokCUQQTAQgAOxYhBHse2P3eVJqWTFh+2r78e4HER6xNBQJo2CjwAhsDBQsJCAcC
+AiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEL78e4HER6xNTqYQAKicyWXrNrufCRTl
+qWf+RnTrlzdatbMEHMTCpW9jB1ygy7TYnawzpNrMaaf7VmUObbf0eBfupwOxKZ1i
+Q822FA0nO2MUZiJRbkGtd8pn+Un3jSuLD8Sd3HcLlA9VqUnWYCksnwTXr6KJqMwi
++E7qR7nECOVA/WlxseQj/ruiYYhOjjCU/my1jlMhaR9qdVsOd7ViPPEr54yxT+Qa
+F5SboPUY858lKcSt6Bx29X2otAW+pWl2bG83ujFkZSRNWtPrsXfiLx+3pBKNuGvI
+Tec73FkzQwDg0io1V7dyasoe46FAiEKjYblf9Qoh6RvmefzuRKzJdY3eNI0ATmrJ
+X2+o0LG5KWXu/nmjO90HzxXYB13NjnFrXZH+P1qiapaZD/NRhYa8nqvrH0jJHs3F
+ur6/V4sqOQRRolKh1zYEqyfWhGM9Dx0OFHqjejvl2sVglBADgX3L8yAPI28sBAx1
+3g8KtMLkm1C3Ylpphhn1OBfNZ94fqC1q11qccivtlDlbEIMMpIEtbkC7c/hvh3cK
+vwLyGf5d3ZZ+wrdISnRdaRhwfORUxwKc5Qhf2GHH+BjFXEu/PQrLBRin3JEQJ/nf
+pY0q/P5nkB0QuxVmYLkh3FFtwXBAVUM5yzIhYF868/O0feL/7gfYrGkutmyQbu0h
+hFadAmNP5OaoDX+FkDUqxqdlIVIUuQINBF940xYBEACz1qoXzPejpalVhC8nM3/5
+Fq8MulnbzTwuLW/k8lw2o/ccc3nZ+ckT/qy7Rt8bcU7wbzDLskYxnjiIQmLKMuca
+7CPgVdQDhM1sS7ZWiD9zBNxWK/O+o7h0P9GQ55PnEzpdP7SfWzwFoFlb/8qRm0Zm
+wAyuYtNtvQbr5yoGVo4mYSJM1vhDr5LH+HyLOSFlJCimk0mcKf0i6oWmFCFUSy3e
+gpKLy72sMHIBx+w8BXsXEdATOo9XTRAoeNNImdfn9IztXd17o8A3H08aVlTCh0Gn
+8QpCyz4delNCNpNJzA+8TW1N0bKd25KpzMISpExO45iou7oqrud/xz9WUo8ZIpA7
+PmioZY8kSVPBm2EZTjAMgM2PmaoCKuSUfNFfcUWBYgMd1vWJrmMghziyhbdV/HTo
+JYhlV/ADzKkgX8I3XC919OSnj+/KpHCfLBZgHAjwk7XYSla5jGlayE5o7ACTtyYC
+OZnFtiYktYD92Q2vy4LY7YOrViNxw9EFNcAeX361+KEZEvqj0S1muzaNJBWriVO9
+LbggTgQ4zbmrU3nCFy9SptFWot5L3xZD0Vvp2/cxV/MqwROgdo+X8lKgBzK8mThb
+FBQxUyG6JzlQaVyu3TbWgYREdcatWHeLFvlPlgarEdv9pgMzSSD8WzFgo2yYoM3Q
+99/xwEMLU8BqguRJ7C0nCwARAQABiQI2BBgBCgAgFiEEex7Y/d5UmpZMWH7avvx7
+gcRHrE0FAl940xYCGwwACgkQvvx7gcRHrE1OCA//VCsQMpea4LO4sDy8rGt63ktC
+X+OgpZLNq/A9EotbxwOvI3J0aK7aZL7ksGtG4/HoiCHTIoSICyleKzrS+LmPWltA
+DCoG5A8vl+E4dhoF26D5XM4btTHQmsxJCCe/7FExBk5vuNPFeu2QYCXMAUQ9k9Jx
+7eHIogVEpSNYwoIJlXVee8I92tZdVJRk2OuTtYAds+MUEF0izTAyGLHwBFErw2gF
+OR6dx9iYVzMUhzje/sxusHIoGwTwKdcWPZYTFIe0GuGXbtSS2H90oEjXmHJSyYwV
+bhydZ3PdnEYdDabIVUeld5LuJ8wKpAkBU5z3Lftij76EzluRzoZXSyn0ZTQ5ls80
+IrofHE/djn+3VfperLt/pkTd7EZD3Vi1qu2NuE9wVf0ZrfA992aNzIYDPTmwuJiL
+He7Vnl1ogiuzrivK7kOVEAY6d7kgX6k1sQeSscc6R6C15S81fVIHQgEpEH3041G5
+aaQtYPtZkkkh4qNYdw8fpSCRNyAePTDswMiGYSdj9DvmiBL1b9cZZpi4R8saAfdR
+4jeibUlWFYOqim1Xttax5hXDI/9DxE4hvbYfnzMUGM9eQS3sn1y0YpZnBEGsFsWI
+2xvQGc1NSG/jldHgjXdewyetQRVKeTB+NC7LLmdgdN64ZQFMZnAvyHoaNicr9xzk
+YKkr8QcO6TXbMKMPU+Y=
+=v4+i
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/vladlen.key b/documentation/static/pgpkeys/vladlen.key
new file mode 100644
index 0000000000..e9d3c45ebc
--- /dev/null
+++ b/documentation/static/pgpkeys/vladlen.key
@@ -0,0 +1,62 @@
+// sh addkey.sh vladlen B2861E83DA50E1D3 ;
+
+[.literal-block-margin]
+....
+pub rsa3072/B2861E83DA50E1D3 2025-09-11 [SC] [expires: 2028-09-10]
+ Key fingerprint = 84F0 F7F6 2AC7 F58A 2194 CB89 B286 1E83 DA50 E1D3
+uid Vladlen Popolitov <vladlenpopolitov@list.ru>
+sub rsa3072/EAF8D71B6A46E6A9 2025-09-11 [E] [expires: 2028-09-10]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGNBGjCnWsBDADH8CXs2fV0D8tmwTqKYu1QLrYx/AD4olKEHmMmw1TiLOyhfCJp
+9U4sYAQgTOPL2Bcdndye3rG7fAjF1GsNBTlpv5ZnuN0mUFwebTRSd+7wY9n6P2TC
+nWkpJuAI1lTYg8PsRcOROZIbjrUJ7At/vQ7kKgn+5uGsvCm0oGzacAPV/mgVYJQg
+MIDdw5vUvF9UqYm2kHz5Mgq7tewZqfpExOigzVPx1RmN7p11mtSQC6rF3ofQf+wJ
+eSR5251gooQRDw0mQWx9MYF9Y5Kz/nURDdaQF+cAlp2uMb+CvTvjSOJjWirYsctC
+KG9WhK7pZXwV9hDE8gfu8omsJqsJLZ0Sc7YH8sBBqOTpsG3JnZn4fP6blTOa95JS
+hQYrApZaIt4lZiyYknH5OVitsAaXe5ZegRZQBIEwfFSMSdA9+p6RmnNfJSpm6I8Z
+O930hXMHrxcLo6Gq69JGvsBBTE4ymb5ZlBHXSo1Zt7MucH8xgM/+Tc0jXXhUFoDD
+k1JQhB/OJIRYyOEAEQEAAbQsVmxhZGxlbiBQb3BvbGl0b3YgPHZsYWRsZW5wb3Bv
+bGl0b3ZAbGlzdC5ydT6JAdcEEwEIAEEWIQSE8Pf2Ksf1iiGUy4myhh6D2lDh0wUC
+aMKdawIbAwUJBaOagAgLCQ0IDAcLAwUVCgkICwUWAwIBAAIeBQIXgAAKCRCyhh6D
+2lDh0+mMC/0Q7MhR68/V/FfoEu+kj2rMGYo5WifRlPVnWYZUnCq7k760HF9t+K/o
+SpFz7IoYKIiNVT1KAdYgA2HTMBqE8ObGrmSjZ9DBOcOvxJsdh7FH1hPb/ydGKdY8
+tU02ACbLhxcRVismxNBe038DFIDOA3pv1TLw0A2bgd0/ailtX/1Gr8FEPNmtFHc9
+JUIykFoRVhZGAmfI/NWXSWy0U4TDPtsX77yKC8x7H6MySPdn3/1rFESfHLEmktNw
+WgMfakx7W+zkHUQDVAHYub27thciHVWfOu3NeYN3s6m6QTv4V79a8LiCwNMUDcUh
+IsUN2T8aw45+Yhk7VUh1F5jeEGZqKFLSDPEsbtBwiWB2FhfON1lbj5O3pslBWaOv
+Uf7Rm2aPHN4bvG0TC77cS2w7CzqFLWNb6Ox+5JNvL+Ta6HE4evnxu0UY+K9JMKeB
+OSBVcgv9l6ivA+5ZevY92ojO/RxAl4oVjh0LkmJF5HbetaxNRqMU6vNtbk2/jjki
+zy/4q+giGUmJATMEEAEKAB0WIQSPisa9yJ21tDv7qUSWUsVzCwrSfwUCaMULIgAK
+CRCWUsVzCwrSf4yBB/9o9I4hlzsOtwoNr5dYGHWLZc+eIr34j4bzHcweE5Azqal4
+NbIfYkkx2Lumz7WhbawZg/gaK84j3dJwQg2numko9GnHkSIDAZLXOdDZMkih4teb
+Rb6hX3NerxhXGbPGPkBeRQDWVfkp5jLlUW6M1lGf1TQW9hnlU/ZaxApaGuDLG4TF
+wAyRuA/xPY+ygkrvvSDimD8X6OyaojZgfC9e80v7vsKIkFtVRIqW5+645IuOSlwE
+bvlLEO0od6LxucMduwiT7Zueod9nnO38XhdYqeCGCYjKTmiQ2J9W4IZb+QD6Dwzq
+24zOGUzkkJN0/gX0TmqegyQ5hEcBiGLgARADuc12uQGNBGjCnWsBDADd2bXRTaxR
+/jw4R8l9CWf0n6YS3+fQrGHKCKRY+W+1101Lh0/1NfWz0ZES2wuiyUhcIXPnNz2i
+OeZIXykkM3tgszpsnL0vsmopFbr8+ppjzyz5aT5TOYjqSGmG5YyL7fxkPw5H9jL2
+WdsfWbQsGFZDK/dDuBSRqPqIHuhqJ94P9ldKwrn2vIT5C08AZB+SaYljOWe8OzSM
+VijwZpYa2A0cTCEplgeafnb15zaidEHtEyUL8XxbpNFdz0wYVGhsPu6vyZZIHvQY
+HIVcz4qx6gtcj8w43kVhVg0nihMQgzv0NTlYlsnufWBHASjwRzT97uxmyDOvuaYh
+Os59CAC0sgNN3gwQESHiANG+NagvZ4hQLUC8WUAhmbuts3QAJslrYKdnHOe4j92M
+hVFBJlrAzkd2YfSVH0YTLXmuYLtggCG/thbWivZrJXiak/GKjDd6dThjYj90HFpF
+ErTPdMJi7FZ1ev48rDjiErSWQZjsSDS3BFWrcScF2B+qDbnsj8K+QeEAEQEAAYkB
+vAQYAQgAJhYhBITw9/Yqx/WKIZTLibKGHoPaUOHTBQJowp1rAhsMBQkFo5qAAAoJ
+ELKGHoPaUOHTcHwL/1kSHUk6Bo9XUwbw9M4DZfPIWH27M7RLWgeJ2/VnkuDEASvn
+n1k2e/J3jVdCo525llRpxN8lgEPKkT++P/6sEenfCMMLng0Jl9u5otEZIg+RFSLe
+14hXQypf99RabccWzz8XQM1LbfavQFWqg10yv9qHRupdWD6P2iKR1Mjjk2POOLW8
+fIei+RCxeTCIDcWHOdPNrPvPZ5c5AYZUTw3O+fnV78mhwEA9NbpKTK7eyAxrqLJ9
+87iHohd95Cm1W0Fh0n5G1PIHf7hcEw82L7EjmUOQbrISicDHkEpwM8pP3h5UST0y
+zhp9uy/mFm9KiH3zBduPvUFASFe9KmB3HIh+MK/TNAbY0H/TlHo/qdcXYSITt9jJ
+JAlv3e4frKCp6u5HQzTw6m5RneWBG3S4H+/gqUAZ4gDTC90lrg7+jeDBlUSzBm0p
+h98YPtgq+ZcLzhkYBjJPNwZly7cRKAalqNeRAi5N+WRkHTp9x2DKVHGq6+eyur1n
+PZ7HfBWJrSRYw/Wd2w==
+=lOos
+-----END PGP PUBLIC KEY BLOCK-----
+....